Basic collection search working correctly.  Fixes naming conventions

Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/9dc21f94
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/9dc21f94
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/9dc21f94

Branch: refs/heads/two-dot-o-dev
Commit: 9dc21f94af971400b7c1d40a22a8881f2ee06f18
Parents: b5e60e0
Author: Todd Nine <[email protected]>
Authored: Wed Apr 29 11:47:45 2015 -0600
Committer: Todd Nine <[email protected]>
Committed: Wed Apr 29 11:49:03 2015 -0600

----------------------------------------------------------------------
 .../corepersistence/CpRelationManager.java      |  9 ++-
 .../events/EntityVersionDeletedHandler.java     |  4 +-
 .../corepersistence/index/IndexServiceImpl.java | 12 +--
 .../pipeline/read/AbstractSeekingFilter.java    |  1 -
 .../pipeline/read/FilterFactory.java            | 17 +++--
 .../pipeline/read/ReadPipelineBuilder.java      |  5 +-
 .../pipeline/read/ReadPipelineBuilderImpl.java  | 10 +--
 .../pipeline/read/ResultsPage.java              |  9 +++
 .../CandidateResultsEntityResultsCollector.java |  5 +-
 .../CollectionElasticSearchFilter.java          | 71 ------------------
 .../ConnectionElasticSearchFilter.java          | 72 ------------------
 .../ElasticSearchCollectionFilter.java          | 77 ++++++++++++++++++++
 .../ElasticSearchConnectionFilter.java          | 73 +++++++++++++++++++
 .../read/graph/AbstractReadGraphFilter.java     |  7 +-
 .../corepersistence/util/CpNamingUtils.java     | 23 ++++--
 .../persistence/index/impl/SearchEdgeImpl.java  | 24 +++++-
 16 files changed, 238 insertions(+), 181 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
index 8c3865e..3119934 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
@@ -626,6 +626,8 @@ public class CpRelationManager implements RelationManager {
         query.setEntityType( collection.getType() );
         query = adjustQuery( query );
 
+
+
         final ReadPipelineBuilder readPipelineBuilder =
             pipelineBuilderFactory.createReadPipelineBuilder( applicationScope 
);
 
@@ -640,7 +642,9 @@ public class CpRelationManager implements RelationManager {
             readPipelineBuilder.getCollection( collName );
         }
         else {
-            readPipelineBuilder.getCollectionWithQuery( collName, 
query.getQl().get() );
+            final String entityType = collection.getType();
+
+            readPipelineBuilder.getCollectionWithQuery( collName, entityType, 
query.getQl().get() );
         }
 
 
@@ -908,7 +912,8 @@ public class CpRelationManager implements RelationManager {
             readPipelineBuilder.getConnection( connection );
         }
         else {
-            readPipelineBuilder.connectionWithQuery( connection, 
Optional.fromNullable( entityType ), query.getQl().get() );
+            readPipelineBuilder.getConnectionWithQuery( connection, 
Optional.fromNullable( entityType ),
+                query.getQl().get() );
         }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/events/EntityVersionDeletedHandler.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/events/EntityVersionDeletedHandler.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/events/EntityVersionDeletedHandler.java
index 7a93606..0e12e85 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/events/EntityVersionDeletedHandler.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/events/EntityVersionDeletedHandler.java
@@ -43,7 +43,7 @@ import rx.Observable;
 
 import static org.apache.usergrid.corepersistence.CoreModule.EVENTS_DISABLED;
 import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.generateScopeFromSource;
-import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.generateScopeToTarget;
+import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.generateScopeFromTarget;
 
 
 /**
@@ -102,7 +102,7 @@ public class EntityVersionDeletedHandler implements 
EntityVersionDeleted {
 
         //Remove all double indexes
         final Observable<IndexEdge> sourceScopes = 
edgesObservable.edgesFromSourceAscending( gm, entityId ).map(
-                    edge -> generateScopeToTarget( edge ) );
+                    edge -> generateScopeFromTarget( edge ) );
 
 
         //create a stream of scopes

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
index c46542c..8185b4d 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
@@ -37,7 +37,6 @@ import org.apache.usergrid.persistence.index.EntityIndexBatch;
 import org.apache.usergrid.persistence.index.EntityIndexFactory;
 import org.apache.usergrid.persistence.index.IndexEdge;
 import org.apache.usergrid.persistence.index.IndexFig;
-import org.apache.usergrid.persistence.index.impl.IndexOperation;
 import org.apache.usergrid.persistence.index.impl.IndexOperationMessage;
 import org.apache.usergrid.persistence.model.entity.Entity;
 import org.apache.usergrid.persistence.model.entity.Id;
@@ -53,7 +52,7 @@ import rx.functions.Func1;
 import rx.observables.ConnectableObservable;
 
 import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.generateScopeFromSource;
-import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.generateScopeToTarget;
+import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.generateScopeFromTarget;
 import static org.apache.usergrid.persistence.Schema.getDefaultSchema;
 
 
@@ -139,19 +138,20 @@ public class IndexServiceImpl implements IndexService {
 
         final Observable<IndexOperationMessage> batches =  Observable.just( 
edge ).map( observableEdge -> {
 
-            //if the node is the
+            //if the node is the target node, generate our scope correctly
             if ( edge.getTargetNode().equals( entity.getId() ) ) {
                 return generateScopeFromSource( edge );
             }
 
-            return generateScopeToTarget( edge );
+            return generateScopeFromTarget( edge );
         } ).flatMap( indexEdge -> {
 
             final ApplicationEntityIndex ei = 
entityIndexFactory.createApplicationEntityIndex( applicationScope );
 
-
             final EntityIndexBatch batch = ei.createBatch();
 
+            logger.debug( "adding edge {} to batch for entity {}", indexEdge, 
entity );
+
             batch.index( indexEdge, entity );
 
             return batch.execute();
@@ -219,7 +219,7 @@ public class IndexServiceImpl implements IndexService {
          * we're indexing from target->source here
          */
         return edgesObservable.getEdgesFromSource( graphManager, entityId, 
linkedCollection )
-                              .map( edge -> generateScopeToTarget( edge ) );
+                              .map( edge -> generateScopeFromTarget( edge ) );
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/AbstractSeekingFilter.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/AbstractSeekingFilter.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/AbstractSeekingFilter.java
index 9509678..c23a1b7 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/AbstractSeekingFilter.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/AbstractSeekingFilter.java
@@ -47,7 +47,6 @@ public abstract class AbstractSeekingFilter<T, R, C extends 
Serializable> extend
     protected Optional<C> getSeekValue() {
 
         if(cursorSeek == null) {
-
             final Optional<C> cursor = pipelineContext.getCursor( 
getCursorSerializer() );
             cursorSeek = new CursorSeek<>( cursor );
         }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/FilterFactory.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/FilterFactory.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/FilterFactory.java
index 7a61961..078d981 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/FilterFactory.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/FilterFactory.java
@@ -21,8 +21,8 @@ package org.apache.usergrid.corepersistence.pipeline.read;
 
 
 import 
org.apache.usergrid.corepersistence.pipeline.read.elasticsearch.CandidateResultsIdVerifyFilter;
-import 
org.apache.usergrid.corepersistence.pipeline.read.elasticsearch.CollectionElasticSearchFilter;
-import 
org.apache.usergrid.corepersistence.pipeline.read.elasticsearch.ConnectionElasticSearchFilter;
+import 
org.apache.usergrid.corepersistence.pipeline.read.elasticsearch.ElasticSearchCollectionFilter;
+import 
org.apache.usergrid.corepersistence.pipeline.read.elasticsearch.ElasticSearchConnectionFilter;
 import org.apache.usergrid.corepersistence.pipeline.read.entity.EntityIdFilter;
 import 
org.apache.usergrid.corepersistence.pipeline.read.graph.ReadGraphCollectionByIdFilter;
 import 
org.apache.usergrid.corepersistence.pipeline.read.graph.ReadGraphCollectionFilter;
@@ -82,9 +82,10 @@ public interface FilterFactory {
      * @param query The query to use when querying the entities in the 
collection
      * @param collectionName The collection name to use when querying
      */
-    CollectionElasticSearchFilter collectionElasticSearchFilter( @Assisted( 
"query" ) final String query,
+    ElasticSearchCollectionFilter elasticSearchCollectionFilter( @Assisted( 
"query" ) final String query,
                                                                  @Assisted( 
"collectionName" )
-                                                                 final String 
collectionName );
+                                                                 final String 
collectionName,
+                                                                 @Assisted( 
"entityType" ) final String entityType );
 
 
     /**
@@ -93,9 +94,11 @@ public interface FilterFactory {
      * @param connectionName The type of connection to query
      * @param connectedEntityType The type of entity in the connection.  Leave 
absent to query all entity types
      */
-    ConnectionElasticSearchFilter connectionElasticSearchFilter( @Assisted( 
"query" ) final String query,
-                                                                 @Assisted( 
"connectionName" ) final String connectionName,
-                                                                 
@Assisted("connectedEntityType") final Optional<String> connectedEntityType);
+    ElasticSearchConnectionFilter elasticSearchConnectionFilter( @Assisted( 
"query" ) final String query,
+                                                                 @Assisted( 
"connectionName" )
+                                                                 final String 
connectionName,
+                                                                 @Assisted( 
"connectedEntityType" )
+                                                                 final 
Optional<String> connectedEntityType );
 
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilder.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilder.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilder.java
index 9da2b03..25ab03e 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilder.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilder.java
@@ -75,7 +75,7 @@ public interface ReadPipelineBuilder {
     /**
      * Get all entities with a query
      */
-    ReadPipelineBuilder getCollectionWithQuery( final String collectionName, 
final String query);
+    ReadPipelineBuilder getCollectionWithQuery( final String 
collectionName,final String entityType,  final String query);
 
     /**
      * Get an entity via the connection name and entity Id
@@ -95,7 +95,8 @@ public interface ReadPipelineBuilder {
     /**
      * Get all entities in a connection with a query and a target entity type
      */
-    ReadPipelineBuilder connectionWithQuery( final String connectionName, 
final Optional<String> entityType, final String query);
+    ReadPipelineBuilder getConnectionWithQuery( final String connectionName, 
final Optional<String> entityType,
+                                                final String query );
 
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilderImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilderImpl.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilderImpl.java
index 2ec0082..4ecfb47 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilderImpl.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ReadPipelineBuilderImpl.java
@@ -139,13 +139,13 @@ public class ReadPipelineBuilderImpl implements 
ReadPipelineBuilder {
 
 
     @Override
-    public ReadPipelineBuilder getCollectionWithQuery( final String 
collectionName, final String query ) {
+    public ReadPipelineBuilder getCollectionWithQuery( final String 
collectionName, final String entityType,  final String query ) {
         Preconditions.checkNotNull( collectionName, "collectionName must not 
be null" );
         Preconditions.checkNotNull( query, "query must not be null" );
 
         //TODO, this should really be 2 a TraverseFilter with an entityLoad 
collector
 
-        filters.add( filterFactory.collectionElasticSearchFilter( query, 
collectionName ) );
+        filters.add( filterFactory.elasticSearchCollectionFilter( query, 
collectionName, entityType ) );
 
         this.collectorState.setCandidateResultsEntityResultsCollector();
 
@@ -188,14 +188,14 @@ public class ReadPipelineBuilderImpl implements 
ReadPipelineBuilder {
 
 
     @Override
-    public ReadPipelineBuilder connectionWithQuery( final String 
connectionName, final Optional<String> entityType,
-                                                    final String query ) {
+    public ReadPipelineBuilder getConnectionWithQuery( final String 
connectionName, final Optional<String> entityType,
+                                                       final String query ) {
 
         Preconditions.checkNotNull( connectionName, "connectionName must not 
be null" );
         Preconditions.checkNotNull( connectionName, "entityType must not be 
null" );
         Preconditions.checkNotNull( query, "query must not be null" );
 
-        filters.add( filterFactory.connectionElasticSearchFilter( query, 
connectionName, entityType ) );
+        filters.add( filterFactory.elasticSearchConnectionFilter( query, 
connectionName, entityType ) );
         collectorState.setCandidateResultsEntityResultsCollector();
         return this;
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ResultsPage.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ResultsPage.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ResultsPage.java
index e428e7a..198ac67 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ResultsPage.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/ResultsPage.java
@@ -39,4 +39,13 @@ public class ResultsPage {
     public List<Entity> getEntityList() {
         return entityList;
     }
+
+
+    /**
+     * Return true if the results page is empty
+     * @return
+     */
+    public boolean isEmpty(){
+        return entityList == null || entityList.isEmpty();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CandidateResultsEntityResultsCollector.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CandidateResultsEntityResultsCollector.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CandidateResultsEntityResultsCollector.java
index 83a4b8c..465ff22 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CandidateResultsEntityResultsCollector.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CandidateResultsEntityResultsCollector.java
@@ -69,7 +69,7 @@ public class CandidateResultsEntityResultsCollector extends 
AbstractPipelineOper
 
 
     @Override
-    public Observable<ResultsPage> call( final Observable<CandidateResults> 
observable ) {
+    public Observable<ResultsPage> call( final Observable<CandidateResults> 
candidateResultsObservable ) {
 
 
         /**
@@ -86,7 +86,7 @@ public class CandidateResultsEntityResultsCollector extends 
AbstractPipelineOper
         final ApplicationEntityIndex applicationIndex =
             entityIndexFactory.createApplicationEntityIndex( applicationScope 
);
 
-        final Observable<ResultsPage> searchIdSetObservable = 
observable.flatMap( candidateResults -> {
+        final Observable<ResultsPage> searchIdSetObservable = 
candidateResultsObservable.flatMap( candidateResults -> {
             //flatten toa list of ids to load
             final Observable<List<Id>> candidateIds =
                 Observable.from( candidateResults ).map( candidate -> 
candidate.getId() ).toList();
@@ -103,6 +103,7 @@ public class CandidateResultsEntityResultsCollector extends 
AbstractPipelineOper
                 .map( entityCollector -> entityCollector.getResults() );
         } );
 
+        //if we filter all our results, we want to continue to try the next 
page
         return searchIdSetObservable;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CollectionElasticSearchFilter.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CollectionElasticSearchFilter.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CollectionElasticSearchFilter.java
deleted file mode 100644
index 4280f6a..0000000
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/CollectionElasticSearchFilter.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.usergrid.corepersistence.pipeline.read.elasticsearch;
-
-
-import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
-import org.apache.usergrid.persistence.index.EntityIndexFactory;
-import org.apache.usergrid.persistence.index.SearchEdge;
-import org.apache.usergrid.persistence.index.SearchTypes;
-import org.apache.usergrid.persistence.model.entity.Id;
-
-import com.google.inject.Inject;
-import com.google.inject.assistedinject.Assisted;
-
-import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.createCollectionSearchEdge;
-
-
-public class CollectionElasticSearchFilter extends AbstractElasticSearchFilter 
{
-
-    private  final String collectionName;
-
-    /**
-     * Create a new instance of our command
-     */
-    @Inject
-    public CollectionElasticSearchFilter( final EntityIndexFactory 
entityIndexFactory,
-                                          final MetricsFactory metricsFactory,
-                                          @Assisted("query")
-                                          final String query,
-                                          @Assisted("collectionName") final 
String collectionName ) {
-        super( entityIndexFactory, metricsFactory, query );
-        this.collectionName = collectionName;
-    }
-
-
-
-    @Override
-    protected SearchTypes getSearchTypes() {
-        final SearchTypes types = SearchTypes.fromTypes( collectionName );
-
-        return types;
-    }
-
-
-    @Override
-    protected SearchEdge getSearchEdge( final Id incomingId ) {
-        final SearchEdge searchEdge = createCollectionSearchEdge( incomingId, 
collectionName );
-
-        return searchEdge;
-    }
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ConnectionElasticSearchFilter.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ConnectionElasticSearchFilter.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ConnectionElasticSearchFilter.java
deleted file mode 100644
index ab5d233..0000000
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ConnectionElasticSearchFilter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.usergrid.corepersistence.pipeline.read.elasticsearch;
-
-
-import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
-import org.apache.usergrid.persistence.index.EntityIndexFactory;
-import org.apache.usergrid.persistence.index.SearchEdge;
-import org.apache.usergrid.persistence.index.SearchTypes;
-import org.apache.usergrid.persistence.model.entity.Id;
-
-import com.google.common.base.Optional;
-import com.google.inject.Inject;
-import com.google.inject.assistedinject.Assisted;
-
-import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.createConnectionSearchEdge;
-
-
-public class ConnectionElasticSearchFilter extends AbstractElasticSearchFilter 
{
-
-
-    private final String connectionName;
-    private final Optional<String> connectedEntityType;
-
-
-    /**
-     * Create a new instance of our command
-     */
-    @Inject
-    public ConnectionElasticSearchFilter( final EntityIndexFactory 
entityIndexFactory,
-                                          final MetricsFactory metricsFactory, 
@Assisted("query") final String query,
-                                          @Assisted("connectionName") final 
String connectionName,
-                                          @Assisted("connectedEntityType") 
final Optional<String> connectedEntityType ) {
-        super( entityIndexFactory, metricsFactory, query );
-
-        this.connectionName = connectionName;
-        this.connectedEntityType = connectedEntityType;
-    }
-
-
-    @Override
-    protected SearchTypes getSearchTypes() {
-        final SearchTypes searchTypes = SearchTypes.fromNullableTypes( 
connectedEntityType.orNull() );
-
-        return searchTypes;
-    }
-
-
-    @Override
-    protected SearchEdge getSearchEdge( final Id id ) {
-        final SearchEdge searchEdge = createConnectionSearchEdge( id, 
connectionName );
-
-        return searchEdge;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ElasticSearchCollectionFilter.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ElasticSearchCollectionFilter.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ElasticSearchCollectionFilter.java
new file mode 100644
index 0000000..702b2d9
--- /dev/null
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ElasticSearchCollectionFilter.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.usergrid.corepersistence.pipeline.read.elasticsearch;
+
+
+import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
+import org.apache.usergrid.persistence.index.EntityIndexFactory;
+import org.apache.usergrid.persistence.index.SearchEdge;
+import org.apache.usergrid.persistence.index.SearchTypes;
+import org.apache.usergrid.persistence.model.entity.Id;
+
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
+
+import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.createCollectionSearchEdge;
+
+
+public class ElasticSearchCollectionFilter extends AbstractElasticSearchFilter 
{
+
+    private final String collectionName;
+    private final String entityType;
+
+    /**
+     * Create a new instance of our command
+     *
+     * @param entityIndexFactory The entity index factory used to search
+     * @param  metricsFactory The metrics factory for metrics
+     * @param collectionName The name of the collection
+     * @param entityType The entity type
+     */
+    @Inject
+    public ElasticSearchCollectionFilter( final EntityIndexFactory 
entityIndexFactory,
+                                          final MetricsFactory metricsFactory, 
@Assisted( "query" ) final String query,
+                                          @Assisted( "collectionName" ) final 
String collectionName,
+                                          @Assisted( "entityType" ) final 
String entityType ) {
+        super( entityIndexFactory, metricsFactory, query );
+        this.collectionName = collectionName;
+        this.entityType = entityType;
+    }
+
+
+
+    @Override
+    protected SearchTypes getSearchTypes() {
+        final SearchTypes types = SearchTypes.fromTypes( entityType );
+
+        return types;
+    }
+
+
+    @Override
+    protected SearchEdge getSearchEdge( final Id incomingId ) {
+        final SearchEdge searchEdge = createCollectionSearchEdge( incomingId, 
collectionName );
+
+        return searchEdge;
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ElasticSearchConnectionFilter.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ElasticSearchConnectionFilter.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ElasticSearchConnectionFilter.java
new file mode 100644
index 0000000..cc40530
--- /dev/null
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/elasticsearch/ElasticSearchConnectionFilter.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.usergrid.corepersistence.pipeline.read.elasticsearch;
+
+
+import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
+import org.apache.usergrid.persistence.index.EntityIndexFactory;
+import org.apache.usergrid.persistence.index.SearchEdge;
+import org.apache.usergrid.persistence.index.SearchTypes;
+import org.apache.usergrid.persistence.model.entity.Id;
+
+import com.google.common.base.Optional;
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
+
+import static 
org.apache.usergrid.corepersistence.util.CpNamingUtils.createConnectionSearchEdge;
+
+
+public class ElasticSearchConnectionFilter extends AbstractElasticSearchFilter 
{
+
+
+    private final String connectionName;
+    private final Optional<String> connectedEntityType;
+
+
+    /**
+     * Create a new instance of our command
+     */
+    @Inject
+    public ElasticSearchConnectionFilter( final EntityIndexFactory 
entityIndexFactory,
+                                          final MetricsFactory metricsFactory, 
@Assisted( "query" ) final String query,
+                                          @Assisted( "connectionName" ) final 
String connectionName,
+                                          @Assisted( "connectedEntityType" )
+                                          final Optional<String> 
connectedEntityType ) {
+        super( entityIndexFactory, metricsFactory, query );
+
+        this.connectionName = connectionName;
+        this.connectedEntityType = connectedEntityType;
+    }
+
+
+    @Override
+    protected SearchTypes getSearchTypes() {
+        final SearchTypes searchTypes = SearchTypes.fromNullableTypes( 
connectedEntityType.orNull() );
+
+        return searchTypes;
+    }
+
+
+    @Override
+    protected SearchEdge getSearchEdge( final Id id ) {
+        final SearchEdge searchEdge = createConnectionSearchEdge( id, 
connectionName );
+
+        return searchEdge;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/graph/AbstractReadGraphFilter.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/graph/AbstractReadGraphFilter.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/graph/AbstractReadGraphFilter.java
index 4021952..4dd34fc 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/graph/AbstractReadGraphFilter.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/graph/AbstractReadGraphFilter.java
@@ -55,7 +55,8 @@ public abstract class AbstractReadGraphFilter extends 
AbstractSeekingFilter<Id,
     public Observable<Id> call( final Observable<Id> observable ) {
 
         //get the graph manager
-        final GraphManager graphManager = 
graphManagerFactory.createEdgeManager( pipelineContext.getApplicationScope() );
+        final GraphManager graphManager =
+            graphManagerFactory.createEdgeManager( 
pipelineContext.getApplicationScope() );
 
 
         final String edgeName = getEdgeTypeName();
@@ -64,8 +65,8 @@ public abstract class AbstractReadGraphFilter extends 
AbstractSeekingFilter<Id,
         //return all ids that are emitted from this edge
         return observable.flatMap( id -> {
 
-                 //set our our constant state
-        final Optional<Edge> startFromCursor = getSeekValue();
+            //set our our constant state
+            final Optional<Edge> startFromCursor = getSeekValue();
 
 
             final SimpleSearchByEdgeType search =

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
index c65db09..b8d410d 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
@@ -94,28 +94,37 @@ public class CpNamingUtils {
 
 
     /**
-     * Get the index scope for the edge from the source
+     * Get the index scope for the edge from the source to the target.  The 
entity being indexed
+     * is the target node
      */
     public static IndexEdge generateScopeFromSource( final Edge edge ) {
-        return new IndexEdgeImpl( edge.getSourceNode(), edge.getType(), 
SearchEdge.NodeType.SOURCE,
+        return new IndexEdgeImpl( edge.getSourceNode(), edge.getType(), 
SearchEdge.NodeType.TARGET,
             edge.getTimestamp() );
     }
 
 
     /**
-     * Get the index scope for the edge from the source
+     * Get the index scope for the edge from the source.  The entity being 
indexed is the source node
      */
-    public static IndexEdge generateScopeToTarget( final Edge edge ) {
-        return new IndexEdgeImpl( edge.getTargetNode(), edge.getType(), 
SearchEdge.NodeType.TARGET,
+    public static IndexEdge generateScopeFromTarget( final Edge edge ) {
+        return new IndexEdgeImpl( edge.getTargetNode(), edge.getType(), 
SearchEdge.NodeType.SOURCE,
             edge.getTimestamp() );
     }
 
 
     /**
-     * Create the search edge from the source
+     * Create the search edge from the source.  The nodes being searched are 
Target nodes on the edges
      */
     public static SearchEdge createSearchEdgeFromSource( final Edge edge ) {
-        return new SearchEdgeImpl( edge.getSourceNode(), edge.getType(), 
SearchEdge.NodeType.SOURCE );
+        return new SearchEdgeImpl( edge.getSourceNode(), edge.getType(), 
SearchEdge.NodeType.TARGET );
+    }
+
+
+    /**
+     * Create the search edge from the target.  The nodes being searched are 
source nodes on the edges
+     */
+    public static SearchEdge createSearchEdgeFromTarget( final Edge edge ) {
+        return new SearchEdgeImpl( edge.getTargetNode(), edge.getType(), 
SearchEdge.NodeType.SOURCE );
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/9dc21f94/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/SearchEdgeImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/SearchEdgeImpl.java
 
b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/SearchEdgeImpl.java
index b401102..3b62691 100644
--- 
a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/SearchEdgeImpl.java
+++ 
b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/SearchEdgeImpl.java
@@ -23,8 +23,24 @@ import org.apache.usergrid.persistence.model.entity.Id;
 
 
 /**
- * The edge to search on.  Can be either a source--> target edge or a 
target<-- source edge.  The entiies returned
+ * The edge to search on.  Can be either a source--> target edge or a 
target<-- source edge.  The entities returned
  * will be on the opposite side of the edge from the specified nodeId
+ *
+ * Example:  A users collection
+ *  Edge: applicationId (1) - "users" -> userId(2)
+ *
+ * nodeId = applicationId(1)
+ * name = "users"
+ * nodeType = NodeType.Target
+ *
+ *
+ * Example A users in a group (reverse indexing)
+ * Edge userId(3) - "groups" -> groupId(4)
+ *
+ * nodeId = groupId(3)
+ * name = "groups
+ * nodeType = NodeType.Source
+ *
  */
 public class SearchEdgeImpl implements SearchEdge {
     protected final Id nodeId;
@@ -32,6 +48,12 @@ public class SearchEdgeImpl implements SearchEdge {
     protected final NodeType nodeType;
 
 
+    /**
+     * Create a new search edge
+     * @param nodeId The node to use in the search
+     * @param name The name of the edge
+     * @param nodeType The type of node to search on.  Usually Target unless 
otherwise specified
+     */
     public SearchEdgeImpl( final Id nodeId, final String name, final NodeType 
nodeType ) {
         this.nodeId = nodeId;
         this.name = name;

Reply via email to