Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java156
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;
+ }
+
+ }
+
+}

Back to the top