package oripa.file; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import oripa.ORIPA; import oripa.doc.LoadingDoc; import oripa.doc.SavingDoc; import oripa.doc.exporter.ExporterCP; import oripa.doc.exporter.ExporterDXF; import oripa.doc.exporter.ExporterOBJ; import oripa.doc.exporter.ExporterSVG; import oripa.doc.exporter.ExporterXML; import oripa.doc.loader.LoaderCP; import oripa.doc.loader.LoaderDXF; import oripa.doc.loader.LoaderPDF; import oripa.doc.loader.LoaderXML; /** * * @author OUCHI Koji * */ public class FilterDB { private HashMap<String, FileFilterEx> filters = new HashMap<>(); private static FilterDB instance = null; public static FilterDB getInstance(){ if(instance == null){ instance = new FilterDB(); } return instance; } private FilterDB(){ FileFilterEx filter; filter = new FileFilterEx( new String[]{".opx", ".xml"}, "(*.opx, *.xml) " + ORIPA.res.getString("ORIPA_File"), new SavingDoc(new ExporterXML()) ); filter.setLoadingAction(new LoadingDoc(new LoaderXML())); this.putFilter("opx", filter); filter = new FileFilterEx( new String[]{".png", ".jpg"}, "(*.png, *.jpg) " + ORIPA.res.getString("Picture_File") ); this.putFilter("pict", filter); String key = "dxf"; filter = new FileFilterEx(new String[]{"." + key }, "(*." + key + ") " + key + ORIPA.res.getString("File"), new SavingDoc(new ExporterDXF()) ); filter.setLoadingAction(new LoadingDoc(new LoaderDXF())); this.putFilter(key, filter); key = "obj"; filter = new FileFilterEx(new String[]{"." + key }, "(*." + key + ") " + key + ORIPA.res.getString("File"), new SavingDoc( new ExporterOBJ()) ); this.putFilter(key, filter); key = "cp"; filter = new FileFilterEx(new String[]{"." + key }, "(*." + key + ") " + key + ORIPA.res.getString("File"), new SavingDoc( new ExporterCP()) ); filter.setLoadingAction(new LoadingDoc(new LoaderCP())); this.putFilter(key,filter); key = "svg"; filter = new FileFilterEx(new String[]{"." + key }, "(*." + key + ") " + key + ORIPA.res.getString("File"), new SavingDoc(new ExporterSVG()) ); this.putFilter(key, filter); key = "pdf"; filter = new FileFilterEx(new String[]{".pdf"}, "(*.pdf) PDF file"); filter.setLoadingAction(new LoadingDoc(new LoaderPDF())); this.putFilter(key, filter); } public FileFilterEx getFilter(String key){ return filters.get(key); } public FileFilterEx putFilter(String key, FileFilterEx filter){ return filters.put(key, filter); } public FileFilterEx[] toArray(){ FileFilterEx[] array = new FileFilterEx[filters.size()]; int i = 0; for (String key : filters.keySet()) { array[i] = filters.get(key); i++; } return array; } public FileFilterEx[] getLoadables(){ ArrayList<FileFilterEx> loadables = new ArrayList<>(); for (String key : filters.keySet()) { FileFilterEx filter = filters.get(key); if(filter.getLoadingAction() != null){ loadables.add(filter); } } FileFilterEx[] array = new FileFilterEx[loadables.size()]; return loadables.toArray(array); } /** * returns null if any filter cannot load the file. * @param path * @return a filter which can load the file at the path. */ public FileFilterEx getLoadableFilterOf(String path){ File file = new File(path); if(file.isDirectory()){ return null; } for(FileFilterEx filter : this.toArray()){ if(filter.accept(file)){ return filter; } } return null; } public FileFilterEx[] getSavables(){ ArrayList<FileFilterEx> savables = new ArrayList<>(); for (String key : filters.keySet()) { FileFilterEx filter = filters.get(key); if(filter.getSavingAction() != null){ savables.add(filter); } } return (FileFilterEx[]) savables.toArray(); } }