Home » Modeling » OCL » illegal operation signature: (oclContents())
| |
Re: illegal operation signature: (oclContents()) [message #1074692 is a reply to message #1074590] |
Sat, 27 July 2013 13:36 |
Archevo tarek Messages: 21 Registered: July 2013 |
Junior Member |
|
|
Hi,
this my code:
OCL<?, EClassifier, ?, ?, ?, ?, ?, ?, ?, Constraint, EClass, EObject> ocl = null;
ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);
OCLHelper<EClassifier, EOperation, EStructuralFeature, Constraint> helper = (OCLHelper<EClassifier, EOperation, EStructuralFeature, Constraint>) ocl.createOCLHelper();
helper.setContext(BPELPackage.Literals.PROCESS);
BasicEnvironment benv =OCLUtil.getAdapter(ocl.getEnvironment(), BasicEnvironment.class);
benv.setOption(ProblemOption.CLOSURE_ITERATOR,ProblemHandler.Severity.OK);
OCLExpression<EClassifier> query = helper.createQuery("self->asSet()->closure(oclContents()->select(oclIsKindOf(Activity)))->select(a:model::Activity| a.oclIsKindOf(Assign))->size()");
Query queryEval = ocl.createQuery(query);
String categories = (String) queryEval.evaluate(process).toString();
System.out.println(categories+ " in testquery");
Can you give some precisions please, how can i replace oclContens() with eContents().
Thanks in advance.
|
|
|
Re: illegal operation signature: (oclContents()) [message #1074707 is a reply to message #1074692] |
Sat, 27 July 2013 14:20 |
Ed Willink Messages: 7655 Registered: July 2009 |
Senior Member |
|
|
Hi
That is not your code; iut has no import statyeements, classpath,
dependencies, hiowever your question is trivial
Chnage
OCLExpression<EClassifier> query =
helper.createQuery("self->asSet()->closure(oclContents()->select(oclIsKindOf(Activity)))->select(a:model::Activity|
a.oclIsKindOf(Assign))->size()");
to
OCLExpression<EClassifier> query =
helper.createQuery("self->asSet()->closure(eContents()->select(oclIsKindOf(Activity)))->select(a:model::Activity|
a.oclIsKindOf(Assign))->size()");
Regards
Ed Willink
On 27/07/2013 14:36, Archevo tarek wrote:
> Hi,
> this my code:
>
>
> OCL<?, EClassifier, ?, ?, ?, ?, ?, ?, ?, Constraint, EClass, EObject>
> ocl = null;
> ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);
>
> OCLHelper<EClassifier, EOperation, EStructuralFeature, Constraint>
> helper = (OCLHelper<EClassifier, EOperation, EStructuralFeature,
> Constraint>) ocl.createOCLHelper();
>
> helper.setContext(BPELPackage.Literals.PROCESS);
>
> BasicEnvironment benv =OCLUtil.getAdapter(ocl.getEnvironment(),
> BasicEnvironment.class);
>
> benv.setOption(ProblemOption.CLOSURE_ITERATOR,ProblemHandler.Severity.OK);
>
>
> OCLExpression<EClassifier> query =
> helper.createQuery("self->asSet()->closure(oclContents()->select(oclIsKindOf(Activity)))->select(a:model::Activity|
> a.oclIsKindOf(Assign))->size()");
>
> Query queryEval = ocl.createQuery(query);
> String categories = (String)
> queryEval.evaluate(process).toString();
> System.out.println(categories+ " in testquery");
>
>
> Can you give some precisions please, how can i replace oclContens()
> with eContents().
>
> Thanks in advance.
|
|
|
Re: illegal operation signature: (oclContents()) [message #1074719 is a reply to message #1074707] |
Sat, 27 July 2013 14:58 |
Archevo tarek Messages: 21 Registered: July 2013 |
Junior Member |
|
|
Hi,
Thank you for answering me.
It is my code indeed ed. It is just an excerpt of a method, here is the imports of my class where the method public void testquery(Process process) is located:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.wsdl.WSDLException;
import org.eclipse.bpel.fnmeta.model.util.FMResourceFactoryImpl;
import org.eclipse.bpel.model.BPELFactory;
import org.eclipse.bpel.model.BPELPackage;
import org.eclipse.bpel.model.Process;
import org.eclipse.bpel.model.resource.BPELReader;
import org.eclipse.bpel.model.resource.BPELResource;
import org.eclipse.bpel.model.resource.BPELResourceFactoryImpl;
import org.eclipse.bpel.model.resource.BPELResourceImpl;
import org.eclipse.bpel.model.resource.BPELResourceSetImpl;
import org.eclipse.bpel.model.resource.BPELWriter;
import org.eclipse.bpel.model.util.WSDLUtil;
import org.eclipse.bpel.validator.Main;
import org.eclipse.bpel.validator.ModelQuery;
import org.eclipse.bpel.validator.helpers.ModelQueryImpl;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.impl.DynamicEObjectImpl;
import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.Resource.Diagnostic;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.ocl.OCL;
import org.eclipse.ocl.OCLInput;
import org.eclipse.ocl.ParserException;
import org.eclipse.ocl.Query;
import org.eclipse.ocl.ecore.Constraint;
import org.eclipse.ocl.ecore.EcoreEnvironmentFactory;
import org.eclipse.ocl.expressions.OCLExpression;
import org.eclipse.ocl.helper.OCLHelper;
import org.eclipse.ocl.lpg.BasicEnvironment;
import org.eclipse.ocl.lpg.ProblemHandler;
import org.eclipse.ocl.options.ParsingOptions;
import org.eclipse.ocl.options.ProblemOption;
import org.eclipse.ocl.util.OCLUtil;
import org.eclipse.wst.wsdl.Definition;
import org.eclipse.wst.wsdl.WSDLFactory;
import org.eclipse.wst.wsdl.WSDLPackage;
import org.eclipse.wst.wsdl.internal.util.WSDLResourceFactoryImpl;
import org.eclipse.wst.wsdl.util.WSDLResourceImpl;
import org.eclipse.xsd.util.XSDResourceFactoryImpl;
.
..
public void testquery(Process process) throws ParserException {
OCL<?, EClassifier, ?, ?, ?, ?, ?, ?, ?, Constraint, EClass, EObject> ocl = null;
ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);
OCLHelper<EClassifier, EOperation, EStructuralFeature, Constraint> helper = (OCLHelper<EClassifier, EOperation, EStructuralFeature, Constraint>) ocl.createOCLHelper();
helper.setContext(BPELPackage.Literals.PROCESS);
BasicEnvironment benv =OCLUtil.getAdapter(ocl.getEnvironment(), BasicEnvironment.class);
benv.setOption(ProblemOption.CLOSURE_ITERATOR,ProblemHandler.Severity.OK);
OCLExpression<EClassifier> query = helper.createQuery("self->asSet()->closure(oclContents()->select(oclIsKindOf(Activity)))->select(a:model::Activity| a.oclIsKindOf(Assign))->size()");
Query queryEval = ocl.createQuery(query);
String categories = (String) queryEval.evaluate(process).toString();
System.out.println(categories+ " in testquery");
}
Replacing the oclContents() directly in the request by eContents() returns the same exception, an org.eclipse.ocl.SemanticException: illegal operation signature: (eContents()).
I solve the problem like this:
I replaced this line:
helper.setContext(BPELPackage.Literals.PROCESS);
by this one:
helper.setContext(EcorePackage.Literals.EOBJECT);
So i changed the context to the EcorePackage like you suggeted to work with EObject.
And i changed the request to:
self->asSet()->closure(eContents()->select(oclIsKindOf(model::Activity)).oclAsType(ecore::EObject))->size()
It works for now.
I'm testing now this request:
self->asSet()->closure(eContents()->select(oclIsKindOf(model::Activity)).oclAsType(ecore::EObject))->select(a:model::Activity| a.oclIsKindOf(model::Assign))->size()
It sends an exception:
org.eclipse.ocl.SemanticException: Iterator variable must have same type as source element type (Set {self}->asSet()->closure(temp1 : EObject | temp1.eContents()->select(temp2 : T | temp2.oclIsKindOf(model::Activity))->collect(temp3 : T | temp3.oclAsType(ecore::EObject)))->select(a : Activity | a.oclIsKindOf(model::Assign)))
Any help, please.
Thank
|
|
| |
Goto Forum:
Current Time: Thu Mar 28 10:30:13 GMT 2024
Powered by FUDForum. Page generated in 0.03129 seconds
|