ATLAS-4454 : Upgrade janusgraph version to 0.6.0

Signed-off-by: Pinal Shah <pinal.shah@freestoneinfotech.com>
diff --git a/graphdb/janus-hbase2/pom.xml b/graphdb/janus-hbase2/pom.xml
index 92a7104..883c344 100644
--- a/graphdb/janus-hbase2/pom.xml
+++ b/graphdb/janus-hbase2/pom.xml
@@ -34,7 +34,7 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-core</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>com.codahale.metrics</groupId>
diff --git a/graphdb/janus-hbase2/src/main/java/org/janusgraph/diskstorage/hbase2/HBaseKeyColumnValueStore.java b/graphdb/janus-hbase2/src/main/java/org/janusgraph/diskstorage/hbase2/HBaseKeyColumnValueStore.java
index 9aa552d..ffafc8c 100644
--- a/graphdb/janus-hbase2/src/main/java/org/janusgraph/diskstorage/hbase2/HBaseKeyColumnValueStore.java
+++ b/graphdb/janus-hbase2/src/main/java/org/janusgraph/diskstorage/hbase2/HBaseKeyColumnValueStore.java
@@ -40,7 +40,9 @@
 import org.janusgraph.diskstorage.keycolumnvalue.KeyIterator;
 import org.janusgraph.diskstorage.keycolumnvalue.KeyRangeQuery;
 import org.janusgraph.diskstorage.keycolumnvalue.KeySliceQuery;
+import org.janusgraph.diskstorage.keycolumnvalue.KeySlicesIterator;
 import org.janusgraph.diskstorage.keycolumnvalue.SliceQuery;
+import org.janusgraph.diskstorage.keycolumnvalue.MultiSlicesQuery;
 import org.janusgraph.diskstorage.keycolumnvalue.StoreTransaction;
 import org.janusgraph.diskstorage.util.RecordIterator;
 import org.janusgraph.diskstorage.util.StaticArrayBuffer;
@@ -150,6 +152,11 @@
         return executeKeySliceQuery(new FilterList(FilterList.Operator.MUST_PASS_ALL), query);
     }
 
+    @Override
+    public KeySlicesIterator getKeys(MultiSlicesQuery queries, StoreTransaction txh) throws BackendException {
+        throw new UnsupportedOperationException();
+    }
+
     public static Filter getFilter(SliceQuery query) {
         byte[] colStartBytes = query.getSliceStart().length() > 0 ? query.getSliceStart().as(StaticBuffer.ARRAY_FACTORY) : null;
         byte[] colEndBytes = query.getSliceEnd().length() > 0 ? query.getSliceEnd().as(StaticBuffer.ARRAY_FACTORY) : null;
diff --git a/graphdb/janus-hbase2/src/main/java/org/janusgraph/diskstorage/hbase2/HBaseStoreManager.java b/graphdb/janus-hbase2/src/main/java/org/janusgraph/diskstorage/hbase2/HBaseStoreManager.java
index 40bcd1a..f98fa7b 100644
--- a/graphdb/janus-hbase2/src/main/java/org/janusgraph/diskstorage/hbase2/HBaseStoreManager.java
+++ b/graphdb/janus-hbase2/src/main/java/org/janusgraph/diskstorage/hbase2/HBaseStoreManager.java
@@ -440,7 +440,7 @@
             throw new TemporaryBackendException(e);
         }
 
-        sleepAfterWrite(txh, commitTime);
+        this.sleepAfterWrite(commitTime);
     }
 
     @Override
diff --git a/graphdb/janus/pom.xml b/graphdb/janus/pom.xml
index 8f1ed54..6916097 100644
--- a/graphdb/janus/pom.xml
+++ b/graphdb/janus/pom.xml
@@ -65,15 +65,15 @@
         </dependency>
 
         <dependency>
-            <groupId>commons-configuration</groupId>
-            <artifactId>commons-configuration</artifactId>
-            <scope>provided</scope>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-configuration2</artifactId>
+            <version>${commons-conf2.version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-server</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>com.codahale.metrics</groupId>
@@ -101,7 +101,7 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-berkeleyje</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>ch.qos.logback</groupId>
@@ -113,7 +113,7 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-cassandra</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.cassandra.version}</version>
             <exclusions>
                   <exclusion>
                       <groupId>ch.qos.logback</groupId>
@@ -129,7 +129,7 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-cql</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>ch.qos.logback</groupId>
@@ -147,7 +147,7 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-es</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>ch.qos.logback</groupId>
@@ -159,7 +159,7 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-hbase</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>ch.qos.logback</groupId>
@@ -171,7 +171,7 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-solr</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>ch.qos.logback</groupId>
@@ -191,7 +191,13 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-lucene</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.lucene</groupId>
+                    <artifactId>lucene-backward-codecs</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
@@ -269,7 +275,6 @@
             <artifactId>mockito-all</artifactId>
             <scope>test</scope>
         </dependency>
-
     </dependencies>
 
     <build>
diff --git a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphDatabase.java b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphDatabase.java
index 0d47e38..3995cf9 100644
--- a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphDatabase.java
+++ b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasJanusGraphDatabase.java
@@ -29,6 +29,7 @@
 import org.apache.atlas.repository.graphdb.janus.serializer.TypeCategorySerializer;
 import org.apache.atlas.typesystem.types.DataTypes.TypeCategory;
 import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationConverter;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.janusgraph.core.JanusGraph;
 import org.janusgraph.core.JanusGraphException;
@@ -51,6 +52,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
 
 import static org.apache.atlas.ApplicationProperties.DEFAULT_INDEX_RECOVERY;
 import static org.apache.atlas.ApplicationProperties.INDEX_RECOVERY_CONF;
@@ -100,18 +102,18 @@
         Configuration janusConfig = ApplicationProperties.getSubsetConfiguration(configProperties, GRAPH_PREFIX);
 
         //add serializers for non-standard property value types that Atlas uses
-        janusConfig.addProperty("attributes.custom.attribute1.attribute-class", TypeCategory.class.getName());
-        janusConfig.addProperty("attributes.custom.attribute1.serializer-class", TypeCategorySerializer.class.getName());
+        janusConfig.setProperty("attributes.custom.attribute1.attribute-class", TypeCategory.class.getName());
+        janusConfig.setProperty("attributes.custom.attribute1.serializer-class", TypeCategorySerializer.class.getName());
 
         //not ideal, but avoids making large changes to Atlas
-        janusConfig.addProperty("attributes.custom.attribute2.attribute-class", ArrayList.class.getName());
-        janusConfig.addProperty("attributes.custom.attribute2.serializer-class", SerializableSerializer.class.getName());
+        janusConfig.setProperty("attributes.custom.attribute2.attribute-class", ArrayList.class.getName());
+        janusConfig.setProperty("attributes.custom.attribute2.serializer-class", SerializableSerializer.class.getName());
 
-        janusConfig.addProperty("attributes.custom.attribute3.attribute-class", BigInteger.class.getName());
-        janusConfig.addProperty("attributes.custom.attribute3.serializer-class", BigIntegerSerializer.class.getName());
+        janusConfig.setProperty("attributes.custom.attribute3.attribute-class", BigInteger.class.getName());
+        janusConfig.setProperty("attributes.custom.attribute3.serializer-class", BigIntegerSerializer.class.getName());
 
-        janusConfig.addProperty("attributes.custom.attribute4.attribute-class", BigDecimal.class.getName());
-        janusConfig.addProperty("attributes.custom.attribute4.serializer-class", BigDecimalSerializer.class.getName());
+        janusConfig.setProperty("attributes.custom.attribute4.attribute-class", BigDecimal.class.getName());
+        janusConfig.setProperty("attributes.custom.attribute4.serializer-class", BigDecimalSerializer.class.getName());
 
         return janusConfig;
     }
@@ -188,14 +190,16 @@
 
     @VisibleForTesting
     static JanusGraph initJanusGraph(Configuration config) {
+
+        org.apache.commons.configuration2.Configuration conf2 = createConfiguration2(config);
         try {
-            return JanusGraphFactory.open(config);
+            return JanusGraphFactory.open(conf2);
         } catch (JanusGraphException e) {
             LOG.warn("JanusGraphException: {}", e.getMessage());
             if (e.getMessage().startsWith(OLDER_STORAGE_EXCEPTION)) {
                 LOG.info("Newer client is being used with older janus storage version. Setting allow-upgrade=true and reattempting connection");
                 config.addProperty("graph.allow-upgrade", true);
-                return JanusGraphFactory.open(config);
+                return JanusGraphFactory.open(conf2);
             } else {
                 throw new RuntimeException(e);
             }
@@ -252,7 +256,9 @@
         try {
             Configuration cfg = getConfiguration();
             cfg.setProperty("storage.batch-loading", true);
-            return JanusGraphFactory.open(cfg);
+
+            org.apache.commons.configuration2.Configuration conf2 = createConfiguration2(cfg);
+            return JanusGraphFactory.open(conf2);
         } catch (IllegalArgumentException ex) {
             LOG.error("getBulkLoadingGraphInstance: Failed!", ex);
         } catch (AtlasException ex) {
@@ -262,6 +268,12 @@
         return null;
     }
 
+    private static org.apache.commons.configuration2.Configuration createConfiguration2(Configuration conf) {
+        Properties properties = ConfigurationConverter.getProperties(conf);
+
+        return org.apache.commons.configuration2.ConfigurationConverter.getConfiguration(properties);
+    }
+
     public static void unload() {
         synchronized (AtlasJanusGraphDatabase.class) {
 
diff --git a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/migration/AtlasGraphSONReader.java b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/migration/AtlasGraphSONReader.java
index 2d5bd8a..e026856 100644
--- a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/migration/AtlasGraphSONReader.java
+++ b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/migration/AtlasGraphSONReader.java
@@ -262,7 +262,7 @@
             }
 
             final GraphSONMapper.Builder builder = GraphSONMapper.build();
-            final GraphSONMapper         mapper  = builder.typeInfo(TypeInfo.NO_TYPES).create();
+            final GraphSONMapper         mapper  = builder.create();
 
             return new AtlasGraphSONReader(mapper.createMapper(), relationshipCache, graph, bulkLoadGraph,
                                                                     numWorkers, batchSize, suppliedStartIndex);
diff --git a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/query/NativeJanusGraphQuery.java b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/query/NativeJanusGraphQuery.java
index 16fc445..a0f1460 100644
--- a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/query/NativeJanusGraphQuery.java
+++ b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/query/NativeJanusGraphQuery.java
@@ -236,7 +236,7 @@
 
     @Override
     public void orderBy(final String propertyName, final AtlasGraphQuery.SortOrder sortOrder) {
-        Order order = sortOrder == AtlasGraphQuery.SortOrder.ASC ? Order.incr : Order.decr;
+        Order order = sortOrder == AtlasGraphQuery.SortOrder.ASC ? Order.asc : Order.desc;
         query.orderBy(propertyName, order);
     }
 
diff --git a/graphdb/janus/src/main/java/org/janusgraph/diskstorage/solr/Solr6Index.java b/graphdb/janus/src/main/java/org/janusgraph/diskstorage/solr/Solr6Index.java
index 81ae202..23c11de 100644
--- a/graphdb/janus/src/main/java/org/janusgraph/diskstorage/solr/Solr6Index.java
+++ b/graphdb/janus/src/main/java/org/janusgraph/diskstorage/solr/Solr6Index.java
@@ -672,6 +672,27 @@
                 doc -> doc.getFieldValue(keyIdField).toString());
     }
 
+    @Override
+    public Long queryCount(IndexQuery query, KeyInformation.IndexRetriever information, BaseTransaction tx) throws BackendException {
+        try {
+            String collection = query.getStore();
+            String keyIdField = this.getKeyFieldId(collection);
+            SolrQuery solrQuery = new SolrQuery("*:*");
+            solrQuery.set("fl", new String[]{keyIdField});
+            String queryFilter = this.buildQueryFilter(query.getCondition(), information.get(collection));
+            solrQuery.addFilterQuery(new String[]{queryFilter});
+            QueryResponse response = this.solrClient.query(collection, solrQuery);
+            logger.debug("Executed query [{}] in {} ms", query, response.getElapsedTime());
+            return response.getResults().getNumFound();
+        } catch (IOException ex) {
+            logger.error("Query did not complete : ", ex);
+            throw new PermanentBackendException(ex);
+        } catch (SolrServerException ex) {
+            logger.error("Unable to query Solr index.", ex);
+            throw new PermanentBackendException(ex);
+        }
+    }
+
     private void addOrderToQuery(SolrQuery solrQuery, List<IndexQuery.OrderEntry> orders) {
         for (final IndexQuery.OrderEntry order1 : orders) {
             final String item = order1.getKey();
@@ -765,10 +786,12 @@
             final String key = atom.getKey();
             final JanusGraphPredicate predicate = atom.getPredicate();
 
-            if (value instanceof Number) {
+            if (value == null && predicate == Cmp.NOT_EQUAL) {
+                return key + ":*";
+            } else if (value instanceof Number) {
                 final String queryValue = escapeValue(value);
                 Preconditions.checkArgument(predicate instanceof Cmp,
-                        "Relation not supported on numeric types: " + predicate);
+                        "Relation not supported on numeric types: %s", predicate);
                 final Cmp numRel = (Cmp) predicate;
                 switch (numRel) {
                     case EQUAL:
@@ -804,18 +827,18 @@
                     return (key + ":" + escapeValue(value) + "*");
                 } else if (predicate == Text.REGEX || predicate == Text.CONTAINS_REGEX) {
                     return (key + ":/" + value + "/");
-                } else if (predicate == Cmp.EQUAL) {
+                }  else if (predicate == Cmp.EQUAL || predicate == Cmp.NOT_EQUAL) {
                     final String tokenizer =
                             ParameterType.STRING_ANALYZER.findParameter(information.get(key).getParameters(), null);
-                    if(tokenizer != null){
-                        return tokenize(information, value, key, predicate,tokenizer);
-                    } else {
+                    if (tokenizer != null) {
+                        return tokenize(information, value, key, predicate, tokenizer);
+                    } else if (predicate == Cmp.EQUAL) {
                         return (key + ":\"" + escapeValue(value) + "\"");
+                    } else { // Cmp.NOT_EQUAL case
+                        return ("-" + key + ":\"" + escapeValue(value) + "\"");
                     }
-                } else if (predicate == Cmp.NOT_EQUAL) {
-                    return ("-" + key + ":\"" + escapeValue(value) + "\"");
                 } else if (predicate == Text.FUZZY || predicate == Text.CONTAINS_FUZZY) {
-                    return (key + ":"+escapeValue(value)+"~");
+                    return (key + ":"+escapeValue(value)+"~"+Text.getMaxEditDistance(value.toString()));
                 } else if (predicate == Cmp.LESS_THAN) {
                     return (key + ":[* TO \"" + escapeValue(value) + "\"}");
                 } else if (predicate == Cmp.LESS_THAN_EQUAL) {
@@ -830,9 +853,9 @@
             } else if (value instanceof Geoshape) {
                 final Mapping map = Mapping.getMapping(information.get(key));
                 Preconditions.checkArgument(predicate instanceof Geo && predicate != Geo.DISJOINT,
-                        "Relation not supported on geo types: " + predicate);
+                        "Relation not supported on geo types: %s", predicate);
                 Preconditions.checkArgument(map == Mapping.PREFIX_TREE || predicate == Geo.WITHIN || predicate == Geo.INTERSECT,
-                        "Relation not supported on geopoint types: " + predicate);
+                        "Relation not supported on geopoint types: %s", predicate);
                 final Geoshape geo = (Geoshape)value;
                 if (geo.getType() == Geoshape.Type.CIRCLE && (predicate == Geo.INTERSECT || map == Mapping.DEFAULT)) {
                     final Geoshape.Point center = geo.getPoint();
@@ -852,8 +875,7 @@
             } else if (value instanceof Date || value instanceof Instant) {
                 final String s = value.toString();
                 final String queryValue = escapeValue(value instanceof Date ? toIsoDate((Date) value) : value.toString());
-                Preconditions.checkArgument(predicate instanceof Cmp, "Relation not supported on date types: "
-                        + predicate);
+                Preconditions.checkArgument(predicate instanceof Cmp, "Relation not supported on date types: %s", predicate);
                 final Cmp numRel = (Cmp) predicate;
 
                 switch (numRel) {
@@ -944,7 +966,11 @@
         if (terms.isEmpty()) {
             return "";
         } else if (terms.size() == 1) {
-            return (key + ":(" + escapeValue(terms.get(0)) + ")");
+            if (janusgraphPredicate == Cmp.NOT_EQUAL) {
+                return ("-" + key + ":(" + escapeValue(terms.get(0)) + ")");
+            } else {
+                return (key + ":(" + escapeValue(terms.get(0)) + ")");
+            }
         } else {
             final And<JanusGraphElement> andTerms = new And<>();
             for (final String term : terms) {
@@ -999,7 +1025,7 @@
 
     @Override
     public void close() throws BackendException {
-        logger.trace("Shutting down connection to Solr", solrClient);
+        logger.trace("Shutting down connection to Solr {}", solrClient);
         try {
             solrClient.close();
         } catch (final IOException e) {
diff --git a/graphdb/janus/src/test/java/org/apache/atlas/repository/graphdb/janus/migration/BaseUtils.java b/graphdb/janus/src/test/java/org/apache/atlas/repository/graphdb/janus/migration/BaseUtils.java
index 82ae675..2f311f2 100644
--- a/graphdb/janus/src/test/java/org/apache/atlas/repository/graphdb/janus/migration/BaseUtils.java
+++ b/graphdb/janus/src/test/java/org/apache/atlas/repository/graphdb/janus/migration/BaseUtils.java
@@ -73,7 +73,7 @@
 
     private JsonNode getEntityNode(String json) throws IOException {
         GraphSONMapper.Builder builder = GraphSONMapper.build();
-        final ObjectMapper mapper  = builder.typeInfo(TypeInfo.NO_TYPES).create().createMapper();
+        final ObjectMapper mapper  = builder.create().createMapper();
         return mapper.readTree(json);
     }
 
diff --git a/pom.xml b/pom.xml
index 220ffe0..0b6bb3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -717,7 +717,8 @@
         <httpcomponents-httpcore.version>4.4.13</httpcomponents-httpcore.version>
         <jackson.databind.version>2.11.3</jackson.databind.version>
         <jackson.version>2.11.3</jackson.version>
-        <janus.version>0.5.3</janus.version>
+        <janusgraph.version>0.6.0</janusgraph.version>
+        <janusgraph.cassandra.version>0.5.3</janusgraph.cassandra.version>
         <javax-inject.version>1</javax-inject.version>
         <javax.servlet.version>3.1.0</javax.servlet.version>
         <jersey-spring.version>1.19.4</jersey-spring.version>
@@ -767,7 +768,7 @@
         <surefire.forkCount>2C</surefire.forkCount>
         <surefire.version>3.0.0-M5</surefire.version>
         <testng.version>6.9.4</testng.version>
-        <tinkerpop.version>3.4.10</tinkerpop.version>
+        <tinkerpop.version>3.5.1</tinkerpop.version>
         <woodstox-core.version>5.0.3</woodstox-core.version>
         <zookeeper.version>3.5.7</zookeeper.version>
     </properties>
diff --git a/repository/src/test/java/org/apache/atlas/query/TraversalComposerTest.java b/repository/src/test/java/org/apache/atlas/query/TraversalComposerTest.java
index dd56ed1..8f76033 100644
--- a/repository/src/test/java/org/apache/atlas/query/TraversalComposerTest.java
+++ b/repository/src/test/java/org/apache/atlas/query/TraversalComposerTest.java
@@ -53,7 +53,7 @@
                 "[JanusGraphStep([],[__typeName.eq(DB)]), DedupGlobalStep@[d], RangeGlobalStep(0,25)]");
 
         verify("Table groupby(owner) select name, owner, clusterName orderby name",
-                "[JanusGraphStep([],[__typeName.eq(Table)]), TraversalFilterStep([JanusGraphPropertiesStep([Table.owner],property)]), GroupStep(value(Table.owner),[FoldStep]), DedupGlobalStep, RangeGlobalStep(0,25)]");
+                "[JanusGraphStep([],[__typeName.eq(Table), Table.owner.neq]), GroupStep(value(Table.owner),[FoldStep]), DedupGlobalStep, RangeGlobalStep(0,25)]");
     }
 
     private void verify(String dsl, String expected) {
diff --git a/tools/atlas-index-repair/pom.xml b/tools/atlas-index-repair/pom.xml
index a723bfa..ab55f4c 100644
--- a/tools/atlas-index-repair/pom.xml
+++ b/tools/atlas-index-repair/pom.xml
@@ -53,7 +53,7 @@
         <dependency>
             <groupId>org.janusgraph</groupId>
             <artifactId>janusgraph-core</artifactId>
-            <version>${janus.version}</version>
+            <version>${janusgraph.version}</version>
         </dependency>
 
     </dependencies>