diff options
| author | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-10-08 22:39:59 -0300 |
|---|---|---|
| committer | Benjamin J. Culkin <bjculkin@mix.wvu.edu> | 2017-10-08 22:39:59 -0300 |
| commit | c82e3b3b2de0633317ec8fc85925e91422820597 (patch) | |
| tree | 96567416ce23c5ce85601f9cedc3a94bb1c55cba /BJC-Utils2/src/main/java/bjc/utils/components | |
| parent | b3ac1c8690c3e14c879913e5dcc03a5f5e14876e (diff) | |
Start splitting into maven modules
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/components')
6 files changed, 0 insertions, 638 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescription.java b/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescription.java deleted file mode 100644 index 28f81d1..0000000 --- a/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescription.java +++ /dev/null @@ -1,135 +0,0 @@ -package bjc.utils.components; - -/** - * Generic implementation of a description for a component - * - * @author ben - * - */ -public class ComponentDescription implements IDescribedComponent { - private static void sanityCheckArgs(final String name, final String author, final String description, - final int version) { - if (name == null) - throw new NullPointerException("Component name can't be null"); - else if (version <= 0) throw new IllegalArgumentException("Component version must be greater than 0"); - } - - /** - * The author of the component - */ - private final String author; - /** - * The description of the component - */ - private final String description; - /** - * The name of the component - */ - private final String name; - - /** - * The version of the component - */ - private final int version; - - /** - * Create a new component description - * - * @param name - * The name of the component - * @param author - * The author of the component - * @param description - * The description of the component - * @param version - * The version of the component - * @throws IllegalArgumentException - * thrown if version is less than 1 - */ - public ComponentDescription(final String name, final String author, final String description, - final int version) { - sanityCheckArgs(name, author, description, version); - - this.name = name; - this.author = author; - this.description = description; - this.version = version; - } - - @Override - public String getAuthor() { - if (author == null) return IDescribedComponent.super.getAuthor(); - - return author; - } - - @Override - public String getDescription() { - if (description == null) return IDescribedComponent.super.getDescription(); - - return description; - } - - @Override - public String getName() { - return name; - } - - @Override - public int getVersion() { - return version; - } - - @Override - public String toString() { - return name + " component v" + version + ", written by " + author; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - - result = prime * result + (author == null ? 0 : author.hashCode()); - result = prime * result + (description == null ? 0 : description.hashCode()); - result = prime * result + (name == null ? 0 : name.hashCode()); - result = prime * result + version; - - return result; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(final Object obj) { - if (this == obj) return true; - if (obj == null) return false; - if (getClass() != obj.getClass()) return false; - - final ComponentDescription other = (ComponentDescription) obj; - - if (author == null) { - if (other.author != null) return false; - } else if (!author.equals(other.author)) return false; - - if (description == null) { - if (other.description != null) return false; - } else if (!description.equals(other.description)) return false; - - if (name == null) { - if (other.name != null) return false; - } else if (!name.equals(other.name)) return false; - - if (version != other.version) return false; - - return true; - } -} diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionFileParser.java b/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionFileParser.java deleted file mode 100644 index f7ddaff..0000000 --- a/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionFileParser.java +++ /dev/null @@ -1,65 +0,0 @@ -package bjc.utils.components; - -import static bjc.utils.ioutils.RuleBasedReaderPragmas.buildInteger; -import static bjc.utils.ioutils.RuleBasedReaderPragmas.buildStringCollapser; - -import java.io.InputStream; - -import bjc.utils.ioutils.RuleBasedConfigReader; - -/** - * Read a component description from a file - * - * @author ben - * - */ -public class ComponentDescriptionFileParser { - // The reader used to read in component descriptions - private static RuleBasedConfigReader<ComponentDescriptionState> reader; - - // Initialize the reader and its pragmas - static { - // This reader works entirely off of pragmas, so no need to - // handle - // rules - reader = new RuleBasedConfigReader<>((tokenizer, statePair) -> { - // Don't need to do anything on rule start - }, (tokenizer, state) -> { - // Don't need to do anything on rule continuation - }, (state) -> { - // Don't need to do anything on rule end - }); - - setupReaderPragmas(); - } - - /** - * Parse a component description from a stream - * - * @param inputSource - * The stream to parse from - * @return The description parsed from the stream - */ - public static ComponentDescription fromStream(final InputStream inputSource) { - if (inputSource == null) throw new NullPointerException("Input source must not be null"); - - final ComponentDescriptionState readState = reader.fromStream(inputSource, - new ComponentDescriptionState()); - - return readState.toDescription(); - } - - /* - * Create all the pragmas the reader needs to function - */ - private static void setupReaderPragmas() { - reader.addPragma("name", buildStringCollapser("name", (name, state) -> state.setName(name))); - - reader.addPragma("author", buildStringCollapser("author", (author, state) -> state.setAuthor(author))); - - reader.addPragma("description", buildStringCollapser("description", - (description, state) -> state.setDescription(description))); - - reader.addPragma("version", buildInteger("version", (version, state) -> state.setVersion(version))); - } -} diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionState.java b/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionState.java deleted file mode 100644 index 8d66f85..0000000 --- a/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionState.java +++ /dev/null @@ -1,144 +0,0 @@ -package bjc.utils.components; - -/** - * Internal state of component description parser - * - * @author ben - * - */ -public class ComponentDescriptionState { - // Tentative name of this component - private String name; - - // Tentative description of this componet - private String description; - - // Tentative author of this component - private String author; - - // Tentative version of this component - private int version; - - /** - * Set the author of this component - * - * @param author - * The author of this component - */ - public void setAuthor(final String author) { - this.author = author; - } - - /** - * Set the description of this component - * - * @param description - * The description of this component - */ - public void setDescription(final String description) { - this.description = description; - } - - /** - * Set the name of this component - * - * @param name - * The name of this component - */ - public void setName(final String name) { - this.name = name; - } - - /** - * Set the version of this component - * - * @param version - * The version of this component - */ - public void setVersion(final int version) { - this.version = version; - } - - /** - * Convert this state into the description it represents - * - * @return The description represented by this state - */ - public ComponentDescription toDescription() { - return new ComponentDescription(name, author, description, version); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - - result = prime * result + (author == null ? 0 : author.hashCode()); - result = prime * result + (description == null ? 0 : description.hashCode()); - result = prime * result + (name == null ? 0 : name.hashCode()); - result = prime * result + version; - - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) return true; - if (obj == null) return false; - if (getClass() != obj.getClass()) return false; - - final ComponentDescriptionState other = (ComponentDescriptionState) obj; - - if (author == null) { - if (other.author != null) return false; - } else if (!author.equals(other.author)) return false; - - if (description == null) { - if (other.description != null) return false; - } else if (!description.equals(other.description)) return false; - - if (name == null) { - if (other.name != null) return false; - } else if (!name.equals(other.name)) return false; - - if (version != other.version) return false; - - return true; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("ComponentDescriptionState ["); - - if (name != null) { - builder.append("name="); - builder.append(name); - builder.append(", "); - } - - if (description != null) { - builder.append("description="); - builder.append(description); - builder.append(", "); - } - - if (author != null) { - builder.append("author="); - builder.append(author); - builder.append(", "); - } - - builder.append("version="); - builder.append(version); - builder.append("]"); - - return builder.toString(); - } - -} diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java b/BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java deleted file mode 100644 index efde5c7..0000000 --- a/BJC-Utils2/src/main/java/bjc/utils/components/FileComponentRepository.java +++ /dev/null @@ -1,181 +0,0 @@ -package bjc.utils.components; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.attribute.BasicFileAttributes; -import java.util.function.BiPredicate; -import java.util.function.Function; -import java.util.logging.Level; -import java.util.logging.Logger; - -import bjc.utils.data.IHolder; -import bjc.utils.data.Identity; -import bjc.utils.funcdata.FunctionalMap; -import bjc.utils.funcdata.IList; -import bjc.utils.funcdata.IMap; -import bjc.utils.funcutils.FileUtils; - -/** - * A component repository that loads its components from files in a directory - * - * @author ben - * - * @param <ComponentType> - * The type of component being read in - */ -public class FileComponentRepository<ComponentType extends IDescribedComponent> - implements IComponentRepository<ComponentType> { - // The logger to use for storing data about this class - private static final Logger CLASS_LOGGER = Logger.getLogger("FileComponentRepository"); - - // The internal storage of components - private IMap<String, ComponentType> components; - - // The path that all the components came from - private Path sourceDirectory; - - /** - * Create a new component repository sourcing components from files in a - * directory - * - * An exception thrown during the loading of a component will only cause - * the loading of that component to fail, but a warning will be logged. - * - * @param directory - * The directory to read component files from - * @param componentReader - * The function to use to convert files to components - */ - public FileComponentRepository(final File directory, - final Function<File, ? extends ComponentType> componentReader) { - // Make sure we have valid arguments - if (directory == null) - throw new NullPointerException("Directory must not be null"); - else if (!directory.isDirectory()) - throw new IllegalArgumentException("File " + directory + " is not a directory.\n" - + "Components can only be read from a directory"); - else if (componentReader == null) throw new NullPointerException("Component reader must not be null"); - - // Initialize our fields - components = new FunctionalMap<>(); - sourceDirectory = directory.toPath().toAbsolutePath(); - - // Marker for making sure we don't skip the parent - final IHolder<Boolean> isFirstDir = new Identity<>(true); - - // Predicate to use to traverse all the files in a directory, - // but - // not recurse into sub-directories - final BiPredicate<Path, BasicFileAttributes> firstLevelTraverser = (pth, attr) -> { - if (attr.isDirectory() && !isFirstDir.getValue()) /* - * Skip - * directories, - * they - * probably - * have - * component - * support - * files. - */ - return false; - - /* - * Don't skip the first directory, that's the parent - * directory - */ - isFirstDir.replace(false); - - return true; - }; - - // Try reading components - try { - FileUtils.traverseDirectory(sourceDirectory, firstLevelTraverser, (pth, attr) -> { - loadComponent(componentReader, pth); - - // Keep loading components, even if this one - // failed - return true; - }); - } catch (final IOException ioex) { - CLASS_LOGGER.log(Level.WARNING, ioex, () -> "Error found reading component from file."); - } - } - - @Override - public IMap<String, ComponentType> getAll() { - return components; - } - - @Override - public ComponentType getByName(final String name) { - return components.get(name); - } - - @Override - public IList<ComponentType> getList() { - return components.valueList(); - } - - @Override - public String getSource() { - return "Components read from directory " + sourceDirectory + "."; - } - - /* - * Load a component from a file - */ - private void loadComponent(final Function<File, ? extends ComponentType> componentReader, final Path pth) { - try { - // Try to load the component - final ComponentType component = componentReader.apply(pth.toFile()); - - if (component == null) - throw new NullPointerException("Component reader read null component"); - else if (!components.containsKey(component.getName())) { - // We only care about the latest version of a - // component - final ComponentType oldComponent = components.put(component.getName(), component); - - if (oldComponent.getVersion() > component.getVersion()) { - components.put(oldComponent.getName(), oldComponent); - } - } else { - CLASS_LOGGER.warning("Found a duplicate component.\n" - + "Multiple versions of the same component are not currently supported.\n" - + "Only the latest version of the component" + component - + " will be registered ."); - } - } catch (final Exception ex) { - CLASS_LOGGER.log(Level.WARNING, ex, () -> "Error found reading component from file " - + pth.toString() + ". This component will not be loaded"); - } - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("FileComponentRepository ["); - - if (components != null) { - builder.append("components="); - builder.append(components); - builder.append(", "); - } - - if (sourceDirectory != null) { - builder.append("sourceDirectory="); - builder.append(sourceDirectory); - } - - builder.append("]"); - - return builder.toString(); - } -}
\ No newline at end of file diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/IComponentRepository.java b/BJC-Utils2/src/main/java/bjc/utils/components/IComponentRepository.java deleted file mode 100644 index 6ee51f3..0000000 --- a/BJC-Utils2/src/main/java/bjc/utils/components/IComponentRepository.java +++ /dev/null @@ -1,49 +0,0 @@ -package bjc.utils.components; - -import bjc.utils.funcdata.IList; -import bjc.utils.funcdata.IMap; - -/** - * A collection of implementations of a particular type of - * {@link IDescribedComponent} - * - * @author ben - * - * @param <ComponentType> - * The type of components contained in this repository - */ -public interface IComponentRepository<ComponentType extends IDescribedComponent> { - /** - * Get all of the components this repository knows about - * - * @return A map from component name to component, containing all of the - * components in the repositories - */ - public IMap<String, ComponentType> getAll(); - - /** - * Get a component with a specific name - * - * @param name - * The name of the component to retrieve - * @return The named component, or null if no component with that name - * exists - */ - public ComponentType getByName(String name); - - /** - * Get a list of all the registered components - * - * @return A list of all the registered components - */ - public default IList<ComponentType> getList() { - return getAll().valueList(); - } - - /** - * Get the source from which these components came - * - * @return The source from which these components came - */ - public String getSource(); -}
\ No newline at end of file diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/IDescribedComponent.java b/BJC-Utils2/src/main/java/bjc/utils/components/IDescribedComponent.java deleted file mode 100644 index 952b375..0000000 --- a/BJC-Utils2/src/main/java/bjc/utils/components/IDescribedComponent.java +++ /dev/null @@ -1,64 +0,0 @@ -package bjc.utils.components; - -/** - * Represents a optional component that has status information associated with - * it - * - * @author ben - * - */ -public interface IDescribedComponent extends Comparable<IDescribedComponent> { - /** - * Get the author of this component - * - * Providing this is optional, with "Anonymous" as the default author - * - * @return The author of the component - */ - default String getAuthor() { - return "Anonymous"; - } - - /** - * Get the description of this component - * - * Providing this is optional, with the default being a note that no - * description was provided - * - * @return The description of the component - */ - default String getDescription() { - return "No description provided."; - } - - /** - * Get the name of this component. - * - * This is the only thing required of all components - * - * @return The name of the component - */ - String getName(); - - /** - * Get the version of this component - * - * Providing this is optional, with "1" as the default version - * - * @return The version of this component - */ - default int getVersion() { - return 1; - } - - @Override - default int compareTo(final IDescribedComponent o) { - int res = getName().compareTo(o.getName()); - - if (res == 0) { - res = getVersion() - o.getVersion(); - } - - return res; - } -}
\ No newline at end of file |
