diff options
Diffstat (limited to 'plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/callable/LocalIdSearchCallable.java')
-rw-r--r-- | plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/callable/LocalIdSearchCallable.java | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/callable/LocalIdSearchCallable.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/callable/LocalIdSearchCallable.java new file mode 100644 index 00000000000..02b2108e26f --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/callable/LocalIdSearchCallable.java @@ -0,0 +1,156 @@ +/******************************************************************************* + * Copyright (c) 2012 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.orcs.core.internal.search.callable; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import org.eclipse.osee.framework.core.data.ResultSet; +import org.eclipse.osee.framework.core.data.ResultSetList; +import org.eclipse.osee.framework.core.enums.LoadLevel; +import org.eclipse.osee.logger.Log; +import org.eclipse.osee.orcs.core.ds.ArtifactBuilder; +import org.eclipse.osee.orcs.core.ds.ArtifactData; +import org.eclipse.osee.orcs.core.ds.ArtifactDataHandler; +import org.eclipse.osee.orcs.core.ds.AttributeData; +import org.eclipse.osee.orcs.core.ds.AttributeDataHandler; +import org.eclipse.osee.orcs.core.ds.DataLoader; +import org.eclipse.osee.orcs.core.ds.DataLoaderFactory; +import org.eclipse.osee.orcs.core.ds.QueryContext; +import org.eclipse.osee.orcs.core.ds.QueryData; +import org.eclipse.osee.orcs.core.ds.QueryEngine; +import org.eclipse.osee.orcs.core.ds.QueryPostProcessor; +import org.eclipse.osee.orcs.core.ds.RelationData; +import org.eclipse.osee.orcs.core.ds.RelationDataHandler; +import org.eclipse.osee.orcs.core.ds.criteria.CriteriaAttributeKeyword; +import org.eclipse.osee.orcs.core.internal.ArtifactLoader; +import org.eclipse.osee.orcs.core.internal.ArtifactLoaderFactory; +import org.eclipse.osee.orcs.core.internal.SessionContext; +import org.eclipse.osee.orcs.core.internal.search.QueryCollector; +import org.eclipse.osee.orcs.data.ArtifactReadable; +import org.eclipse.osee.orcs.data.AttributeReadable; +import org.eclipse.osee.orcs.data.HasLocalId; +import org.eclipse.osee.orcs.search.Match; + +/** + * @author Roberto E. Escobar + */ +public class LocalIdSearchCallable extends AbstractSearchCallable<ResultSet<HasLocalId>> { + + private final ArtifactLoaderFactory objectLoader; + private final DataLoaderFactory dataLoaderFactory; + + public LocalIdSearchCallable(Log logger, QueryEngine queryEngine, QueryCollector collector, ArtifactLoaderFactory objectLoader, DataLoaderFactory dataLoaderFactory, SessionContext sessionContext, QueryData queryData) { + super(logger, queryEngine, collector, sessionContext, null, queryData); + this.dataLoaderFactory = dataLoaderFactory; + this.objectLoader = objectLoader; + } + + @Override + protected int getCount(ResultSet<HasLocalId> results) throws Exception { + return results.getList().size(); + } + + @Override + protected ResultSet<HasLocalId> innerCall() throws Exception { + QueryContext queryContext = queryEngine.create(sessionContext.getSessionId(), queryData); + + checkForCancelled(); + + boolean requiresAttributeScan = + queryData.hasCriteriaType(CriteriaAttributeKeyword.class) && !queryContext.getPostProcessors().isEmpty(); + + List<HasLocalId> results = new ArrayList<HasLocalId>(); + if (requiresAttributeScan) { + ArtifactLoader loader = objectLoader.fromQueryContext(sessionContext, queryContext); + loader.setLoadLevel(loadLevel); + loader.includeDeleted(queryData.getOptions().areDeletedIncluded()); + loader.fromTransaction(queryData.getOptions().getFromTransaction()); + checkForCancelled(); + + List<ArtifactReadable> artifacts = loader.load(this); + + checkForCancelled(); + + if (!queryContext.getPostProcessors().isEmpty()) { + for (QueryPostProcessor processor : queryContext.getPostProcessors()) { + processor.setItemsToProcess(artifacts); + checkForCancelled(); + List<Match<ArtifactReadable, AttributeReadable<?>>> matches = processor.call(); + for (Match<ArtifactReadable, AttributeReadable<?>> match : matches) { + results.add(match.getItem()); + checkForCancelled(); + } + } + } else { + results.addAll(artifacts); + } + } else { + DataLoader loader = dataLoaderFactory.fromQueryContext(queryContext); + loader.setLoadLevel(LoadLevel.SHALLOW); + loader.includeDeleted(queryData.getOptions().areDeletedIncluded()); + loader.fromTransaction(queryData.getOptions().getFromTransaction()); + loader.load(this, new AdapterBuidler(results)); + } + checkForCancelled(); + return new ResultSetList<HasLocalId>(results); + } + + private static final class AdapterBuidler implements ArtifactBuilder { + + private final Collection<HasLocalId> results; + + public AdapterBuidler(Collection<HasLocalId> results) { + super(); + this.results = results; + } + + @Override + public ArtifactDataHandler createArtifactDataHandler() { + return new ArtifactDataHandler() { + + @Override + public void onData(ArtifactData data) { + results.add(data); + } + }; + } + + @Override + public RelationDataHandler createRelationDataHandler() { + return new RelationDataHandler() { + + @Override + public void onData(RelationData data) { + // + } + }; + } + + @Override + public AttributeDataHandler createAttributeDataHandler() { + return new AttributeDataHandler() { + + @Override + public void onData(AttributeData data) { + // + } + }; + } + + @Override + public List<ArtifactReadable> getArtifacts() { + return null; + } + + } + +} |