atlas-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mad...@apache.org
Subject [22/25] incubator-atlas git commit: ATLAS-1898: initial commit of ODF
Date Wed, 28 Jun 2017 05:57:35 GMT
http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceManager.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceManager.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceManager.java
new file mode 100755
index 0000000..00e28e2
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceManager.java
@@ -0,0 +1,93 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import java.io.InputStream;
+import java.util.List;
+
+import org.apache.atlas.odf.api.settings.validation.ValidationException;
+
+/**
+ *
+ * External Java API for creating and managing discovery services
+ *
+ */
+public interface DiscoveryServiceManager {
+
+	/**
+	 * Retrieve list of discovery services registered in ODF
+	 * @return List of registered ODF discovery services
+	 */
+	public List<DiscoveryServiceProperties> getDiscoveryServicesProperties();
+
+	/**
+	 * Register a new service in ODF
+	 * @param dsProperties Properties of the discovery service to register
+	 * @throws ValidationException Validation of a property failed
+	 */
+	public void createDiscoveryService(DiscoveryServiceProperties dsProperties) throws ValidationException;
+
+	/**
+	 * Update configuration of an ODF discovery service
+	 * @param dsProperties Properties of the discovery service to update
+	 */
+	public void replaceDiscoveryService(DiscoveryServiceProperties dsProperties) throws ServiceNotFoundException, ValidationException;
+
+	/**
+	 * Remove a registered service from ODF
+	 * @param serviceId Discovery service ID
+	 */
+	public void deleteDiscoveryService(String serviceId) throws ServiceNotFoundException, ValidationException;
+
+	/**
+	 * Retrieve current configuration of a discovery services registered in ODF
+	 * @param serviceId Discovery Service ID
+	 * @return Properties of the service with this ID
+	 * @throws ServiceNotFoundException A service with this ID is not registered
+	 */
+	public DiscoveryServiceProperties getDiscoveryServiceProperties(String serviceId) throws ServiceNotFoundException;
+
+	/**
+	 * Retrieve status overview of all discovery services registered in ODF
+	 * @return List of status count maps for all discovery services
+	 */
+	public List<ServiceStatusCount> getDiscoveryServiceStatusOverview();
+
+	/**
+	 * Retrieve status of a specific discovery service. Returns null if no service info can be obtained
+	 * @param serviceId Discovery Service ID
+	 * @return Status of the service with this ID
+	 */
+	public DiscoveryServiceStatus getDiscoveryServiceStatus(String serviceId) throws ServiceNotFoundException;
+
+	/**
+	 * Retrieve runtime statistics of a specific discovery service
+	 * @param serviceId Discovery Service ID
+	 * @return Runtime statistics of the service with this ID
+	 */
+	public DiscoveryServiceRuntimeStatistics getDiscoveryServiceRuntimeStatistics(String serviceId) throws ServiceNotFoundException;
+
+	/**
+	 * Delete runtime statistics of a specific discovery service
+	 * @param serviceId Discovery Service ID
+	 */
+	public void deleteDiscoveryServiceRuntimeStatistics(String serviceId) throws ServiceNotFoundException;
+
+	/**
+	 * Retrieve picture representing a discovery service
+	 * @param serviceId Discovery Service ID
+	 * @return Input stream for image
+	 */
+	public InputStream getDiscoveryServiceImage(String serviceId) throws ServiceNotFoundException;
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceProperties.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceProperties.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceProperties.java
new file mode 100755
index 0000000..78989ec
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceProperties.java
@@ -0,0 +1,173 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+// JSON
+/**
+ * 
+ * This class is used for the registration of a service at an ODF instance.
+ * A JSON document of this type must be provided by a remote discovery service implementation in order to register it with an ODF instance
+ *
+ */
+@ApiModel(description="Parameters describing a discovery service.")
+public class DiscoveryServiceProperties {
+	@ApiModelProperty(value="Unique id string of the discovery service", required=true)
+	private String id;
+
+	@ApiModelProperty(value="Descriptive name of the discovery service", required=true)
+	private String name;
+
+	@ApiModelProperty(value="Optional description of the discovery service")
+	private String description;
+
+	@ApiModelProperty(value="Optional custom description of the discovery service")
+	private String customDescription;
+
+	@ApiModelProperty(value="Optional link to a JPG or PNG image illustrating the discovery service")
+	private String iconUrl;
+
+	@ApiModelProperty(value="Optional URL pointing to the description of the discovery service")
+	private String link;
+	
+	public String getCustomDescription() {
+		return customDescription;
+	}
+
+	public void setCustomDescription(String customDescription) {
+		this.customDescription = customDescription;
+	}
+
+	public List<String> getPrerequisiteAnnotationTypes() {
+		return prerequisiteAnnotationTypes;
+	}
+
+	public void setPrerequisiteAnnotationTypes(List<String> prerequisiteAnnotationTypes) {
+		this.prerequisiteAnnotationTypes = prerequisiteAnnotationTypes;
+	}
+
+	public List<String> getResultingAnnotationTypes() {
+		return resultingAnnotationTypes;
+	}
+
+	public void setResultingAnnotationTypes(List<String> resultingAnnotationTypes) {
+		this.resultingAnnotationTypes = resultingAnnotationTypes;
+	}
+
+	public List<String> getSupportedObjectTypes() {
+		return supportedObjectTypes;
+	}
+
+	public void setSupportedObjectTypes(List<String> supportedObjectTypes) {
+		this.supportedObjectTypes = supportedObjectTypes;
+	}
+
+	public List<String> getAssignedObjectTypes() {
+		return assignedObjectTypes;
+	}
+
+	public void setAssignedObjectTypes(List<String> assignedObjectTypes) {
+		this.assignedObjectTypes = assignedObjectTypes;
+	}
+
+	public List<String> getAssignedObjectCandidates() {
+		return assignedObjectCandidates;
+	}
+
+	public void setAssignedObjectCandidates(List<String> assignedObjectCandidates) {
+		this.assignedObjectCandidates = assignedObjectCandidates;
+	}
+
+	@ApiModelProperty(value="List of prerequisite annotation types required to run the discovery service")
+	private List<String> prerequisiteAnnotationTypes;
+
+	@ApiModelProperty(value="List annotation types created by the discovery service")
+	private List<String> resultingAnnotationTypes;
+
+	@ApiModelProperty(value="Types of objects that can be analyzed by the discovery service")
+	private List<String> supportedObjectTypes;
+
+	@ApiModelProperty(value="Types of objects that may be assigned to the resulting annotations")
+	private List<String> assignedObjectTypes;
+
+	@ApiModelProperty(value="Ids of specific objects (e.g. data classes) that may be assigned to resulting annotations")
+	private List<String> assignedObjectCandidates;
+
+	@ApiModelProperty(value = "Number of parallel analyses the service can handle, with a default of 2")
+	private Integer parallelismCount = 2;
+
+	@ApiModelProperty(value="Endpoint of the discovery service", required=true)
+	private DiscoveryServiceEndpoint endpoint;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getIconUrl() {
+		return iconUrl;
+	}
+
+	public void setIconUrl(String iconURL) {
+		this.iconUrl = iconURL;
+	}
+
+	public String getLink() {
+		return link;
+	}
+
+	public void setLink(String link) {
+		this.link = link;
+	}
+
+	public DiscoveryServiceEndpoint getEndpoint() {
+		return endpoint;
+	}
+
+	public void setEndpoint(DiscoveryServiceEndpoint endpoint) {
+		this.endpoint = endpoint;
+	}
+
+	public Integer getParallelismCount() {
+		return parallelismCount;
+	}
+
+	public void setParallelismCount(Integer parallelismCount) {
+		this.parallelismCount = parallelismCount;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServicePropertiesList.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServicePropertiesList.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServicePropertiesList.java
new file mode 100755
index 0000000..a922a08
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServicePropertiesList.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * JSON object representing properties of registered discovery services.
+ *  
+ */
+
+@ApiModel(description="List of properties of registered discovery services")
+public class DiscoveryServicePropertiesList {
+	
+	@ApiModelProperty(value="List of properties of registered discovery services", readOnly=true)
+	DiscoveryServiceProperties[] items;
+
+	@ApiModelProperty(value="Number of items in the list", readOnly=true)
+	int count;
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceRequest.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceRequest.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceRequest.java
new file mode 100755
index 0000000..392ca82
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceRequest.java
@@ -0,0 +1,179 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import java.util.Map;
+
+import org.apache.atlas.odf.api.discoveryservice.datasets.DataSetContainer;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+// JSON
+/**
+ * 
+ * This class represents an analysis request that is passed from ODF to the service.
+ *
+ */
+@ApiModel(description="Request for running a single discovery service.")
+public class DiscoveryServiceRequest {
+	/**
+	 * The discoveryService identifier
+	 */
+	@ApiModelProperty(value="Id string of the discovery service to be issued", required=true)
+	private String discoveryServiceId;
+	/**
+	 * This property can be used by a user to pass additional information from the analysis request to the service execution
+	 */
+	@ApiModelProperty(value="Optional additional properties to be passed to the discovery service", required=false)
+	private Map<String, Object> additionalProperties;
+
+	@ApiModelProperty(value="User id under which the discovery service is supposed to run", required=true)
+	private String user;
+	/**
+	 * This property contains information about the data that is supposed to be analysed
+	 */
+	@ApiModelProperty(value="Data set to be analyzed along with cached metadata objects", required=true)
+	private DataSetContainer dataSetContainer;
+
+	@ApiModelProperty(value="Unique id of the analysis request to which the discovery service request belongs to", required=true)
+	private String odfRequestId;
+
+	@ApiModelProperty(value="URL of ODF admin API for remote access to metadata", required=false)
+	private String odfUrl;
+
+	@ApiModelProperty(value="ODF user id for remote access to metadata", required=false)
+	private String odfUser;
+
+	@ApiModelProperty(value="ODF password for remote access to metadata", required=false)
+	private String odfPassword;
+	/**
+	 * timestamp of the time the request was put on the ODF request queue
+	 */
+	@ApiModelProperty(value="Timestamp when the request was put on ODF request queue", required=true)
+	private long putOnRequestQueue;
+	/**
+	 * timestamp of the time the request was taken from the queue and execution was started
+	 */
+	@ApiModelProperty(value="Timestamp when the execution was started", required=true)
+	private long takenFromRequestQueue;
+	/**
+	 * timestamp of the time the request was processed successfully
+	 */
+	@ApiModelProperty(value="Timestamp when processing was finished", required=true)
+	private long finishedProcessing;
+	/**
+	 * duration needed for storing the analysis results
+	 */
+	@ApiModelProperty(value="Time needed for storing results in metadata repository", required=true)
+	private long timeSpentStoringResults;
+
+	public String getDiscoveryServiceId() {
+		return discoveryServiceId;
+	}
+
+	public void setDiscoveryServiceId(String discoveryServiceId) {
+		this.discoveryServiceId = discoveryServiceId;
+	}
+
+	public Map<String, Object> getAdditionalProperties() {
+		return additionalProperties;
+	}
+
+	public void setAdditionalProperties(Map<String, Object> additionalProperties) {
+		this.additionalProperties = additionalProperties;
+	}
+
+	public String getUser() {
+		return user;
+	}
+
+	public void setUser(String user) {
+		this.user = user;
+	}
+
+	public DataSetContainer getDataSetContainer() {
+		return dataSetContainer;
+	}
+
+	public void setDataSetContainer(DataSetContainer dataSet) {
+		this.dataSetContainer = dataSet;
+	}
+
+	public String getOdfRequestId() {
+		return odfRequestId;
+	}
+
+	public void setOdfRequestId(String odfRequestId) {
+		this.odfRequestId = odfRequestId;
+	}
+
+	public String getOdfUrl() {
+		return odfUrl;
+	}
+
+	public void setOdfUrl(String odfUrl) {
+		this.odfUrl = odfUrl;
+	}
+
+	public String getOdfUser() {
+		return this.odfUser;
+	}
+
+	public void setOdfUser(String odfUser) {
+		this.odfUser = odfUser;
+	}
+
+	public String getOdfPassword() {
+		return this.odfPassword;
+	}
+
+	public void setOdfPassword(String odfPassword) {
+		this.odfPassword = odfPassword;
+	}
+
+	public long getFinishedProcessing() {
+		return finishedProcessing;
+	}
+
+	public void setFinishedProcessing(long finishedProcessing) {
+		this.finishedProcessing = finishedProcessing;
+	}
+
+	public long getTakenFromRequestQueue() {
+		return takenFromRequestQueue;
+	}
+
+	public void setTakenFromRequestQueue(long takenFromRequestQueue) {
+		this.takenFromRequestQueue = takenFromRequestQueue;
+	}
+
+	public long getPutOnRequestQueue() {
+		return putOnRequestQueue;
+	}
+
+	public void setPutOnRequestQueue(long putOnRequestQueue) {
+		this.putOnRequestQueue = putOnRequestQueue;
+	}
+
+	public long getTimeSpentStoringResults() {
+		return timeSpentStoringResults;
+	}
+
+	public void setTimeSpentStoringResults(long timeSpentStoringResults) {
+		this.timeSpentStoringResults = timeSpentStoringResults;
+	}
+
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceResponse.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceResponse.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceResponse.java
new file mode 100755
index 0000000..8208744
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceResponse.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.apache.atlas.odf.api.discoveryservice.async.DiscoveryServiceAsyncStartResponse;
+import org.apache.atlas.odf.api.discoveryservice.sync.DiscoveryServiceSyncResponse;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+// JSON
+@JsonTypeInfo(  
+	    use = JsonTypeInfo.Id.NAME,  
+	    include = JsonTypeInfo.As.PROPERTY,  
+	    property = "type")
+
+@JsonSubTypes({  
+    @Type(value = DiscoveryServiceAsyncStartResponse.class, name = "async"),  
+    @Type(value = DiscoveryServiceSyncResponse.class, name = "sync") })  
+@ApiModel(description="Response returned by the discovery service.", subTypes={DiscoveryServiceAsyncStartResponse.class,DiscoveryServiceSyncResponse.class}, discriminator="type")
+public abstract class DiscoveryServiceResponse {
+	public static enum ResponseCode {
+		OK, NOT_AUTHORIZED, TEMPORARILY_UNAVAILABLE, UNKNOWN_ERROR
+	};
+
+	@ApiModelProperty(value="Response code indicating whether the discovery service request was issued successfully", readOnly=true, required=true)
+	private ResponseCode code;
+
+	@ApiModelProperty(value="Detailed status of the analysis request", readOnly=true, required=false)
+	private String details;
+
+	public ResponseCode getCode() {
+		return code;
+	}
+
+	public void setCode(ResponseCode code) {
+		this.code = code;
+	}
+
+	public String getDetails() {
+		return details;
+	}
+
+	public void setDetails(String details) {
+		this.details = details;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceResult.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceResult.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceResult.java
new file mode 100755
index 0000000..5c7fff9
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceResult.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import java.util.List;
+
+import org.apache.atlas.odf.api.metadata.models.Annotation;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+// JSON
+/**
+ * 
+ * This class must be returned by a service so that ODF can store the results.
+ * 
+ */
+@ApiModel(description="Results of a discovery service run.")
+public class DiscoveryServiceResult {
+
+	/**
+	 * The actual results of the service execution
+	 */
+	@ApiModelProperty(value="List of annotations generated by the discovery service run (following the format of the annotationPrototypes)", readOnly=true)
+	private List<Annotation> annotations;
+
+	public List<Annotation> getAnnotations() {
+		return annotations;
+	}
+
+	public void setAnnotations(List<Annotation> annotations) {
+		this.annotations = annotations;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceRuntimeStatistics.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceRuntimeStatistics.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceRuntimeStatistics.java
new file mode 100755
index 0000000..15127e3
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceRuntimeStatistics.java
@@ -0,0 +1,39 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * JSON object representing runtime statics of a discovery service.
+ * 
+ *
+ */
+
+@ApiModel(description="Runtime statistics of a discovery service")
+public class DiscoveryServiceRuntimeStatistics {
+	
+	// TODO: placeholder for things to add
+	@ApiModelProperty(value="Average processing time per item (in milliseconds)", readOnly=true)
+	long averageProcessingTimePerItemInMillis;
+
+	public long getAverageProcessingTimePerItemInMillis() {
+		return averageProcessingTimePerItemInMillis;
+	}
+
+	public void setAverageProcessingTimePerItemInMillis(long averageProcessingTimePerItemInMillis) {
+		this.averageProcessingTimePerItemInMillis = averageProcessingTimePerItemInMillis;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceSparkEndpoint.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceSparkEndpoint.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceSparkEndpoint.java
new file mode 100755
index 0000000..d377947
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceSparkEndpoint.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+//JSON
+/**
+ * 
+ * This class describes a REST endpoint representing a remote service that can be used by ODF
+ * Note: It doesn't inherit from DiscoveryServiceEndpoint. To convert this from / to this class use JSONUtils.convert()
+ *
+ */
+public class DiscoveryServiceSparkEndpoint {
+	/**
+	 * This property informs ODF about the type of input for the underlying Spark job, (CSV) file vs. (Database) connection.  
+	 */
+	public static enum SERVICE_INTERFACE_TYPE {
+		DataFrame, Generic
+	}
+
+	public static String ANNOTATION_PROPERTY_COLUMN_NAME = "ODF_ANNOTATED_COLUMN";
+	public static String ANNOTATION_SUMMARY_COLUMN_NAME = "ODF_ANNOTATION_SUMMARY";
+	public static String ODF_BEGIN_OF_ANNOTATION_RESULTS = "***ODF_BEGIN_OF_ANNOTATION_RESULTS***\n";
+
+	private String runtimeName;
+
+	private SERVICE_INTERFACE_TYPE inputMethod = null;
+
+	private String jar;
+
+	private String className;
+
+	public DiscoveryServiceSparkEndpoint() {
+		this.setRuntimeName("Spark");
+	}
+	
+	public String getJar() {
+		return jar;
+	}
+
+	public void setJar(String jar) {
+		this.jar = jar;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	public SERVICE_INTERFACE_TYPE getInputMethod() {
+		return inputMethod;
+	}
+
+	public void setInputMethod(SERVICE_INTERFACE_TYPE inputMethod) {
+		this.inputMethod = inputMethod;
+	}
+
+	public String getRuntimeName() {
+		return runtimeName;
+	}
+
+	public void setRuntimeName(String runtimeName) {
+		this.runtimeName = runtimeName;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceStatus.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceStatus.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceStatus.java
new file mode 100755
index 0000000..f263a9e
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/DiscoveryServiceStatus.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Status of a discovery service")
+public class DiscoveryServiceStatus {
+	public static enum Status {
+		OK, ERROR
+	};
+
+	/**
+	 * JSON object representing the status of a discovery service.
+	 */
+
+	@ApiModelProperty(value="Status of the ODF service", allowableValues="OK,ERROR", readOnly=true, required=true)
+	Status status;
+
+	@ApiModelProperty(value="Status message", readOnly=true, required=true)
+	String message;
+	
+	@ApiModelProperty(value="Status count of the discovery service", readOnly=true, required=true)
+	ServiceStatusCount statusCount;
+
+	public Status getStatus() {
+		return status;
+	}
+
+	public void setStatus(Status status) {
+		this.status = status;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public ServiceStatusCount getStatusCount() {
+		return statusCount;
+	}
+
+	public void setStatusCount(ServiceStatusCount statusCount) {
+		this.statusCount = statusCount;
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/ServiceNotFoundException.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/ServiceNotFoundException.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/ServiceNotFoundException.java
new file mode 100755
index 0000000..c320bf6
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/ServiceNotFoundException.java
@@ -0,0 +1,38 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import java.text.MessageFormat;
+
+import org.apache.atlas.odf.api.settings.validation.ValidationException;
+
+public class ServiceNotFoundException extends ValidationException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private String serviceId;
+	
+	public ServiceNotFoundException(String serviceId) {
+		super("Service not found");
+		this.serviceId = serviceId;
+	}
+
+	@Override
+	public String getMessage() {
+		return MessageFormat.format("Discovery service with id {0} is not registered", serviceId);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/ServiceStatusCount.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/ServiceStatusCount.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/ServiceStatusCount.java
new file mode 100755
index 0000000..85ba444
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/ServiceStatusCount.java
@@ -0,0 +1,58 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.atlas.odf.api.analysis.AnalysisRequestTrackerStatus.STATUS;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Status of a discovery service.")
+public class ServiceStatusCount {
+	@ApiModelProperty(value="Id string of the discovery service", readOnly=true, required=true)
+	private String id;
+
+	@ApiModelProperty(value="Descriptive name of the discovery service", readOnly=true, required=true)
+	private String name;
+
+	@ApiModelProperty(value="Status of the discovery service", readOnly=true)
+	private Map<STATUS, Integer> statusCountMap = new HashMap<STATUS, Integer>();
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public Map<STATUS, Integer> getStatusCountMap() {
+		return statusCountMap;
+	}
+
+	public void setStatusCountMap(Map<STATUS, Integer> statusCountMap) {
+		this.statusCountMap = statusCountMap;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/SyncDiscoveryServiceBase.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/SyncDiscoveryServiceBase.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/SyncDiscoveryServiceBase.java
new file mode 100755
index 0000000..ef6666e
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/SyncDiscoveryServiceBase.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice;
+
+import java.util.List;
+
+import org.apache.atlas.odf.api.metadata.models.Annotation;
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryServiceResponse.ResponseCode;
+import org.apache.atlas.odf.api.discoveryservice.sync.DiscoveryServiceSyncResponse;
+import org.apache.atlas.odf.api.discoveryservice.sync.SyncDiscoveryService;
+
+/**
+ * 
+ * This is an abstract class to extend when creating a synchronous discovery service
+ *
+ */
+public abstract class SyncDiscoveryServiceBase extends DiscoveryServiceBase implements SyncDiscoveryService {
+	
+	protected DiscoveryServiceSyncResponse createSyncResponse(ResponseCode code, String detailsMessage, List<? extends Annotation> annotations) {
+		try {
+			DiscoveryServiceSyncResponse response = new DiscoveryServiceSyncResponse();
+			response.setCode(code);
+			response.setDetails(detailsMessage);
+			DiscoveryServiceResult result = new DiscoveryServiceResult();
+			if (annotations != null) {
+				result.setAnnotations((List<Annotation>) annotations);
+			}
+			response.setResult(result);
+			return response;
+		} catch (Exception exc) {
+			throw new RuntimeException(exc);
+		}
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/AsyncDiscoveryService.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/AsyncDiscoveryService.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/AsyncDiscoveryService.java
new file mode 100755
index 0000000..8a98a6b
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/AsyncDiscoveryService.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice.async;
+
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryService;
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryServiceRequest;
+
+
+/**
+ * An asynchronous discovery service must implement this interface
+ *
+ */
+public interface AsyncDiscoveryService extends DiscoveryService {
+	DiscoveryServiceAsyncStartResponse startAnalysis(DiscoveryServiceRequest request);
+
+	DiscoveryServiceAsyncRunStatus getStatus(String runId);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/DiscoveryServiceAsyncRunStatus.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/DiscoveryServiceAsyncRunStatus.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/DiscoveryServiceAsyncRunStatus.java
new file mode 100755
index 0000000..49b50ca
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/DiscoveryServiceAsyncRunStatus.java
@@ -0,0 +1,77 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice.async;
+
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryServiceResult;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+// JSON
+/**
+ * 
+ * An object of this class must be returned when ODF requests the status of an analysis run.
+ *
+ */
+@ApiModel(description="Status of an asynchronous discovery service run.")
+public class DiscoveryServiceAsyncRunStatus {
+	public static enum State {
+		RUNNING, ERROR, NOT_FOUND, FINISHED
+	}
+
+	@ApiModelProperty(value="Id of the discovery service run", readOnly=true, required=true)
+	private String runId;
+
+	@ApiModelProperty(value="Status of the discovery service run", readOnly=true, required=true)
+	private State state;
+
+	@ApiModelProperty(value="Optional status message", readOnly=true)
+	private String details;
+
+	@ApiModelProperty(value="Result of the discovery service run (if already available)", readOnly=true)
+	private DiscoveryServiceResult result;
+
+	public String getRunId() {
+		return runId;
+	}
+
+	public void setRunId(String runId) {
+		this.runId = runId;
+	}
+
+	public State getState() {
+		return state;
+	}
+
+	public void setState(State state) {
+		this.state = state;
+	}
+
+	public String getDetails() {
+		return details;
+	}
+
+	public void setDetails(String details) {
+		this.details = details;
+	}
+
+	public DiscoveryServiceResult getResult() {
+		return result;
+	}
+
+	public void setResult(DiscoveryServiceResult result) {
+		this.result = result;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/DiscoveryServiceAsyncStartResponse.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/DiscoveryServiceAsyncStartResponse.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/DiscoveryServiceAsyncStartResponse.java
new file mode 100755
index 0000000..5d6027d
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/async/DiscoveryServiceAsyncStartResponse.java
@@ -0,0 +1,41 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice.async;
+
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryServiceResponse;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * An object of this class must be returned by an asynchronous service after starting
+ *
+ */
+@ApiModel(description="Response returned by an asynchronous discovery service.")
+public class DiscoveryServiceAsyncStartResponse extends DiscoveryServiceResponse {
+	/**
+	 * Property identifying the running analysis. This id will be used to repeatedly request the status of the analysis.
+	 */
+	@ApiModelProperty(value="Id of the analysis request (asynchronous requests only)", readOnly=true, required=true)
+	private String runId;
+
+	public String getRunId() {
+		return runId;
+	}
+
+	public void setRunId(String runId) {
+		this.runId = runId;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/datasets/DataSetContainer.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/datasets/DataSetContainer.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/datasets/DataSetContainer.java
new file mode 100755
index 0000000..ed57357
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/datasets/DataSetContainer.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice.datasets;
+
+import org.apache.atlas.odf.api.metadata.models.MetaDataCache;
+import org.apache.atlas.odf.api.metadata.models.MetaDataObject;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+// JSON
+/**
+ * This class is a reference to a metadata object in a metadata store
+ * 
+ */
+@ApiModel(description="Container keeping reference to data set along with cached metadata objects.")
+public class DataSetContainer {
+
+	@ApiModelProperty(value="Reference to the data set to be analyzed", required=true)
+	private MetaDataObject oMDataSet;
+
+	@ApiModelProperty(value="A Metadata cache that may be used by discovery services if access to the metadata store is not available", required=false)
+	private MetaDataCache metaDataCache;
+
+	public MetaDataObject getDataSet() {
+		return oMDataSet;
+	}
+
+	public void setDataSet(MetaDataObject oMDataSet) {
+		this.oMDataSet = oMDataSet;
+	}
+
+	public MetaDataCache getMetaDataCache() {
+		return metaDataCache;
+	}
+
+	public void setMetaDataCache(MetaDataCache metaDataCache) {
+		this.metaDataCache = metaDataCache;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/datasets/MaterializedDataSet.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/datasets/MaterializedDataSet.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/datasets/MaterializedDataSet.java
new file mode 100755
index 0000000..a00c4eb
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/datasets/MaterializedDataSet.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice.datasets;
+
+import java.util.List;
+
+import org.apache.atlas.odf.api.metadata.models.Column;
+import org.apache.atlas.odf.api.metadata.models.RelationalDataSet;
+
+// JSON
+/**
+ * This class represents the materialized contents of a data set
+ *
+ */
+public class MaterializedDataSet {
+	private RelationalDataSet table;
+	private List<Column> oMColumns;
+
+	// row data in the same order as the oMColumns 
+	private List<List<Object>> data;
+
+	public List<Column> getColumns() {
+		return oMColumns;
+	}
+
+	public void setColumns(List<Column> oMColumns) {
+		this.oMColumns = oMColumns;
+	}
+
+	public RelationalDataSet getTable() {
+		return table;
+	}
+
+	public void setTable(RelationalDataSet table) {
+		this.table = table;
+	}
+
+	public List<List<Object>> getData() {
+		return data;
+	}
+
+	public void setData(List<List<Object>> data) {
+		this.data = data;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/sync/DiscoveryServiceSyncResponse.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/sync/DiscoveryServiceSyncResponse.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/sync/DiscoveryServiceSyncResponse.java
new file mode 100755
index 0000000..b5b69f4
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/sync/DiscoveryServiceSyncResponse.java
@@ -0,0 +1,40 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice.sync;
+
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryServiceResponse;
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryServiceResult;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+// JSON
+/**
+ * An object of this class must be returned by a synchronous discovery service
+ *
+ */
+@ApiModel(description="Response returned by a synchronous discovery service.")
+public class DiscoveryServiceSyncResponse extends DiscoveryServiceResponse {
+	@ApiModelProperty(value="Result of the analysis (synchronous requests only)", readOnly=true, required=true)
+	private DiscoveryServiceResult result;
+
+	public DiscoveryServiceResult getResult() {
+		return result;
+	}
+
+	public void setResult(DiscoveryServiceResult result) {
+		this.result = result;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/sync/SyncDiscoveryService.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/sync/SyncDiscoveryService.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/sync/SyncDiscoveryService.java
new file mode 100755
index 0000000..626d78c
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/discoveryservice/sync/SyncDiscoveryService.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed 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.atlas.odf.api.discoveryservice.sync;
+
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryService;
+import org.apache.atlas.odf.api.discoveryservice.DiscoveryServiceRequest;
+
+/**
+ * 
+ * Synchronous discovery services must implement this interface
+ *
+ */
+public interface SyncDiscoveryService extends DiscoveryService {
+
+    /**
+     * Runs the actual discovery service.
+     * 
+     * @param request Request parameter that includes a reference to the data set to be analyzed
+     * @return Response object that includes the annotations to be created along with status information
+     */
+	DiscoveryServiceSyncResponse runAnalysis(DiscoveryServiceRequest request);
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/BrokerNode.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/BrokerNode.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/BrokerNode.java
new file mode 100755
index 0000000..0805b30
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/BrokerNode.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Kafka broker node details")
+public class BrokerNode {
+	@ApiModelProperty(value="Kafka broker identifier", readOnly=true, required=true)
+	private String host;
+
+	@ApiModelProperty(value="Indicates whether the broker is the leader of the partition", readOnly=true, required=true)
+	private boolean isLeader;
+
+	public boolean isLeader() {
+		return isLeader;
+	}
+
+	public void setLeader(boolean isLeader) {
+		this.isLeader = isLeader;
+	}
+
+	public String getHost() {
+		return host;
+	}
+
+	public void setHost(String host) {
+		this.host = host;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/EngineManager.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/EngineManager.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/EngineManager.java
new file mode 100755
index 0000000..4c441a9
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/EngineManager.java
@@ -0,0 +1,76 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.List;
+
+/**
+*
+* External Java API for managing and controlling the ODF engine
+*
+*/
+public interface EngineManager {
+
+	/**
+	 * Checks the health status of ODF
+	 *
+	 * @return Health status of the ODF engine
+	 */
+	public SystemHealth checkHealthStatus();
+
+	
+	/**
+	 * Get information about all available service runtimes.
+	 * 
+	 * @return Runtimes info
+	 */
+	ServiceRuntimesInfo getRuntimesInfo();
+	
+	/**
+	 * Returns the status of the ODF thread manager
+	 *
+	 * @return Status of all threads making up the ODF thread manager
+	 */
+	public List<ThreadStatus> getThreadManagerStatus();
+
+	/**
+	 * Returns the status of the ODF messaging subsystem
+	 *
+	 * @return Status of the ODF messaging subsystem
+	 */
+	public MessagingStatus getMessagingStatus();
+
+	/**
+	 * Returns the status of the messaging subsystem and the internal thread manager
+	 *
+	 * @return Combined status of the messaging subsystem and the internal thread manager
+	 */
+	public ODFStatus getStatus();
+
+	/**
+	 * Returns the current ODF version
+	 *
+	 * @return ODF version identifier
+	 */
+	public ODFVersion getVersion();
+
+	/**
+	 * Shuts down the ODF engine, purges all scheduled analysis requests from the queues, and cancels all running analysis requests.
+	 * This means that all running jobs will be cancelled or their results will not be reported back.
+	 * (for debugging purposes only)
+	 * 
+	 * @param options Option for immediately restarting the engine after shutdown (default is not to restart immediately but only when needed) 
+	 */
+	public void shutdown(ODFEngineOptions options);
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaBrokerPartitionMessageCountInfo.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaBrokerPartitionMessageCountInfo.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaBrokerPartitionMessageCountInfo.java
new file mode 100755
index 0000000..fdd84af
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaBrokerPartitionMessageCountInfo.java
@@ -0,0 +1,39 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class KafkaBrokerPartitionMessageCountInfo {
+
+	private String broker;
+	private Map<Integer, Long> partitionMsgCountMap = new HashMap<Integer, Long>();
+
+	public String getBroker() {
+		return broker;
+	}
+
+	public void setBroker(String broker) {
+		this.broker = broker;
+	}
+
+	public Map<Integer, Long> getPartitionMsgCountMap() {
+		return partitionMsgCountMap;
+	}
+
+	public void setPartitionMsgCountMap(Map<Integer, Long> partitionMsgCountMap) {
+		this.partitionMsgCountMap = partitionMsgCountMap;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaGroupOffsetInfo.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaGroupOffsetInfo.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaGroupOffsetInfo.java
new file mode 100755
index 0000000..5f6e4f8
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaGroupOffsetInfo.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Information on Kafka offsets per group id")
+public class KafkaGroupOffsetInfo {
+	@ApiModelProperty(value="Kafka group id", readOnly=true, required=true)
+	private String groupId;
+
+	@ApiModelProperty(value="List of Kafka offsets", readOnly=true, required=true)
+	private List<PartitionOffsetInfo> offsets = new ArrayList<PartitionOffsetInfo>();
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public List<PartitionOffsetInfo> getOffsets() {
+		return offsets;
+	}
+
+	public void setOffsets(List<PartitionOffsetInfo> offsets) {
+		this.offsets = offsets;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaPartitionInfo.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaPartitionInfo.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaPartitionInfo.java
new file mode 100755
index 0000000..8ab8f15
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaPartitionInfo.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Kafka nodes belonging to a specific partition")
+public class KafkaPartitionInfo {
+	@ApiModelProperty(value="Partition id", readOnly=true, required=true)
+	private Integer partitionId;
+
+	@ApiModelProperty(value="List of nodes containing this partition", readOnly=true, required=true)
+	private List<BrokerNode> nodes;
+
+	public List<BrokerNode> getNodes() {
+		return nodes;
+	}
+
+	public void setNodes(List<BrokerNode> nodes) {
+		this.nodes = nodes;
+	}
+
+	public Integer getPartitionId() {
+		return partitionId;
+	}
+
+	public void setPartitionId(Integer partitionId) {
+		this.partitionId = partitionId;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaStatus.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaStatus.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaStatus.java
new file mode 100755
index 0000000..10ff1a5
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaStatus.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Status of the Kafka ODF queues")
+public class KafkaStatus extends MessagingStatus {
+	@ApiModelProperty(value="List of message brokers", readOnly=true)
+	private List<String> brokers = new ArrayList<String>();
+
+	@ApiModelProperty(value="Status of the individual topics", readOnly=true)
+	private List<KafkaTopicStatus> topicStatus = new ArrayList<KafkaTopicStatus>();
+
+	public List<String> getBrokers() {
+		return brokers;
+	}
+
+	public void setBrokers(List<String> brokers) {
+		this.brokers = brokers;
+	}
+
+	public List<KafkaTopicStatus> getTopicStatus() {
+		return topicStatus;
+	}
+
+	public void setTopicStatus(List<KafkaTopicStatus> topicStatus) {
+		this.topicStatus = topicStatus;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaTopicStatus.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaTopicStatus.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaTopicStatus.java
new file mode 100755
index 0000000..7e41939
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/KafkaTopicStatus.java
@@ -0,0 +1,69 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Status of an individual Kafka topic")
+public class KafkaTopicStatus {
+	
+	@ApiModelProperty(value="Kafka topic", readOnly=true, required=true)
+	private String topic;
+
+	@ApiModelProperty(value="Information on Kafka offsets per group id (can be used by the admin to track how many messages are still waiting to be consumed)", readOnly=true, required=true)
+	private List<KafkaGroupOffsetInfo> consumerGroupOffsetInfo = new ArrayList<KafkaGroupOffsetInfo>();
+
+	@ApiModelProperty(value="List of Kafka partitions and the nodes they belong to", readOnly=true, required=true)
+	private List<KafkaPartitionInfo> partitionBrokersInfo = new ArrayList<KafkaPartitionInfo>();
+
+	@ApiModelProperty(value="Message counts of individual brokers", readOnly=true, required=true)
+	private List<KafkaBrokerPartitionMessageCountInfo> brokerPartitionMessageCountInfo = new ArrayList<KafkaBrokerPartitionMessageCountInfo>();
+
+	public String getTopic() {
+		return topic;
+	}
+
+	public void setTopic(String topic) {
+		this.topic = topic;
+	}
+
+	public List<KafkaGroupOffsetInfo> getConsumerGroupOffsetInfo() {
+		return consumerGroupOffsetInfo;
+	}
+
+	public void setConsumerGroupOffsetInfo(List<KafkaGroupOffsetInfo> offsetInfoList) {
+		this.consumerGroupOffsetInfo = offsetInfoList;
+	}
+
+	public List<KafkaPartitionInfo> getPartitionBrokersInfo() {
+		return partitionBrokersInfo;
+	}
+
+	public void setPartitionBrokersInfo(List<KafkaPartitionInfo> partitionBrokersMap) {
+		this.partitionBrokersInfo = partitionBrokersMap;
+	}
+
+	public List<KafkaBrokerPartitionMessageCountInfo> getBrokerPartitionMessageInfo() {
+		return brokerPartitionMessageCountInfo;
+	}
+
+	public void setBrokerPartitionMessageInfo(List<KafkaBrokerPartitionMessageCountInfo> brokerInfo) {
+		this.brokerPartitionMessageCountInfo = brokerInfo;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/MessagingStatus.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/MessagingStatus.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/MessagingStatus.java
new file mode 100755
index 0000000..f3248ac
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/MessagingStatus.java
@@ -0,0 +1,21 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import io.swagger.annotations.ApiModel;
+
+@ApiModel(description="Status of the ODF queues", subTypes={KafkaStatus.class})
+public class MessagingStatus {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFEngineOptions.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFEngineOptions.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFEngineOptions.java
new file mode 100755
index 0000000..fb3d3d6
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFEngineOptions.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="ODF startup options.")
+public class ODFEngineOptions {
+	
+	@ApiModelProperty(value="Indicates whether to explicitly restart the queues after shutting down the ODF engine (or to implicitly restart them when needed)", required=true)
+	private boolean restart = false;
+	
+	public boolean isRestart() {
+		return this.restart;
+	}
+
+	public void setRestart(boolean restart) {
+		this.restart = restart;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFStatus.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFStatus.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFStatus.java
new file mode 100755
index 0000000..3ae9068
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFStatus.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Overall ODF status.")
+public class ODFStatus {
+
+	@ApiModelProperty(value="Status of the ODF queues", readOnly=true)
+	private MessagingStatus messagingStatus;
+
+	@ApiModelProperty(value="Status of the ODF thread manager", readOnly=true)
+	private List<ThreadStatus> threadManagerStatus;
+
+	public MessagingStatus getMessagingStatus() {
+		return this.messagingStatus;
+	}
+
+	public void setMessagingStatus(MessagingStatus messagingStatus) {
+		this.messagingStatus = messagingStatus;
+	}
+
+	public List<ThreadStatus> getThreadManagerStatus() {
+		return this.threadManagerStatus;
+	}
+
+	public void setThreadManagerStatus(List<ThreadStatus> threadManagerStatus) {
+		this.threadManagerStatus = threadManagerStatus;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFVersion.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFVersion.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFVersion.java
new file mode 100755
index 0000000..d18825b
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ODFVersion.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="ODF version information.")
+public class ODFVersion {
+
+	@ApiModelProperty(value="Version of the ODF instance", readOnly=true, required=true)
+	private String version;
+
+	public String getVersion() {
+		return this.version;
+	}
+
+	public void setVersion(String version) {
+		this.version = version;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/PartitionOffsetInfo.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/PartitionOffsetInfo.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/PartitionOffsetInfo.java
new file mode 100755
index 0000000..ccaec51
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/PartitionOffsetInfo.java
@@ -0,0 +1,53 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Status of an individual Kafka offset")
+public class PartitionOffsetInfo {
+	@ApiModelProperty(value="Partition id", readOnly=true, required=true)
+	private Integer partitionId;
+
+	@ApiModelProperty(value="Kafka offset identifying the last consumed message within the partition", readOnly=true, required=true)
+	private Long offset;
+
+	@ApiModelProperty(value="Status message", readOnly=true)
+	private String message;
+
+	public Integer getPartitionId() {
+		return partitionId;
+	}
+
+	public void setPartitionId(Integer partitionId) {
+		this.partitionId = partitionId;
+	}
+
+	public Long getOffset() {
+		return offset;
+	}
+
+	public void setOffset(Long offset) {
+		this.offset = offset;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ServiceRuntimeInfo.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ServiceRuntimeInfo.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ServiceRuntimeInfo.java
new file mode 100755
index 0000000..4f3e871
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ServiceRuntimeInfo.java
@@ -0,0 +1,36 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+public class ServiceRuntimeInfo {
+	private String name;
+	private String description;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ServiceRuntimesInfo.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ServiceRuntimesInfo.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ServiceRuntimesInfo.java
new file mode 100755
index 0000000..a244127
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ServiceRuntimesInfo.java
@@ -0,0 +1,29 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.List;
+
+public class ServiceRuntimesInfo {
+	private List<ServiceRuntimeInfo> runtimes;
+
+	public List<ServiceRuntimeInfo> getRuntimes() {
+		return runtimes;
+	}
+
+	public void setRuntimes(List<ServiceRuntimeInfo> runtimes) {
+		this.runtimes = runtimes;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/SystemHealth.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/SystemHealth.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/SystemHealth.java
new file mode 100755
index 0000000..b6b918b
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/SystemHealth.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Overall ODF system health.")
+public class SystemHealth {
+	
+	public static enum HealthStatus {
+		OK, WARNING, ERROR
+	}
+
+	@ApiModelProperty(value="ODF health status", readOnly=true, required=true)
+	private HealthStatus status;
+
+	@ApiModelProperty(value="List of status messages", readOnly=true)
+	private List<String> messages = new ArrayList<>();
+
+	@ApiModelProperty(value="Health status of the individual subsystems", readOnly=true)
+	private List<SystemHealth> subSystemsHealth = new ArrayList<>();
+
+	public HealthStatus getStatus() {
+		return status;
+	}
+
+	public void setStatus(HealthStatus status) {
+		this.status = status;
+	}
+
+	public List<String> getMessages() {
+		return messages;
+	}
+
+	public void setMessages(List<String> messages) {
+		this.messages = messages;
+	}
+
+	public List<SystemHealth> getSubSystemsHealth() {
+		return subSystemsHealth;
+	}
+
+	public void setSubSystemsHealth(List<SystemHealth> subSystemsHealth) {
+		this.subSystemsHealth = subSystemsHealth;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ThreadStatus.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ThreadStatus.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ThreadStatus.java
new file mode 100755
index 0000000..74e939e
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/engine/ThreadStatus.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed 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.atlas.odf.api.engine;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel(description="Status of the ODF thread manager")
+public class ThreadStatus {
+
+	public static enum ThreadState { RUNNING, FINISHED, NON_EXISTENT }
+
+	@ApiModelProperty(value="Thread id", readOnly=true)
+	private String id;
+
+	@ApiModelProperty(value="Thread status", readOnly=true)
+	private ThreadState state;
+
+	@ApiModelProperty(value="Thread type", readOnly=true)
+	private String type;
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public ThreadState getState() {
+		return state;
+	}
+
+	public void setState(ThreadState state) {
+		this.state = state;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/metadata/AnnotationPropagator.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/metadata/AnnotationPropagator.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/metadata/AnnotationPropagator.java
new file mode 100755
index 0000000..1f48d0d
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/metadata/AnnotationPropagator.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed 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.atlas.odf.api.metadata;
+
+import org.apache.atlas.odf.api.annotation.AnnotationStore;
+
+/**
+ * Interface for the logic that propagates annotations from the AnnotationStore to the MetadataStore 
+ *
+ */
+public interface AnnotationPropagator {
+
+	/**
+	 * Run the actual propagation process 
+	 *@param as The annotation store from which the annotations should be taken from
+	 *@param requestId Propagate only annotations that belong to a specific analysis request id (optional)
+	 * 
+	 */
+	void propagateAnnotations(AnnotationStore as, String requestId);
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/6d19e129/odf/odf-api/src/main/java/org/apache/atlas/odf/api/metadata/AtlasMetadataQueryBuilder.java
----------------------------------------------------------------------
diff --git a/odf/odf-api/src/main/java/org/apache/atlas/odf/api/metadata/AtlasMetadataQueryBuilder.java b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/metadata/AtlasMetadataQueryBuilder.java
new file mode 100755
index 0000000..849277c
--- /dev/null
+++ b/odf/odf-api/src/main/java/org/apache/atlas/odf/api/metadata/AtlasMetadataQueryBuilder.java
@@ -0,0 +1,61 @@
+/**
+ * Licensed 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.atlas.odf.api.metadata;
+
+public class AtlasMetadataQueryBuilder extends MetadataQueryBuilder {
+
+	@Override
+	public String build() {
+		if (this.objectType != null) {
+			StringBuilder query = new StringBuilder("from " + objectType);
+			boolean firstCondition = true;
+			if (this.conditions != null) {
+				for (Condition condition : conditions) {
+					if (condition instanceof SimpleCondition) {
+						SimpleCondition simpleCond = (SimpleCondition) condition;
+						if (firstCondition) {
+							query.append(" where ");
+						} else {
+							query.append(" and ");
+						}
+						query.append(simpleCond.getAttributeName());
+						switch (simpleCond.getComparator()) {
+						case EQUALS:
+							query.append(" = ");
+							break;
+						case NOT_EQUALS:
+							query.append(" != ");
+							break;
+						default:
+							throw new RuntimeException("Comparator " + simpleCond.getComparator() + " is currently not supported");
+						}
+						Object val = simpleCond.getValue();
+						if (val instanceof MetaDataObjectReference) {
+							query.append("'" + ((MetaDataObjectReference) val).getId() + "'");
+						} else if (val instanceof String) {
+							query.append("'" + val.toString() + "'");
+						} else if (val == null) {
+							query.append("null");
+						} else {
+							query.append(val.toString());
+						}
+					}
+					firstCondition = false;
+				}
+			}
+			return query.toString();
+		}
+		return null;
+	}
+}



Mime
View raw message