Added basic model search service which is used in case no index based
search service in contributed for a given meta model.
diff --git a/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/plugin.xml b/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/plugin.xml
index fca4f14..32838ff 100644
--- a/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/plugin.xml
+++ b/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/plugin.xml
@@ -23,13 +23,22 @@
<applicableFor metaModelDescriptorIdPattern="org.eclipse.sphinx.examples.hummingbird20"/>
</service>
</extension>
+ <extension id="org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel" point="org.eclipse.incquery.runtime.queryspecification">
+ <group group="org.eclipse.incquery.runtime.extensibility.SingletonExtensionFactory:org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel" id="org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel"/>
+ </extension>
+ <extension id="org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel" point="org.eclipse.incquery.runtime.queryspecification">
+ <group group="org.eclipse.incquery.runtime.extensibility.SingletonExtensionFactory:org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel" id="org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel"/>
+ </extension>
+ <extension id="org.eclipse.sphinx.examples.hummingbird20.incquery.common.Common" point="org.eclipse.incquery.runtime.queryspecification">
+ <group group="org.eclipse.incquery.runtime.extensibility.SingletonExtensionFactory:org.eclipse.sphinx.examples.hummingbird20.incquery.common.Common" id="org.eclipse.sphinx.examples.hummingbird20.incquery.common.Common"/>
+ </extension>
<extension id="org.eclipse.sphinx.examples.hummingbird20.incquery.common.Common" point="org.eclipse.incquery.runtime.queryspecification">
<group group="org.eclipse.incquery.runtime.extensibility.SingletonExtensionFactory:org.eclipse.sphinx.examples.hummingbird20.incquery.common.Common" id="org.eclipse.sphinx.examples.hummingbird20.incquery.common.Common"/>
</extension>
<extension id="org.eclipse.sphinx.examples.hummingbird20.incquery.instancemodel.Instancemodel" point="org.eclipse.incquery.runtime.queryspecification">
<group group="org.eclipse.incquery.runtime.extensibility.SingletonExtensionFactory:org.eclipse.sphinx.examples.hummingbird20.incquery.instancemodel.Instancemodel" id="org.eclipse.sphinx.examples.hummingbird20.incquery.instancemodel.Instancemodel"/>
</extension>
- <extension id="org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel" point="org.eclipse.incquery.runtime.queryspecification">
- <group group="org.eclipse.incquery.runtime.extensibility.SingletonExtensionFactory:org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel" id="org.eclipse.sphinx.examples.hummingbird20.incquery.typemodel.Typemodel"/>
+ <extension id="org.eclipse.sphinx.examples.hummingbird20.incquery.instancemodel.Instancemodel" point="org.eclipse.incquery.runtime.queryspecification">
+ <group group="org.eclipse.incquery.runtime.extensibility.SingletonExtensionFactory:org.eclipse.sphinx.examples.hummingbird20.incquery.instancemodel.Instancemodel" id="org.eclipse.sphinx.examples.hummingbird20.incquery.instancemodel.Instancemodel"/>
</extension>
</plugin>
diff --git a/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src-gen/org/eclipse/sphinx/examples/hummingbird20/incquery/instancemodel/util/ConnectionsByNameQuerySpecification.java b/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src-gen/org/eclipse/sphinx/examples/hummingbird20/incquery/instancemodel/util/ConnectionsByNameQuerySpecification.java
index 96beb42..7244ef8 100644
--- a/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src-gen/org/eclipse/sphinx/examples/hummingbird20/incquery/instancemodel/util/ConnectionsByNameQuerySpecification.java
+++ b/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src-gen/org/eclipse/sphinx/examples/hummingbird20/incquery/instancemodel/util/ConnectionsByNameQuerySpecification.java
@@ -78,8 +78,8 @@
new ExportedParameter(body, var_name, "name")
));
-
new TypeUnary(body, var_connection, getClassifierLiteral("http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/instancemodel", "Connection"), "http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/instancemodel/Connection");
+
new TypeBinary(body, CONTEXT, var_connection, var_name, getFeatureLiteral("http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/common", "Identifiable", "name"), "http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/common/Identifiable.name");
bodies.add(body);
}
diff --git a/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src-gen/org/eclipse/sphinx/examples/hummingbird20/incquery/typemodel/util/InterfacesByNameQuerySpecification.java b/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src-gen/org/eclipse/sphinx/examples/hummingbird20/incquery/typemodel/util/InterfacesByNameQuerySpecification.java
index 10ca031..a7644ea 100644
--- a/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src-gen/org/eclipse/sphinx/examples/hummingbird20/incquery/typemodel/util/InterfacesByNameQuerySpecification.java
+++ b/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src-gen/org/eclipse/sphinx/examples/hummingbird20/incquery/typemodel/util/InterfacesByNameQuerySpecification.java
@@ -78,8 +78,8 @@
new ExportedParameter(body, var_name, "name")
));
-
new TypeUnary(body, var_interface, getClassifierLiteral("http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/typemodel", "Interface"), "http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/typemodel/Interface");
+
new TypeBinary(body, CONTEXT, var_interface, var_name, getFeatureLiteral("http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/common", "Identifiable", "name"), "http://www.eclipse.org/sphinx/examples/hummingbird/2.0.1/common/Identifiable.name");
bodies.add(body);
}
diff --git a/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src/org/eclipse/sphinx/examples/hummingbird20/incquery/service/Hummingbird20ModelSearchQuery.java b/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src/org/eclipse/sphinx/examples/hummingbird20/incquery/service/Hummingbird20ModelSearchQuery.java
index 223edff..ae8f368 100644
--- a/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src/org/eclipse/sphinx/examples/hummingbird20/incquery/service/Hummingbird20ModelSearchQuery.java
+++ b/examples/org.eclipse.sphinx.examples.hummingbird20.incquery/src/org/eclipse/sphinx/examples/hummingbird20/incquery/service/Hummingbird20ModelSearchQuery.java
@@ -8,13 +8,13 @@
import org.eclipse.incquery.runtime.exception.IncQueryException;
import org.eclipse.sphinx.emf.search.ui.ModelSearchMatch;
import org.eclipse.sphinx.emf.search.ui.QuerySpecification;
-import org.eclipse.sphinx.emf.search.ui.incquery.services.AbstractModelSearchService;
+import org.eclipse.sphinx.emf.search.ui.incquery.services.AbstractIncQueryModelSearchService;
import org.eclipse.sphinx.examples.hummingbird20.common.Identifiable;
import org.eclipse.sphinx.examples.hummingbird20.incquery.common.IdentifiablesByNameMatcher;
import org.eclipse.sphinx.examples.hummingbird20.incquery.internal.Activator;
import org.eclipse.sphinx.platform.util.PlatformLogUtil;
-public class Hummingbird20ModelSearchQuery extends AbstractModelSearchService {
+public class Hummingbird20ModelSearchQuery extends AbstractIncQueryModelSearchService {
@Override
protected List<ModelSearchMatch> getMatches(IncQueryEngine engine, QuerySpecification querySpec) {
diff --git a/plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/AbstractModelSearchService.java b/plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/AbstractIncQueryModelSearchService.java
similarity index 95%
rename from plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/AbstractModelSearchService.java
rename to plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/AbstractIncQueryModelSearchService.java
index 65fb74e..1f5fcdf 100644
--- a/plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/AbstractModelSearchService.java
+++ b/plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/AbstractIncQueryModelSearchService.java
@@ -29,7 +29,7 @@
import org.eclipse.sphinx.emf.search.ui.services.IModelSearchService;
import org.eclipse.sphinx.platform.util.PlatformLogUtil;
-public abstract class AbstractModelSearchService implements IModelSearchService {
+public abstract class AbstractIncQueryModelSearchService implements IModelSearchService {
protected abstract List<ModelSearchMatch> getMatches(IncQueryEngine engine, QuerySpecification querySpec);
diff --git a/plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/GenericModelSearchService.java b/plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/GenericModelSearchService.java
index fd73970..4d31855 100644
--- a/plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/GenericModelSearchService.java
+++ b/plugins/org.eclipse.sphinx.emf.search.ui.incquery/src/org/eclipse/sphinx/emf/search/ui/incquery/services/GenericModelSearchService.java
@@ -29,7 +29,7 @@
import org.eclipse.sphinx.emf.search.ui.ModelSearchMatch;
import org.eclipse.sphinx.emf.search.ui.QuerySpecification;
-public class GenericModelSearchService extends AbstractModelSearchService {
+public class GenericModelSearchService extends AbstractIncQueryModelSearchService {
private Map<IncQueryEngine, Set<EStructuralFeature>> engineToFeaturesMap = new HashMap<IncQueryEngine, Set<EStructuralFeature>>();
diff --git a/plugins/org.eclipse.sphinx.emf.search.ui/plugin.xml b/plugins/org.eclipse.sphinx.emf.search.ui/plugin.xml
index 31d8567..d5f7ecb 100644
--- a/plugins/org.eclipse.sphinx.emf.search.ui/plugin.xml
+++ b/plugins/org.eclipse.sphinx.emf.search.ui/plugin.xml
@@ -69,4 +69,15 @@
</propertySection>
</propertySections>
</extension>
+ <extension
+ point="org.eclipse.sphinx.emf.metaModelServices">
+ <service
+ class="org.eclipse.sphinx.emf.search.ui.services.BasicModelSearchService"
+ id="org.eclipse.sphinx.emf.search.ui.basicModelSearch"
+ type="org.eclipse.sphinx.emf.search.ui.services.IModelSearchService">
+ <applicableFor
+ metaModelDescriptorIdPattern=".*">
+ </applicableFor>
+ </service>
+ </extension>
</plugin>
diff --git a/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/ModelSearchQuery.java b/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/ModelSearchQuery.java
index 8762191..5f85734 100644
--- a/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/ModelSearchQuery.java
+++ b/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/ModelSearchQuery.java
@@ -28,6 +28,7 @@
import org.eclipse.search.ui.ISearchQuery;
import org.eclipse.search.ui.ISearchResult;
import org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor;
+import org.eclipse.sphinx.emf.metamodel.MetaModelDescriptorRegistry;
import org.eclipse.sphinx.emf.metamodel.services.DefaultMetaModelServiceProvider;
import org.eclipse.sphinx.emf.model.IModelDescriptor;
import org.eclipse.sphinx.emf.model.ModelDescriptorRegistry;
@@ -94,10 +95,14 @@
}
protected IModelSearchService getModelSearchService(IMetaModelDescriptor descriptor) {
+ IModelSearchService modelSearchService = null;
if (descriptor != null) {
- return new DefaultMetaModelServiceProvider().getService(descriptor, IModelSearchService.class);
+ modelSearchService = new DefaultMetaModelServiceProvider().getService(descriptor, IModelSearchService.class);
}
- return null;
+ if (modelSearchService == null) {
+ modelSearchService = new DefaultMetaModelServiceProvider().getService(MetaModelDescriptorRegistry.ANY_MM, IModelSearchService.class);
+ }
+ return modelSearchService;
}
@Override
diff --git a/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/services/BasicModelSearchService.java b/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/services/BasicModelSearchService.java
new file mode 100644
index 0000000..cbc37b1
--- /dev/null
+++ b/plugins/org.eclipse.sphinx.emf.search.ui/src/org/eclipse/sphinx/emf/search/ui/services/BasicModelSearchService.java
@@ -0,0 +1,52 @@
+package org.eclipse.sphinx.emf.search.ui.services;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.sphinx.emf.model.IModelDescriptor;
+import org.eclipse.sphinx.emf.search.ui.ModelSearchMatch;
+import org.eclipse.sphinx.emf.search.ui.QuerySpecification;
+import org.eclipse.sphinx.emf.ui.util.RetrieveNameAttributeHelper;
+
+public class BasicModelSearchService implements IModelSearchService {
+
+ private RetrieveNameAttributeHelper helper = new RetrieveNameAttributeHelper();
+
+ @Override
+ public List<ModelSearchMatch> getMatches(IModelDescriptor modelDescriptor, QuerySpecification spec) {
+ return getMatches(modelDescriptor.getLoadedResources(true), spec);
+ }
+
+ @Override
+ public List<ModelSearchMatch> getMatches(Collection<Resource> resources, QuerySpecification spec) {
+ List<ModelSearchMatch> result = new ArrayList<ModelSearchMatch>();
+ for (Resource resource : resources) {
+ TreeIterator<EObject> allContents = resource.getAllContents();
+ while (allContents.hasNext()) {
+ EObject eObject = allContents.next();
+ EAttribute nameAttribute = helper.getNameAttribute(eObject);
+ if (nameAttribute != null) {
+ Object nameObj = eObject.eGet(nameAttribute);
+ if (spec.isCaseSensitive()) {
+ if (nameObj.toString().equals(spec.getPattern())) {
+ result.add(createModelSearchMatch(eObject));
+ }
+ } else if (nameObj.toString().equalsIgnoreCase(spec.getPattern())) {
+ result.add(createModelSearchMatch(eObject));
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ private ModelSearchMatch createModelSearchMatch(EObject eObject) {
+ ModelSearchMatch match = new ModelSearchMatch(eObject);
+ return match;
+ }
+}