package org.esa.snap.rcp.imgfilter; import com.thoughtworks.xstream.XStream; import org.esa.snap.rcp.imgfilter.model.FilterSet; import org.esa.snap.rcp.imgfilter.model.FilterSetStore; import java.io.File; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Class used to store/reload user-defined image filters. * * @author Norman */ public class FilterSetFileStore implements FilterSetStore { final File filtersDir; public FilterSetFileStore(File filtersDir) { this.filtersDir = filtersDir; } public List<FilterSet> loadFilterSetModels() throws IOException { XStream xStream = FilterSet.createXStream(); File[] files = filtersDir.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".xml"); } }); ArrayList<FilterSet> list = new ArrayList<>(); if (files == null) { return list; } IOException ioe = null; for (File file : files) { try { FilterSet filterSet = new FilterSet(); xStream.fromXML(file, filterSet); list.add(filterSet); } catch (Exception e) { ioe = new IOException(e); } } if (ioe != null && list.isEmpty()) { throw ioe; } return list; } @Override public void storeFilterSetModel(FilterSet filterSet) throws IOException { if (!filtersDir.exists() && !filtersDir.mkdirs()) { throw new IOException("Failed to create directory\n" + filtersDir); } File file = new File(filtersDir, filterSet.getName().toLowerCase() + "-filters.xml"); XStream xStream = FilterSet.createXStream(); try (FileWriter fileWriter = new FileWriter(file)) { xStream.toXML(filterSet, fileWriter); } } }