summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/components
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2016-03-28 19:59:48 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2016-03-28 19:59:48 -0400
commitf4c758dc79b704865ac5ae96c6e48aac6ab1d097 (patch)
tree1e3b3022626a2468969a9daf607f65e6c885a15d /BJC-Utils2/src/main/java/bjc/utils/components
parent903249252ac188be1f90038e3f1a70b15314b6a7 (diff)
Added parser for component descriptions
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/components')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionFileParser.java54
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionState.java66
2 files changed, 120 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionFileParser.java b/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionFileParser.java
new file mode 100644
index 0000000..bf0f0bd
--- /dev/null
+++ b/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionFileParser.java
@@ -0,0 +1,54 @@
+package bjc.utils.components;
+
+import java.io.InputStream;
+
+import bjc.utils.funcutils.ListUtils;
+import bjc.utils.parserutils.RuleBasedConfigReader;
+
+/**
+ * Read a component description from a file
+ *
+ * @author ben
+ *
+ */
+public class ComponentDescriptionFileParser {
+ private static RuleBasedConfigReader<ComponentDescriptionState> reader;
+
+ static {
+ // This reader works entirely off of pragmas, so no need to handle
+ // rules
+ reader = new RuleBasedConfigReader<>((fst, par) -> {
+ }, (fst, stat) -> {
+ }, (stat) -> {
+ });
+
+ reader.addPragma("name", (fst, stat) -> {
+ stat.setName(ListUtils.collapseTokens(fst.toList((s) -> s)));
+ });
+
+ reader.addPragma("author", (fst, stat) -> {
+ stat.setAuthor(ListUtils.collapseTokens(fst.toList((s) -> s)));
+ });
+
+ reader.addPragma("description", (fst, stat) -> {
+ stat.setDescription(
+ ListUtils.collapseTokens(fst.toList((s) -> s)));
+ });
+
+ reader.addPragma("version", (fst, stat) -> {
+ stat.setVersion(Integer.parseInt(fst.nextToken()));
+ });
+ }
+
+ /**
+ * Parse a component description from a stream
+ *
+ * @param is
+ * The stream to parse from
+ * @return The description parsed from the stream
+ */
+ public ComponentDescription fromStream(InputStream is) {
+ return reader.fromStream(is, new ComponentDescriptionState())
+ .toDescription();
+ }
+}
diff --git a/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionState.java b/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionState.java
new file mode 100644
index 0000000..6c374be
--- /dev/null
+++ b/BJC-Utils2/src/main/java/bjc/utils/components/ComponentDescriptionState.java
@@ -0,0 +1,66 @@
+package bjc.utils.components;
+
+/**
+ * Internal state of component description parser
+ *
+ * @author ben
+ *
+ */
+public class ComponentDescriptionState {
+ private String name;
+ private String description;
+
+ private String author;
+
+ private int 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);
+ }
+
+ /**
+ * Set the name of this component
+ *
+ * @param name
+ * The name of this component
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Set the description of this component
+ *
+ * @param description
+ * The description of this component
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Set the author of this component
+ *
+ * @param author
+ * The author of this component
+ */
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ /**
+ * Set the version of this component
+ *
+ * @param version
+ * The version of this component
+ */
+ public void setVersion(int version) {
+ this.version = version;
+ }
+}