diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2016-03-01 20:43:51 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2016-03-01 20:43:51 -0500 |
| commit | 120ac7034bcfa91a02b1b68c0507fd3ef80a0cfa (patch) | |
| tree | 0993dee8c50638561e8a5bce18d86dcd9842e0ec /BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java | |
| parent | df852b8a67f4b8f1c3e6f89d8c3630e678c49c14 (diff) | |
Implemented support for component-based shenanigans.
By default, only a source for retrieving components from streams
is implemented
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java b/BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java new file mode 100644 index 0000000..9dd881c --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java @@ -0,0 +1,90 @@ +package bjc.utils.components; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +import bjc.utils.funcdata.FunctionalList; + +/** + * A component repository that loads its components from files in a + * directory + * + * @author ben + * + * @param <E> + * The type of component being read in + */ +public class FileComponentRepository<E extends IDescribedComponent> + implements IComponentRepository<E> { + + /** + * The internal storage of components + */ + private Map<String, E> comps; + + /** + * The path that all the components came from + */ + private String sourcePath; + + /** + * Create a new component repository sourcing components from files in + * a directory + * + * @param dir + * The directory to read component files from + * @param reader + * The function to use to convert files to components + */ + public FileComponentRepository(File dir, + Function<InputStream, E> reader) { + comps = new HashMap<>(); + sourcePath = dir.getAbsolutePath(); + + for (File fle : dir.listFiles()) { + if (fle.isDirectory()) { + // Do nothing with directories. They probably contain + // support files for components + } else { + try { + E comp = reader.apply(new FileInputStream(fle)); + + comps.put(comp.getName(), comp); + } catch (FileNotFoundException fnfx) { + System.err.println("Couldn't read component file: " + + fle.getAbsolutePath() + "\nReason: " + + fnfx.getMessage()); + + fnfx.printStackTrace(System.err); + } + } + } + } + + @Override + public FunctionalList<E> getComponentList() { + FunctionalList<E> ret = new FunctionalList<>(); + + comps.forEach((name, comp) -> { + ret.add(comp); + }); + + return ret; + } + + @Override + public Map<String, E> getComponents() { + return comps; + } + + @Override + public String getSource() { + return "Read from directory " + sourcePath + "."; + } + +} |
