You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rya.apache.org by pu...@apache.org on 2016/12/15 18:39:59 UTC
[05/10] incubator-rya git commit: RYA-125 Export tool API in RYA (#10)
RYA-125 Export tool API in RYA (#10)
This contains the interfaces and api for the new export tool.
Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/24c71838
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/24c71838
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/24c71838
Branch: refs/heads/master
Commit: 24c718380194d2f0a3f3968e6ff8a9923a2ef616
Parents: 8484bbc
Author: Andrew Smith <sm...@gmail.com>
Authored: Thu Sep 1 16:03:31 2016 -0400
Committer: isper3at <sm...@gmail.com>
Committed: Wed Nov 2 17:51:18 2016 -0400
----------------------------------------------------------------------
extras/rya.export/export.api/pom.xml | 333 +++++++++++++
extras/rya.export/export.api/src/gen/.gitignore | 1 +
.../java/org/apache/rya/export/api/Merger.java | 34 ++
.../apache/rya/export/api/MergerException.java | 58 +++
.../apache/rya/export/api/StatementMerger.java | 37 ++
.../export/api/conf/ConfigurationAdapter.java | 46 ++
.../rya/export/api/conf/MergeConfiguration.java | 464 +++++++++++++++++++
.../api/conf/MergeConfigurationException.java | 34 ++
.../export/api/parent/MergeParentMetadata.java | 137 ++++++
.../ParentMetadataDoesNotExistException.java | 35 ++
.../api/parent/ParentMetadataException.java | 35 ++
.../parent/ParentMetadataExistsException.java | 35 ++
.../api/parent/ParentMetadataRepository.java | 43 ++
.../export/api/store/AddStatementException.java | 46 ++
.../api/store/ContainsStatementException.java | 47 ++
.../api/store/FetchStatementException.java | 46 ++
.../api/store/RemoveStatementException.java | 46 ++
.../rya/export/api/store/RyaStatementStore.java | 74 +++
.../api/store/RyaStatementStoreDecorator.java | 67 +++
.../api/store/StatementStoreException.java | 45 ++
.../api/store/UpdateStatementException.java | 47 ++
.../src/main/xsd/MergeConfiguration.xsd | 80 ++++
extras/rya.export/pom.xml | 3 +-
23 files changed, 1792 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/pom.xml
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/pom.xml b/extras/rya.export/export.api/pom.xml
new file mode 100644
index 0000000..d0f88ee
--- /dev/null
+++ b/extras/rya.export/export.api/pom.xml
@@ -0,0 +1,333 @@
+<?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
+with the License. You may obtain a copy of the License at
+
+ 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">
+
+ <parent>
+ <groupId>org.apache.rya</groupId>
+ <artifactId>rya.export.parent</artifactId>
+ <version>3.2.10-SNAPSHOT</version>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>rya.export.api</artifactId>
+
+ <name>Apache Rya Export API</name>
+ <description>
+ This module contains the Rya Export API. It consists of classes
+ that allow other applications to import and export statements.
+ </description>
+
+ <dependencies>
+ <!-- Rya Runtime Dependencies. -->
+ <dependency>
+ <groupId>org.apache.rya</groupId>
+ <artifactId>rya.sail</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.2</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.rya</groupId>
+ <artifactId>mongodb.rya</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.4.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.4.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jaxb</groupId>
+ <artifactId>jaxb-xjc</artifactId>
+ <version>2.2.11</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <!--
+ If we e.g. execute on JDK 1.7, we should compile for Java 7 to get
+ the same (or higher) JAXB API version as used during the xjc execution.
+ -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <version>2.19.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jaxb2-maven-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <id>xjc</id>
+ <goals>
+ <goal>xjc</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <sources>
+ <source>src/main/xsd/MergeConfiguration.xsd</source>
+ </sources>
+ <packageName>org.apache.rya.export</packageName>
+ <outputDirectory>src/gen/java</outputDirectory>
+ </configuration>
+ </plugin>
+
+ <!--
+ Create shaded jar with all the dependencies
+ -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>2.4.3</version>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <transformers>
+ <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+ <manifestEntries>
+ <!--<Main-Class>mvm.rya.accumulo.mr.merge.MergeTool</Main-Class>-->
+ </manifestEntries>
+ </transformer>
+ </transformers>
+ <artifactSet>
+ <excludes>
+ <exclude>org.apache.accumulo:accumulo-native</exclude>
+ </excludes>
+ </artifactSet>
+ <filters>
+ <filter>
+ <artifact>*:*</artifact>
+ <excludes>
+ <exclude>META-INF/*.SF</exclude>
+ <exclude>META-INF/*.DSA</exclude>
+ <exclude>META-INF/*.RSA</exclude>
+ </excludes>
+ </filter>
+ </filters>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ <!--
+ Creates the lib directory with all the dependencies
+ -->
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>install</phase>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/lib</outputDirectory>
+ <overWriteReleases>false</overWriteReleases>
+ <overWriteSnapshots>false</overWriteSnapshots>
+ <overWriteIfNewer>true</overWriteIfNewer>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ <!--
+ Creates the rya.merger-*.jar
+ -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addClasspath>true</addClasspath>
+ <classpathPrefix>lib</classpathPrefix>
+ <!--Removing main-class from manifest so hadoop command will be able to call multiple main classes-->
+ <!--<mainClass>mvm.rya.accumulo.mr.merge.MergeTool</mainClass>-->
+ </manifest>
+ <manifestEntries>
+ <Built-By></Built-By>
+ <Class-Path>lib/</Class-Path>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ </plugin>
+
+ <!--
+ Copies all needed files into target/distribution/rya.merger-${version}
+ -->
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.7</version>
+ <executions>
+ <execution>
+ <id>copy-resource-bin</id>
+ <phase>install</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/distribution/${artifactId}-${version}/bin</outputDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}/startup_scripts</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-resource-config</id>
+ <phase>install</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/distribution/${artifactId}-${version}/config</outputDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}/config</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-resource-lib</id>
+ <phase>install</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/distribution/${artifactId}-${version}/lib</outputDirectory>
+ <resources>
+ <resource>
+ <directory>${project.build.directory}/lib</directory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-resource-jar</id>
+ <phase>install</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/distribution/${artifactId}-${version}/</outputDirectory>
+ <resources>
+ <resource>
+ <directory>${project.build.directory}</directory>
+ <includes>
+ <include>rya.merger-*.jar</include>
+ <include>README.md</include>
+ </includes>
+ <excludes>
+ <exclude>rya.merger-*-shaded.jar</exclude>
+ <exclude>rya.merger-*-sources.jar</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-resource-readme</id>
+ <phase>install</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/distribution/${artifactId}-${version}/</outputDirectory>
+ <resources>
+ <resource>
+ <directory>${basedir}</directory>
+ <includes>
+ <include>README.md</include>
+ </includes>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/gen/.gitignore
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/gen/.gitignore b/extras/rya.export/export.api/src/gen/.gitignore
new file mode 100644
index 0000000..1e574a9
--- /dev/null
+++ b/extras/rya.export/export.api/src/gen/.gitignore
@@ -0,0 +1 @@
+/java/
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/Merger.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/Merger.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/Merger.java
new file mode 100644
index 0000000..ce3e9d7
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/Merger.java
@@ -0,0 +1,34 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Performs the merging of {@link RyaStatement}s.
+ * <p>
+ * When merging statements, both the parent and child
+ * databases may have changed since the initial export.
+ */
+public interface Merger {
+ /**
+ * Performs the merging of {@link RyaStatement}s.
+ */
+ public void runJob();
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/MergerException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/MergerException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/MergerException.java
new file mode 100644
index 0000000..8b1c80d
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/MergerException.java
@@ -0,0 +1,58 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api;
+
+/**
+ * An exception to be used when there is a problem running the Merge Tool.
+ */
+public class MergerException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new instance of {@link MergerException}.
+ */
+ public MergerException() {
+ super();
+ }
+
+ /**
+ * Creates a new instance of {@link MergerException}.
+ * @param message the detail message.
+ */
+ public MergerException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new instance of {@link MergerException}.
+ * @param message the detail message.
+ * @param throwable the {@link Throwable} source.
+ */
+ public MergerException(final String message, final Throwable source) {
+ super(message, source);
+ }
+
+ /**
+ * Creates a new instance of {@link MergerException}.
+ * @param source the {@link Throwable} source.
+ */
+ public MergerException(final Throwable source) {
+ super(source);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/StatementMerger.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/StatementMerger.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/StatementMerger.java
new file mode 100644
index 0000000..2737752
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/StatementMerger.java
@@ -0,0 +1,37 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api;
+
+import com.google.common.base.Optional;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Defines how 2 {@link RyaStatement}s will merge.
+ */
+public interface StatementMerger {
+ /**
+ * Merges the child statement into the parent statement.
+ * @param parent - The parent {@link RyaStatement}.
+ * @param child - The child {@link RyaStatement}
+ * @return The merged {@link RyaStatement}.
+ * @throws MergerException
+ */
+ public Optional<RyaStatement> merge(final Optional<RyaStatement> parent, Optional<RyaStatement> child) throws MergerException;
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/ConfigurationAdapter.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/ConfigurationAdapter.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/ConfigurationAdapter.java
new file mode 100644
index 0000000..39c4e0b
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/ConfigurationAdapter.java
@@ -0,0 +1,46 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.conf;
+
+import org.apache.rya.export.JAXBMergeConfiguration;
+import org.apache.rya.export.api.conf.MergeConfiguration.Builder;
+
+/**
+ * Helper for creating the immutable application configuration.
+ */
+public class ConfigurationAdapter {
+ /**
+ * @param jConfig - The JAXB generated configuration.
+ * @return The {@link MergeConfiguration} used in the application
+ * @throws MergeConfigurationException
+ */
+ public static MergeConfiguration createConfig(final JAXBMergeConfiguration jConfig) throws MergeConfigurationException {
+ final Builder configBuilder = new Builder()
+ .setParentHostname(jConfig.getParentHostname())
+ .setParentRyaInstanceName(jConfig.getParentRyaInstanceName())
+ .setParentDBType(jConfig.getParentDBType())
+ .setParentPort(jConfig.getParentPort())
+ .setChildHostname(jConfig.getChildHostname())
+ .setChildRyaInstanceName(jConfig.getChildRyaInstanceName())
+ .setChildDBType(jConfig.getChildDBType())
+ .setChildPort(jConfig.getChildPort())
+ .setMergePolicy(jConfig.getMergePolicy());
+ return configBuilder.build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/MergeConfiguration.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/MergeConfiguration.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/MergeConfiguration.java
new file mode 100644
index 0000000..dd6fd89
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/MergeConfiguration.java
@@ -0,0 +1,464 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.conf;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.apache.http.annotation.Immutable;
+import org.apache.rya.export.DBType;
+import org.apache.rya.export.MergePolicy;
+
+/**
+ * Immutable configuration object to allow the MergeTool to connect to the parent and child
+ * databases for data merging.
+ */
+@Immutable
+public class MergeConfiguration {
+ /**
+ * Information needed to connect to the parent database
+ */
+ private final String parentHostname;
+ private final String parentUsername;
+ private final String parentPassword;
+ private final String parentRyaInstanceName;
+ private final String parentTablePrefix;
+ private final String parentTomcatUrl;
+ private final DBType parentDBType;
+ private final int parentPort;
+
+ /**
+ * Information needed to connect to the child database
+ */
+ private final String childHostname;
+ private final String childUsername;
+ private final String childPassword;
+ private final String childRyaInstanceName;
+ private final String childTablePrefix;
+ private final String childTomcatUrl;
+ private final DBType childDBType;
+ private final int childPort;
+
+ private final MergePolicy mergePolicy;
+
+ private final boolean useNtpServer;
+ private final String ntpServerHost;
+ private final String toolStartTime;
+
+ /**
+ * Constructs a {@link MergeConfiguration}.
+ */
+ protected MergeConfiguration(final Builder builder) throws MergeConfigurationException {
+ try {
+ parentHostname = checkNotNull(builder.parentHostname);
+ parentUsername = checkNotNull(builder.parentUsername);
+ parentPassword = checkNotNull(builder.parentPassword);
+ parentRyaInstanceName = checkNotNull(builder.parentRyaInstanceName);
+ parentTablePrefix = checkNotNull(builder.parentTablePrefix);
+ parentTomcatUrl = checkNotNull(builder.parentTomcatUrl);
+ parentDBType = checkNotNull(builder.parentDBType);
+ parentPort = checkNotNull(builder.parentPort);
+ childHostname = checkNotNull(builder.childHostname);
+ childUsername = checkNotNull(builder.childUsername);
+ childPassword = checkNotNull(builder.childPassword);
+ childRyaInstanceName = checkNotNull(builder.childRyaInstanceName);
+ childTablePrefix = checkNotNull(builder.childTablePrefix);
+ childTomcatUrl = checkNotNull(builder.childTomcatUrl);
+ childDBType = checkNotNull(builder.childDBType);
+ childPort = checkNotNull(builder.childPort);
+ mergePolicy = checkNotNull(builder.mergePolicy);
+ useNtpServer = checkNotNull(builder.useNtpServer);
+ ntpServerHost = checkNotNull(builder.ntpServerHost);
+ toolStartTime = checkNotNull(builder.toolStartTime);
+ } catch(final NullPointerException npe) {
+ //fix this.
+ throw new MergeConfigurationException("The configuration was missing required field(s)", npe);
+ }
+ }
+
+ /**
+ * @return the hostname of the parent.
+ */
+ public String getParentHostname() {
+ return parentHostname;
+ }
+
+ /**
+ * @return the username of the parent.
+ */
+ public String getParentUsername() {
+ return parentUsername;
+ }
+
+ /**
+ * @return the password of the parent.
+ */
+ public String getParentPassword() {
+ return parentPassword;
+ }
+
+ /**
+ * @return the Rya Instance Name of the parent.
+ */
+ public String getParentRyaInstanceName() {
+ return parentRyaInstanceName;
+ }
+
+ /**
+ * @return the Rya table prefix of the parent.
+ */
+ public String getParentTablePrefix() {
+ return parentTablePrefix;
+ }
+
+ /**
+ * @return The URL of the Apache Tomcat server web page running on the parent machine.
+ */
+ public String getParentTomcatUrl() {
+ return parentTomcatUrl;
+ }
+
+ /**
+ * @return the Database Type of the parent.
+ */
+ public DBType getParentDBType() {
+ return parentDBType;
+ }
+
+ /**
+ * @return the port of the parent.
+ */
+ public int getParentPort() {
+ return parentPort;
+ }
+
+ /**
+ * @return the hostname of the child.
+ */
+ public String getChildHostname() {
+ return childHostname;
+ }
+
+ /**
+ * @return the username of the child.
+ */
+ public String getChildUsername() {
+ return childUsername;
+ }
+
+ /**
+ * @return the password of the child.
+ */
+ public String getChildPassword() {
+ return childPassword;
+ }
+
+ /**
+ * @return the Rya Instance Name of the child.
+ */
+ public String getChildRyaInstanceName() {
+ return childRyaInstanceName;
+ }
+
+ /**
+ * @return the Rya table prefix of the child.
+ */
+ public String getChildTablePrefix() {
+ return childTablePrefix;
+ }
+
+ /**
+ * @return The URL of the Apache Tomcat server web page running on the child machine.
+ */
+ public String getChildTomcatUrl() {
+ return childTomcatUrl;
+ }
+
+ /**
+ * @return the Database Type of the child.
+ */
+ public DBType getChildDBType() {
+ return childDBType;
+ }
+
+ /**
+ * @return the port of the child.
+ */
+ public int getChildPort() {
+ return childPort;
+ }
+
+ /**
+ * @return the policy to use when merging data.
+ */
+ public MergePolicy getMergePolicy() {
+ return mergePolicy;
+ }
+
+ /**
+ * @return {@code true} to use the NTP server to handle time synchronization.
+ * {@code false} to not use the NTP server.
+ */
+ public Boolean getUseNtpServer() {
+ return useNtpServer;
+ }
+
+ /**
+ * @return The host name of the time server to use.
+ */
+ public String getNtpServerHost() {
+ return ntpServerHost;
+ }
+
+ /**
+ * @return The time of the data to be included in the copy/merge process.
+ */
+ public String getToolStartTime() {
+ return toolStartTime;
+ }
+
+ /**
+ * Abstract builder to help create {@link MergeConfiguration}s.
+ */
+ public abstract static class AbstractBuilder<T extends AbstractBuilder<T>> {
+ /**
+ * @return The {@link MergeConfiguration} based on this builder.
+ * @throws MergeConfigurationException
+ * @throws NullPointerException if any field as not been provided
+ */
+ public abstract MergeConfiguration build() throws MergeConfigurationException;
+ }
+
+ /**
+ * Builder to help create {@link MergeConfiguration}s.
+ */
+ public static class Builder extends AbstractBuilder<Builder> {
+ private String parentHostname;
+ private String parentUsername;
+ private String parentPassword;
+ private String parentRyaInstanceName;
+ private String parentTablePrefix;
+ private String parentTomcatUrl;
+ private DBType parentDBType;
+ private Integer parentPort;
+
+ private String childHostname;
+ private String childUsername;
+ private String childPassword;
+ private String childRyaInstanceName;
+ private String childTablePrefix;
+ private String childTomcatUrl;
+ private DBType childDBType;
+ private Integer childPort;
+
+ private MergePolicy mergePolicy;
+
+ private Boolean useNtpServer;
+ private String ntpServerHost;
+ private String toolStartTime;
+
+ /**
+ * @param hostname - the hostname of the parent.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setParentHostname(final String hostname) {
+ parentHostname = hostname;
+ return this;
+ }
+
+ /**
+ * @param username - the username of the parent.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setParentUsername(final String username) {
+ parentUsername = username;
+ return this;
+ }
+
+ /**
+ * @param password - the password of the parent.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setParentPassword(final String password) {
+ parentPassword = password;
+ return this;
+ }
+
+ /**
+ * @param ryaInstanceName - the Rya Instance Name of the parent.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setParentRyaInstanceName(final String ryaInstanceName) {
+ parentRyaInstanceName = ryaInstanceName;
+ return this;
+ }
+
+ /**
+ * @param tablePrefix - the Rya table prefix of the parent.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setParentTablePrefix(final String tablePrefix) {
+ parentTablePrefix = tablePrefix;
+ return this;
+ }
+
+ /**
+ * @param tomcatUrl - The URL of the Apache Tomcat server web page
+ * running on the parent machine.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setParentTomcatUrl(final String tomcatUrl) {
+ parentTomcatUrl = tomcatUrl;
+ return this;
+ }
+
+ /**
+ * @param dbType - the Database Type of the parent.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setParentDBType(final DBType dbType) {
+ parentDBType = dbType;
+ return this;
+ }
+
+ /**
+ * @param port - the port of the parent.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setParentPort(final Integer port) {
+ parentPort = port;
+ return this;
+ }
+
+ /**
+ * @param hostname - the hostname of the child.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setChildHostname(final String hostname) {
+ childHostname = hostname;
+ return this;
+ }
+
+ /**
+ * @param username - the username of the child.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setChildUsername(final String username) {
+ childUsername = username;
+ return this;
+ }
+
+ /**
+ * @param password - the password of the child.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setChildPassword(final String password) {
+ childPassword = password;
+ return this;
+ }
+
+ /**
+ * @param ryaInstanceName - the Rya Instance Name of the child.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setChildRyaInstanceName(final String ryaInstanceName) {
+ childRyaInstanceName = ryaInstanceName;
+ return this;
+ }
+
+ /**
+ * @param tablePrefix - the Rya table prefix of the child.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setChildTablePrefix(final String tablePrefix) {
+ childTablePrefix = tablePrefix;
+ return this;
+ }
+
+ /**
+ * @param tomcatUrl -s The URL of the Apache Tomcat server web page
+ * running on the child machine.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setChildTomcatUrl(final String tomcatUrl) {
+ childTomcatUrl = tomcatUrl;
+ return this;
+ }
+
+ /**
+ * @param dbType - the Database Type of the child.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setChildDBType(final DBType dbType) {
+ childDBType = dbType;
+ return this;
+ }
+
+ /**
+ * @param port - the port of the child.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setChildPort(final Integer port) {
+ childPort = port;
+ return this;
+ }
+
+ /**
+ * @param mergePolicy - the policy to use when merging data.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setMergePolicy(final MergePolicy mergePolicy) {
+ this.mergePolicy = mergePolicy;
+ return this;
+ }
+
+ /**
+ * @param useNtpServer - {@code true} to use the NTP server to handle
+ * time synchronization. {@code false} to not use the NTP server.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setUseNtpServer(final Boolean useNtpServer) {
+ this.useNtpServer = useNtpServer;
+ return this;
+ }
+
+ /**
+ * @param ntpServerHost - The host name of the time server to use.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setNtpServerHost(final String ntpServerHost) {
+ this.ntpServerHost = ntpServerHost;
+ return this;
+ }
+
+ /**
+ * @param toolStartTime - The time of the data to be included in the
+ * copy/merge process.
+ * @return the updated {@link Builder}.
+ */
+ public Builder setToolStartTime(final String toolStartTime) {
+ this.toolStartTime = toolStartTime;
+ return this;
+ }
+
+ @Override
+ public MergeConfiguration build() throws MergeConfigurationException {
+ return new MergeConfiguration(this);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/MergeConfigurationException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/MergeConfigurationException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/MergeConfigurationException.java
new file mode 100644
index 0000000..7e099e1
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/conf/MergeConfigurationException.java
@@ -0,0 +1,34 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.conf;
+
+/**
+ * An exception to be used when there is a problem configuring the Merge Tool.
+ */
+public class MergeConfigurationException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ public MergeConfigurationException(final String message) {
+ super(message);
+ }
+
+ public MergeConfigurationException(final String message, final Throwable source) {
+ super(message, source);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/MergeParentMetadata.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/MergeParentMetadata.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/MergeParentMetadata.java
new file mode 100644
index 0000000..2401adf
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/MergeParentMetadata.java
@@ -0,0 +1,137 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.parent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Date;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * The parent database identifying information. Use the {@link ParentMetadataRepository}
+ * to retrieve this information
+ */
+public class MergeParentMetadata {
+ private final String ryaInstanceName;
+ private final Date timestamp;
+ private final Date filterTimestamp;
+ private final Long parentTimeOffset;
+
+ /**
+ * Creates a new {@link MergeParentMetadata}.
+ * @param ryaInstanceName - The Rya Instance Name of the parent database.
+ * @param timestamp - The timestamp of when the copy tool ran.
+ * @param filterTimestamp - The timestamp used by the copy tool to filter
+ * which data was included when copying.
+ * @param parentTimeOffset - The parent time offset metadata key for the
+ * table.
+ */
+ public MergeParentMetadata(final String ryaInstanceName, final Date timestamp, final Date filterTimestamp, final Long parentTimeOffset) {
+ this.ryaInstanceName = checkNotNull(ryaInstanceName);
+ this.timestamp = checkNotNull(timestamp);
+ this.filterTimestamp = filterTimestamp;
+ this.parentTimeOffset = checkNotNull(parentTimeOffset);
+ }
+
+ /**
+ * @return - The Rya Instance Name of the parent database.
+ */
+ public String getRyaInstanceName() {
+ return ryaInstanceName;
+ }
+
+ /**
+ * @return - The timestamp of when the copy tool ran.
+ */
+ public Date getTimestamp() {
+ return timestamp;
+ }
+
+ /**
+ * @return - The timestamp used by the copy tool to filter which data was
+ * included when copying.
+ */
+ public Date getFilterTimestamp() {
+ return filterTimestamp;
+ }
+
+ /**
+ * @return - The parent time offset metadata key for the table.
+ */
+ public Long getParentTimeOffset() {
+ return parentTimeOffset;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if(!(obj instanceof MergeParentMetadata)) {
+ return false;
+ }
+ final MergeParentMetadata other = (MergeParentMetadata) obj;
+ final EqualsBuilder builder = new EqualsBuilder()
+ .append(getRyaInstanceName(), other.getRyaInstanceName())
+ .append(getTimestamp(), other.getTimestamp())
+ .append(getFilterTimestamp(), other.getFilterTimestamp())
+ .append(getParentTimeOffset(), other.getParentTimeOffset());
+ return builder.isEquals();
+ }
+
+ @Override
+ public int hashCode() {
+ final HashCodeBuilder builder = new HashCodeBuilder()
+ .append(getRyaInstanceName())
+ .append(getTimestamp())
+ .append(getFilterTimestamp())
+ .append(getParentTimeOffset());
+ return builder.toHashCode();
+ }
+
+ public static class Builder {
+ private String name;
+ private Date timestamp;
+ private Date filterTimestamp;
+ private Long parentTimeOffset;
+
+ public Builder setRyaInstanceName(final String name) {
+ this.name = checkNotNull(name);
+ return this;
+ }
+
+ public Builder setTimestamp(final Date timestamp) {
+ this.timestamp = checkNotNull(timestamp);
+ return this;
+ }
+
+ public Builder setFilterTimestmap(final Date filterTimestamp) {
+ this.filterTimestamp = checkNotNull(filterTimestamp);
+ return this;
+ }
+
+ public Builder setParentTimeOffset(final Long parentTimeOffset) {
+ this.parentTimeOffset = parentTimeOffset;
+ return this;
+ }
+
+ public MergeParentMetadata build() {
+ return new MergeParentMetadata(name, timestamp, filterTimestamp, parentTimeOffset);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataDoesNotExistException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataDoesNotExistException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataDoesNotExistException.java
new file mode 100644
index 0000000..f6f691c
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataDoesNotExistException.java
@@ -0,0 +1,35 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.parent;
+
+/**
+ * Thrown when the {@link ParentMetadataRepository} attempts to fetch
+ * the {@link MergeParentMetadata} and it does not exist. /
+ */
+public class ParentMetadataDoesNotExistException extends ParentMetadataException {
+ private static final long serialVersionUID = 1L;
+
+ public ParentMetadataDoesNotExistException(final String message) {
+ super(message);
+ }
+
+ public ParentMetadataDoesNotExistException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataException.java
new file mode 100644
index 0000000..e3645b7
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataException.java
@@ -0,0 +1,35 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.parent;
+
+/**
+ * Thrown when the {@link ParentMetadataRepository} attempts to fetch
+ * the {@link MergeParentMetadata} and it does not exist.
+ */
+class ParentMetadataException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ public ParentMetadataException(final String message) {
+ super(message);
+ }
+
+ public ParentMetadataException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataExistsException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataExistsException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataExistsException.java
new file mode 100644
index 0000000..6ff63dc
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataExistsException.java
@@ -0,0 +1,35 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.parent;
+
+/**
+ * Thrown when the {@link ParentMetadataRepository} attempts to set the
+ * {@link MergeParentMetadata} and it already exists.
+ */
+public class ParentMetadataExistsException extends ParentMetadataException {
+ private static final long serialVersionUID = 1L;
+
+ public ParentMetadataExistsException(final String message) {
+ super(message);
+ }
+
+ public ParentMetadataExistsException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataRepository.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataRepository.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataRepository.java
new file mode 100644
index 0000000..c5ab665
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/parent/ParentMetadataRepository.java
@@ -0,0 +1,43 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.parent;
+
+/**
+ * Repository for metadata pertaining to the parent database. This will contain
+ * all information to identify where any data was exported from.
+ * <p>
+ * The data found here is:
+ * <li>Parent database Rya Instance Name</li>
+ * <li>Timestamp used as the lower cutoff for the export</li>
+ */
+public interface ParentMetadataRepository {
+ /**
+ * @return The metadata for identifying the parent.
+ * @throws ParentMetadataDoesNotExistException - The {@link MergeParentMetadata}
+ * has not been set.
+ */
+ public MergeParentMetadata get() throws ParentMetadataDoesNotExistException;
+
+ /**
+ * @param metadata - The identifying metadata for the parent.
+ * @throws ParentMetadataExistsException - The {@link MergeParentMetadata} has
+ * already been set.
+ */
+ public void set(MergeParentMetadata metadata) throws ParentMetadataExistsException;
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/AddStatementException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/AddStatementException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/AddStatementException.java
new file mode 100644
index 0000000..48cf7d4
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/AddStatementException.java
@@ -0,0 +1,46 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.store;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Exception thrown when failing to add a {@link RyaStatement} to a
+ * {@link RyaStatementStore}.
+ */
+public class AddStatementException extends StatementStoreException {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new {@link AddStatementException} with a message.
+ * @param message - The error message.
+ */
+ public AddStatementException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new {@link AddStatementException} with a message and cause.
+ * @param message - The error message.
+ * @param cause - The cause of this exception
+ */
+ public AddStatementException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/ContainsStatementException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/ContainsStatementException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/ContainsStatementException.java
new file mode 100644
index 0000000..c091e90
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/ContainsStatementException.java
@@ -0,0 +1,47 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.store;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Exception thrown when failing to check a {@link RyaStatementStore} for a
+ * {@link RyaStatement}.
+ */
+public class ContainsStatementException extends StatementStoreException {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new {@link ContainsStatementException} with a message.
+ * @param message - The error message.
+ */
+ public ContainsStatementException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new {@link ContainsStatementException} with a message and cause.
+ * @param message - The error message.
+ * @param cause - The cause of this exception
+ */
+ public ContainsStatementException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/FetchStatementException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/FetchStatementException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/FetchStatementException.java
new file mode 100644
index 0000000..fe06d58
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/FetchStatementException.java
@@ -0,0 +1,46 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.store;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Exception thrown when failing to fetch a {@link RyaStatement} from a
+ * {@link RyaStatementStore}.
+ */
+public class FetchStatementException extends StatementStoreException {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new {@link FetchStatementException} with a message.
+ * @param message - The error message.
+ */
+ public FetchStatementException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new {@link FetchStatementException} with a message and cause.
+ * @param message - The error message.
+ * @param cause - The cause of this exception
+ */
+ public FetchStatementException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RemoveStatementException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RemoveStatementException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RemoveStatementException.java
new file mode 100644
index 0000000..7d45348
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RemoveStatementException.java
@@ -0,0 +1,46 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.store;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Exception thrown when failing to remove a {@link RyaStatement} from a
+ * {@link RyaStatementStore}.
+ */
+public class RemoveStatementException extends StatementStoreException {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new {@link FetchStatementException} with a message.
+ * @param message - The error message.
+ */
+ public RemoveStatementException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new {@link RemoveStatementException} with a message and cause.
+ * @param message - The error message.
+ * @param cause - The cause of this exception
+ */
+ public RemoveStatementException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RyaStatementStore.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RyaStatementStore.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RyaStatementStore.java
new file mode 100644
index 0000000..3f4e6fb
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RyaStatementStore.java
@@ -0,0 +1,74 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.store;
+
+import java.util.Iterator;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Allows specific CRUD operations on {@link RyaStatement} storage systems.
+ * <p>
+ * The operations specifically:
+ * <li>fetch all rya statements in the store</li>
+ * <li>add a rya statement to the store</li>
+ * <li>remove a rya statement from the store</li>
+ * <li>update an existing rya statement with a new one</li>
+ *
+ * One would use this {@link RyaStatementStore} when they have a database or
+ * some storage system that is used when merging in data or exporting data.
+ */
+public interface RyaStatementStore {
+ /**
+ * @return an {@link Iterator} containing all {@link RyaStatement}s found
+ * in this {@link RyaStatementStore}. The statements will be sorted by
+ * timestamp.
+ * @throws FetchStatementException - Thrown when fetching a statement fails.
+ */
+ public Iterator<RyaStatement> fetchStatements() throws FetchStatementException;
+
+ /**
+ * @param statement - The {@link RyaStatement} to add to this {@link RyaStatementStore}.
+ * @throws AddStatementException Thrown when adding a statement fails.
+ */
+ public void addStatement(final RyaStatement statement) throws AddStatementException;
+
+ /**
+ * @param statement - The {@link RyaStatement} to remove from this {@link RyaStatementStore}.
+ * @throws RemoveStatementException - Thrown when the statement is not removed
+ */
+ public void removeStatement(final RyaStatement statement) throws RemoveStatementException;
+
+ /**
+ * Updates the original {@link RyaStatement} with a new one.
+ * @param original - The {@link RyaStatement} to update.
+ * @param update - The new {@link RyaStatement} to replace the original one.
+ * @throws UpdateStatementException - Thrown when updating a statement fails.
+ */
+ public void updateStatement(final RyaStatement original, final RyaStatement update) throws UpdateStatementException;
+
+ /**
+ * Queries to see if the statement is contained in the statement store.
+ * @param ryaStatement the {@link RyaStatement} to search for.
+ * @return {@code true} if the statement store contains the statement.
+ * {@code false} otherwise.
+ * @throws ContainsStatementException - Thrown when an exception occurs trying to check for the statement.
+ */
+ public boolean containsStatement(final RyaStatement ryaStatement) throws ContainsStatementException;
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RyaStatementStoreDecorator.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RyaStatementStoreDecorator.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RyaStatementStoreDecorator.java
new file mode 100644
index 0000000..3a5794b
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/RyaStatementStoreDecorator.java
@@ -0,0 +1,67 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.store;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Iterator;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Decorates a {@link RyaStatementStore}. This is to be used when the default
+ * actions for {@link RyaStatement}s in the {@link RyaStatementStore} need to
+ * do something more specific.
+ */
+public abstract class RyaStatementStoreDecorator implements RyaStatementStore {
+ final RyaStatementStore store;
+
+ /**
+ * Creates a new {@link RyaStatementStoreDecorator} around the provided {@link RyaStatementStore}.
+ * @param store - The {@link RyaStatementStore} to decorate.
+ */
+ public RyaStatementStoreDecorator(final RyaStatementStore store) {
+ this.store = checkNotNull(store);
+ }
+
+ @Override
+ public Iterator<RyaStatement> fetchStatements() throws FetchStatementException {
+ return store.fetchStatements();
+ }
+
+ @Override
+ public void addStatement(final RyaStatement statement) throws AddStatementException {
+ store.addStatement(statement);
+ }
+
+ @Override
+ public void removeStatement(final RyaStatement statement) throws RemoveStatementException {
+ store.removeStatement(statement);
+ }
+
+ @Override
+ public void updateStatement(final RyaStatement original, final RyaStatement update) throws UpdateStatementException {
+ store.updateStatement(original, update);
+ }
+
+ @Override
+ public boolean containsStatement(final RyaStatement statement) throws ContainsStatementException {
+ return store.containsStatement(statement);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/StatementStoreException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/StatementStoreException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/StatementStoreException.java
new file mode 100644
index 0000000..202a49f
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/StatementStoreException.java
@@ -0,0 +1,45 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.store;
+
+import org.apache.rya.export.api.MergerException;
+
+/**
+ * Thrown when an exception occurs in the {@link RyaStatementStore}.
+ */
+class StatementStoreException extends MergerException {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new {@link StatementStoreException} with a message.
+ * @param message The error message.
+ */
+ public StatementStoreException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new {@link StatementStoreException} with a message and cause.
+ * @param message The error message.
+ * @param cause The cause of this exception.
+ */
+ public StatementStoreException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/UpdateStatementException.java
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/UpdateStatementException.java b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/UpdateStatementException.java
new file mode 100644
index 0000000..26f776b
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/java/org/apache/rya/export/api/store/UpdateStatementException.java
@@ -0,0 +1,47 @@
+/*
+ * 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
+ * with the License. You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.rya.export.api.store;
+
+import mvm.rya.api.domain.RyaStatement;
+
+/**
+ * Exception thrown when failing to update a {@link RyaStatement} in a
+ * {@link RyaStatementStore}.
+ */
+public class UpdateStatementException extends StatementStoreException {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new {@link UpdateStatementException} with a message.
+ * @param message - The error message.
+ */
+ public UpdateStatementException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new {@link UpdateStatementException} with a message and cause.
+ * @param message - The error message.
+ * @param cause - The cause of this exception
+ */
+ public UpdateStatementException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/export.api/src/main/xsd/MergeConfiguration.xsd
----------------------------------------------------------------------
diff --git a/extras/rya.export/export.api/src/main/xsd/MergeConfiguration.xsd b/extras/rya.export/export.api/src/main/xsd/MergeConfiguration.xsd
new file mode 100644
index 0000000..036b067
--- /dev/null
+++ b/extras/rya.export/export.api/src/main/xsd/MergeConfiguration.xsd
@@ -0,0 +1,80 @@
+<?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
+with the License. You may obtain a copy of the License at
+
+ 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.
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:mc="http://mergeconfig"
+ targetNamespace="http://mergeconfig"
+ elementFormDefault="qualified">
+
+ <xs:element name="configuration" type="mc:JAXBMergeConfiguration"/>
+
+ <xs:complexType name="JAXBMergeConfiguration">
+ <xs:sequence>
+ <xs:element name="parentHostname" type="xs:string"/>
+ <xs:element name="parentUsername" type="xs:string"/>
+ <xs:element name="parentPassword" type="xs:string"/>
+ <xs:element name="parentRyaInstanceName" type="xs:string"/>
+ <xs:element name="parentTablePrefix" type="xs:string"/>
+ <xs:element name="parentTomcatUrl" type="xs:string"/>
+ <xs:element name="parentDBType" type="mc:DBType"/>
+ <xs:element name="parentPort" type="mc:Port"/>
+
+ <xs:element name="childHostname" type="xs:string"/>
+ <xs:element name="childUsername" type="xs:string"/>
+ <xs:element name="childPassword" type="xs:string"/>
+ <xs:element name="childRyaInstanceName" type="xs:string"/>
+ <xs:element name="childTablePrefix" type="xs:string"/>
+ <xs:element name="childTomcatUrl" type="xs:string"/>
+ <xs:element name="childDBType" type="mc:DBType"/>
+ <xs:element name="childPort" type="mc:Port"/>
+
+ <xs:element name="mergePolicy" type="mc:MergePolicy"/>
+
+ <xs:element name="useNtpServer" type="xs:boolean"/>
+ <xs:element name="ntpServerHost" type="xs:string"/>
+ <xs:element name="toolStartTime" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:simpleType name="MergePolicy">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="timestamp"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="DBType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="accumulo"/>
+ <xs:enumeration value="mongo"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Port">
+ <xs:annotation>
+ <xs:documentation>
+ Port number in the range [1, 65536].
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:restriction base="xs:unsignedShort">
+ <xs:minInclusive value="1"/>
+ </xs:restriction>
+ </xs:simpleType>
+</schema>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/24c71838/extras/rya.export/pom.xml
----------------------------------------------------------------------
diff --git a/extras/rya.export/pom.xml b/extras/rya.export/pom.xml
index 89f6d27..92c715c 100644
--- a/extras/rya.export/pom.xml
+++ b/extras/rya.export/pom.xml
@@ -36,7 +36,8 @@ under the License.
<packaging>pom</packaging>
- <modules>
+ <modules>
+ <module>export.api</module>
</modules>
<properties>