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."
-        }
-    }
-}


Reply via email to