private void setReference( DelayedReference reference, Object singleForeachResult, IModelAdapter modelAdapter, ModelElementProxy foreachTargetElement, IModelInjector injector, int position) throws ModelElementCreationException, ModelAdapterException { // add the parsed part to the object first try to resolve if there is a model element that // already // exists and can be reused reference.setRealValue(injector.createOrResolve(foreachTargetElement, null, null)); // by default use partition of reference.getModelElement if (reference.getModelElement() instanceof EObject && reference.getRealValue() instanceof EObject) { ((EObject) reference.getModelElement()) .eResource() .getContents() .add((EObject) reference.getRealValue()); } modelAdapter.set( reference.getModelElement(), reference.getPropertyName(), reference.getRealValue(), position); }
/** * If the <tt>reference</tt>'s {@link DelayedReference#getModelElement() model element} is a * proxy, resolve it first. */ private void resolveModelElementProxy(DelayedReference reference, IModelAdapter modelAdapter) throws ModelAdapterException, ModelElementCreationException { if (reference.getModelElement() instanceof ModelElementProxy) { ModelElementProxy proxy = (ModelElementProxy) reference.getModelElement(); if (proxy.getRealObject() == null) { Object result; result = modelAdapter.createOrResolveElement( proxy.getType(), proxy.getAttributeMap(), null, null, false, true); if (result instanceof EObject) { reference.setModelElement(result); } } else { reference.setModelElement(proxy.getRealObject()); } } }
private PredicateSemantic getActivePredicateFromWhenAsClauses( DelayedReference reference, IModelAdapter modelAdapter, Object contextElement, Object currentForeachElement) throws ModelAdapterException { for (PredicateSemantic nextPred : reference.getPredicateActionList()) { if (nextPred.getWhen() != null) { Collection<?> resultBool = modelAdapter.evaluateOCLQuery( currentForeachElement, reference.getKeyValue(), nextPred.getWhen(), contextElement); if (resultBool.size() == 1) { Iterator<?> resIt = resultBool.iterator(); Object nextBool = resIt.next(); if (nextBool instanceof Boolean && (Boolean) nextBool) { return nextPred; } } } else { return nextPred; // no when-clause means "handle always" } } return null; }