/** * Adds name pattern describing the file type * * @deprecated FileType can contain a few name patterns, so use {@link #addNamePattern(String)} * instead */ public void setNamePattern(String namePattern) { addNamePattern(namePattern); }
@Override public void registerFileType(FileType candidate) { if (candidate == null) { throw new IllegalArgumentException("Can not register Illegal File Type"); } String extension = candidate.getExtension(); FileType duplicate = getFileTypeByExtension(extension); if (duplicate != unknownFileType && duplicate != candidate) { throw new IllegalStateException( "File Type with extension " + extension + " is already registered"); } fileTypes.add(candidate); }
@Override public int hashCode() { return Objects.hash(extension, getNamePatterns()); } }
private boolean canBeMergedByNamePattern(String namePattern, FileType fileTypeCandidate) { String extensionCandidate = fileTypeCandidate.getExtension(); if (!isNullOrEmpty(extensionCandidate) && RegExp.compile(namePattern).test('.' + extensionCandidate)) { return true; } return fileTypeCandidate .getNamePatterns() .stream() .anyMatch( patternCandidate -> namePattern.equals(patternCandidate) || RegExp.quote(namePattern).equals(patternCandidate)); } }
public FileType get( @Nullable SVGResource image, @NotNull String extension, @Nullable String namePattern) { if (isNullOrEmpty(namePattern)) { return getByExtension(image, extension); } checkArgument(!isNullOrEmpty(extension), "Can not register File Type without extension"); Optional<FileType> fileTypeOptional = fileTypeRegistry .getFileTypes() .stream() .filter(candidate -> extension.equals(candidate.getExtension())) .filter(candidate -> canBeMergedByNamePattern(namePattern, candidate)) .findAny(); FileType fileType = fileTypeOptional.orElseGet(() -> registerNewFileType(image, extension, null)); fileType.addNamePattern(namePattern); return fileType; }
@Provides @Singleton @Named("BMPFileType") protected FileType provideBMPFile(Resources resources) { return new FileType(resources.defaultImage(), "bmp"); }
@Override public SVGResource getSVGResource() { return fileType.getImage(); }
@Override public FileType getFileTypeByExtension(String extension) { if (isNullOrEmpty(extension)) { return unknownFileType; } Set<FileType> typesByExtension = fileTypes.stream().filter(type -> extension.equals(type.getExtension())).collect(toSet()); if (typesByExtension.isEmpty()) { return unknownFileType; } String nameToTest = '.' + extension; Optional<FileType> fileType = typesByExtension .stream() .filter(type -> doesFileNameMatchType(nameToTest, type)) .findFirst(); if (fileType.isPresent()) { return fileType.get(); } fileType = typesByExtension.stream().filter(type -> type.getNamePatterns().isEmpty()).findFirst(); return fileType.orElseGet(() -> typesByExtension.iterator().next()); }
@Provides @Singleton @Named("GIFFileType") protected FileType provideGIFFile(Resources resources) { return new FileType(resources.defaultImage(), "gif"); }
@Override public SVGResource getSVGResource() { return fileType.getImage(); }
private Set<FileType> getFileTypesByFile(VirtualFile file) { String name = file.getName(); if (isNullOrEmpty(name)) { return emptySet(); } Set<FileType> typesByNamePattern = fileTypeRegistry .getFileTypes() .stream() .filter( type -> type.getNamePatterns() .stream() .anyMatch(namePattern -> compile(namePattern).test(name))) .collect(toSet()); String fileExtension = getFileExtension(name); if (isNullOrEmpty(fileExtension)) { return typesByNamePattern; } Set<FileType> fileTypes = typesByNamePattern .stream() .filter(type -> fileExtension.equals(type.getExtension())) .collect(toSet()); fileTypes = fileTypes.isEmpty() ? typesByNamePattern : fileTypes; return fileTypes.isEmpty() ? singleton(fileTypeRegistry.getFileTypeByExtension(fileExtension)) : fileTypes; }
protected boolean isJavaFile(VirtualFile file) { final String ext = fileTypeRegistry.getFileTypeByFile(file).getExtension(); return "java".equals(ext) || "class".equals(ext); } }
@Provides @Singleton @Named("XMLFileType") protected FileType provideXMLFile(Resources resources) { return new FileType(resources.xmlFile(), "xml"); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; FileType fileType = (FileType) o; if (!Objects.equals(this.extension, fileType.extension)) { return false; } else { return getNamePatterns().equals(fileType.getNamePatterns()); } }
public FileType(SVGResource image, String extension, String namePattern) { this.image = image; this.extension = extension; this.namePatterns = new HashSet<>(); addNamePattern(namePattern); }
newXmlFileAction .getTemplatePresentation() .setImageElement(new SVGImage(xmlFile.getImage()).getElement()); newGroup.addAction(newXmlFileAction);
protected boolean isJavaFile(VirtualFile file) { String fileExtension = fileTypeRegistry.getFileTypeByFile(file).getExtension(); return fileExtension != null && (fileExtension.equals("java") || fileExtension.equals("class")); }
@Provides @Singleton @Named("JsonFileType") protected FileType provideJsonFile(Resources resources) { return new FileType(resources.jsonFile(), "json"); }
private boolean doesFileNameMatchType(String nameToTest, FileType fileType) { return fileType .getNamePatterns() .stream() .anyMatch( namePattern -> { RegExp regExp = RegExp.compile(namePattern); return regExp.test(nameToTest); }); } }