You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streams.apache.org by sb...@apache.org on 2016/06/01 17:54:00 UTC

[44/46] incubator-streams git commit: refactoring, testing, documentation, CLI modes

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-plugins/streams-plugin-scala/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-scala/pom.xml b/streams-plugins/streams-plugin-scala/pom.xml
index f718260..3988142 100644
--- a/streams-plugins/streams-plugin-scala/pom.xml
+++ b/streams-plugins/streams-plugin-scala/pom.xml
@@ -42,6 +42,18 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-util</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-schema-activitystreams</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.jsonschema2pojo</groupId>
             <artifactId>jsonschema2pojo-core</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsPojoScala.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsPojoScala.java b/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsPojoScala.java
deleted file mode 100644
index 1c3e317..0000000
--- a/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsPojoScala.java
+++ /dev/null
@@ -1,371 +0,0 @@
-package org.apache.streams.plugins;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import org.apache.streams.data.DocumentClassifier;
-import org.reflections.ReflectionUtils;
-import org.reflections.Reflections;
-import org.reflections.scanners.SubTypesScanner;
-import org.reflections.scanners.TypeAnnotationsScanner;
-import org.reflections.util.ClasspathHelper;
-import org.reflections.util.ConfigurationBuilder;
-import org.reflections.ReflectionUtils.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.Generated;
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
-import java.lang.reflect.Field;
-import java.nio.file.Files;
-import java.nio.file.OpenOption;
-import java.nio.file.Paths;
-import java.nio.file.StandardOpenOption;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Created by sblackmon on 11/18/15.
- */
-public class StreamsPojoScala implements Runnable {
-
-    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsPojoScala.class);
-
-    private final static String LS = System.getProperty("line.separator");
-
-    private StreamsPojoScalaMojo mojo;
-
-    String outDir = "./target/generated-sources/scala";
-    String packages = "org.apache.streams.pojo.json";
-
-    private final Reflections reflections = new Reflections(
-            new ConfigurationBuilder()
-                    // TODO
-                    .forPackages(packages)
-                    .setScanners(
-                            new SubTypesScanner(),
-                            new TypeAnnotationsScanner()));
-
-    public void main(String[] args) {
-        StreamsPojoScala streamsPojoScala = new StreamsPojoScala();
-        Thread thread = new Thread(streamsPojoScala);
-        thread.start();
-        try {
-            thread.join();
-        } catch (InterruptedException e) {
-            LOGGER.error("InterruptedException", e);
-        } catch (Exception e) {
-            LOGGER.error("Exception", e);
-        }
-        return;
-    }
-
-    public StreamsPojoScala(StreamsPojoScalaMojo mojo) {
-        this.mojo = mojo;
-        if (    mojo != null &&
-                mojo.getTarget() != null &&
-                !Strings.isNullOrEmpty(mojo.getTarget().getAbsolutePath())
-            )
-            outDir = mojo.getTarget().getAbsolutePath();
-
-        if (    mojo != null &&
-                mojo.getPackages() != null &&
-                !Strings.isNullOrEmpty(mojo.getPackages())
-            )
-            packages = mojo.getPackages();
-    }
-
-    public StreamsPojoScala() {
-    }
-
-    public void run() {
-
-        List<Class<?>> serializableClasses = detectSerializableClasses();
-
-        LOGGER.info("Detected {} serialiables:", serializableClasses.size());
-        for( Class clazz : serializableClasses )
-            LOGGER.debug(clazz.toString());
-
-        List<Class<?>> pojoClasses = detectPojoClasses(serializableClasses);
-
-        LOGGER.info("Detected {} pojos:", pojoClasses.size());
-        for( Class clazz : pojoClasses )
-            LOGGER.debug(clazz.toString());
-
-        List<Class<?>> traits = detectTraits(pojoClasses);
-
-        LOGGER.info("Detected {} traits:", traits.size());
-        for( Class clazz : traits )
-            LOGGER.debug(clazz.toString());
-
-        List<Class<?>> cases = detectCases(pojoClasses);
-
-        LOGGER.info("Detected {} cases:", cases.size());
-        for( Class clazz : cases )
-            LOGGER.debug(clazz.toString());
-
-
-        for( Class clazz : traits ) {
-            String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".scala").replace(".","/")+"/traits/";
-            String pojoName = clazz.getSimpleName()+".scala";
-            String pojoScala = renderTrait(clazz);
-            writeFile(outDir+"/"+pojoPath+pojoName, pojoScala);
-        }
-
-        for( Class clazz : traits ) {
-            String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".scala").replace(".","/")+"/";
-            String pojoName = clazz.getSimpleName()+".scala";
-            String pojoScala = renderClass(clazz);
-            writeFile(outDir+"/"+pojoPath+pojoName, pojoScala);
-        }
-
-        for( Class clazz : cases ) {
-            String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".scala").replace(".","/")+"/";
-            String pojoName = clazz.getSimpleName()+".scala";
-            String pojoScala = renderCase(clazz);
-            writeFile(outDir+"/"+pojoPath+pojoName, pojoScala);
-        }
-
-    }
-
-    private void writeFile(String pojoFile, String pojoScala) {
-        try {
-            File path = new File(pojoFile);
-            File dir = path.getParentFile();
-            if( !dir.exists() )
-                dir.mkdirs();
-            Files.write(Paths.get(pojoFile), pojoScala.getBytes(), StandardOpenOption.CREATE_NEW);
-        } catch (Exception e) {
-            LOGGER.error("Write Exception: {}", e);
-        }
-    }
-
-    public List<Class<?>> detectSerializableClasses() {
-
-        Set<Class<? extends Serializable>> classes =
-                reflections.getSubTypesOf(java.io.Serializable.class);
-
-        List<Class<?>> result = Lists.newArrayList();
-
-        for( Class clazz : classes ) {
-            result.add(clazz);
-        }
-
-        return result;
-    }
-
-    public List<Class<?>> detectPojoClasses(List<Class<?>> classes) {
-
-        List<Class<?>> result = Lists.newArrayList();
-
-        for( Class clazz : classes ) {
-            try {
-                clazz.newInstance().toString();
-            } catch( Exception e) {}
-            // super-halfass way to know if this is a jsonschema2pojo
-            if( clazz.getAnnotations().length >= 1 )
-                result.add(clazz);
-        }
-
-        return result;
-    }
-
-    public List<Class<?>> detectTraits(List<Class<?>> classes) {
-
-        List<Class<?>> traits = Lists.newArrayList();
-
-        for( Class clazz : classes ) {
-            if (reflections.getSubTypesOf(clazz).size() > 0)
-                traits.add(clazz);
-        }
-
-        return traits;
-    }
-
-    public List<Class<?>> detectCases(List<Class<?>> classes) {
-
-        List<Class<?>> cases = Lists.newArrayList();
-
-        for( Class clazz : classes ) {
-            if (reflections.getSubTypesOf(clazz).size() == 0)
-                cases.add(clazz);
-        }
-
-        return cases;
-    }
-
-
-    public String renderTrait(Class<?> pojoClass) {
-        StringBuffer stringBuffer = new StringBuffer();
-        stringBuffer.append("package ");
-        stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".scala"));
-        stringBuffer.append(".traits");
-        stringBuffer.append(LS);
-        stringBuffer.append("trait "+pojoClass.getSimpleName());
-        stringBuffer.append(" extends Serializable");
-        stringBuffer.append(" {");
-
-        Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
-        appendFields(stringBuffer, fields, "def", ";");
-
-        stringBuffer.append("}");
-
-        return stringBuffer.toString();
-    }
-
-    public String renderClass(Class<?> pojoClass) {
-        StringBuffer stringBuffer = new StringBuffer();
-        stringBuffer.append("package ");
-        stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".scala"));
-        stringBuffer.append(LS);
-        stringBuffer.append("import org.apache.commons.lang.builder.{HashCodeBuilder, EqualsBuilder, ToStringBuilder}");
-        stringBuffer.append(LS);
-        stringBuffer.append("class "+pojoClass.getSimpleName());
-        stringBuffer.append(" (");
-
-        Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
-        appendFields(stringBuffer, fields, "var", ",");
-
-        stringBuffer.append(")");
-        stringBuffer.append(" extends "+pojoClass.getPackage().getName().replace(".pojo.json", ".scala")+".traits."+pojoClass.getSimpleName());
-        stringBuffer.append(" with Serializable ");
-        stringBuffer.append("{ ");
-        stringBuffer.append(LS);
-        stringBuffer.append("override def equals(obj: Any) = obj match { ");
-        stringBuffer.append(LS);
-        stringBuffer.append("  case other: ");
-        stringBuffer.append(pojoClass.getSimpleName());
-        stringBuffer.append(" => other.getClass == getClass && EqualsBuilder.reflectionEquals(this,obj)");
-        stringBuffer.append(LS);
-        stringBuffer.append("  case _ => false");
-        stringBuffer.append(LS);
-        stringBuffer.append("}");
-        stringBuffer.append(LS);
-        stringBuffer.append("override def hashCode = new HashCodeBuilder().hashCode");
-        stringBuffer.append(LS);
-        stringBuffer.append("}");
-
-        return stringBuffer.toString();
-    }
-
-    public String renderCase(Class<?> pojoClass) {
-        StringBuffer stringBuffer = new StringBuffer();
-        stringBuffer.append("package ");
-        stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".scala"));
-        stringBuffer.append(LS);
-        stringBuffer.append("case class "+pojoClass.getSimpleName());
-        stringBuffer.append("(");
-        Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
-        appendFields(stringBuffer, fields, "var", ",");
-        stringBuffer.append(")");
-        if( pojoClass.getSuperclass() != null && !pojoClass.getSuperclass().equals(java.lang.Object.class)) {
-            stringBuffer.append(" extends "+pojoClass.getSuperclass().getPackage().getName().replace(".pojo.json", ".scala")+".traits."+pojoClass.getSuperclass().getSimpleName());
-        }
-        stringBuffer.append(LS);
-
-        return stringBuffer.toString();
-    }
-
-    private void appendFields(StringBuffer stringBuffer, Set<Field> fields, String varDef, String fieldDelimiter) {
-        if( fields.size() > 0 ) {
-            stringBuffer.append(LS);
-            Map<String,Field> fieldsToAppend = uniqueFields(fields);
-            for( Iterator<Field> iter = fieldsToAppend.values().iterator(); iter.hasNext(); ) {
-                Field field = iter.next();
-                if( override( field ) )
-                    stringBuffer.append("override ");
-                stringBuffer.append(varDef);
-                stringBuffer.append(" ");
-                stringBuffer.append(name(field));
-                stringBuffer.append(": ");
-                if( option(field) ) {
-                    stringBuffer.append("scala.Option[");
-                    stringBuffer.append(type(field));
-                    stringBuffer.append("]");
-                } else {
-                    stringBuffer.append(type(field));
-                }
-                if( !fieldDelimiter.equals(";") && value(field) != null) {
-                    stringBuffer.append(" = ");
-                    if( option(field) ) {
-                        stringBuffer.append("scala.Some(");
-                        stringBuffer.append(value(field));
-                        stringBuffer.append(")");
-                    } else {
-                        stringBuffer.append(value(field));
-                    }
-                }
-                if( iter.hasNext()) stringBuffer.append(fieldDelimiter);
-                stringBuffer.append(LS);
-            }
-        } else {
-            stringBuffer.append(LS);
-        }
-    }
-
-    private boolean option(Field field) {
-        if( field.getName().equals("verb")) {
-            return false;
-        } else if( field.getType().equals(java.util.Map.class)) {
-            return false;
-        } else if( field.getType().equals(java.util.List.class)) {
-            return false;
-        } else return true;
-    }
-
-    private String value(Field field) {
-        if( field.getName().equals("verb")) {
-            return "\"post\"";
-        } else if( field.getName().equals("objectType")) {
-            return "\"application\"";
-        } else return null;
-    }
-
-    private String type(Field field) {
-        if( field.getType().equals(java.lang.String.class)) {
-            return "String";
-        } else if( field.getType().equals(java.util.Map.class)) {
-            return "scala.collection.mutable.Map[String,Any]";
-        } else if( field.getType().equals(java.util.List.class)) {
-            return "scala.collection.mutable.MutableList[Any]";
-        }
-        return field.getType().getCanonicalName().replace(".pojo.json", ".scala");
-    }
-
-    private Map<String,Field> uniqueFields(Set<Field> fieldset) {
-        Map<String,Field> fields = Maps.newTreeMap();
-        Field item = null;
-        for( Iterator<Field> it = fieldset.iterator(); it.hasNext(); item = it.next() ) {
-            if( item != null && item.getName() != null ) {
-                Field added = fields.put(item.getName(), item);
-            }
-            // ensure right class will get used
-        }
-        return fields;
-    }
-
-    private String name(Field field) {
-        if( field.getName().equals("object"))
-            return "obj";
-        else return field.getName();
-    }
-
-    private boolean override(Field field) {
-        try {
-            if( field.getDeclaringClass().getSuperclass().getField(field.getName()) != null )
-                return true;
-            else return false;
-        } catch( Exception e ) {
-            return false;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsPojoScalaMojo.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsPojoScalaMojo.java b/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsPojoScalaMojo.java
deleted file mode 100644
index baa0f50..0000000
--- a/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsPojoScalaMojo.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.apache.streams.plugins;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.descriptor.PluginDescriptor;
-import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.Execute;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.settings.Settings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-
-@Mojo(  name = "scala",
-        defaultPhase = LifecyclePhase.GENERATE_SOURCES
-)
-@Execute(   goal = "scala",
-            phase = LifecyclePhase.GENERATE_SOURCES
-)
-public class StreamsPojoScalaMojo extends AbstractMojo {
-
-    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsPojoScalaMojo.class);
-
-    @Component
-    private MavenProject project;
-
-//    @Component
-//    private Settings settings;
-//
-//    @Parameter( defaultValue = "${localRepository}", readonly = true, required = true )
-//    protected ArtifactRepository localRepository;
-//
-//    @Parameter( defaultValue = "${plugin}", readonly = true ) // Maven 3 only
-//    private PluginDescriptor plugin;
-//
-    @Parameter( defaultValue = "${project.basedir}", readonly = true )
-    private File basedir;
-
-    @Parameter(defaultValue = "${project.build.directory}", readonly = true)
-    private File target;
-
-    @Parameter(defaultValue = "org.apache.streams.pojo.json", readonly = true)
-    private String packages;
-
-    public void execute() throws MojoExecutionException {
-        StreamsPojoScala streamsPojoScala = new StreamsPojoScala(this);
-        Thread thread = new Thread(streamsPojoScala);
-        thread.start();
-        try {
-            thread.join();
-        } catch (InterruptedException e) {
-            LOGGER.error("InterruptedException", e);
-        } catch (Exception e) {
-            LOGGER.error("Exception", e);
-        }
-        return;
-    }
-
-    public File getTarget() {
-        return target;
-    }
-
-    public String getPackages() {
-        return packages;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsScalaSourceGenerator.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsScalaSourceGenerator.java b/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsScalaSourceGenerator.java
new file mode 100644
index 0000000..7199be3
--- /dev/null
+++ b/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsScalaSourceGenerator.java
@@ -0,0 +1,351 @@
+package org.apache.streams.plugins;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.reflections.ReflectionUtils;
+import org.reflections.Reflections;
+import org.reflections.scanners.SubTypesScanner;
+import org.reflections.scanners.TypeAnnotationsScanner;
+import org.reflections.util.ConfigurationBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created by sblackmon on 11/18/15.
+ */
+public class StreamsScalaSourceGenerator implements Runnable {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsScalaSourceGenerator.class);
+
+    private final static String LS = System.getProperty("line.separator");
+
+    private StreamsScalaSourceGeneratorMojo mojo;
+
+    String outDir = "./target/generated-sources/scala";
+    String packages = "org.apache.streams.pojo.json";
+
+    private final Reflections reflections = new Reflections(
+            new ConfigurationBuilder()
+                    // TODO
+                    .forPackages(packages)
+                    .setScanners(
+                            new SubTypesScanner(),
+                            new TypeAnnotationsScanner()));
+
+    public void main(String[] args) {
+        StreamsScalaSourceGenerator streamsScalaSourceGenerator = new StreamsScalaSourceGenerator();
+        streamsScalaSourceGenerator.run();
+    }
+
+    public StreamsScalaSourceGenerator(StreamsScalaSourceGeneratorMojo mojo) {
+        this.mojo = mojo;
+        if (    mojo != null &&
+                mojo.getTarget() != null &&
+                !Strings.isNullOrEmpty(mojo.getTarget().getAbsolutePath())
+            )
+            outDir = mojo.getTarget().getAbsolutePath();
+
+        if (    mojo != null &&
+                mojo.getPackages() != null &&
+                !Strings.isNullOrEmpty(mojo.getPackages())
+            )
+            packages = mojo.getPackages();
+    }
+
+    public StreamsScalaSourceGenerator() {
+    }
+
+    public void run() {
+
+        List<Class<?>> serializableClasses = detectSerializableClasses();
+
+        LOGGER.info("Detected {} serialiables:", serializableClasses.size());
+        for( Class clazz : serializableClasses )
+            LOGGER.debug(clazz.toString());
+
+        List<Class<?>> pojoClasses = detectPojoClasses(serializableClasses);
+
+        LOGGER.info("Detected {} pojos:", pojoClasses.size());
+        for( Class clazz : pojoClasses )
+            LOGGER.debug(clazz.toString());
+
+        List<Class<?>> traits = detectTraits(pojoClasses);
+
+        LOGGER.info("Detected {} traits:", traits.size());
+        for( Class clazz : traits )
+            LOGGER.debug(clazz.toString());
+
+        List<Class<?>> cases = detectCases(pojoClasses);
+
+        LOGGER.info("Detected {} cases:", cases.size());
+        for( Class clazz : cases )
+            LOGGER.debug(clazz.toString());
+
+
+        for( Class clazz : traits ) {
+            String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".scala").replace(".","/")+"/traits/";
+            String pojoName = clazz.getSimpleName()+".scala";
+            String pojoScala = renderTrait(clazz);
+            writeFile(outDir+"/"+pojoPath+pojoName, pojoScala);
+        }
+
+        for( Class clazz : traits ) {
+            String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".scala").replace(".","/")+"/";
+            String pojoName = clazz.getSimpleName()+".scala";
+            String pojoScala = renderClass(clazz);
+            writeFile(outDir+"/"+pojoPath+pojoName, pojoScala);
+        }
+
+        for( Class clazz : cases ) {
+            String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".scala").replace(".","/")+"/";
+            String pojoName = clazz.getSimpleName()+".scala";
+            String pojoScala = renderCase(clazz);
+            writeFile(outDir+"/"+pojoPath+pojoName, pojoScala);
+        }
+
+    }
+
+    private void writeFile(String pojoFile, String pojoScala) {
+        try {
+            File path = new File(pojoFile);
+            File dir = path.getParentFile();
+            if( !dir.exists() )
+                dir.mkdirs();
+            Files.write(Paths.get(pojoFile), pojoScala.getBytes(), StandardOpenOption.CREATE_NEW);
+        } catch (Exception e) {
+            LOGGER.error("Write Exception: {}", e);
+        }
+    }
+
+    public List<Class<?>> detectSerializableClasses() {
+
+        Set<Class<? extends Serializable>> classes =
+                reflections.getSubTypesOf(java.io.Serializable.class);
+
+        List<Class<?>> result = Lists.newArrayList();
+
+        for( Class clazz : classes ) {
+            result.add(clazz);
+        }
+
+        return result;
+    }
+
+    public List<Class<?>> detectPojoClasses(List<Class<?>> classes) {
+
+        List<Class<?>> result = Lists.newArrayList();
+
+        for( Class clazz : classes ) {
+            try {
+                clazz.newInstance().toString();
+            } catch( Exception e) {}
+            // super-halfass way to know if this is a jsonschema2pojo
+            if( clazz.getAnnotations().length >= 1 )
+                result.add(clazz);
+        }
+
+        return result;
+    }
+
+    public List<Class<?>> detectTraits(List<Class<?>> classes) {
+
+        List<Class<?>> traits = Lists.newArrayList();
+
+        for( Class clazz : classes ) {
+            if (reflections.getSubTypesOf(clazz).size() > 0)
+                traits.add(clazz);
+        }
+
+        return traits;
+    }
+
+    public List<Class<?>> detectCases(List<Class<?>> classes) {
+
+        List<Class<?>> cases = Lists.newArrayList();
+
+        for( Class clazz : classes ) {
+            if (reflections.getSubTypesOf(clazz).size() == 0)
+                cases.add(clazz);
+        }
+
+        return cases;
+    }
+
+
+    public String renderTrait(Class<?> pojoClass) {
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append("package ");
+        stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".scala"));
+        stringBuffer.append(".traits");
+        stringBuffer.append(LS);
+        stringBuffer.append("trait "+pojoClass.getSimpleName());
+        stringBuffer.append(" extends Serializable");
+        stringBuffer.append(" {");
+
+        Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
+        appendFields(stringBuffer, fields, "def", ";");
+
+        stringBuffer.append("}");
+
+        return stringBuffer.toString();
+    }
+
+    public String renderClass(Class<?> pojoClass) {
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append("package ");
+        stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".scala"));
+        stringBuffer.append(LS);
+        stringBuffer.append("import org.apache.commons.lang.builder.{HashCodeBuilder, EqualsBuilder, ToStringBuilder}");
+        stringBuffer.append(LS);
+        stringBuffer.append("class "+pojoClass.getSimpleName());
+        stringBuffer.append(" (");
+
+        Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
+        appendFields(stringBuffer, fields, "var", ",");
+
+        stringBuffer.append(")");
+        stringBuffer.append(" extends "+pojoClass.getPackage().getName().replace(".pojo.json", ".scala")+".traits."+pojoClass.getSimpleName());
+        stringBuffer.append(" with Serializable ");
+        stringBuffer.append("{ ");
+        stringBuffer.append(LS);
+        stringBuffer.append("override def equals(obj: Any) = obj match { ");
+        stringBuffer.append(LS);
+        stringBuffer.append("  case other: ");
+        stringBuffer.append(pojoClass.getSimpleName());
+        stringBuffer.append(" => other.getClass == getClass && EqualsBuilder.reflectionEquals(this,obj)");
+        stringBuffer.append(LS);
+        stringBuffer.append("  case _ => false");
+        stringBuffer.append(LS);
+        stringBuffer.append("}");
+        stringBuffer.append(LS);
+        stringBuffer.append("override def hashCode = new HashCodeBuilder().hashCode");
+        stringBuffer.append(LS);
+        stringBuffer.append("}");
+
+        return stringBuffer.toString();
+    }
+
+    public String renderCase(Class<?> pojoClass) {
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append("package ");
+        stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".scala"));
+        stringBuffer.append(LS);
+        stringBuffer.append("case class "+pojoClass.getSimpleName());
+        stringBuffer.append("(");
+        Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
+        appendFields(stringBuffer, fields, "var", ",");
+        stringBuffer.append(")");
+        if( pojoClass.getSuperclass() != null && !pojoClass.getSuperclass().equals(java.lang.Object.class)) {
+            stringBuffer.append(" extends "+pojoClass.getSuperclass().getPackage().getName().replace(".pojo.json", ".scala")+".traits."+pojoClass.getSuperclass().getSimpleName());
+        }
+        stringBuffer.append(LS);
+
+        return stringBuffer.toString();
+    }
+
+    private void appendFields(StringBuffer stringBuffer, Set<Field> fields, String varDef, String fieldDelimiter) {
+        if( fields.size() > 0 ) {
+            stringBuffer.append(LS);
+            Map<String,Field> fieldsToAppend = uniqueFields(fields);
+            for( Iterator<Field> iter = fieldsToAppend.values().iterator(); iter.hasNext(); ) {
+                Field field = iter.next();
+                if( override( field ) )
+                    stringBuffer.append("override ");
+                stringBuffer.append(varDef);
+                stringBuffer.append(" ");
+                stringBuffer.append(name(field));
+                stringBuffer.append(": ");
+                if( option(field) ) {
+                    stringBuffer.append("scala.Option[");
+                    stringBuffer.append(type(field));
+                    stringBuffer.append("]");
+                } else {
+                    stringBuffer.append(type(field));
+                }
+                if( !fieldDelimiter.equals(";") && value(field) != null) {
+                    stringBuffer.append(" = ");
+                    if( option(field) ) {
+                        stringBuffer.append("scala.Some(");
+                        stringBuffer.append(value(field));
+                        stringBuffer.append(")");
+                    } else {
+                        stringBuffer.append(value(field));
+                    }
+                }
+                if( iter.hasNext()) stringBuffer.append(fieldDelimiter);
+                stringBuffer.append(LS);
+            }
+        } else {
+            stringBuffer.append(LS);
+        }
+    }
+
+    private boolean option(Field field) {
+        if( field.getName().equals("verb")) {
+            return false;
+        } else if( field.getType().equals(java.util.Map.class)) {
+            return false;
+        } else if( field.getType().equals(java.util.List.class)) {
+            return false;
+        } else return true;
+    }
+
+    private String value(Field field) {
+        if( field.getName().equals("verb")) {
+            return "\"post\"";
+        } else if( field.getName().equals("objectType")) {
+            return "\"application\"";
+        } else return null;
+    }
+
+    private String type(Field field) {
+        if( field.getType().equals(java.lang.String.class)) {
+            return "String";
+        } else if( field.getType().equals(java.util.Map.class)) {
+            return "scala.collection.mutable.Map[String,Any]";
+        } else if( field.getType().equals(java.util.List.class)) {
+            return "scala.collection.mutable.MutableList[Any]";
+        }
+        return field.getType().getCanonicalName().replace(".pojo.json", ".scala");
+    }
+
+    private Map<String,Field> uniqueFields(Set<Field> fieldset) {
+        Map<String,Field> fields = Maps.newTreeMap();
+        Field item = null;
+        for( Iterator<Field> it = fieldset.iterator(); it.hasNext(); item = it.next() ) {
+            if( item != null && item.getName() != null ) {
+                Field added = fields.put(item.getName(), item);
+            }
+            // ensure right class will get used
+        }
+        return fields;
+    }
+
+    private String name(Field field) {
+        if( field.getName().equals("object"))
+            return "obj";
+        else return field.getName();
+    }
+
+    private boolean override(Field field) {
+        try {
+            if( field.getDeclaringClass().getSuperclass().getField(field.getName()) != null )
+                return true;
+            else return false;
+        } catch( Exception e ) {
+            return false;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsScalaSourceGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsScalaSourceGeneratorMojo.java b/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsScalaSourceGeneratorMojo.java
new file mode 100644
index 0000000..8d85c90
--- /dev/null
+++ b/streams-plugins/streams-plugin-scala/src/main/java/org/apache/streams/plugins/StreamsScalaSourceGeneratorMojo.java
@@ -0,0 +1,59 @@
+package org.apache.streams.plugins;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Execute;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+
+@Mojo(  name = "scala",
+        defaultPhase = LifecyclePhase.GENERATE_SOURCES
+)
+@Execute(   goal = "scala",
+            phase = LifecyclePhase.GENERATE_SOURCES
+)
+public class StreamsScalaSourceGeneratorMojo extends AbstractMojo {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsScalaSourceGeneratorMojo.class);
+
+    @Component
+    private MavenProject project;
+
+//    @Component
+//    private Settings settings;
+//
+//    @Parameter( defaultValue = "${localRepository}", readonly = true, required = true )
+//    protected ArtifactRepository localRepository;
+//
+//    @Parameter( defaultValue = "${plugin}", readonly = true ) // Maven 3 only
+//    private PluginDescriptor plugin;
+//
+    @Parameter( defaultValue = "${project.basedir}", readonly = true )
+    private File basedir;
+
+    @Parameter(defaultValue = "${project.build.directory}", readonly = true)
+    private File target;
+
+    @Parameter(defaultValue = "org.apache.streams.pojo.json", readonly = true)
+    private String packages;
+
+    public void execute() throws MojoExecutionException {
+        StreamsScalaSourceGenerator streamsScalaSourceGenerator = new StreamsScalaSourceGenerator(this);
+        streamsScalaSourceGenerator.run();
+    }
+
+    public File getTarget() {
+        return target;
+    }
+
+    public String getPackages() {
+        return packages;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-plugins/streams-plugin-scala/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-scala/src/site/markdown/index.md b/streams-plugins/streams-plugin-scala/src/site/markdown/index.md
new file mode 100644
index 0000000..34f94f5
--- /dev/null
+++ b/streams-plugins/streams-plugin-scala/src/site/markdown/index.md
@@ -0,0 +1,36 @@
+org.apache.streams.plugins:streams-plugin-scala
+=============================================
+
+streams-plugin-scala generates source files from json schemas suitable for writing Apache Streams components and libraries in Scala.
+
+### Usage
+
+##### Maven
+
+Run within a module containing a src/main/jsonschema directory
+
+    mvn org.apache.streams.plugins:streams-plugin-scala:0.3-incubating-SNAPSHOT:pig
+
+[streams-plugin-scala/pom.xml](streams-plugin-scala/pom.xml "streams-plugin-scala/pom.xml")
+
+##### SDK
+
+Embed within your own java code
+
+    StreamsScalaGenerationConfig config = new StreamsScalaGenerationConfig();
+    config.setSourceDirectory("src/main/jsonschema");
+    config.setTargetDirectory("target/generated-resources");
+    StreamsScalaSourceGenerator generator = new StreamsScalaSourceGenerator(config);
+    generator.run();
+
+##### CLI
+
+Run from CLI without Maven
+
+    java -jar streams-plugin-scala-jar-with-dependencies.jar StreamsScalaSourceGenerator src/main/jsonschema target/generated-sources
+
+#### Documentation
+
+[JavaDocs](apidocs/index.html "JavaDocs")
+
+###### Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-plugins/streams-plugin-scala/src/test/java/org/apache/streams/plugins/test/StreamsPojoScalaTest.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-scala/src/test/java/org/apache/streams/plugins/test/StreamsPojoScalaTest.java b/streams-plugins/streams-plugin-scala/src/test/java/org/apache/streams/plugins/test/StreamsPojoScalaTest.java
deleted file mode 100644
index 4e5e7e3..0000000
--- a/streams-plugins/streams-plugin-scala/src/test/java/org/apache/streams/plugins/test/StreamsPojoScalaTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.apache.streams.plugins.test;
-
-import org.apache.streams.plugins.StreamsPojoScala;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.FileFilter;
-
-/**
- * Test that Activity beans are compatible with the example activities in the spec.
- */
-public class StreamsPojoScalaTest {
-
-    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsPojoScalaTest.class);
-
-    /**
-     * Tests that all example activities can be loaded into Activity beans
-     *
-     * @throws Exception
-     */
-    @Test
-    public void testDetectPojoScala() throws Exception {
-        StreamsPojoScala streamsPojoScala = new StreamsPojoScala();
-        streamsPojoScala.main(new String[0]);
-
-        File testOutput = new File( "./target/generated-sources/scala/org/apache/streams/scala");
-        FileFilter scalaFilter = new FileFilter() {
-            @Override
-            public boolean accept(File pathname) {
-                if( pathname.getName().endsWith(".scala") )
-                    return true;
-                return false;
-            }
-        };
-
-        assert( testOutput != null );
-        assert( testOutput.exists() == true );
-        assert( testOutput.isDirectory() == true );
-        assert( testOutput.listFiles(scalaFilter).length == 11 );
-        assert( new File(testOutput + "/traits").exists() == true );
-        assert( new File(testOutput + "/traits").isDirectory() == true );
-        assert( new File(testOutput + "/traits").listFiles(scalaFilter) != null );
-        assert( new File(testOutput + "/traits").listFiles(scalaFilter).length == 4 );
-        assert( new File(testOutput + "/objectTypes").exists() == true );
-        assert( new File(testOutput + "/objectTypes").isDirectory() == true );
-        assert( new File(testOutput + "/objectTypes").listFiles(scalaFilter) != null );
-        assert( new File(testOutput + "/objectTypes").listFiles(scalaFilter).length == 43 );
-        assert( new File(testOutput + "/verbs").exists() == true );
-        assert( new File(testOutput + "/verbs").isDirectory() == true );
-        assert( new File(testOutput + "/verbs").listFiles(scalaFilter) != null );
-        assert( new File(testOutput + "/verbs").listFiles(scalaFilter).length == 89 );
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-plugins/streams-plugin-scala/src/test/java/org/apache/streams/plugins/test/StreamsScalaSourceGeneratorTest.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-scala/src/test/java/org/apache/streams/plugins/test/StreamsScalaSourceGeneratorTest.java b/streams-plugins/streams-plugin-scala/src/test/java/org/apache/streams/plugins/test/StreamsScalaSourceGeneratorTest.java
new file mode 100644
index 0000000..65e496f
--- /dev/null
+++ b/streams-plugins/streams-plugin-scala/src/test/java/org/apache/streams/plugins/test/StreamsScalaSourceGeneratorTest.java
@@ -0,0 +1,55 @@
+package org.apache.streams.plugins.test;
+
+import org.apache.streams.plugins.StreamsScalaSourceGenerator;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.FileFilter;
+
+/**
+ * Test that Activity beans are compatible with the example activities in the spec.
+ */
+public class StreamsScalaSourceGeneratorTest {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsScalaSourceGeneratorTest.class);
+
+    /**
+     * Tests that all example activities can be loaded into Activity beans
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testDetectPojoScala() throws Exception {
+        StreamsScalaSourceGenerator streamsScalaSourceGenerator = new StreamsScalaSourceGenerator();
+        streamsScalaSourceGenerator.main(new String[0]);
+
+        File testOutput = new File( "./target/generated-sources/scala/org/apache/streams/scala");
+        FileFilter scalaFilter = new FileFilter() {
+            @Override
+            public boolean accept(File pathname) {
+                if( pathname.getName().endsWith(".scala") )
+                    return true;
+                return false;
+            }
+        };
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+        assert( testOutput.listFiles(scalaFilter).length == 11 );
+        assert( new File(testOutput + "/traits").exists() == true );
+        assert( new File(testOutput + "/traits").isDirectory() == true );
+        assert( new File(testOutput + "/traits").listFiles(scalaFilter) != null );
+        assert( new File(testOutput + "/traits").listFiles(scalaFilter).length == 4 );
+        assert( new File(testOutput + "/objectTypes").exists() == true );
+        assert( new File(testOutput + "/objectTypes").isDirectory() == true );
+        assert( new File(testOutput + "/objectTypes").listFiles(scalaFilter) != null );
+        assert( new File(testOutput + "/objectTypes").listFiles(scalaFilter).length == 43 );
+        assert( new File(testOutput + "/verbs").exists() == true );
+        assert( new File(testOutput + "/verbs").isDirectory() == true );
+        assert( new File(testOutput + "/verbs").listFiles(scalaFilter) != null );
+        assert( new File(testOutput + "/verbs").listFiles(scalaFilter).length == 89 );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-runtimes/streams-runtime-local/pom.xml
----------------------------------------------------------------------
diff --git a/streams-runtimes/streams-runtime-local/pom.xml b/streams-runtimes/streams-runtime-local/pom.xml
index d5857ef..d8fae26 100644
--- a/streams-runtimes/streams-runtime-local/pom.xml
+++ b/streams-runtimes/streams-runtime-local/pom.xml
@@ -137,7 +137,7 @@
                     <addCompileSourceRoot>true</addCompileSourceRoot>
                     <generateBuilders>true</generateBuilders>
                     <sourcePaths>
-                        <sourcePath>${project.basedir}/src/main/jsonschema/LocalRuntimeConfiguration.json</sourcePath>
+                        <sourcePath>${project.basedir}/src/main/jsonschema</sourcePath>
                     </sourcePaths>
                     <outputDirectory>target/generated-sources/jsonschema2pojo</outputDirectory>
                     <targetPackage>org.apache.streams.local</targetPackage>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/pom.xml
----------------------------------------------------------------------
diff --git a/streams-schemas/pom.xml b/streams-schemas/pom.xml
index 0625cb6..dbfd719 100644
--- a/streams-schemas/pom.xml
+++ b/streams-schemas/pom.xml
@@ -28,79 +28,12 @@
 
     <artifactId>streams-schemas</artifactId>
     <name>${project.artifactId}</name>
+    <packaging>pom</packaging>
 
-    <description>Activity Streams schemas and schema utilities</description>
+    <description>Aggregator for schema modules</description>
 
-    <dependencies>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.jsonschema2pojo</groupId>
-            <artifactId>jsonschema2pojo-core</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>commons-logging</groupId>
-                    <artifactId>commons-logging</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
+    <modules>
+        <module>streams-schema-activitystreams</module>
+    </modules>
 
-    </dependencies>
-    <build>
-        <sourceDirectory>src/main/java</sourceDirectory>
-        <testSourceDirectory>src/test/java</testSourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-            </resource>
-        </resources>
-        <testResources>
-            <testResource>
-                <directory>src/test/resources</directory>
-            </testResource>
-        </testResources>
-        <plugins>
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>add-source</id>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>add-resource</goal>
-                        </goals>
-                        <configuration>
-                            <resources>
-                                <resource>
-                                    <directory>src/main/jsonschema</directory>
-                                </resource>
-                                <resource>
-                                    <directory>src/main/xmlschema</directory>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/java/org/apache/streams/schema/FieldType.java
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/java/org/apache/streams/schema/FieldType.java b/streams-schemas/src/main/java/org/apache/streams/schema/FieldType.java
deleted file mode 100644
index 1ad9dcc..0000000
--- a/streams-schemas/src/main/java/org/apache/streams/schema/FieldType.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.apache.streams.schema;
-
-/**
- * Created by steve on 5/1/16.
- */
-public enum FieldType {
-    STRING,
-    INTEGER,
-    NUMBER,
-    BOOLEAN,
-    OBJECT,
-    ARRAY
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/java/org/apache/streams/schema/FieldUtil.java
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/java/org/apache/streams/schema/FieldUtil.java b/streams-schemas/src/main/java/org/apache/streams/schema/FieldUtil.java
deleted file mode 100644
index 4173e50..0000000
--- a/streams-schemas/src/main/java/org/apache/streams/schema/FieldUtil.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.apache.streams.schema;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Created by steve on 5/1/16.
- */
-public class FieldUtil {
-
-    public static FieldType determineFieldType(ObjectNode fieldNode) {
-        String typeSchemaField = "type";
-        if( !fieldNode.has(typeSchemaField))
-            return null;
-        String typeSchemaFieldValue = fieldNode.get(typeSchemaField).asText();
-        if( typeSchemaFieldValue.equals("string")) {
-            return FieldType.STRING;
-        } else if( typeSchemaFieldValue.equals("integer")) {
-            return FieldType.INTEGER;
-        } else if( typeSchemaFieldValue.equals("number")) {
-            return FieldType.NUMBER;
-        } else if( typeSchemaFieldValue.equals("object")) {
-            return FieldType.OBJECT;
-        } else if( typeSchemaFieldValue.equals("boolean")) {
-            return FieldType.BOOLEAN;
-        } else if( typeSchemaFieldValue.equals("array")) {
-            return FieldType.ARRAY;
-        }
-        else return null;
-    }
-
-    public static FieldType determineArrayType(ObjectNode fieldNode) {
-        if( fieldNode == null ) return null;
-        ObjectNode itemsObjectNode = resolveItemsNode(fieldNode);
-        if( itemsObjectNode != null)
-            return determineFieldType(itemsObjectNode);
-        return null;
-    }
-
-    public static ObjectNode resolveItemsNode(ObjectNode fieldNode) {
-        ObjectNode itemsObjectNode = null;
-
-        if( fieldNode.get("items").isObject() )
-            itemsObjectNode = (ObjectNode) fieldNode.get("items");
-        else if( fieldNode.get("items").isArray() && fieldNode.size() > 0 && fieldNode.get(0).isObject()) {
-            itemsObjectNode = (ObjectNode) fieldNode.get("items").get(0);
-        }
-
-        return itemsObjectNode;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/java/org/apache/streams/schema/FileUtil.java
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/java/org/apache/streams/schema/FileUtil.java b/streams-schemas/src/main/java/org/apache/streams/schema/FileUtil.java
deleted file mode 100644
index 53f0a98..0000000
--- a/streams-schemas/src/main/java/org/apache/streams/schema/FileUtil.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.apache.streams.schema;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.nio.file.StandardOpenOption;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Created by steve on 5/1/16.
- */
-public class FileUtil {
-
-    private final static Logger LOGGER = LoggerFactory.getLogger(FileUtil.class);
-
-    public static String dropSourcePathPrefix(String inputFile, String sourceDirectory) {
-        if(Strings.isNullOrEmpty(sourceDirectory))
-            return inputFile;
-        else {
-            try {
-                if( inputFile.contains(sourceDirectory) && inputFile.indexOf(sourceDirectory) > 0) {
-                    return inputFile.substring(inputFile.indexOf(sourceDirectory)+sourceDirectory.length()+1);
-                }
-            } catch( Throwable e ) {
-                return inputFile;
-            }
-        }
-        return inputFile;
-    }
-
-    public static String swapExtension(String inputFile, String originalExtension, String newExtension) {
-        if(inputFile.endsWith("."+originalExtension))
-            return inputFile.replace("."+originalExtension, "."+newExtension);
-        else return inputFile;
-    }
-
-    public static String dropExtension(String inputFile) {
-        if(inputFile.contains("."))
-            return inputFile.substring(0, inputFile.lastIndexOf("."));
-        else return inputFile;
-    }
-
-    public static void writeFile(String resourceFile, String resourceContent) {
-        try {
-            File path = new File(resourceFile);
-            File dir = path.getParentFile();
-            if( !dir.exists() )
-                dir.mkdirs();
-            Files.write(Paths.get(resourceFile), resourceContent.getBytes(), StandardOpenOption.CREATE_NEW);
-        } catch (Exception e) {
-            LOGGER.error("Write Exception: {}", e);
-        }
-    }
-
-    public static void resolveRecursive(GenerationConfig config, List<File> schemaFiles) {
-
-        Preconditions.checkArgument(schemaFiles.size() > 0);
-        int i = 0;
-        while( schemaFiles.size() > i) {
-            File child = schemaFiles.get(i);
-            if (child.isDirectory()) {
-                schemaFiles.addAll(Arrays.asList(child.listFiles(config.getFileFilter())));
-                schemaFiles.remove(child);
-            } else {
-                i += 1;
-            }
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/java/org/apache/streams/schema/GenerationConfig.java
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/java/org/apache/streams/schema/GenerationConfig.java b/streams-schemas/src/main/java/org/apache/streams/schema/GenerationConfig.java
deleted file mode 100644
index ec77367..0000000
--- a/streams-schemas/src/main/java/org/apache/streams/schema/GenerationConfig.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.apache.streams.schema;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.net.URL;
-import java.util.Iterator;
-
-/**
- * Created by sblackmon on 5/3/16.
- */
-public interface GenerationConfig {
-
-    /**
-     * Gets the 'source' configuration option.
-     *
-     * @return The source file(s) or directory(ies) from which JSON Schema will
-     *         be read.
-     */
-    Iterator<URL> getSource();
-
-    /**
-     * Gets the 'targetDirectory' configuration option.
-     *
-     * @return The target directory into which generated types will be written
-     *         (may or may not exist before types are written)
-     */
-    File getTargetDirectory();
-
-    /**
-     * Gets the 'outputEncoding' configuration option.
-     *
-     * @return The character encoding that should be used when writing output files.
-     */
-    String getOutputEncoding();
-
-    /**
-     * Gets the file filter used to isolate the schema mapping files in the
-     * source directories.
-     *
-     * @return the file filter use when scanning for schema files.
-     */
-    FileFilter getFileFilter();
-
-    /**
-     * Gets the 'includeAdditionalProperties' configuration option.
-     *
-     * @return Whether to allow 'additional properties' support in objects.
-     *         Setting this to false will disable additional properties support,
-     *         regardless of the input schema(s).
-     */
-//    boolean isIncludeAdditionalProperties();
-
-    /**
-     * Gets the 'targetVersion' configuration option.
-     *
-     *  @return The target version for generated source files.
-     */
-//    String getTargetVersion();
-
-//    /**
-//     * Gets the `includeDynamicAccessors` configuraiton option.
-//     *
-//     * @return Whether to include dynamic getters, setters, and builders
-//     *         or to omit these methods.
-//     */
-//    boolean isIncludeDynamicAccessors();
-
-//    /**
-//     * Gets the `dateTimeType` configuration option.
-//     *         <p>
-//     *         Example values:
-//     *         <ul>
-//     *         <li><code>org.joda.time.LocalDateTime</code> (Joda)</li>
-//     *         <li><code>java.time.LocalDateTime</code> (JSR310)</li>
-//     *         <li><code>null</code> (default behavior)</li>
-//     *         </ul>
-//     *
-//     * @return The java type to use instead of {@link java.util.Date}
-//     *         when adding date type fields to generate Java types.
-//     */
-//    String getDateTimeType();
-//
-//    /**
-//     * Gets the `dateType` configuration option.
-//     *         <p>
-//     *         Example values:
-//     *         <ul>
-//     *         <li><code>org.joda.time.LocalDate</code> (Joda)</li>
-//     *         <li><code>java.time.LocalDate</code> (JSR310)</li>
-//     *         <li><code>null</code> (default behavior)</li>
-//     *         </ul>
-//     *
-//     * @return The java type to use instead of string
-//     *         when adding string type fields with a format of date (not
-//     *         date-time) to generated Java types.
-//     */
-//    String getDateType();
-//
-//    /**
-//     * Gets the `timeType` configuration option.
-//     *         <p>
-//     *         Example values:
-//     *         <ul>
-//     *         <li><code>org.joda.time.LocalTime</code> (Joda)</li>
-//     *         <li><code>java.time.LocalTime</code> (JSR310)</li>
-//     *         <li><code>null</code> (default behavior)</li>
-//     *         </ul>
-//     *
-//     * @return The java type to use instead of string
-//     *         when adding string type fields with a format of time (not
-//     *         date-time) to generated Java types.
-//     */
-//    String getTimeType();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/java/org/apache/streams/schema/Schema.java
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/java/org/apache/streams/schema/Schema.java b/streams-schemas/src/main/java/org/apache/streams/schema/Schema.java
deleted file mode 100644
index ea75ffd..0000000
--- a/streams-schemas/src/main/java/org/apache/streams/schema/Schema.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.apache.streams.schema;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.net.URI;
-
-/**
- * A JSON Schema document.
- */
-public class Schema {
-
-    private final URI id;
-    private final URI uri;
-    private final JsonNode content;
-    private final Schema parent;
-    private final boolean generate;
-
-    public Schema(URI uri, JsonNode content, Schema parent, boolean generate) {
-        this.uri = uri;
-        this.content = content;
-        this.parent = parent;
-        this.generate = generate;
-        this.id = content.has("id") ? URI.create(content.get("id").asText()) : null;
-    }
-
-    public URI getId() {
-        return id;
-    }
-
-    public URI getURI() {
-        return uri;
-    }
-
-    public JsonNode getContent() {
-        return content;
-    }
-
-    public JsonNode getParentContent() {
-        if( parent != null )
-            return parent.getContent();
-        else return null;
-    }
-
-    public URI getParentURI() {
-        if( parent != null ) return parent.getURI();
-        else return null;
-    }
-
-    public boolean isGenerated() {
-        return generate;
-    }
-
-    public Schema getParent() {
-        return parent;
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/java/org/apache/streams/schema/SchemaStore.java
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/java/org/apache/streams/schema/SchemaStore.java b/streams-schemas/src/main/java/org/apache/streams/schema/SchemaStore.java
deleted file mode 100644
index e612aff..0000000
--- a/streams-schemas/src/main/java/org/apache/streams/schema/SchemaStore.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package org.apache.streams.schema;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Optional;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Ordering;
-import org.apache.commons.lang3.StringUtils;
-import org.jsonschema2pojo.ContentResolver;
-import org.jsonschema2pojo.FragmentResolver;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.URI;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.streams.schema.URIUtil.safeResolve;
-
-/**
- * Created by steve on 4/30/16.
- */
-public class SchemaStore extends Ordering<Schema> {
-
-    private final static Logger LOGGER = LoggerFactory.getLogger(SchemaStore.class);
-    private final static JsonNodeFactory NODE_FACTORY = JsonNodeFactory.instance;
-
-    protected Map<URI, Schema> schemas = new HashMap();
-    protected FragmentResolver fragmentResolver = new FragmentResolver();
-    protected ContentResolver contentResolver = new ContentResolver();
-
-    public SchemaStore() {
-    }
-
-    public synchronized Schema create(URI uri) {
-        if(!getByUri(uri).isPresent()) {
-            URI baseURI = URIUtil.removeFragment(uri);
-            JsonNode baseNode = this.contentResolver.resolve(baseURI);
-            if(uri.toString().contains("#") && !uri.toString().endsWith("#")) {
-                Schema newSchema = new Schema(baseURI, baseNode, null, true);
-                this.schemas.put(baseURI, newSchema);
-                JsonNode childContent = this.fragmentResolver.resolve(baseNode, '#' + StringUtils.substringAfter(uri.toString(), "#"));
-                this.schemas.put(uri, new Schema(uri, childContent, newSchema, false));
-            } else {
-                if( baseNode.has("extends") && baseNode.get("extends").isObject()) {
-                    URI ref = URI.create(((ObjectNode)baseNode.get("extends")).get("$ref").asText());
-                    URI absoluteURI;
-                    if( ref.isAbsolute())
-                        absoluteURI = ref;
-                    else
-                        absoluteURI = baseURI.resolve(ref);
-                    JsonNode parentNode = this.contentResolver.resolve(absoluteURI);
-                    Schema parentSchema = null;
-                    if( this.schemas.get(absoluteURI) != null ) {
-                        parentSchema = this.schemas.get(absoluteURI);
-                    } else {
-                        parentSchema = create(absoluteURI);
-                    }
-                    this.schemas.put(uri, new Schema(uri, baseNode, parentSchema, true));
-                } else {
-                    this.schemas.put(uri, new Schema(uri, baseNode, null, true));
-                }
-            }
-            List<JsonNode> refs = baseNode.findValues("$ref");
-            for( JsonNode ref : refs ) {
-                if( ref.isValueNode() ) {
-                    String refVal = ref.asText();
-                    URI refURI = null;
-                    try {
-                        refURI = URI.create(refVal);
-                    } catch( Exception e ) {
-                        LOGGER.info("Exception: {}", e.getMessage());
-                    }
-                    if (refURI != null && !getByUri(refURI).isPresent()) {
-                        if (refURI.isAbsolute())
-                            create(refURI);
-                        else
-                            create(baseURI.resolve(refURI));
-                    }
-                }
-            }
-        }
-
-        return this.schemas.get(uri);
-    }
-
-    public Schema create(Schema parent, String path) {
-        if(path.equals("#")) {
-            return parent;
-        } else {
-            path = StringUtils.stripEnd(path, "#?&/");
-            URI id = parent != null && parent.getId() != null?parent.getId().resolve(path):URI.create(path);
-            if(this.selfReferenceWithoutParentFile(parent, path)) {
-                this.schemas.put(id, new Schema(id, this.fragmentResolver.resolve(parent.getParentContent(), path), parent, false));
-                return this.schemas.get(id);
-            } else {
-                return this.create(id);
-            }
-        }
-    }
-
-    protected boolean selfReferenceWithoutParentFile(Schema parent, String path) {
-        return parent != null && (parent.getId() == null || parent.getId().toString().startsWith("#/")) && path.startsWith("#/");
-    }
-
-    public synchronized void clearCache() {
-        this.schemas.clear();
-    }
-
-    public Integer getSize() {
-        return schemas.size();
-    }
-
-    public Optional<Schema> getById(URI id) {
-        for( Schema schema : schemas.values() ) {
-            if( schema.getId() != null && schema.getId().equals(id) )
-                return Optional.of(schema);
-        }
-        return Optional.absent();
-    }
-
-    public Optional<Schema> getByUri(URI uri) {
-        for( Schema schema : schemas.values() ) {
-            if( schema.getURI().equals(uri) )
-                return Optional.of(schema);
-        }
-        return Optional.absent();
-    }
-
-    public Integer getFileUriCount() {
-        int count = 0;
-        for( Schema schema : schemas.values() ) {
-            if( schema.getURI().getScheme().equals("file") )
-                count++;
-        }
-        return count;
-    }
-
-    public Integer getHttpUriCount() {
-        int count = 0;
-        for( Schema schema : schemas.values() ) {
-            if( schema.getURI().getScheme().equals("http") )
-                count++;
-        }
-        return count;
-    }
-
-    public Iterator<Schema> getSchemaIterator() {
-        List<Schema> schemaList = Lists.newArrayList(schemas.values());
-        Collections.sort(schemaList, this);
-        return schemaList.iterator();
-    }
-
-    public ObjectNode resolveProperties(Schema schema, ObjectNode fieldNode, String resourceId) {
-        // this should return something more suitable like:
-        //   Map<String, Pair<Schema, ObjectNode>>
-        ObjectNode schemaProperties = NODE_FACTORY.objectNode();
-        ObjectNode parentProperties = NODE_FACTORY.objectNode();
-        if (fieldNode == null) {
-            ObjectNode schemaContent = (ObjectNode) schema.getContent();
-            if( schemaContent.has("properties") ) {
-                schemaProperties = (ObjectNode) schemaContent.get("properties");
-                if (schema.getParentContent() != null) {
-                    ObjectNode parentContent = (ObjectNode) schema.getParentContent();
-                    if (parentContent.has("properties")) {
-                        parentProperties = (ObjectNode) parentContent.get("properties");
-                    }
-                }
-            }
-        } else if (fieldNode != null && fieldNode.size() > 0) {
-            if( fieldNode.has("properties") && fieldNode.get("properties").isObject() && fieldNode.get("properties").size() > 0 )
-                schemaProperties = (ObjectNode) fieldNode.get("properties");
-            URI parentURI = null;
-            if( fieldNode.has("$ref") || fieldNode.has("extends") ) {
-                JsonNode refNode = fieldNode.get("$ref");
-                JsonNode extendsNode = fieldNode.get("extends");
-                if (refNode != null && refNode.isValueNode())
-                    parentURI = URI.create(refNode.asText());
-                else if (extendsNode != null && extendsNode.isObject())
-                    parentURI = URI.create(extendsNode.get("$ref").asText());
-                ObjectNode parentContent = null;
-                URI absoluteURI;
-                if (parentURI.isAbsolute())
-                    absoluteURI = parentURI;
-                else {
-                    absoluteURI = schema.getURI().resolve(parentURI);
-                    if (!absoluteURI.isAbsolute() || (absoluteURI.isAbsolute() && !getByUri(absoluteURI).isPresent() ))
-                        absoluteURI = schema.getParentURI().resolve(parentURI);
-                }
-                if (absoluteURI != null && absoluteURI.isAbsolute()) {
-                    if (getByUri(absoluteURI).isPresent())
-                        parentContent = (ObjectNode) getByUri(absoluteURI).get().getContent();
-                    if (parentContent != null && parentContent.isObject() && parentContent.has("properties")) {
-                        parentProperties = (ObjectNode) parentContent.get("properties");
-                    } else if (absoluteURI.getPath().endsWith("#properties")) {
-                        absoluteURI = URI.create(absoluteURI.toString().replace("#properties", ""));
-                        parentProperties = (ObjectNode) getByUri(absoluteURI).get().getContent().get("properties");
-                    }
-                }
-            }
-
-
-        }
-
-        ObjectNode resolvedProperties = NODE_FACTORY.objectNode();
-        if (parentProperties != null && parentProperties.size() > 0)
-            resolvedProperties = SchemaUtil.mergeProperties(schemaProperties, parentProperties);
-        else resolvedProperties = schemaProperties.deepCopy();
-
-        return resolvedProperties;
-    }
-
-    @Override
-    public int compare(Schema left, Schema right) {
-        // are they the same?
-        if( left.equals(right)) return 0;
-        // is one an ancestor of the other
-        Schema candidateAncestor = left;
-        while( candidateAncestor.getParent() != null ) {
-            candidateAncestor = candidateAncestor.getParent();
-            if( candidateAncestor.equals(right))
-                return 1;
-        }
-        candidateAncestor = right;
-        while( candidateAncestor.getParent() != null ) {
-            candidateAncestor = candidateAncestor.getParent();
-            if( candidateAncestor.equals(left))
-                return -1;
-        }
-        // does one have a field that reference the other?
-        for( JsonNode refNode : left.getContent().findValues("$ref") ) {
-            String refText = refNode.asText();
-            Optional<URI> resolvedURI = safeResolve(left.getURI(), refText);
-            if( resolvedURI.isPresent() && resolvedURI.get().equals(right.getURI()))
-                return 1;
-        }
-        for( JsonNode refNode : right.getContent().findValues("$ref") ) {
-            String refText = refNode.asText();
-            Optional<URI> resolvedURI = safeResolve(right.getURI(), refText);
-            if( resolvedURI.isPresent() && resolvedURI.get().equals(left.getURI()))
-                return -1;
-        }
-        // does one have a field that reference a third schema that references the other?
-        for( JsonNode refNode : left.getContent().findValues("$ref") ) {
-            String refText = refNode.asText();
-            Optional<URI> possibleConnectorURI = safeResolve(left.getURI(), refText);
-            if( possibleConnectorURI.isPresent()) {
-                Optional<Schema> possibleConnector = getByUri(possibleConnectorURI.get());
-                if (possibleConnector.isPresent()) {
-                    for (JsonNode connectorRefNode : possibleConnector.get().getContent().findValues("$ref")) {
-                        String connectorRefText = connectorRefNode.asText();
-                        Optional<URI> resolvedURI = safeResolve(possibleConnector.get().getURI(), connectorRefText);
-                        if (resolvedURI.isPresent() && resolvedURI.get().equals(right.getURI()))
-                            return 1;
-                    }
-                }
-            }
-        }
-        for( JsonNode refNode : right.getContent().findValues("$ref") ) {
-            String refText = refNode.asText();
-            Optional<URI> possibleConnectorURI = safeResolve(right.getURI(), refText);
-            if( possibleConnectorURI.isPresent()) {
-                Optional<Schema> possibleConnector = getByUri(possibleConnectorURI.get());
-                if (possibleConnector.isPresent()) {
-                    for (JsonNode connectorRefNode : possibleConnector.get().getContent().findValues("$ref")) {
-                        String connectorRefText = connectorRefNode.asText();
-                        Optional<URI> resolvedURI = safeResolve(possibleConnector.get().getURI(), connectorRefText);
-                        if (resolvedURI.isPresent() && resolvedURI.get().equals(left.getURI()))
-                            return -1;
-                    }
-                }
-            }
-        }
-        return 0;
-    }
-
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/java/org/apache/streams/schema/SchemaUtil.java
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/java/org/apache/streams/schema/SchemaUtil.java b/streams-schemas/src/main/java/org/apache/streams/schema/SchemaUtil.java
deleted file mode 100644
index cefc5e8..0000000
--- a/streams-schemas/src/main/java/org/apache/streams/schema/SchemaUtil.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.apache.streams.schema;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.net.URI;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.Map;
-
-import static org.apache.commons.lang3.StringUtils.isEmpty;
-
-/**
- * Created by steve on 4/30/16.
- */
-public class SchemaUtil {
-
-    private final static Logger LOGGER = LoggerFactory.getLogger(SchemaUtil.class);
-    private static final JsonNodeFactory NODE_FACTORY = JsonNodeFactory.instance;
-    public static final String ILLEGAL_CHARACTER_REGEX = "[^0-9a-zA-Z_$]";
-
-    public static String childQualifiedName(String parentQualifiedName, String childSimpleName) {
-        String safeChildName = childSimpleName.replaceAll(ILLEGAL_CHARACTER_REGEX, "_");
-        return isEmpty(parentQualifiedName) ? safeChildName : parentQualifiedName + "." + safeChildName;
-    }
-
-    public static ObjectNode readSchema(URL schemaUrl) {
-
-        ObjectNode schemaNode = NODE_FACTORY.objectNode();
-        schemaNode.put("$ref", schemaUrl.toString());
-        return schemaNode;
-
-    }
-
-    public static ObjectNode mergeProperties(ObjectNode content, ObjectNode parent) {
-
-        ObjectNode merged = parent.deepCopy();
-        Iterator<Map.Entry<String, JsonNode>> fields = content.fields();
-        for( ; fields.hasNext(); ) {
-            Map.Entry<String, JsonNode> field = fields.next();
-            String fieldId = field.getKey();
-            merged.put(fieldId, field.getValue().deepCopy());
-        }
-        return merged;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/java/org/apache/streams/schema/URIUtil.java
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/java/org/apache/streams/schema/URIUtil.java b/streams-schemas/src/main/java/org/apache/streams/schema/URIUtil.java
deleted file mode 100644
index 04e8904..0000000
--- a/streams-schemas/src/main/java/org/apache/streams/schema/URIUtil.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.streams.schema;
-
-import com.google.common.base.Optional;
-import org.apache.commons.lang3.StringUtils;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-
-/**
- * Created by sblackmon on 5/1/16.
- */
-public class URIUtil {
-
-    public static URI removeFragment(URI id) {
-        return URI.create(StringUtils.substringBefore(id.toString(), "#"));
-    }
-
-    public static URI removeFile(URI id) {
-        return URI.create(StringUtils.substringBeforeLast(id.toString(), "/"));
-    }
-
-    public static Optional<URI> safeResolve(URI absolute, String relativePart) {
-        if( !absolute.isAbsolute()) return Optional.absent();
-        try {
-            return Optional.of(absolute.resolve(relativePart));
-        } catch( IllegalArgumentException e ) {
-            return Optional.absent();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/jsonschema/activity.json
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/jsonschema/activity.json b/streams-schemas/src/main/jsonschema/activity.json
deleted file mode 100644
index 2edd759..0000000
--- a/streams-schemas/src/main/jsonschema/activity.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
-    "$schema": "http://json-schema.org/draft-03/schema",
-    "$license": [
-        "http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0",
-        "http://www.apache.org/licenses/LICENSE-2.0"
-    ],
-    "id": "http://streams.incubator.apache.org/site/0.3-incubating-SNAPSHOT/streams-schemas/activity.json#",
-    "type": "object",
-    "title": "activity",
-    "javaInterfaces": ["java.io.Serializable"],
-    "description": "An activity construct recounts what an actor did to an object in the past. If there is no actor it simply describes the change.",
-    "additionalProperties": true,
-    "properties": {
-        "id": {
-            "type": "string",
-            "description": "Uniquely identifies each activity within the service",
-            "required": true
-        },
-        "actor": {
-            "type": "object",
-            "required": true,
-            "description": "Describes the entity that performed the activity. An activity MUST contain one actor property whose value is a single Object.",
-            "javaInterfaces": ["java.io.Serializable"],
-            "$ref": "./object.json"
-        },
-        "verb": {
-            "title": "verb",
-            "type": "string",
-            "default": "post",
-            "required": true,
-            "description": "Identifies the action that the activity describes. An activity MUST contain a verb property whose value is a JSON String that is non-empty and matches either the \"isegment-nz-nc\" or the \"IRI\" production in [RFC3987]. Note that the use of a relative reference other than a simple name is not allowed."
-        },
-        "object": {
-            "type": "object",
-            "required": true,
-            "description": "Describes the primary object of the activity. For instance, in the activity, \"John saved a movie to his wishlist\", the object of the activity is \"movie\". An activity SHOULD contain an object property whose value is a single Object. If the object property is not contained, the primary object of the activity MAY be implied by context.",
-            "$ref": "./object.json"
-        },
-        "target": {
-            "type": "object",
-            "description": "Describes the target of the activity. The precise meaning of the activity's target is dependent on the activities verb, but will often be the object the English preposition \"to\". For instance, in the activity, \"John saved a movie to his wishlist\", the target of the activity is \"wishlist\". The activity target MUST NOT be used to identity an indirect object that is not a target of the activity. An activity MAY contain a target property whose value is a single Object.",
-            "$ref": "./object.json"
-        },
-        "published": {
-            "type": "string",
-            "description": "The date and time at which the activity occurred. It is important to note that this is not necessarily the same as the time at which the activity was published. An activity MUST contain a postedTime property.",
-            "format": "date-time"
-        },
-        "updated": {
-            "type": "string",
-            "description": "The date and time at which a previously published activity has been modified. An Activity MAY contain an updatedTime property",
-            "format": "date-time"
-        },
-        "generator": {
-            "type": "object",
-            "description": "Describes the application that generated the activity. An activity MAY contain a generator property whose value is a single Object.",
-            "javaInterfaces": ["java.io.Serializable"],
-            "extends": {
-                "$ref": "./object.json"
-            }
-        },
-        "icon": {
-            "type": "object",
-            "description": "An IRI[RFC3987] identifying an image resource provides a visual representation of the activity, intended for human consumption. The image SHOULD have an aspect ratio of one (horizontal) to one (vertical) and SHOULD be suitable for presentation at a small size. An activity MAY have an icon property",
-            "javaInterfaces": ["java.io.Serializable"],
-            "extends": {
-                "$ref": "./media_link.json"
-            }
-        },
-        "provider": {
-            "type": "object",
-            "description": "Describes the application that published the activity. Note that this is not necessarily the same entity that generated the activity. An activity MAY contain a provider property whose value is a single Object",
-            "javaInterfaces": ["java.io.Serializable"],
-            "extends": {
-                "$ref": "./object.json"
-            }
-        },
-        "title": {
-            "type": "string",
-            "description": "Natural-language title or headline for the activity encoded as a single JSON String containing HTML markup. An activity MAY contain a title property",
-            "format": "html"
-        },
-        "content": {
-            "type": "string",
-            "description": "Natural-language description of the activity encoded as a single JSON String containing HTML markup. Visual elements such as thumbnail images MAY be included. An activity MAY contain a content property",
-            "format": "html"
-        },
-        "url": {
-            "type": "string",
-            "description": "An IRI [RFC3987] identifying a resource providing an HTML representation of the activity. An activity MAY contain a url property",
-            "format": "url"
-        },
-        "links": {
-            "type": "array",
-            "description": "Links between this object and other resources as defined in Web Linking",
-            "note": "Tell JSON schema team to not put links inside http://json-schema.org/hyper-schema#properties",
-            "items": {
-                "type": "string"
-            }
-        }
-    },
-    "links": [
-        {
-            "rel": "describedby",
-            "href": "./verbs/{verb}.json"
-        }
-    ]
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/jsonschema/collection.json
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/jsonschema/collection.json b/streams-schemas/src/main/jsonschema/collection.json
deleted file mode 100644
index 38f83e7..0000000
--- a/streams-schemas/src/main/jsonschema/collection.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-    "$schema": "http://json-schema.org/draft-03/schema",
-    "$license": [
-        "http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0",
-        "http://www.apache.org/licenses/LICENSE-2.0"
-    ],
-    "id": "http://streams.incubator.apache.org/site/0.3-incubating-SNAPSHOT/streams-schemas/collection.json#",
-    "type": "object",
-    "title": "collection",
-    "javaInterfaces": ["java.io.Serializable"],
-    "description": "A collection is a generic list of Objects of any object type. The objectType of each item in the collection MAY be omitted if the type of object can be established through context. The collection is used primarily as the root of an Activity Streams document, but can be used as the value of extension properties in a variety of situations. ",
-    "properties": {
-        "url": {
-            "type": "string",
-            "description": "An IRI [RFC3987] referencing a JSON document containing the full listing of objects in the collection."
-        },
-        "totalItems": {
-            "type": "integer",
-            "description": "Non-negative integer specifying the total number of activities within the stream. The Stream serialization MAY contain a count property."
-        },
-        "items": {
-            "type": "array",
-            "required": true,
-            "description": "An array containing a listing of Objects of any object type. If used in combination with the url property, the items array can be used to provide a subset of the objects that may be found in the resource identified by the url.",
-            "items": {
-                "type": "object",
-                "extends": {
-                    "$ref": "./object.json"
-                }
-            }
-        },
-        "links": {
-            "type": "array",
-            "optional": true,
-            "description": "Links between an this object and other resources as defined in Web Linking",
-            "extends": {
-                "$ref": "http://json-schema.org/links#properties"
-            }
-        }
-    },
-    "links": [
-        {
-            "rel": "describedby",
-            "href": "http://json-schema.org/schema"
-        }
-    ]
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/d9674f7c/streams-schemas/src/main/jsonschema/media_link.json
----------------------------------------------------------------------
diff --git a/streams-schemas/src/main/jsonschema/media_link.json b/streams-schemas/src/main/jsonschema/media_link.json
deleted file mode 100644
index e7eece0..0000000
--- a/streams-schemas/src/main/jsonschema/media_link.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-    "$schema": "http://json-schema.org/draft-03/schema",
-    "$license": [
-        "http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0",
-        "http://www.apache.org/licenses/LICENSE-2.0"
-    ],
-    "id": "http://streams.incubator.apache.org/site/0.3-incubating-SNAPSHOT/streams-schemas/media_link.json#",
-    "type": "object",
-    "title": "media_link",
-    "javaInterfaces": ["java.io.Serializable"],
-    "description": "Visual representation of an object in the form of an image, video or embedded HTML fragments",
-    "properties": {
-        "duration": {
-            "title": "duration",
-            "type": "number",
-            "description": "A hint to the consumer about the length, in seconds, of the media resource identified by the url property. A media link MAY contain a \"duration\" property when the target resource is a time-based media item such as an audio or video."
-        },
-        "height": {
-            "title": "height",
-            "type": "integer",
-            "description": "A hint to the consumer about the height, in pixels, of the media resource identified by the url property. A media link MAY contain a height property when the target resource is a visual media item such as an image, video or embeddable HTML page."
-        },
-        "width": {
-            "title": "width",
-            "type": "integer",
-            "description": "A hint to the consumer about the width, in pixels, of the media resource identified by the url property. A media link MAY contain a width property when the target resource is a visual media item such as an image, video or embeddable HTML page."
-        },
-        "url": {
-            "type": "string",
-            "required": true,
-            "description": "The IRI of the media resource being linked. A media link MUST have a url property."
-        }
-    }
-}