The problem is, that Long is not mapped to the primitive type OCL_INTEGER!
So, in order to compare the class attribute with a constant, the
Long.compareTo method is used, which demands a Long type to compare to.
But the given constant is declared as Integer!
A possible solution is to introduce a new attribute which is of type
long. The OCL expression uses then the new attribute instead of a given
value.
Is there another way to solve this???
Please help, because I don't want to pollute my model with such 'compare
attributes'!!!
Why is the Long type not mapped to OCL_INTEGER???
Alternatively why does OCL_INTEGER not base on Long?
Thanks, Andreas
Andreas Werner wrote:
Hi newsgroup,
I defined an attribute invariant via OCL:
self.property>=0
If this property has the type EInt everything is fine and the Validation
action in my GMF editor works as expercted.
But if the type of the property is changed into ELong, I get a
'Validation action failed' message with the following stack trace:
java.lang.ClassCastException: java.lang.Integer
at java.lang.Long.compareTo(Unknown Source)
at org.eclipse.emf.ocl.expressions.impl.EvaluationVisitorImpl.
visitOperationCallExp(EvaluationVisitorImpl.java:1054)
at org.eclipse.emf.ocl.expressions.impl.OperationCallExpImpl.accept
(OperationCallExpImpl.java:274)
at org.eclipse.emf.ocl.query.impl.QueryImpl.evaluate(QueryImpl.java:242)
at org.eclipse.emf.ocl.query.impl.QueryImpl.check(QueryImpl.java:278)
...
Is that OCL expression not applicable for 'long' properties?
Thanks, Andreas
PS: I'm using version 1.01 of EMFT OCL.