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;
