This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit 4b350f85bdf930cac815e3ba1c7ebdda0450e5e8
Author: jyoti0208 <sjyotisingh...@gmail.com>
AuthorDate: Tue Aug 4 11:59:42 2020 -0400

    ATLAS-3875: adding sample client change
    
    Signed-off-by: Madhan Neethiraj <mad...@apache.org>
    (cherry picked from commit b7255ec7e24f87da6f2dba47965a4e22e94c2250)
---
 atlas-examples/pom.xml                             |  36 +++
 atlas-examples/sample-app/README.md                |  13 +
 atlas-examples/sample-app/pom.xml                  | 104 ++++++++
 .../atlas/examples/sampleapp/DiscoveryExample.java |  89 +++++++
 .../atlas/examples/sampleapp/EntityExample.java    | 276 +++++++++++++++++++++
 .../atlas/examples/sampleapp/GlossaryExample.java  | 112 +++++++++
 .../atlas/examples/sampleapp/LineageExample.java   |  48 ++++
 .../apache/atlas/examples/sampleapp/SampleApp.java | 151 +++++++++++
 .../examples/sampleapp/SampleAppConstants.java     |  75 ++++++
 .../atlas/examples/sampleapp/TypeDefExample.java   | 274 ++++++++++++++++++++
 .../main/resources/atlas-application.properties    |  25 ++
 pom.xml                                            |   1 +
 12 files changed, 1204 insertions(+)

diff --git a/atlas-examples/pom.xml b/atlas-examples/pom.xml
new file mode 100644
index 0000000..931729a
--- /dev/null
+++ b/atlas-examples/pom.xml
@@ -0,0 +1,36 @@
+<?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>
+        <artifactId>apache-atlas</artifactId>
+        <groupId>org.apache.atlas</groupId>
+        <version>2.2.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>atlas-examples</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>sample-app</module>
+    </modules>
+
+
+</project>
diff --git a/atlas-examples/sample-app/README.md 
b/atlas-examples/sample-app/README.md
new file mode 100644
index 0000000..65ac54c
--- /dev/null
+++ b/atlas-examples/sample-app/README.md
@@ -0,0 +1,13 @@
+## Introduction
+This is a simple application to demonstrate the use of AtlasClient. SampleApp 
provides examples to use following Client APIs.
+1. TypeDef
+2. Entity
+3. Lineage
+4. Search
+5. Glossary
+
+## Setting up
+1. cd ~/Desktop/atlas/atlas-examples/sample-app (the location where you have 
downloaded sample-app)
+2. mvn clean install
+3. mvn exec:java
+4. Then it will ask you to enter AtlasServer URL, username and password.
\ No newline at end of file
diff --git a/atlas-examples/sample-app/pom.xml 
b/atlas-examples/sample-app/pom.xml
new file mode 100644
index 0000000..6fc628f
--- /dev/null
+++ b/atlas-examples/sample-app/pom.xml
@@ -0,0 +1,104 @@
+<?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>
+        <artifactId>atlas-examples</artifactId>
+        <groupId>org.apache.atlas</groupId>
+        <version>2.2.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>sample-app</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.atlas</groupId>
+            <artifactId>atlas-client-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.atlas</groupId>
+            <artifactId>atlas-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.atlas</groupId>
+            <artifactId>atlas-client-v2</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.atlas</groupId>
+            <artifactId>atlas-intg</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>${jackson.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                    <artifactId>jackson-core</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                    <artifactId>jackson-annotations</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <version>${jackson.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>${jackson.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>java</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    
<mainClass>org.apache.atlas.examples.sampleapp.SampleApp</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git 
a/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/DiscoveryExample.java
 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/DiscoveryExample.java
new file mode 100644
index 0000000..b61e6eb
--- /dev/null
+++ 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/DiscoveryExample.java
@@ -0,0 +1,89 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.examples.sampleapp;
+
+import org.apache.atlas.AtlasClientV2;
+import org.apache.atlas.AtlasServiceException;
+import org.apache.atlas.model.discovery.AtlasQuickSearchResult;
+import org.apache.atlas.model.discovery.AtlasSearchResult;
+import org.apache.atlas.model.instance.AtlasEntityHeader;
+
+import java.util.List;
+
+public class DiscoveryExample {
+    private static final String[] DSL_QUERIES = new String[] { "from DataSet", 
"from Process" };
+
+    private final AtlasClientV2 client;
+
+    DiscoveryExample(AtlasClientV2 client) {
+        this.client = client;
+    }
+
+    public void testSearch() {
+        for (String dslQuery : DSL_QUERIES) {
+            try {
+                AtlasSearchResult       result      = 
client.dslSearchWithParams(dslQuery, 10, 0);
+                List<AtlasEntityHeader> entities    = result != null ? 
result.getEntities() : null;
+                int                     resultCount = entities == null ? 0 : 
entities.size();
+
+                System.out.println("DSL Query: " + dslQuery);
+                System.out.println("  result count: " + resultCount);
+
+                for (int i = 0; i < resultCount; i++) {
+                    System.out.println("  result # " + (i + 1) + ": " + 
entities.get(i));
+                }
+            } catch (Exception e) {
+                System.out.println("query -: " + dslQuery + " failed");
+            }
+        }
+    }
+
+    public void quickSearch(String searchString) {
+        try {
+            AtlasQuickSearchResult  result      = 
client.quickSearch(searchString, SampleAppConstants.TABLE_TYPE, false, 2, 0);
+            List<AtlasEntityHeader> entities    = result != null && 
result.getSearchResults() != null ? result.getSearchResults().getEntities() : 
null;
+            int                     resultCount = entities == null ? 0 : 
entities.size();
+
+            System.out.println("Quick search: query-string=" + searchString);
+            System.out.println("  result count: " + resultCount);
+
+            for (int i = 0; i < resultCount; i++) {
+                System.out.println("  result # " + (i + 1) + ": " + 
entities.get(i));
+            }
+        } catch (AtlasServiceException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void basicSearch(String typeName, String classification, String 
query) {
+        try {
+            AtlasSearchResult       result      = client.basicSearch(typeName, 
classification, query, false, 2, 0);
+            List<AtlasEntityHeader> entities    = result != null ? 
result.getEntities() : null;
+            int                     resultCount = entities == null ? 0 : 
entities.size();
+
+            System.out.println("Basic search: typeName=" + typeName + ", 
classification=" + classification + ", query=" + query);
+            System.out.println("  result count: " + resultCount);
+
+            for (int i = 0; i < resultCount; i++) {
+                System.out.println("  result # " + (i + 1) + ": " + 
entities.get(i));
+            }
+        } catch (AtlasServiceException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git 
a/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/EntityExample.java
 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/EntityExample.java
new file mode 100644
index 0000000..23fc3b8
--- /dev/null
+++ 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/EntityExample.java
@@ -0,0 +1,276 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.examples.sampleapp;
+
+import org.apache.atlas.AtlasClientV2;
+import org.apache.atlas.AtlasServiceException;
+import org.apache.atlas.model.instance.AtlasClassification;
+import org.apache.atlas.model.instance.AtlasEntity;
+import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
+import org.apache.atlas.model.instance.AtlasEntityHeader;
+import org.apache.atlas.model.instance.AtlasStruct;
+import org.apache.atlas.model.instance.EntityMutationResponse;
+import org.apache.atlas.model.instance.EntityMutations;
+import org.apache.atlas.type.AtlasTypeUtil;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static java.util.Arrays.asList;
+import static org.apache.atlas.examples.sampleapp.SampleAppConstants.*;
+import static org.apache.atlas.type.AtlasTypeUtil.toAtlasRelatedObjectId;
+import static org.apache.atlas.type.AtlasTypeUtil.toAtlasRelatedObjectIds;
+
+public class EntityExample {
+    private static final String DATABASE_NAME                = 
"employee_db_entity";
+    private static final String TABLE_NAME                   = 
"employee_table_entity";
+    private static final String PROCESS_NAME                 = 
"employee_process_entity";
+    private static final String METADATA_NAMESPACE_SUFFIX    = "@cl1";
+    private static final String MANAGED_TABLE                = "Managed";
+    private static final String ATTR_NAME                    = "name";
+    private static final String ATTR_DESCRIPTION             = "description";
+    private static final String ATTR_QUALIFIED_NAME          = "qualifiedName";
+    private static final String REFERENCEABLE_ATTRIBUTE_NAME = 
ATTR_QUALIFIED_NAME;
+    private static final String COLUMN_TIME_ID               = "time_id";
+    private static final String COLUMN_CUSTOMER_ID           = "customer_id";
+    private static final String COLUMN_COMPANY_ID            = "company_id";
+
+    private final AtlasClientV2     client;
+    private       AtlasEntity       dbEntity;
+    private       AtlasEntity       tableEntityUS;
+    private       AtlasEntity       tableEntityCanada;
+    private       AtlasEntityHeader loadProcess;
+
+    EntityExample(AtlasClientV2 client) {
+        this.client = client;
+    }
+
+    public void createEntities() throws Exception {
+        if (dbEntity == null) {
+            dbEntity = createDatabaseEntity(DATABASE_NAME);
+
+            System.out.println("Created database entity: typeName=" + 
dbEntity.getTypeName() + ", guid=" + dbEntity.getGuid());
+        }
+
+        if (tableEntityCanada == null) {
+            tableEntityCanada = createTableEntity(TABLE_NAME + "_CANADA");
+
+            System.out.println("Created table entity : typeName=" + 
tableEntityCanada.getTypeName() + ", guid=" + tableEntityCanada.getGuid());
+        }
+
+        if (tableEntityUS == null) {
+            tableEntityUS = createTableEntity(TABLE_NAME + "_US");
+
+            System.out.println("Created table entity : typeName=" + 
tableEntityUS.getTypeName() + ", guid=" + tableEntityUS.getGuid());
+        }
+
+        if (loadProcess == null) {
+            loadProcess = createProcessEntity(PROCESS_NAME);
+
+            System.out.println("Created process entity : typeName=" + 
loadProcess.getTypeName() + ", guid=" + loadProcess.getGuid());
+        }
+    }
+
+    public AtlasEntity getTableEntity() {
+        return tableEntityUS;
+    }
+
+    public void getEntityByGuid(String entityGuid) throws Exception {
+        AtlasEntityWithExtInfo entity = client.getEntityByGuid(entityGuid);
+
+        if (entity != null) {
+            System.out.println("Retrieved entity with guid=" + entityGuid + ": 
" + entity);
+        }
+    }
+
+    public void deleteEntities() throws Exception {
+        client.deleteEntityByGuid(loadProcess.getGuid());
+
+        System.out.println("Deleted entity: guid=" + loadProcess.getGuid());
+
+        List<String> entityGuids = Arrays.asList(tableEntityUS.getGuid(), 
tableEntityCanada.getGuid(), dbEntity.getGuid());
+
+        client.deleteEntitiesByGuids(entityGuids);
+
+        System.out.println("Deleted entities:");
+        for (String entityGuid : entityGuids) {
+            System.out.println("  guid=" + entityGuid);
+        }
+    }
+
+    private AtlasEntity createTableEntity(String tableName) throws Exception {
+        return createHiveTable(dbEntity, tableName, MANAGED_TABLE,
+                Arrays.asList(createColumn(COLUMN_TIME_ID, "int", "time id"),
+                              createColumn(COLUMN_CUSTOMER_ID, "int", 
"customer id", SampleAppConstants.PII_TAG),
+                              createColumn(COLUMN_COMPANY_ID, "double", 
"company id", SampleAppConstants.FINANCE_TAG)),
+                SampleAppConstants.METRIC_CLASSIFICATION);
+    }
+
+    private AtlasEntityHeader createProcessEntity(String processName) throws 
Exception {
+        return createProcess(processName, "hive query for monthly avg salary", 
"user ETL",
+                asList(tableEntityUS),
+                asList(tableEntityCanada),
+                "create table as select ", "plan", "id", "graph", 
SampleAppConstants.CLASSIFICATION);
+    }
+
+    private AtlasEntityHeader createProcess(String name, String description, 
String user, List<AtlasEntity> inputs, List<AtlasEntity> outputs,
+                                            String queryText, String 
queryPlan, String queryId, String queryGraph, String... classificationNames) 
throws Exception {
+
+        AtlasEntity entity = new AtlasEntity(SampleAppConstants.PROCESS_TYPE);
+
+        entity.setAttribute(ATTR_NAME, name);
+        entity.setAttribute(REFERENCEABLE_ATTRIBUTE_NAME, name + 
METADATA_NAMESPACE_SUFFIX);
+        entity.setAttribute(ATTR_DESCRIPTION, description);
+        entity.setAttribute(ATTR_USERNAME, user);
+        entity.setAttribute(ATTR_START_TIME, System.currentTimeMillis());
+        entity.setAttribute(ATTR_END_TIME, System.currentTimeMillis() + 10000);
+        entity.setAttribute(ATTR_QUERY_TEXT, queryText);
+        entity.setAttribute(ATTR_QUERY_PLAN, queryPlan);
+        entity.setAttribute(ATTR_QUERY_ID, queryId);
+        entity.setAttribute(ATTR_QUERY_GRAPH, queryGraph);
+        entity.setAttribute(ATTR_OPERATION_TYPE, "testOperation");
+
+        entity.setRelationshipAttribute(ATTR_INPUTS, 
toAtlasRelatedObjectIds(inputs));
+        entity.setRelationshipAttribute(ATTR_OUTPUTS, 
toAtlasRelatedObjectIds(outputs));
+
+        entity.setClassifications(toAtlasClassifications(classificationNames));
+
+        return createEntity(new AtlasEntityWithExtInfo(entity));
+    }
+
+    private AtlasEntity createColumn(String name, String dataType, String 
comment, String... classificationNames) {
+        AtlasEntity ret = new AtlasEntity(SampleAppConstants.COLUMN_TYPE);
+
+        ret.setAttribute(ATTR_NAME, name);
+        ret.setAttribute(REFERENCEABLE_ATTRIBUTE_NAME, name + 
METADATA_NAMESPACE_SUFFIX);
+        ret.setAttribute(ATTR_DATA_TYPE, dataType);
+        ret.setAttribute(ATTR_COMMENT, comment);
+
+        ret.setClassifications(toAtlasClassifications(classificationNames));
+
+        return ret;
+    }
+
+    private List<AtlasClassification> toAtlasClassifications(String[] 
classificationNames) {
+        List<AtlasClassification> ret = new ArrayList<>();
+
+        if (classificationNames != null) {
+            for (String classificationName : classificationNames) {
+                ret.add(new AtlasClassification(classificationName));
+            }
+        }
+
+        return ret;
+    }
+
+    private AtlasEntityHeader createEntity(AtlasEntityWithExtInfo 
atlasEntityWithExtInfo) {
+        EntityMutationResponse entity;
+
+        try {
+            entity = client.createEntity(atlasEntityWithExtInfo);
+
+            if (entity != null && 
entity.getEntitiesByOperation(EntityMutations.EntityOperation.CREATE) != null) {
+                List<AtlasEntityHeader> list = 
entity.getEntitiesByOperation(EntityMutations.EntityOperation.CREATE);
+
+                if (list.size() > 0) {
+                    return 
entity.getEntitiesByOperation(EntityMutations.EntityOperation.CREATE).get(0);
+                }
+            }
+        } catch (AtlasServiceException e) {
+            System.out.println("failed in create entity");
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    private AtlasEntity createDatabaseEntity(String dbName) {
+        AtlasEntity       hiveDBInstance = createHiveDBInstance(dbName);
+        AtlasEntityHeader entityHeader   = createEntity(new 
AtlasEntityWithExtInfo(hiveDBInstance));
+
+        if (entityHeader != null && entityHeader.getGuid() != null) {
+            hiveDBInstance.setGuid(entityHeader.getGuid());
+        }
+
+        return hiveDBInstance;
+    }
+
+    protected AtlasEntity createHiveDBInstance(String dbName) {
+        AtlasEntity entity = new AtlasEntity(SampleAppConstants.DATABASE_TYPE);
+
+        entity.setAttribute(ATTR_NAME, dbName);
+        entity.setAttribute(ATTR_DESCRIPTION, "employee database");
+        entity.setAttribute(METADATA_NAMESPACE_SUFFIX, "employeeCluster");
+        entity.setAttribute(REFERENCEABLE_ATTRIBUTE_NAME, dbName + 
METADATA_NAMESPACE_SUFFIX);
+        entity.setAttribute(ATTR_OWNER, "user");
+        entity.setAttribute(ATTR_LOCATION_URI, "/tmp");
+        entity.setAttribute(ATTR_CREATE_TIME, 1000);
+
+        return entity;
+    }
+
+    private AtlasEntity createHiveTable(AtlasEntity database, String 
tableName, String tableType, List<AtlasEntity> columns, String... 
classificationNames) throws Exception {
+        AtlasEntityWithExtInfo entityWithExtInfo = new 
AtlasEntityWithExtInfo();
+
+        AtlasEntity hiveTableInstance = createHiveTable(database, tableName, 
tableType, classificationNames);
+        entityWithExtInfo.setEntity(hiveTableInstance);
+        hiveTableInstance.setRelationshipAttribute(ATTR_COLUMNS, 
toAtlasRelatedObjectIds(columns));
+
+        for (AtlasEntity column : columns) {
+            column.setRelationshipAttribute(ATTR_TABLE, 
toAtlasRelatedObjectId(hiveTableInstance));
+            entityWithExtInfo.addReferredEntity(column);
+        }
+
+        AtlasEntityHeader createdHeader = createEntity(entityWithExtInfo);
+
+        if (createdHeader != null && createdHeader.getGuid() != null) {
+            hiveTableInstance.setGuid(createdHeader.getGuid());
+        }
+
+        return hiveTableInstance;
+    }
+
+    private AtlasEntity createHiveTable(AtlasEntity database, String 
tableName, String tableType, String... classificationNames) throws Exception {
+        AtlasEntity table = new AtlasEntity(SampleAppConstants.TABLE_TYPE);
+
+        table.setAttribute(ATTR_NAME, tableName);
+        table.setAttribute(REFERENCEABLE_ATTRIBUTE_NAME, 
database.getAttribute(ATTR_NAME) + "." + tableName + METADATA_NAMESPACE_SUFFIX);
+        table.setAttribute(ATTR_TABLE_TYPE, tableType);
+        table.setRelationshipAttribute(ATTR_DB, 
AtlasTypeUtil.getAtlasRelatedObjectId(database, TABLE_DATABASE_TYPE));
+
+        table.setAttribute(ATTR_DESCRIPTION, "emp table");
+        table.setAttribute(ATTR_LAST_ACCESS_TIME, "2014-07-11T08:00:00.000Z");
+        table.setAttribute(ATTR_LEVEL, 2);
+        table.setAttribute(ATTR_COMPRESSED, false);
+        table.setClassifications(toAtlasClassifications(classificationNames));
+
+        AtlasStruct serde1 = new AtlasStruct(STRUCT_TYPE_SERDE);
+
+        serde1.setAttribute(ATTR_NAME, "serde1");
+        serde1.setAttribute(ATTR_SERDE, "serde1");
+        table.setAttribute(ATTR_SERDE1, serde1);
+
+        AtlasStruct serde2 = new AtlasStruct(STRUCT_TYPE_SERDE);
+        serde2.setAttribute(ATTR_NAME, "serde2");
+        serde2.setAttribute(ATTR_SERDE, "serde2");
+        table.setAttribute(ATTR_SERDE2, serde2);
+
+        return table;
+    }
+}
\ No newline at end of file
diff --git 
a/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/GlossaryExample.java
 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/GlossaryExample.java
new file mode 100644
index 0000000..a49b8e8
--- /dev/null
+++ 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/GlossaryExample.java
@@ -0,0 +1,112 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.examples.sampleapp;
+
+import org.apache.atlas.AtlasClientV2;
+import org.apache.atlas.model.glossary.AtlasGlossary;
+import org.apache.atlas.model.glossary.AtlasGlossary.AtlasGlossaryExtInfo;
+import org.apache.atlas.model.glossary.AtlasGlossaryCategory;
+import org.apache.atlas.model.glossary.AtlasGlossaryTerm;
+import org.apache.atlas.model.glossary.relations.AtlasGlossaryHeader;
+
+public class GlossaryExample {
+    private static final String GLOSSARY_NAME = "EmployeeCountry";
+
+    private final AtlasClientV2         client;
+    private       AtlasGlossary         empGlossary;
+    private       AtlasGlossaryTerm     empSalaryTerm;
+    private       AtlasGlossaryCategory empCompanyCategory;
+
+    GlossaryExample(AtlasClientV2 client) {
+        this.client = client;
+    }
+
+    public void createGlossary() throws Exception {
+        AtlasGlossary glossary = new AtlasGlossary();
+
+        glossary.setName(GLOSSARY_NAME);
+        glossary.setLanguage("English");
+        glossary.setShortDescription("This is a test Glossary");
+
+        empGlossary = client.createGlossary(glossary);
+    }
+
+    public void getGlossaryDetail() throws Exception {
+        AtlasGlossaryExtInfo extInfo = 
client.getGlossaryExtInfo(empGlossary.getGuid());
+
+        assert (extInfo != null);
+
+        System.out.println("extra info of Glossary is :- " + extInfo.getGuid() 
+ " name is :- " + extInfo.getName() + " language is :- " + 
extInfo.getLanguage());
+    }
+
+    public void createGlossaryTerm() throws Exception {
+        if (empSalaryTerm != null) {
+            System.out.println("EmpSalaryTerm: term already exists");
+            return;
+        }
+
+        AtlasGlossaryHeader glossary = new AtlasGlossaryHeader();
+        AtlasGlossaryTerm   term     = new AtlasGlossaryTerm();
+
+        glossary.setGlossaryGuid(empGlossary.getGuid());
+        glossary.setDisplayText(empGlossary.getName());
+
+        term.setAnchor(glossary);
+        term.setName("EmpSalaryTerm");
+
+        empSalaryTerm = client.createGlossaryTerm(term);
+
+        if (empSalaryTerm != null) {
+            System.out.println("Created term for Employee Salary: " + 
empSalaryTerm);
+        }
+    }
+
+    public void createGlossaryCategory() throws Exception {
+        if (empCompanyCategory != null) {
+            System.out.println("EmpSalaryCategory: category already exists");
+            return;
+        }
+
+        AtlasGlossaryHeader   glossary  = new AtlasGlossaryHeader();
+        AtlasGlossaryCategory category = new AtlasGlossaryCategory();
+
+        glossary.setGlossaryGuid(empGlossary.getGuid());
+        glossary.setDisplayText(empGlossary.getName());
+
+        category.setAnchor(glossary);
+        category.setName("EmpSalaryCategory");
+
+        empCompanyCategory = client.createGlossaryCategory(category);
+
+        if (empCompanyCategory != null) {
+            System.out.println("Created Category for Employee Category :- " + 
empCompanyCategory);
+        }
+    }
+
+    public void deleteGlossary() throws Exception {
+        if (empGlossary != null) {
+            client.deleteGlossaryByGuid(empGlossary.getGuid());
+
+            System.out.println("empGlossary is not present. Skipping the 
delete operation.");
+        }
+
+        empGlossary        = null;
+        empSalaryTerm      = null;
+        empCompanyCategory = null;
+    }
+}
diff --git 
a/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/LineageExample.java
 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/LineageExample.java
new file mode 100644
index 0000000..d923965
--- /dev/null
+++ 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/LineageExample.java
@@ -0,0 +1,48 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.examples.sampleapp;
+
+import org.apache.atlas.AtlasClientV2;
+import org.apache.atlas.AtlasServiceException;
+import org.apache.atlas.model.instance.AtlasEntityHeader;
+import org.apache.atlas.model.lineage.AtlasLineageInfo;
+
+import java.util.Map;
+import java.util.Set;
+
+public class LineageExample {
+    private AtlasClientV2 atlasClient;
+
+    LineageExample(AtlasClientV2 atlasClient) {
+        this.atlasClient = atlasClient;
+    }
+
+    public void lineage(String guid) throws AtlasServiceException {
+        AtlasLineageInfo                      lineageInfo   = 
atlasClient.getLineageInfo(guid, AtlasLineageInfo.LineageDirection.BOTH, 0);
+        Set<AtlasLineageInfo.LineageRelation> relations     = 
lineageInfo.getRelations();
+        Map<String, AtlasEntityHeader>        guidEntityMap = 
lineageInfo.getGuidEntityMap();
+
+        for (AtlasLineageInfo.LineageRelation relation : relations) {
+            AtlasEntityHeader fromEntity = 
guidEntityMap.get(relation.getFromEntityId());
+            AtlasEntityHeader toEntity   = 
guidEntityMap.get(relation.getToEntityId());
+
+            System.out.println(fromEntity.getDisplayText() + "(" + 
fromEntity.getTypeName() + ") -> " +
+                               toEntity.getDisplayText() + "(" + 
toEntity.getTypeName() + ")");
+        }
+    }
+}
\ No newline at end of file
diff --git 
a/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/SampleApp.java
 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/SampleApp.java
new file mode 100644
index 0000000..5ef6a90
--- /dev/null
+++ 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/SampleApp.java
@@ -0,0 +1,151 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.examples.sampleapp;
+
+import org.apache.atlas.AtlasClientV2;
+import org.apache.atlas.AtlasException;
+import org.apache.atlas.model.instance.AtlasEntity;
+import org.apache.atlas.utils.AuthenticationUtil;
+
+import java.util.Scanner;
+
+public class SampleApp {
+    private AtlasClientV2 client;
+
+    SampleApp(String[] atlasServerUrls, String[] basicAuthUsernamePassword) {
+        client = new AtlasClientV2(atlasServerUrls, basicAuthUsernamePassword);
+    }
+
+    SampleApp(String[] atlasServerUrls) throws AtlasException {
+        client = new AtlasClientV2(atlasServerUrls);
+    }
+
+    public static void main(String[] args) throws Exception {
+        String[]  basicAuthUsernamePassword = null;
+        String[]  atlasServerUrls           = null;
+        SampleApp sampleApp                 = null;
+
+        try {
+            atlasServerUrls = getServerUrl();
+
+            if (!AuthenticationUtil.isKerberosAuthenticationEnabled()) {
+                basicAuthUsernamePassword = getUserInput();
+                sampleApp                 = new SampleApp(atlasServerUrls, 
basicAuthUsernamePassword);
+            } else {
+                sampleApp = new SampleApp(atlasServerUrls);
+            }
+
+            // TypeDef Examples
+            TypeDefExample typeDefExample = new 
TypeDefExample(sampleApp.getClient());
+
+            typeDefExample.createTypeDefinitions();
+            typeDefExample.printTypeDefinitions();
+
+            // Entity Examples
+            EntityExample entityExample = new 
EntityExample(sampleApp.getClient());
+
+            entityExample.createEntities();
+
+            AtlasEntity createdEntity = entityExample.getTableEntity();
+
+            entityExample.getEntityByGuid(createdEntity.getGuid());
+
+            // Lineage Examples
+            sampleApp.lineageExample(createdEntity.getGuid());
+
+            // Discovery/Search Examples
+            sampleApp.discoveryExample(createdEntity);
+
+            // Glossary Examples
+            sampleApp.glossaryExample();
+
+            entityExample.deleteEntities();
+
+            typeDefExample.removeTypeDefinitions();
+        } finally {
+            if (sampleApp != null && sampleApp.getClient() != null) {
+                sampleApp.getClient().close();
+            }
+        }
+    }
+
+    public AtlasClientV2 getClient() {
+        return client;
+    }
+
+    private void lineageExample(String entityGuid) throws Exception {
+        LineageExample lineageExample = new LineageExample(client);
+
+        lineageExample.lineage(entityGuid);
+    }
+
+    private void discoveryExample(AtlasEntity entity) {
+        DiscoveryExample discoveryExample = new DiscoveryExample(client);
+
+        discoveryExample.testSearch();
+        discoveryExample.quickSearch(entity.getTypeName());
+        discoveryExample.basicSearch(entity.getTypeName(), 
SampleAppConstants.METRIC_CLASSIFICATION, 
(String)entity.getAttribute(SampleAppConstants.ATTR_NAME));
+    }
+
+    private void glossaryExample() throws Exception {
+        GlossaryExample glossaryExample = new GlossaryExample(client);
+
+        glossaryExample.createGlossary();
+        glossaryExample.createGlossaryTerm();
+        glossaryExample.getGlossaryDetail();
+        glossaryExample.createGlossaryCategory();
+        glossaryExample.deleteGlossary();
+    }
+
+    private static String[] getUserInput() {
+        String username = null;
+        String password = null;
+
+        try {
+            Scanner scanner = new Scanner(System.in);
+
+            System.out.println("Enter username for atlas :- ");
+            username = scanner.nextLine();
+
+            System.out.println("Enter password for atlas :- ");
+            password = scanner.nextLine();
+        } catch (Exception e) {
+            System.out.print("Error while reading user input");
+            System.exit(1);
+        }
+
+        return new String[] { username, password };
+    }
+
+    private static String[] getServerUrl() {
+        String atlasServerUrl = null;
+
+        try {
+            Scanner scanner = new Scanner(System.in);
+
+            System.out.println("Enter url for Atlas server :- ");
+
+            atlasServerUrl = scanner.nextLine();
+        } catch (Exception e) {
+            System.out.print("Error while reading user input");
+            System.exit(1);
+        }
+
+        return new String[] { atlasServerUrl };
+    }
+}
\ No newline at end of file
diff --git 
a/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/SampleAppConstants.java
 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/SampleAppConstants.java
new file mode 100644
index 0000000..d6f113a
--- /dev/null
+++ 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/SampleAppConstants.java
@@ -0,0 +1,75 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.examples.sampleapp;
+
+public final class SampleAppConstants {
+    public static final String ATTR_NAME             = "name";
+    public static final String ATTR_DESCRIPTION      = "description";
+    public static final String ATTR_CREATE_TIME      = "createTime";
+    public static final String ATTR_OWNER            = "owner";
+    public static final String ATTR_TABLE_TYPE       = "tableType";
+    public static final String ATTR_LAST_ACCESS_TIME = "lastAccessTime";
+    public static final String ATTR_RANDOM_TABLE     = "randomTable";
+    public static final String ATTR_TEMPORARY        = "temporary";
+    public static final String ATTR_DATA_TYPE        = "dataType";
+    public static final String ATTR_COMMENT          = "comment";
+    public static final String ATTR_LOCATION_URI     = "locationUri";
+    public static final String ATTR_USERNAME         = "userName";
+    public static final String ATTR_START_TIME       = "startTime";
+    public static final String ATTR_END_TIME         = "endTime";
+    public static final String ATTR_QUERY_TEXT       = "queryText";
+    public static final String ATTR_QUERY_PLAN       = "queryPlan";
+    public static final String ATTR_QUERY_ID         = "queryId";
+    public static final String ATTR_QUERY_GRAPH      = "queryGraph";
+    public static final String ATTR_OPERATION_TYPE   = "operationType";
+    public static final String ATTR_LEVEL            = "level";
+    public static final String ATTR_COMPRESSED       = "compressed";
+    public static final String ATTR_SERDE            = "serde";
+    public static final String ATTR_SERDE1           = "serde1";
+    public static final String ATTR_SERDE2           = "serde2";
+    public static final String ATTR_ATTR1            = "attr1";
+    public static final String ATTR_ATTR2            = "attr2";
+    public static final String ATTR_ATTR8            = "attr8";
+    public static final String ATTR_ATTR11           = "attr11";
+    public static final String ATTR_ATTR18           = "attr88";
+    public static final String ATTR_INPUTS           = "inputs";
+    public static final String ATTR_OUTPUTS          = "outputs";
+    public static final String ATTR_DB               = "db";
+    public static final String ATTR_TABLE            = "table";
+    public static final String ATTR_COLUMNS          = "columns";
+
+    public static final String ENTITY_TYPE_DATASET = "DataSet";
+    public static final String ENTITY_TYPE_PROCESS = "Process";
+
+    public static final String PII_TAG                   = "sample_pii_Tag";
+    public static final String FINANCE_TAG               = 
"sample_finance_Tag";
+    public static final String CLASSIFICATION            = "classification";
+    public static final String METRIC_CLASSIFICATION     = "Metric";
+
+    public static final String DATABASE_TYPE             = "sample_db_type";
+    public static final String PROCESS_TYPE              = 
"sample_process_type";
+    public static final String TABLE_TYPE                = "sample_table_type";
+    public static final String COLUMN_TYPE               = 
"sample_column_type";
+
+    public static final String TABLE_DATABASE_TYPE       = "sample_Table_DB";
+    public static final String TABLE_COLUMNS_TYPE        = 
"sample_Table_Columns";
+    public static final String ENUM_TABLE_TYPE           = "tableType";
+    public static final String BUSINESS_METADATA_TYPE    = "bmWithAllTypes";
+    public static final String BUSINESS_METADATA_TYPE_MV = "bmWithAllTypesMV";
+    public static final String STRUCT_TYPE_SERDE         = "serdeType";
+}
diff --git 
a/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/TypeDefExample.java
 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/TypeDefExample.java
new file mode 100644
index 0000000..01c5b31
--- /dev/null
+++ 
b/atlas-examples/sample-app/src/main/java/org/apache/atlas/examples/sampleapp/TypeDefExample.java
@@ -0,0 +1,274 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.examples.sampleapp;
+
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+import org.apache.atlas.AtlasClientV2;
+import org.apache.atlas.AtlasServiceException;
+import org.apache.atlas.model.SearchFilter;
+import org.apache.atlas.model.typedef.AtlasBaseTypeDef;
+import org.apache.atlas.model.typedef.AtlasBusinessMetadataDef;
+import org.apache.atlas.model.typedef.AtlasClassificationDef;
+import org.apache.atlas.model.typedef.AtlasEntityDef;
+import org.apache.atlas.model.typedef.AtlasEnumDef;
+import org.apache.atlas.model.typedef.AtlasRelationshipDef;
+import org.apache.atlas.model.typedef.AtlasStructDef;
+import org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef;
+import org.apache.atlas.model.typedef.AtlasTypesDef;
+import org.apache.atlas.type.AtlasTypeUtil;
+
+import javax.ws.rs.core.MultivaluedMap;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.atlas.examples.sampleapp.SampleAppConstants.*;
+import static org.apache.atlas.model.typedef.AtlasBaseTypeDef.*;
+import static 
org.apache.atlas.model.typedef.AtlasRelationshipDef.RelationshipCategory.AGGREGATION;
+import static 
org.apache.atlas.model.typedef.AtlasRelationshipDef.RelationshipCategory.COMPOSITION;
+import static 
org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef.Cardinality.SET;
+import static 
org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE;
+import static org.apache.atlas.type.AtlasTypeUtil.createBusinessMetadataDef;
+import static org.apache.atlas.type.AtlasTypeUtil.createOptionalAttrDef;
+import static org.apache.atlas.type.AtlasTypeUtil.createRelationshipEndDef;
+import static org.apache.atlas.type.AtlasTypeUtil.createRelationshipTypeDef;
+import static org.apache.atlas.type.AtlasTypeUtil.createTraitTypeDef;
+
+public class TypeDefExample {
+    private static final String[] SAMPLE_APP_TYPES = {
+            SampleAppConstants.DATABASE_TYPE,
+            SampleAppConstants.TABLE_TYPE,
+            SampleAppConstants.COLUMN_TYPE,
+            SampleAppConstants.PROCESS_TYPE,
+            SampleAppConstants.PII_TAG,
+            SampleAppConstants.CLASSIFICATION,
+            SampleAppConstants.FINANCE_TAG,
+            SampleAppConstants.METRIC_CLASSIFICATION
+    };
+
+    private final AtlasClientV2 client;
+    private       AtlasTypesDef typesDef;
+
+    TypeDefExample(AtlasClientV2 client) {
+        this.client = client;
+    }
+
+    public void createTypeDefinitions() throws Exception {
+        AtlasEntityDef databaseDef  = createDatabaseDef();
+        AtlasEntityDef tableDef     = createTableDef();
+        AtlasEntityDef columnDef    = createColumnDef();
+        AtlasEntityDef processDef   = createProcessDef();
+        AtlasStructDef serDeDef     = createSerDeDef();
+        AtlasEnumDef   tableTypeDef = createTableTypeEnumDef();
+
+        List<AtlasClassificationDef>   classificationDefs  = 
createClassificationDefs();
+        List<AtlasBusinessMetadataDef> businessMetadataDef = 
createBusinessMetadataDefs();
+        List<AtlasRelationshipDef>     relationshipDefs    = 
createAtlasRelationshipDef();
+
+        AtlasTypesDef typesDef = new 
AtlasTypesDef(Collections.singletonList(tableTypeDef),
+                                                   
Collections.singletonList(serDeDef),
+                                                   classificationDefs,
+                                                   Arrays.asList(databaseDef, 
tableDef, columnDef, processDef),
+                                                   relationshipDefs,
+                                                   businessMetadataDef);
+
+        this.typesDef = batchCreateTypes(typesDef);
+    }
+
+    public void printTypeDefinitions() throws AtlasServiceException {
+        for (String typeName : SAMPLE_APP_TYPES) {
+            MultivaluedMap<String, String> searchParams = new 
MultivaluedMapImpl();
+
+            searchParams.add(SearchFilter.PARAM_NAME, typeName);
+
+            SearchFilter searchFilter = new SearchFilter(searchParams);
+
+            AtlasTypesDef typesDef = client.getAllTypeDefs(searchFilter);
+
+            assert (!typesDef.isEmpty());
+
+            System.out.println("Created type [" + typeName + "]");
+        }
+    }
+
+    public void removeTypeDefinitions() throws AtlasServiceException {
+        if (typesDef != null) {
+            client.deleteAtlasTypeDefs(typesDef);
+
+            typesDef = null;
+
+            System.out.println("Deleted TypeDef successfully!");
+        }
+    }
+
+    private AtlasEntityDef createDatabaseDef() {
+        return 
AtlasTypeUtil.createClassTypeDef(SampleAppConstants.DATABASE_TYPE,
+                                                
Collections.singleton(ENTITY_TYPE_DATASET),
+                                                
AtlasTypeUtil.createOptionalAttrDef("locationUri", "string"),
+                                                
AtlasTypeUtil.createOptionalAttrDef(ATTR_CREATE_TIME, "long"),
+                                                new 
AtlasAttributeDef(ATTR_RANDOM_TABLE,
+                                                        
AtlasBaseTypeDef.getArrayTypeName(SampleAppConstants.TABLE_TYPE),
+                                                        true, 
AtlasAttributeDef.Cardinality.SET));
+    }
+
+    private AtlasEntityDef createTableDef() {
+        return AtlasTypeUtil.createClassTypeDef(SampleAppConstants.TABLE_TYPE,
+                                                
Collections.singleton(ENTITY_TYPE_DATASET),
+                                                
createOptionalAttrDef(ATTR_CREATE_TIME, "long"),
+                                                
createOptionalAttrDef(ATTR_LAST_ACCESS_TIME, "date"),
+                                                
createOptionalAttrDef(ATTR_TEMPORARY, "boolean"),
+                                                
createOptionalAttrDef(ATTR_TABLE_TYPE, ENUM_TABLE_TYPE),
+                                                
createOptionalAttrDef(ATTR_SERDE1, STRUCT_TYPE_SERDE),
+                                                
createOptionalAttrDef(ATTR_SERDE2, STRUCT_TYPE_SERDE));
+    }
+
+    private AtlasEntityDef createColumnDef() {
+        return AtlasTypeUtil.createClassTypeDef(SampleAppConstants.COLUMN_TYPE,
+                                                
Collections.singleton(ENTITY_TYPE_DATASET),
+                                                
AtlasTypeUtil.createOptionalAttrDef(ATTR_DATA_TYPE, "string"),
+                                                
AtlasTypeUtil.createOptionalAttrDef(ATTR_COMMENT, "string"));
+    }
+
+    private AtlasEntityDef createProcessDef() {
+        return 
AtlasTypeUtil.createClassTypeDef(SampleAppConstants.PROCESS_TYPE,
+                                                
Collections.singleton(ENTITY_TYPE_PROCESS),
+                                                
AtlasTypeUtil.createOptionalAttrDef(ATTR_USERNAME, "string"),
+                                                
AtlasTypeUtil.createOptionalAttrDef(ATTR_START_TIME, "long"),
+                                                
AtlasTypeUtil.createOptionalAttrDef(ATTR_END_TIME, "long"),
+                                                
AtlasTypeUtil.createRequiredAttrDef(ATTR_QUERY_TEXT, "string"),
+                                                
AtlasTypeUtil.createRequiredAttrDef(ATTR_QUERY_PLAN, "string"),
+                                                
AtlasTypeUtil.createRequiredAttrDef(ATTR_QUERY_ID, "string"),
+                                                
AtlasTypeUtil.createRequiredAttrDef(ATTR_QUERY_GRAPH, "string"));
+    }
+
+    private AtlasStructDef createSerDeDef() {
+        return 
AtlasTypeUtil.createStructTypeDef(SampleAppConstants.STRUCT_TYPE_SERDE,
+                                                 
AtlasTypeUtil.createRequiredAttrDef(SampleAppConstants.ATTR_NAME, "string"),
+                                                 
AtlasTypeUtil.createRequiredAttrDef(ATTR_SERDE, "string"));
+    }
+
+    private AtlasEnumDef createTableTypeEnumDef() {
+        return new AtlasEnumDef(SampleAppConstants.ENUM_TABLE_TYPE,
+                                SampleAppConstants.ATTR_DESCRIPTION,
+                                Arrays.asList(new 
AtlasEnumDef.AtlasEnumElementDef("MANAGED", null, 1),
+                                              new 
AtlasEnumDef.AtlasEnumElementDef("EXTERNAL", null, 2)));
+    }
+
+    private List<AtlasClassificationDef> createClassificationDefs() {
+        AtlasClassificationDef classification = 
createTraitTypeDef(SampleAppConstants.CLASSIFICATION, 
Collections.<String>emptySet(), AtlasTypeUtil.createRequiredAttrDef("tag", 
"string"));
+        AtlasClassificationDef pii            = 
createTraitTypeDef(SampleAppConstants.PII_TAG, Collections.<String>emptySet());
+        AtlasClassificationDef finance        = 
createTraitTypeDef(SampleAppConstants.FINANCE_TAG, 
Collections.<String>emptySet());
+        AtlasClassificationDef metric         = 
createTraitTypeDef(SampleAppConstants.METRIC_CLASSIFICATION, 
Collections.emptySet());
+
+        return Arrays.asList(classification, pii, finance, metric);
+    }
+
+    private List<AtlasBusinessMetadataDef> createBusinessMetadataDefs() {
+        String description = "description";
+
+        Map<String, String> options = new HashMap<>();
+
+        options.put("maxStrLength", "20");
+        options.put("applicableEntityTypes", "[\"" + 
SampleAppConstants.DATABASE_TYPE + "\",\"" + SampleAppConstants.TABLE_TYPE + 
"\"]");
+
+        AtlasBusinessMetadataDef bmWithAllTypes = 
createBusinessMetadataDef(SampleAppConstants.BUSINESS_METADATA_TYPE,
+                                                                            
description,
+                                                                            
"1.0",
+                                                                            
createOptionalAttrDef(ATTR_ATTR1, ATLAS_TYPE_BOOLEAN, options, description),
+                                                                            
createOptionalAttrDef(ATTR_ATTR2, ATLAS_TYPE_BYTE, options, description),
+                                                                            
createOptionalAttrDef(ATTR_ATTR8, ATLAS_TYPE_STRING, options, description));
+
+        AtlasBusinessMetadataDef bmWithAllTypesMV = 
createBusinessMetadataDef(SampleAppConstants.BUSINESS_METADATA_TYPE_MV,
+                                                                              
description,
+                                                                              
"1.0",
+                                                                              
createOptionalAttrDef(ATTR_ATTR11, "array<boolean>", options, description),
+                                                                              
createOptionalAttrDef(ATTR_ATTR18, "array<string>", options, description));
+
+        return Arrays.asList(bmWithAllTypes, bmWithAllTypesMV);
+    }
+
+    private List<AtlasRelationshipDef> createAtlasRelationshipDef() {
+        AtlasRelationshipDef dbTablesDef = 
createRelationshipTypeDef(SampleAppConstants.TABLE_DATABASE_TYPE, 
SampleAppConstants.TABLE_DATABASE_TYPE,
+                                                                     "1.0", 
AGGREGATION, AtlasRelationshipDef.PropagateTags.NONE,
+                                                                     
createRelationshipEndDef(SampleAppConstants.TABLE_TYPE, "db", SINGLE, false),
+                                                                     
createRelationshipEndDef(SampleAppConstants.DATABASE_TYPE, "tables", SET, 
true));
+
+        AtlasRelationshipDef tableColumnsDef = 
createRelationshipTypeDef(SampleAppConstants.TABLE_COLUMNS_TYPE, 
SampleAppConstants.TABLE_COLUMNS_TYPE,
+                                                                         
"1.0", COMPOSITION, AtlasRelationshipDef.PropagateTags.NONE,
+                                                                         
createRelationshipEndDef(SampleAppConstants.TABLE_TYPE, "columns", SET, true),
+                                                                         
createRelationshipEndDef(SampleAppConstants.COLUMN_TYPE, "table", SINGLE, 
false));
+
+        return Arrays.asList(dbTablesDef, tableColumnsDef);
+    }
+
+    private AtlasTypesDef batchCreateTypes(AtlasTypesDef typesDef) throws 
AtlasServiceException {
+        AtlasTypesDef typesToCreate = new AtlasTypesDef();
+
+        for (AtlasEnumDef enumDef : typesDef.getEnumDefs()) {
+            if (client.typeWithNameExists(enumDef.getName())) {
+                System.out.println("Type " + enumDef.getName() + " already 
exists. Skipping");
+            } else {
+                typesToCreate.getEnumDefs().add(enumDef);
+            }
+        }
+
+        for (AtlasStructDef structDef : typesDef.getStructDefs()) {
+            if (client.typeWithNameExists(structDef.getName())) {
+                System.out.println("Type " + structDef.getName() + " already 
exists. Skipping");
+            } else {
+                typesToCreate.getStructDefs().add(structDef);
+            }
+        }
+
+        for (AtlasEntityDef entityDef : typesDef.getEntityDefs()) {
+            if (client.typeWithNameExists(entityDef.getName())) {
+                System.out.println("Type " + entityDef.getName() + " already 
exists. Skipping");
+            } else {
+                typesToCreate.getEntityDefs().add(entityDef);
+            }
+        }
+
+        for (AtlasClassificationDef classificationDef : 
typesDef.getClassificationDefs()) {
+            if (client.typeWithNameExists(classificationDef.getName())) {
+                System.out.println("Type " + classificationDef.getName() + " 
already exists. Skipping");
+            } else {
+                typesToCreate.getClassificationDefs().add(classificationDef);
+            }
+        }
+
+        for (AtlasRelationshipDef relationshipDef : 
typesDef.getRelationshipDefs()) {
+            if (client.typeWithNameExists(relationshipDef.getName())) {
+                System.out.println("Type " + relationshipDef.getName() + " 
already exists. Skipping");
+            } else {
+                typesToCreate.getRelationshipDefs().add(relationshipDef);
+            }
+        }
+
+        for (AtlasBusinessMetadataDef businessMetadataDef : 
typesDef.getBusinessMetadataDefs()) {
+            if (client.typeWithNameExists(businessMetadataDef.getName())) {
+                System.out.println("Type " + businessMetadataDef.getName() + " 
already exists. Skipping");
+            } else {
+                
typesToCreate.getBusinessMetadataDefs().add(businessMetadataDef);
+            }
+        }
+
+        return client.createAtlasTypeDefs(typesToCreate);
+    }
+}
\ No newline at end of file
diff --git 
a/atlas-examples/sample-app/src/main/resources/atlas-application.properties 
b/atlas-examples/sample-app/src/main/resources/atlas-application.properties
new file mode 100644
index 0000000..d24c663
--- /dev/null
+++ b/atlas-examples/sample-app/src/main/resources/atlas-application.properties
@@ -0,0 +1,25 @@
+#
+# 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.
+#
+
+#########  Security Properties  #########
+
+# SSL config
+atlas.enableTLS=false
+
+#########  Server Properties  #########
+atlas.rest.address=http://localhost:31000
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index aa586ff..2759207 100644
--- a/pom.xml
+++ b/pom.xml
@@ -805,6 +805,7 @@
         <module>addons/impala-bridge</module>
 
         <module>distro</module>
+        <module>atlas-examples</module>
     </modules>
 
     <repositories>

Reply via email to