diff options
author | Eike Stepper | 2012-06-02 06:48:05 +0000 |
---|---|---|
committer | Eike Stepper | 2012-06-02 06:48:05 +0000 |
commit | 437960de3b5bba1772eaba6e1a2509ad264161b7 (patch) | |
tree | 695736ea751fd4a483c178c034ab8f8d2c754c7d /plugins/org.eclipse.emf.cdo.server.ocl | |
parent | f40cb3cede05ab3abc576c04b4ec8daf830ff3ea (diff) | |
download | cdo-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.java | 57 |
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(); |