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:53:40 UTC
[24/46] incubator-streams git commit: create streams-plugin-pojo
create streams-plugin-pojo
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/ded4ad68
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/ded4ad68
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/ded4ad68
Branch: refs/heads/STREAMS-389
Commit: ded4ad68d41c8b158fdca3f249a57055eab095f8
Parents: 50f67bf
Author: Steve Blackmon @steveblackmon <sb...@apache.org>
Authored: Mon Mar 28 08:32:00 2016 -0500
Committer: Steve Blackmon @steveblackmon <sb...@apache.org>
Committed: Wed Jun 1 12:49:27 2016 -0500
----------------------------------------------------------------------
pom.xml | 5 +
streams-plugins/pom.xml | 2 +-
streams-plugins/streams-plugin-hive/pom.xml | 5 +-
.../plugins/StreamsHiveResourceGenerator.java | 219 +++++++++++++++
.../StreamsHiveResourceGeneratorMojo.java | 68 +++++
.../apache/streams/plugins/StreamsPojoHive.java | 242 -----------------
.../streams/plugins/StreamsPojoHiveMojo.java | 71 -----
.../test/StreamsHiveResourceGeneratorTest.java | 55 ++++
.../plugins/test/StreamsPojoHiveTest.java | 55 ----
streams-plugins/streams-plugin-pojo/pom.xml | 239 ++++++++++++++++
.../plugins/StreamsPojoGenerationConfig.java | 198 ++++++++++++++
.../plugins/StreamsPojoSourceGeneratorMojo.java | 272 +++++++++++++++++++
.../test/StreamsPojoSourceGeneratorTest.java | 54 ++++
.../test/resources/streams-plugin-pojo/pom.xml | 42 +++
14 files changed, 1156 insertions(+), 371 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/ded4ad68/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2d79739..cb935af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -175,6 +175,7 @@
<!--<module>streams-osgi-components</module>-->
<module>streams-pojo</module>
<module>streams-pojo-extensions</module>
+ <module>streams-plugins</module>
<module>streams-runtimes</module>
<module>streams-testing</module>
<module>streams-util</module>
@@ -183,6 +184,10 @@
<packaging>pom</packaging>
+ <properties>
+ <jsonschema2pojo.version>0.4.22</jsonschema2pojo.version>
+ </properties>
+
<build>
<plugins>
<plugin>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/ded4ad68/streams-plugins/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/pom.xml b/streams-plugins/pom.xml
index 2306aab..390c8a0 100644
--- a/streams-plugins/pom.xml
+++ b/streams-plugins/pom.xml
@@ -36,7 +36,7 @@
</properties>
<modules>
- <module>streams-plugin-scala</module>
+ <module>streams-plugin-pojo</module>
</modules>
<dependencyManagement>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/ded4ad68/streams-plugins/streams-plugin-hive/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/pom.xml b/streams-plugins/streams-plugin-hive/pom.xml
index cbc055b..22d75ce 100644
--- a/streams-plugins/streams-plugin-hive/pom.xml
+++ b/streams-plugins/streams-plugin-hive/pom.xml
@@ -213,19 +213,20 @@
<version>2.4</version>
<executions>
<execution>
- <id>streams-pojo-resource-dependencies</id>
+ <id>resource-dependencies</id>
<phase>process-test-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeArtifactIds>streams-pojo</includeArtifactIds>
- <includes>org/apache/streams/pojo/json/**</includes>
+ <includes>**/*.json</includes>
<outputDirectory>${project.build.directory}/test-classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
+
</plugins>
</build>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/ded4ad68/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsHiveResourceGenerator.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsHiveResourceGenerator.java b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsHiveResourceGenerator.java
new file mode 100644
index 0000000..4edacf0
--- /dev/null
+++ b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsHiveResourceGenerator.java
@@ -0,0 +1,219 @@
+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.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 StreamsHiveResourceGenerator implements Runnable {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(StreamsHiveResourceGenerator.class);
+
+ private final static String LS = System.getProperty("line.separator");
+
+ private StreamsPojoHiveMojo mojo;
+
+ String inDir = "./target/test-classes/activities";
+ String outDir = "./target/generated-sources/hive";
+ String packages[] = {"org.apache.streams.pojo.json"};
+
+ public void main(String[] args) {
+ StreamsHiveResourceGenerator streamsHiveResourceGenerator = new StreamsHiveResourceGenerator();
+ 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 StreamsHiveResourceGenerator(StreamsPojoHiveMojo 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 &&
+ mojo.getPackages().length > 0
+ )
+ packages = mojo.getPackages();
+ }
+
+ public StreamsHiveResourceGenerator() {
+ }
+
+ 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());
+
+ }
+
+
+ for( Class clazz : pojoClasses ) {
+ String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".hive").replace(".","/")+"/";
+ String pojoName = clazz.getSimpleName()+".hql";
+ String pojoHive = renderPojo(clazz);
+ writeFile(outDir+"/"+pojoPath+pojoName, pojoHive);
+ }
+
+ }
+
+ private void writeFile(String pojoFile, String pojoHive) {
+ try {
+ File path = new File(pojoFile);
+ File dir = path.getParentFile();
+ if( !dir.exists() )
+ dir.mkdirs();
+ Files.write(Paths.get(pojoFile), pojoHive.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 String renderPojo(Class<?> pojoClass) {
+ StringBuffer stringBuffer = new StringBuffer();
+ stringBuffer.append("CREATE TABLE ");
+ stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".hive"));
+ stringBuffer.append(LS);
+ stringBuffer.append("(");
+ stringBuffer.append(LS);
+
+ Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
+ appendFields(stringBuffer, fields, "", ",");
+
+ stringBuffer.append(")");
+
+ 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();
+ stringBuffer.append(name(field));
+ stringBuffer.append(": ");
+ stringBuffer.append(type(field));
+ if( iter.hasNext()) stringBuffer.append(fieldDelimiter);
+ stringBuffer.append(LS);
+ }
+ } else {
+ stringBuffer.append(LS);
+ }
+ }
+
+ 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.lang.Integer.class)) {
+ return "INT";
+ } else if( field.getType().equals(org.joda.time.DateTime.class)) {
+ return "DATE";
+ }else if( field.getType().equals(java.util.Map.class)) {
+ return "MAP";
+ } else if( field.getType().equals(java.util.List.class)) {
+ return "ARRAY";
+ }
+ 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/ded4ad68/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsHiveResourceGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsHiveResourceGeneratorMojo.java b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsHiveResourceGeneratorMojo.java
new file mode 100644
index 0000000..1f8c782
--- /dev/null
+++ b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsHiveResourceGeneratorMojo.java
@@ -0,0 +1,68 @@
+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 = "hive",
+ defaultPhase = LifecyclePhase.GENERATE_SOURCES
+)
+@Execute( goal = "hive",
+ phase = LifecyclePhase.GENERATE_SOURCES
+)
+public class StreamsHiveResourceGeneratorMojo extends AbstractMojo {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(StreamsHiveResourceGeneratorMojo.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 {
+ StreamsHiveResourceGenerator streamsPojoScala = new StreamsHiveResourceGenerator(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/ded4ad68/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsPojoHive.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsPojoHive.java b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsPojoHive.java
deleted file mode 100644
index f8a00f7..0000000
--- a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsPojoHive.java
+++ /dev/null
@@ -1,242 +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.reflections.util.FilterBuilder;
-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 StreamsPojoHive implements Runnable {
-
- private final static Logger LOGGER = LoggerFactory.getLogger(StreamsPojoHive.class);
-
- private final static String LS = System.getProperty("line.separator");
-
- private StreamsPojoHiveMojo mojo;
-
- String outDir = "./target/generated-sources/hive";
- String packages[] = {"org.apache.streams.pojo.json"};
-
- private final Reflections reflections = new Reflections(
- new ConfigurationBuilder()
- .forPackages(packages)
- .filterInputsBy(new FilterBuilder().includePackage(packages))
- .setScanners(
- new SubTypesScanner(),
- new TypeAnnotationsScanner()));
-
- public void main(String[] args) {
- StreamsPojoHive streamsPojoScala = new StreamsPojoHive();
- 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 StreamsPojoHive(StreamsPojoHiveMojo 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 &&
- mojo.getPackages().length > 0
- )
- packages = mojo.getPackages();
- }
-
- public StreamsPojoHive() {
- }
-
- 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());
-
- }
-
-
- for( Class clazz : pojoClasses ) {
- String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".hive").replace(".","/")+"/";
- String pojoName = clazz.getSimpleName()+".hql";
- String pojoHive = renderPojo(clazz);
- writeFile(outDir+"/"+pojoPath+pojoName, pojoHive);
- }
-
- }
-
- private void writeFile(String pojoFile, String pojoHive) {
- try {
- File path = new File(pojoFile);
- File dir = path.getParentFile();
- if( !dir.exists() )
- dir.mkdirs();
- Files.write(Paths.get(pojoFile), pojoHive.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 String renderPojo(Class<?> pojoClass) {
- StringBuffer stringBuffer = new StringBuffer();
- stringBuffer.append("CREATE TABLE ");
- stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".hive"));
- stringBuffer.append(LS);
- stringBuffer.append("(");
- stringBuffer.append(LS);
-
- Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
- appendFields(stringBuffer, fields, "", ",");
-
- stringBuffer.append(")");
-
- 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();
- stringBuffer.append(name(field));
- stringBuffer.append(": ");
- stringBuffer.append(type(field));
- if( iter.hasNext()) stringBuffer.append(fieldDelimiter);
- stringBuffer.append(LS);
- }
- } else {
- stringBuffer.append(LS);
- }
- }
-
- 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.lang.Integer.class)) {
- return "INT";
- } else if( field.getType().equals(org.joda.time.DateTime.class)) {
- return "DATE";
- }else if( field.getType().equals(java.util.Map.class)) {
- return "MAP";
- } else if( field.getType().equals(java.util.List.class)) {
- return "ARRAY";
- }
- 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/ded4ad68/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsPojoHiveMojo.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsPojoHiveMojo.java b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsPojoHiveMojo.java
deleted file mode 100644
index a0af5ac..0000000
--- a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/StreamsPojoHiveMojo.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 = "hive",
- defaultPhase = LifecyclePhase.GENERATE_SOURCES
-)
-@Execute( goal = "hive",
- phase = LifecyclePhase.GENERATE_SOURCES
-)
-public class StreamsPojoHiveMojo extends AbstractMojo {
-
- private final static Logger LOGGER = LoggerFactory.getLogger(StreamsPojoHiveMojo.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 {
- StreamsPojoHive streamsPojoScala = new StreamsPojoHive(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/ded4ad68/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java
new file mode 100644
index 0000000..cd80cf8
--- /dev/null
+++ b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java
@@ -0,0 +1,55 @@
+package org.apache.streams.plugins.test;
+
+import org.apache.streams.plugins.StreamsHiveResourceGenerator;
+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 StreamsHiveResourceGeneratorTest {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(StreamsHiveResourceGeneratorTest.class);
+
+ /**
+ * Tests that all example activities can be loaded into Activity beans
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testStreamsPojoHive() throws Exception {
+ StreamsHiveResourceGenerator streamsHiveResourceGenerator = new StreamsHiveResourceGenerator();
+ streamsHiveResourceGenerator.main(new String[0]);
+
+ File testOutput = new File( "./target/generated-sources/hive/org/apache/streams/hive");
+ FileFilter hqlFilter = new FileFilter() {
+ @Override
+ public boolean accept(File pathname) {
+ if( pathname.getName().endsWith(".hql") )
+ return true;
+ return false;
+ }
+ };
+
+ assert( testOutput != null );
+ assert( testOutput.exists() == true );
+ assert( testOutput.isDirectory() == true );
+ assert( testOutput.listFiles(hqlFilter).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/ded4ad68/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsPojoHiveTest.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsPojoHiveTest.java b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsPojoHiveTest.java
deleted file mode 100644
index e5a7abd..0000000
--- a/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsPojoHiveTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.apache.streams.plugins.test;
-
-import org.apache.streams.plugins.StreamsPojoHive;
-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 StreamsPojoHiveTest {
-
- private final static Logger LOGGER = LoggerFactory.getLogger(StreamsPojoHiveTest.class);
-
- /**
- * Tests that all example activities can be loaded into Activity beans
- *
- * @throws Exception
- */
- @Test
- public void testStreamsPojoHive() throws Exception {
- StreamsPojoHive streamsPojoHive = new StreamsPojoHive();
- streamsPojoHive.main(new String[0]);
-
- File testOutput = new File( "./target/generated-sources/hive/org/apache/streams/hive");
- FileFilter hqlFilter = new FileFilter() {
- @Override
- public boolean accept(File pathname) {
- if( pathname.getName().endsWith(".hql") )
- return true;
- return false;
- }
- };
-
- assert( testOutput != null );
- assert( testOutput.exists() == true );
- assert( testOutput.isDirectory() == true );
- assert( testOutput.listFiles(hqlFilter).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/ded4ad68/streams-plugins/streams-plugin-pojo/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pojo/pom.xml b/streams-plugins/streams-plugin-pojo/pom.xml
new file mode 100644
index 0000000..399a371
--- /dev/null
+++ b/streams-plugins/streams-plugin-pojo/pom.xml
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.streams.plugins</groupId>
+ <artifactId>streams-plugin-pojo</artifactId>
+ <version>0.3-incubating-SNAPSHOT</version>
+ <packaging>maven-plugin</packaging>
+
+ <parent>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-plugins</artifactId>
+ <version>0.3-incubating-SNAPSHOT</version>
+ <relativePath>..</relativePath>
+ </parent>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-config</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-core</artifactId>
+ <version>${project.version}</version>
+ </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>org.jsonschema2pojo</groupId>
+ <artifactId>jsonschema2pojo-maven-plugin</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-pojo</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.reflections</groupId>
+ <artifactId>reflections</artifactId>
+ <version>0.9.9</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-aether-provider</artifactId>
+ <version>3.3.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>3.3.3</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-compat</artifactId>
+ <version>3.3.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>3.3.3</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>3.3.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.7</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>3.0.15</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>3.4</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>commons-logging</artifactId>
+ <groupId>commons-logging</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-tools-api</artifactId>
+ <version>3.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-tools-generators</artifactId>
+ <version>3.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-testing</groupId>
+ <artifactId>maven-plugin-testing-harness</artifactId>
+ <version>3.3.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.6</version>
+ </dependency>
+ <dependency>
+ <groupId>joda-time</groupId>
+ <artifactId>joda-time</artifactId>
+ <version>2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.joda</groupId>
+ <artifactId>joda-convert</artifactId>
+ <version>1.8.1</version>
+ </dependency>
+ </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>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>3.4</version>
+ <configuration>
+ <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+ </configuration>
+ <executions>
+ <execution>
+ <id>mojo-descriptor</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.reflections</groupId>
+ <artifactId>reflections-maven</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>reflections</goal>
+ </goals>
+ <phase>process-classes</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.4</version>
+ <executions>
+ <execution>
+ <id>resource-dependencies</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <configuration>
+ <includeArtifactIds>streams-pojo</includeArtifactIds>
+ <includes>**/*.json</includes>
+ <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/ded4ad68/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoGenerationConfig.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoGenerationConfig.java b/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoGenerationConfig.java
new file mode 100644
index 0000000..b42ccf9
--- /dev/null
+++ b/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoGenerationConfig.java
@@ -0,0 +1,198 @@
+package org.apache.streams.plugins;
+
+import org.jsonschema2pojo.AnnotationStyle;
+import org.jsonschema2pojo.Annotator;
+import org.jsonschema2pojo.GenerationConfig;
+import org.jsonschema2pojo.SourceType;
+import org.jsonschema2pojo.rules.RuleFactory;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.net.URL;
+import java.util.Iterator;
+
+/**
+ * Created by sblackmon on 3/27/16.
+ */
+public class StreamsPojoGenerationConfig implements GenerationConfig {
+
+ @Override
+ public boolean isGenerateBuilders() {
+ return false;
+ }
+
+ @Override
+ public boolean isUsePrimitives() {
+ return false;
+ }
+
+ @Override
+ public Iterator<URL> getSource() {
+ return null;
+ }
+
+ @Override
+ public File getTargetDirectory() {
+ return null;
+ }
+
+ @Override
+ public String getTargetPackage() {
+ return null;
+ }
+
+ @Override
+ public char[] getPropertyWordDelimiters() {
+ return new char[0];
+ }
+
+ @Override
+ public boolean isUseLongIntegers() {
+ return false;
+ }
+
+ @Override
+ public boolean isUseDoubleNumbers() {
+ return false;
+ }
+
+ @Override
+ public boolean isUseBigDecimals() {
+ return false;
+ }
+
+ @Override
+ public boolean isIncludeHashcodeAndEquals() {
+ return false;
+ }
+
+ @Override
+ public boolean isIncludeToString() {
+ return false;
+ }
+
+ @Override
+ public AnnotationStyle getAnnotationStyle() {
+ return null;
+ }
+
+ @Override
+ public Class<? extends Annotator> getCustomAnnotator() {
+ return null;
+ }
+
+ @Override
+ public Class<? extends RuleFactory> getCustomRuleFactory() {
+ return null;
+ }
+
+ @Override
+ public boolean isIncludeJsr303Annotations() {
+ return false;
+ }
+
+ @Override
+ public SourceType getSourceType() {
+ return null;
+ }
+
+ @Override
+ public boolean isRemoveOldOutput() {
+ return false;
+ }
+
+ @Override
+ public String getOutputEncoding() {
+ return null;
+ }
+
+ @Override
+ public boolean isUseJodaDates() {
+ return false;
+ }
+
+ @Override
+ public boolean isUseJodaLocalDates() {
+ return false;
+ }
+
+ @Override
+ public boolean isUseJodaLocalTimes() {
+ return false;
+ }
+
+ @Override
+ public boolean isUseCommonsLang3() {
+ return false;
+ }
+
+ @Override
+ public boolean isParcelable() {
+ return false;
+ }
+
+ @Override
+ public FileFilter getFileFilter() {
+ return null;
+ }
+
+ @Override
+ public boolean isInitializeCollections() {
+ return false;
+ }
+
+ @Override
+ public String getClassNamePrefix() {
+ return null;
+ }
+
+ @Override
+ public String getClassNameSuffix() {
+ return null;
+ }
+
+ @Override
+ public boolean isIncludeConstructors() {
+ return false;
+ }
+
+ @Override
+ public boolean isConstructorsRequiredPropertiesOnly() {
+ return false;
+ }
+
+ @Override
+ public boolean isIncludeAdditionalProperties() {
+ return false;
+ }
+
+ @Override
+ public boolean isIncludeAccessors() {
+ return false;
+ }
+
+ @Override
+ public String getTargetVersion() {
+ return null;
+ }
+
+ @Override
+ public boolean isIncludeDynamicAccessors() {
+ return false;
+ }
+
+ @Override
+ public String getDateTimeType() {
+ return null;
+ }
+
+ @Override
+ public String getDateType() {
+ return null;
+ }
+
+ @Override
+ public String getTimeType() {
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/ded4ad68/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java b/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java
new file mode 100644
index 0000000..8980daa
--- /dev/null
+++ b/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java
@@ -0,0 +1,272 @@
+package org.apache.streams.plugins;
+
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
+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.jsonschema2pojo.Jsonschema2Pojo;
+import org.jsonschema2pojo.maven.Jsonschema2PojoMojo;
+import org.jsonschema2pojo.maven.ProjectClasspath;
+import org.jsonschema2pojo.util.URLUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.apache.commons.lang.StringUtils.isNotBlank;
+
+@Mojo( name = "hive",
+ defaultPhase = LifecyclePhase.GENERATE_SOURCES
+)
+@Execute( goal = "hive",
+ phase = LifecyclePhase.GENERATE_SOURCES
+)
+public class StreamsPojoSourceGeneratorMojo extends AbstractMojo {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(StreamsPojoSourceGeneratorMojo.class);
+
+ @Component
+ public 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 )
+ public File basedir;
+
+ @Parameter( defaultValue = "${jsonschema2pojo.sourceDirectory}", readonly = true ) // Maven 3 only
+ public String sourceDirectory;
+
+ @Parameter( defaultValue = "${jsonschema2pojo.sourcePaths}", readonly = true ) // Maven 3 only
+ public String[] sourcePaths;
+
+ @Parameter(defaultValue = "${project.build.directory}", readonly = true)
+ public File target;
+
+ public void execute() throws MojoExecutionException {
+
+ addProjectDependenciesToClasspath();
+
+ // verify source directories
+ if (isNotBlank(sourceDirectory)) {
+ // verify sourceDirectory
+ try {
+ URLUtil.parseURL(sourceDirectory);
+ } catch (IllegalArgumentException e) {
+ throw new MojoExecutionException(e.getMessage(), e);
+ }
+ } else if (sourcePaths != null) {
+ // verify individual source paths
+ for (String source : sourcePaths) {
+ try {
+ URLUtil.parseURL(source);
+ } catch (IllegalArgumentException e) {
+ throw new MojoExecutionException(e.getMessage(), e);
+ }
+ }
+ } else {
+ throw new MojoExecutionException("One of sourceDirectory or sourcePaths must be provided");
+ }
+
+ try {
+ Jsonschema2Pojo.generate(new StreamsPojoGenerationConfig());
+ } catch (IOException e) {
+ throw new MojoExecutionException("Error generating classes from JSON Schema file(s) " + sourceDirectory, e);
+ }
+
+// 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());
+//
+// }
+//
+//
+// for( Class clazz : pojoClasses ) {
+// String pojoPath = clazz.getPackage().getName().replace(".pojo.json", ".hive").replace(".","/")+"/";
+// String pojoName = clazz.getSimpleName()+".hql";
+// String pojoHive = renderPojo(clazz);
+// writeFile(outDir+"/"+pojoPath+pojoName, pojoHive);
+// }
+
+ }
+
+ private void addProjectDependenciesToClasspath() {
+
+ try {
+
+ ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+ ClassLoader newClassLoader = new ProjectClasspath().getClassLoader(project, oldClassLoader, getLog());
+ Thread.currentThread().setContextClassLoader(newClassLoader);
+
+ } catch (DependencyResolutionRequiredException e) {
+ LOGGER.info("Skipping addition of project artifacts, there appears to be a dependecy resolution problem", e);
+ }
+
+ }
+
+ private void writeFile(String pojoFile, String pojoHive) {
+ try {
+ File path = new File(pojoFile);
+ File dir = path.getParentFile();
+ if( !dir.exists() )
+ dir.mkdirs();
+ Files.write(Paths.get(pojoFile), pojoHive.getBytes(), StandardOpenOption.CREATE_NEW);
+ } catch (Exception e) {
+ LOGGER.error("Write Exception: {}", e);
+ }
+ }
+
+ public Iterator<URL> getSource() {
+ if (null != sourceDirectory) {
+ return Collections.singleton(URLUtil.parseURL(sourceDirectory)).iterator();
+ }
+ List<URL> sourceURLs = new ArrayList<URL>();
+ for (String source : sourcePaths) {
+ sourceURLs.add(URLUtil.parseURL(source));
+ }
+ return sourceURLs.iterator();
+ }
+
+// 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 String renderPojo(Class<?> pojoClass) {
+// StringBuffer stringBuffer = new StringBuffer();
+// stringBuffer.append("CREATE TABLE ");
+// stringBuffer.append(pojoClass.getPackage().getName().replace(".pojo.json", ".hive"));
+// stringBuffer.append(LS);
+// stringBuffer.append("(");
+// stringBuffer.append(LS);
+//
+// Set<Field> fields = ReflectionUtils.getAllFields(pojoClass);
+// appendFields(stringBuffer, fields, "", ",");
+//
+// stringBuffer.append(")");
+//
+// 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();
+// stringBuffer.append(name(field));
+// stringBuffer.append(": ");
+// stringBuffer.append(type(field));
+// if( iter.hasNext()) stringBuffer.append(fieldDelimiter);
+// stringBuffer.append(LS);
+// }
+// } else {
+// stringBuffer.append(LS);
+// }
+// }
+//
+// 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.lang.Integer.class)) {
+// return "INT";
+// } else if( field.getType().equals(org.joda.time.DateTime.class)) {
+// return "DATE";
+// }else if( field.getType().equals(java.util.Map.class)) {
+// return "MAP";
+// } else if( field.getType().equals(java.util.List.class)) {
+// return "ARRAY";
+// }
+// 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;
+// }
+// }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/ded4ad68/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorTest.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorTest.java b/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorTest.java
new file mode 100644
index 0000000..63d4995
--- /dev/null
+++ b/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorTest.java
@@ -0,0 +1,54 @@
+package org.apache.streams.plugins.test;
+
+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 StreamsPojoSourceGeneratorTest {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(StreamsPojoSourceGeneratorTest.class);
+
+ /**
+ * Tests that all example activities can be loaded into Activity beans
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testStreamsPojoSourceGenerator() throws Exception {
+// StreamsPojoSourceGenerator streamsPojoSourceGenerator = new StreamsPojoSourceGenerator();
+// StreamsPojoSourceGenerator.main(new String[0]);
+
+ File testOutput = new File( "./target/generated-sources/streams-pojo");
+ FileFilter javaFilter = new FileFilter() {
+ @Override
+ public boolean accept(File pathname) {
+ if( pathname.getName().endsWith(".java") )
+ return true;
+ return false;
+ }
+ };
+
+ assert( testOutput != null );
+ assert( testOutput.exists() == true );
+ assert( testOutput.isDirectory() == true );
+ assert( testOutput.listFiles(javaFilter).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(testO`utput + "/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/ded4ad68/streams-plugins/streams-plugin-pojo/src/test/resources/streams-plugin-pojo/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pojo/src/test/resources/streams-plugin-pojo/pom.xml b/streams-plugins/streams-plugin-pojo/src/test/resources/streams-plugin-pojo/pom.xml
new file mode 100644
index 0000000..b1de7b8
--- /dev/null
+++ b/streams-plugins/streams-plugin-pojo/src/test/resources/streams-plugin-pojo/pom.xml
@@ -0,0 +1,42 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.streams.plugins</groupId>
+ <artifactId>streams-plugin-hive-test</artifactId>
+ <version>0.3-incubating-SNAPSHOT</version>
+ <packaging>jar</packaging>
+ <name>Test StreamsPojoHiveMojo</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.streams.plugins</groupId>
+ <artifactId>streams-plugin-hive</artifactId>
+ <version>0.3-incubating-SNAPSHOT</version>
+ <configuration>
+ <packages>
+ <package>org.apache.streams.pojo.json</package>
+ </packages>
+ <target>target/test-classes/streams-hive-plugin/</target>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>hive</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file