You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by to...@apache.org on 2015/04/29 19:50:07 UTC
[4/5] incubator-usergrid git commit: Basic collection search working
correctly. Fixes naming conventions
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 <tn...@apigee.com>
Authored: Wed Apr 29 11:47:45 2015 -0600
Committer: Todd Nine <tn...@apigee.com>
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;