Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-06-02 06:48:05 +0000
committerEike Stepper2012-06-02 06:48:05 +0000
commit437960de3b5bba1772eaba6e1a2509ad264161b7 (patch)
tree695736ea751fd4a483c178c034ab8f8d2c754c7d /plugins/org.eclipse.emf.cdo.server.ocl
parentf40cb3cede05ab3abc576c04b4ec8daf830ff3ea (diff)
downloadcdo-437960de3b5bba1772eaba6e1a2509ad264161b7.tar.gz
cdo-437960de3b5bba1772eaba6e1a2509ad264161b7.tar.xz
cdo-437960de3b5bba1772eaba6e1a2509ad264161b7.zip
[381410] IllegalStateException from OCL query with non-Collection result
https://bugs.eclipse.org/bugs/show_bug.cgi?id=381410
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.ocl')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.ocl/src/org/eclipse/emf/cdo/server/ocl/OCLQueryHandler.java57
1 files changed, 31 insertions, 26 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.ocl/src/org/eclipse/emf/cdo/server/ocl/OCLQueryHandler.java b/plugins/org.eclipse.emf.cdo.server.ocl/src/org/eclipse/emf/cdo/server/ocl/OCLQueryHandler.java
index c31d09df8f..93bf2fc678 100644
--- a/plugins/org.eclipse.emf.cdo.server.ocl/src/org/eclipse/emf/cdo/server/ocl/OCLQueryHandler.java
+++ b/plugins/org.eclipse.emf.cdo.server.ocl/src/org/eclipse/emf/cdo/server/ocl/OCLQueryHandler.java
@@ -42,6 +42,7 @@ import org.eclipse.emf.spi.cdo.FSMUtil;
import org.eclipse.emf.spi.cdo.InternalCDOObject;
import org.eclipse.ocl.Environment;
+import org.eclipse.ocl.EvaluationEnvironment;
import org.eclipse.ocl.OCL;
import org.eclipse.ocl.Query;
import org.eclipse.ocl.ecore.BooleanLiteralExp;
@@ -147,37 +148,17 @@ public class OCLQueryHandler implements IQueryHandler
}
}
+ EvaluationEnvironment<EClassifier, ?, ?, EClass, EObject> evalEnv = query.getEvaluationEnvironment();
Set<Entry<String, Object>> entrySet = parameters.entrySet();
for (Entry<String, Object> parameter : entrySet)
{
- query.getEvaluationEnvironment().add(parameter.getKey(), parameter.getValue());
+ String key = parameter.getKey();
+ Object value = parameter.getValue();
+ evalEnv.add(key, value);
}
- Object evaluated = evaluate(query, object);
- if (evaluated instanceof Collection<?>)
- {
- Collection<?> results = (Collection<?>)evaluated;
- for (Object result : results)
- {
- if (result instanceof EObject)
- {
- CDORevision revision = getRevision((EObject)result, view);
- if (!context.addResult(revision))
- {
- break;
- }
- }
- }
- }
- else if (evaluated instanceof EObject)
- {
- CDORevision revision = getRevision((EObject)evaluated, view);
- context.addResult(revision);
- }
- else
- {
- context.addResult(evaluated);
- }
+ Object result = evaluate(query, object);
+ addResult(result, context, view);
}
catch (Exception ex)
{
@@ -192,6 +173,30 @@ public class OCLQueryHandler implements IQueryHandler
}
}
+ protected boolean addResult(Object result, IQueryContext context, CDOView view)
+ {
+ if (result instanceof EObject)
+ {
+ CDORevision revision = getRevision((EObject)result, view);
+ return context.addResult(revision);
+ }
+
+ if (result instanceof Collection<?>)
+ {
+ for (Object element : (Collection<?>)result)
+ {
+ if (!addResult(element, context, view))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ return context.addResult(result);
+ }
+
protected CDORevision getRevision(EObject object, CDOView view)
{
return FSMUtil.adapt(object, view).cdoRevision();

Back to the top