Search in sources :

Example 46 with ModalPropertyValue

use of org.osate.aadl2.ModalPropertyValue in project osate2 by osate.

the class CachePropertyAssociationsSwitch method cacheConnectionPropertyAssociations.

protected void cacheConnectionPropertyAssociations(final ConnectionInstance conni) {
    PropertyAssociation setPA;
    PropertyExpression defaultvalue;
    try {
        /*
			 * propertyFilter contains all properties used by the system, so, we try to
			 * use the one associated to the connection instance and their reference and
			 * see if the user declares a specific value.
			 */
        for (Property prop : propertyFilter) {
            setPA = null;
            defaultvalue = prop.getDefaultValue();
            for (final ConnectionReference connRef : conni.getConnectionReferences()) {
                /*
					 * In the following piece of code, we check that a property
					 * is consistent all along the connection reference.
					 * For example, we check that the timing property (immediate, delayed)
					 * is consistent for each connection.
					 */
                if (connRef.acceptsProperty(prop)) {
                    /*
						 * Just look up the property. The property doesn't yet have
						 * a local association, so lookup will get the value from
						 * the declarative model. Property lookup process now
						 * corrects reference values to instance reference values.
						 */
                    final PropertyAssociation propAssociation = scProps.retrieveSCProperty(conni, prop, connRef.getConnection());
                    final EvaluationContext ctx = new EvaluationContext(connRef, classifierCache, propAssociation);
                    PropertyEvaluationResult result = prop.evaluate(ctx, 0);
                    List<EvaluatedProperty> evaluated = result.getEvaluated();
                    if (!evaluated.isEmpty()) {
                        PropertyAssociationInstance newPA = InstanceFactory.eINSTANCE.createPropertyAssociationInstance();
                        newPA.setProperty(prop);
                        newPA.setPropertyAssociation(getDeclarativePA(result.getPa()));
                        fillPropertyValue(connRef, newPA, evaluated);
                        if (!newPA.getOwnedValues().isEmpty()) {
                            /*
								 * FIXME JD
								 *
								 * Try to look if the property references a component or not.
								 * This was done to fix the issue related to the Bound Bus analysis plugin
								 */
                            for (Iterator<Element> content = EcoreUtil.getAllProperContents(newPA, false); content.hasNext(); ) {
                                Element elem = content.next();
                                if (elem instanceof ModalPropertyValue) {
                                    ModalPropertyValue mpv = (ModalPropertyValue) elem;
                                    if (mpv.getOwnedValue() instanceof ListValue) {
                                        ListValue lv = (ListValue) mpv.getOwnedValue();
                                        for (Element e : lv.getOwnedListElements()) {
                                            if (e instanceof ReferenceValue) {
                                                PropertyExpression irv = ((ReferenceValue) e).instantiate(conni.getContainingComponentInstance());
                                                if (irv != null) {
                                                    EcoreUtil.replace(e, irv);
                                                }
                                            }
                                        }
                                    }
                                }
                                if (elem instanceof ReferenceValue) {
                                    PropertyExpression irv = ((ReferenceValue) elem).instantiate(conni.getContainingComponentInstance());
                                    if (irv != null) {
                                        EcoreUtil.replace(elem, irv);
                                    }
                                }
                            }
                            scProps.recordSCProperty(conni, prop, connRef.getConnection(), newPA);
                            if (setPA == null) {
                                setPA = newPA;
                                conni.getOwnedPropertyAssociations().add(newPA);
                            } else {
                                // check consistency
                                for (Mode m : conni.getSystemInstance().getSystemOperationModes()) {
                                    PropertyExpression newVal = newPA.valueInMode(m);
                                    PropertyExpression setVal = setPA.valueInMode(m);
                                    if (!newVal.sameAs(setVal)) {
                                        error(conni, "Value for property " + setPA.getProperty().getQualifiedName() + " not consistent along connection");
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            checkIfCancelled();
            if (cancelled()) {
                break;
            }
        }
    } catch (IllegalStateException e) {
        // circular dependency
        // xxx: this is a misleading place to put the marker
        error(conni, e.getMessage());
        System.out.println("IllegalStateException raised in cacheConnectionPropertyAssociations");
    } catch (InvalidModelException e) {
        error(conni, e.getMessage());
        System.out.println("InvalidModelException raised in cacheConnectionPropertyAssociations");
    }
}
Also used : PropertyEvaluationResult(org.osate.aadl2.properties.PropertyEvaluationResult) ModalPropertyValue(org.osate.aadl2.ModalPropertyValue) PropertyAssociation(org.osate.aadl2.PropertyAssociation) ReferenceValue(org.osate.aadl2.ReferenceValue) Element(org.osate.aadl2.Element) ListValue(org.osate.aadl2.ListValue) Mode(org.osate.aadl2.Mode) SystemOperationMode(org.osate.aadl2.instance.SystemOperationMode) EvaluatedProperty(org.osate.aadl2.properties.EvaluatedProperty) InvalidModelException(org.osate.aadl2.properties.InvalidModelException) PropertyAssociationInstance(org.osate.aadl2.instance.PropertyAssociationInstance) ConnectionReference(org.osate.aadl2.instance.ConnectionReference) PropertyExpression(org.osate.aadl2.PropertyExpression) EvaluationContext(org.osate.aadl2.properties.EvaluationContext) EvaluatedProperty(org.osate.aadl2.properties.EvaluatedProperty) Property(org.osate.aadl2.Property)

Example 47 with ModalPropertyValue

use of org.osate.aadl2.ModalPropertyValue in project osate2 by osate.

the class CachePropertyAssociationsSwitch method fillPropertyValue.

private void fillPropertyValue(InstanceObject io, PropertyAssociation pa, List<EvaluatedProperty> values) {
    PropertyExpression lexp;
    List<PropertyExpression> elems;
    final Iterator<EvaluatedProperty> valueIter = values.iterator();
    final EvaluatedProperty value = valueIter.next();
    final List<MpvProxy> proxies = value.getProxies();
    for (MpvProxy proxy : proxies) {
        ModalPropertyValue newVal = Aadl2Factory.eINSTANCE.createModalPropertyValue();
        List<SystemOperationMode> inSOMs = new ArrayList<SystemOperationMode>();
        newVal.setOwnedValue(EcoreUtil.copy(proxy.getValue()));
        // process list appends
        while (valueIter.hasNext()) {
            MpvProxy prx = valueIter.next().getProxies().get(0);
            if (prx.isModal()) {
                throw new InvalidModelException(pa, "Trying to append to a modal list value");
            }
            lexp = EcoreUtil.copy(prx.getValue());
            elems = ((ListValue) lexp).getOwnedListElements();
            ((ListValue) newVal.getOwnedValue()).getOwnedListElements().addAll(0, elems);
        }
        boolean valueIsUsed = false;
        if (!proxy.isModal()) {
            valueIsUsed = true;
            pa.getOwnedValues().add(newVal);
        } else {
            List<Mode> modes = proxy.getModes();
            for (Mode mode : modes) {
                if (mode instanceof SystemOperationMode) {
                    inSOMs.add((SystemOperationMode) mode);
                } else {
                    if (io instanceof ConnectionReference) {
                        List<SystemOperationMode> conniModes = ((ConnectionInstance) io.eContainer()).getInSystemOperationModes();
                        if (conniModes.isEmpty()) {
                            conniModes = io.getSystemInstance().getSystemOperationModes();
                        }
                        List<ModeInstance> holderModes = ((ConnectionReference) io).getContext().getModeInstances();
                        for (ModeInstance mi : holderModes) {
                            if (mi.getMode() == mode) {
                                for (SystemOperationMode som : conniModes) {
                                    if (som.getCurrentModes().contains(mi)) {
                                        inSOMs.add(som);
                                    }
                                }
                                break;
                            }
                        }
                    } else {
                        List<ModeInstance> holderModes = (io instanceof ComponentInstance) ? ((ComponentInstance) io).getModeInstances() : io.getContainingComponentInstance().getModeInstances();
                        for (ModeInstance mi : holderModes) {
                            if (mi.getMode() == mode) {
                                if (mode2som.containsKey(mi)) {
                                    inSOMs.addAll(mode2som.get(mi));
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            for (SystemOperationMode som : inSOMs) {
                if (io.isActive(som)) {
                    newVal.getInModes().add(som);
                }
            }
            if (!newVal.getInModes().isEmpty()) {
                valueIsUsed = true;
                pa.getOwnedValues().add(newVal);
            }
        }
        if (valueIsUsed) {
            // replace reference values in the context of the contained PA's owner
            for (Iterator<Element> content = EcoreUtil.getAllProperContents(newVal, false); content.hasNext(); ) {
                Element elem = content.next();
                if (elem instanceof ReferenceValue) {
                    try {
                        PropertyExpression irv = ((ReferenceValue) elem).instantiate(io);
                        if (irv != null) {
                            EcoreUtil.replace(elem, irv);
                        }
                    } catch (InvalidModelException e) {
                        error(io, e.getMessage());
                    }
                }
            }
        }
    }
}
Also used : ConnectionInstance(org.osate.aadl2.instance.ConnectionInstance) ModeInstance(org.osate.aadl2.instance.ModeInstance) ModalPropertyValue(org.osate.aadl2.ModalPropertyValue) ReferenceValue(org.osate.aadl2.ReferenceValue) Mode(org.osate.aadl2.Mode) SystemOperationMode(org.osate.aadl2.instance.SystemOperationMode) Element(org.osate.aadl2.Element) ArrayList(java.util.ArrayList) EvaluatedProperty(org.osate.aadl2.properties.EvaluatedProperty) SystemOperationMode(org.osate.aadl2.instance.SystemOperationMode) InvalidModelException(org.osate.aadl2.properties.InvalidModelException) MpvProxy(org.osate.aadl2.properties.EvaluatedProperty.MpvProxy) ConnectionReference(org.osate.aadl2.instance.ConnectionReference) ComponentInstance(org.osate.aadl2.instance.ComponentInstance) PropertyExpression(org.osate.aadl2.PropertyExpression)

Example 48 with ModalPropertyValue

use of org.osate.aadl2.ModalPropertyValue in project osate2 by osate.

the class AbstractInstanceSemanticSequencer method sequence.

@Override
public void sequence(ISerializationContext context, EObject semanticObject) {
    EPackage epackage = semanticObject.eClass().getEPackage();
    ParserRule rule = context.getParserRule();
    Action action = context.getAssignedAction();
    Set<Parameter> parameters = context.getEnabledBooleanParameters();
    if (epackage == Aadl2Package.eINSTANCE)
        switch(semanticObject.eClass().getClassifierID()) {
            case Aadl2Package.ARRAY_RANGE:
                sequence_ArrayRange(context, (ArrayRange) semanticObject);
                return;
            case Aadl2Package.BASIC_PROPERTY_ASSOCIATION:
                sequence_FieldPropertyAssociation(context, (BasicPropertyAssociation) semanticObject);
                return;
            case Aadl2Package.BOOLEAN_LITERAL:
                sequence_BooleanLiteral(context, (BooleanLiteral) semanticObject);
                return;
            case Aadl2Package.CLASSIFIER_VALUE:
                sequence_ComponentClassifierTerm(context, (ClassifierValue) semanticObject);
                return;
            case Aadl2Package.COMPUTED_VALUE:
                sequence_ComputedTerm(context, (ComputedValue) semanticObject);
                return;
            case Aadl2Package.CONTAINED_NAMED_ELEMENT:
                sequence_ContainmentPath(context, (ContainedNamedElement) semanticObject);
                return;
            case Aadl2Package.CONTAINMENT_PATH_ELEMENT:
                sequence_ContainmentPathElement(context, (ContainmentPathElement) semanticObject);
                return;
            case Aadl2Package.INTEGER_LITERAL:
                sequence_IntegerTerm(context, (IntegerLiteral) semanticObject);
                return;
            case Aadl2Package.LIST_VALUE:
                sequence_ListTerm(context, (ListValue) semanticObject);
                return;
            case Aadl2Package.MODAL_PROPERTY_VALUE:
                if (rule == grammarAccess.getModalPropertyValueRule()) {
                    sequence_ModalPropertyValue(context, (ModalPropertyValue) semanticObject);
                    return;
                } else if (rule == grammarAccess.getOptionalModalPropertyValueRule()) {
                    sequence_OptionalModalPropertyValue(context, (ModalPropertyValue) semanticObject);
                    return;
                } else if (rule == grammarAccess.getPropertyValueRule()) {
                    sequence_PropertyValue(context, (ModalPropertyValue) semanticObject);
                    return;
                } else
                    break;
            case Aadl2Package.NAMED_VALUE:
                if (rule == grammarAccess.getConstantValueRule() || rule == grammarAccess.getNumAltRule()) {
                    sequence_ConstantValue(context, (NamedValue) semanticObject);
                    return;
                } else if (rule == grammarAccess.getPropertyExpressionRule() || rule == grammarAccess.getLiteralorReferenceTermRule()) {
                    sequence_LiteralorReferenceTerm(context, (NamedValue) semanticObject);
                    return;
                } else
                    break;
            case Aadl2Package.OPERATION:
                sequence_SignedConstant(context, (Operation) semanticObject);
                return;
            case Aadl2Package.PROPERTY_ASSOCIATION:
                if (rule == grammarAccess.getBasicPropertyAssociationRule()) {
                    sequence_BasicPropertyAssociation(context, (PropertyAssociation) semanticObject);
                    return;
                } else if (rule == grammarAccess.getPModelRule() || rule == grammarAccess.getContainedPropertyAssociationRule()) {
                    sequence_ContainedPropertyAssociation(context, (PropertyAssociation) semanticObject);
                    return;
                } else if (rule == grammarAccess.getPropertyAssociationRule()) {
                    sequence_PropertyAssociation(context, (PropertyAssociation) semanticObject);
                    return;
                } else
                    break;
            case Aadl2Package.RANGE_VALUE:
                sequence_NumericRangeTerm(context, (RangeValue) semanticObject);
                return;
            case Aadl2Package.REAL_LITERAL:
                sequence_RealTerm(context, (RealLiteral) semanticObject);
                return;
            case Aadl2Package.RECORD_VALUE:
                if (rule == grammarAccess.getOldRecordTermRule()) {
                    sequence_OldRecordTerm(context, (RecordValue) semanticObject);
                    return;
                } else if (rule == grammarAccess.getPropertyExpressionRule() || rule == grammarAccess.getRecordTermRule()) {
                    sequence_RecordTerm(context, (RecordValue) semanticObject);
                    return;
                } else
                    break;
            case Aadl2Package.REFERENCE_VALUE:
                sequence_ReferenceTerm(context, (ReferenceValue) semanticObject);
                return;
            case Aadl2Package.STRING_LITERAL:
                sequence_StringTerm(context, (StringLiteral) semanticObject);
                return;
        }
    else if (epackage == InstancePackage.eINSTANCE)
        switch(semanticObject.eClass().getClassifierID()) {
            case InstancePackage.COMPONENT_INSTANCE:
                sequence_ComponentInstance(context, (ComponentInstance) semanticObject);
                return;
            case InstancePackage.CONNECTION_INSTANCE:
                sequence_ConnectionInstance(context, (ConnectionInstance) semanticObject);
                return;
            case InstancePackage.CONNECTION_REFERENCE:
                sequence_ConnectionReference(context, (ConnectionReference) semanticObject);
                return;
            case InstancePackage.END_TO_END_FLOW_INSTANCE:
                sequence_EndToEndFlowInstance(context, (EndToEndFlowInstance) semanticObject);
                return;
            case InstancePackage.FEATURE_INSTANCE:
                sequence_FeatureInstance(context, (FeatureInstance) semanticObject);
                return;
            case InstancePackage.FLOW_SPECIFICATION_INSTANCE:
                sequence_FlowSpecificationInstance(context, (FlowSpecificationInstance) semanticObject);
                return;
            case InstancePackage.INSTANCE_REFERENCE_VALUE:
                sequence_InstanceReferenceValue(context, (InstanceReferenceValue) semanticObject);
                return;
            case InstancePackage.MODE_INSTANCE:
                sequence_ModeInstance(context, (ModeInstance) semanticObject);
                return;
            case InstancePackage.MODE_TRANSITION_INSTANCE:
                sequence_ModeTransitionInstance(context, (ModeTransitionInstance) semanticObject);
                return;
            case InstancePackage.PROPERTY_ASSOCIATION_INSTANCE:
                sequence_PropertyAssociationInstance(context, (PropertyAssociationInstance) semanticObject);
                return;
            case InstancePackage.SYSTEM_INSTANCE:
                sequence_SystemInstance(context, (SystemInstance) semanticObject);
                return;
            case InstancePackage.SYSTEM_OPERATION_MODE:
                sequence_SystemOperationMode(context, (SystemOperationMode) semanticObject);
                return;
        }
    if (errorAcceptor != null)
        errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
Also used : ParserRule(org.eclipse.xtext.ParserRule) ComputedValue(org.osate.aadl2.ComputedValue) Action(org.eclipse.xtext.Action) ClassifierValue(org.osate.aadl2.ClassifierValue) ModalPropertyValue(org.osate.aadl2.ModalPropertyValue) BooleanLiteral(org.osate.aadl2.BooleanLiteral) PropertyAssociation(org.osate.aadl2.PropertyAssociation) BasicPropertyAssociation(org.osate.aadl2.BasicPropertyAssociation) InstanceReferenceValue(org.osate.aadl2.instance.InstanceReferenceValue) ReferenceValue(org.osate.aadl2.ReferenceValue) ListValue(org.osate.aadl2.ListValue) ContainmentPathElement(org.osate.aadl2.ContainmentPathElement) RecordValue(org.osate.aadl2.RecordValue) ArrayRange(org.osate.aadl2.ArrayRange) NamedValue(org.osate.aadl2.NamedValue) Operation(org.osate.aadl2.Operation) RangeValue(org.osate.aadl2.RangeValue) EPackage(org.eclipse.emf.ecore.EPackage) RealLiteral(org.osate.aadl2.RealLiteral) StringLiteral(org.osate.aadl2.StringLiteral) Parameter(org.eclipse.xtext.Parameter) BasicPropertyAssociation(org.osate.aadl2.BasicPropertyAssociation) ContainedNamedElement(org.osate.aadl2.ContainedNamedElement) IntegerLiteral(org.osate.aadl2.IntegerLiteral)

Example 49 with ModalPropertyValue

use of org.osate.aadl2.ModalPropertyValue in project osate2 by osate.

the class NamedElementImpl method setPropertyValue.

public final PropertyAssociation setPropertyValue(final Property pd, final PropertyValue pv) {
    checkPropertyAssociation(pd, Collections.singletonList(pv));
    PropertyAssociation pa = Aadl2Factory.eINSTANCE.createPropertyAssociation();
    ModalPropertyValue mpv = Aadl2Factory.eINSTANCE.createModalPropertyValue();
    mpv.setOwnedValue(pv);
    pa.setProperty(pd);
    pa.getOwnedValues().add(mpv);
    if (this instanceof InstanceObject) {
        final SystemInstance si = ((InstanceObject) this).getSystemInstance();
        final SystemOperationMode som = si.getCurrentSystemOperationMode();
        if (som != null) {
            mpv.getInModes().add(som);
        }
        this.removePropertyAssociations(pd, Collections.singletonList(som));
    } else {
        this.removePropertyAssociations(pd);
    }
    getOwnedPropertyAssociations().add(pa);
    return pa;
}
Also used : InstanceObject(org.osate.aadl2.instance.InstanceObject) ModalPropertyValue(org.osate.aadl2.ModalPropertyValue) PropertyAssociation(org.osate.aadl2.PropertyAssociation) SystemInstance(org.osate.aadl2.instance.SystemInstance) SystemOperationMode(org.osate.aadl2.instance.SystemOperationMode)

Example 50 with ModalPropertyValue

use of org.osate.aadl2.ModalPropertyValue in project osate2 by osate.

the class NamedElementImpl method setPropertyValue.

public final PropertyAssociation setPropertyValue(final Property pd, final List<? extends PropertyExpression> pes) {
    checkPropertyAssociation(pd, pes);
    PropertyAssociation pa = Aadl2Factory.eINSTANCE.createPropertyAssociation();
    pa.setProperty(pd);
    ModalPropertyValue mpv = pa.createOwnedValue();
    ListValue lv = (ListValue) mpv.createOwnedValue(Aadl2Package.eINSTANCE.getListValue());
    lv.getOwnedListElements().addAll(pes);
    if (this instanceof InstanceObject) {
        final SystemInstance si = ((InstanceObject) this).getSystemInstance();
        final SystemOperationMode som = si.getCurrentSystemOperationMode();
        if (som == null) {
            // non-modal instance model
            removePropertyAssociations(pd);
        } else {
            mpv.getInModes().add(som);
            removePropertyAssociations(pd, Collections.singletonList(som));
        }
    } else {
        removePropertyAssociations(pd);
    }
    getOwnedPropertyAssociations().add(pa);
    return pa;
}
Also used : InstanceObject(org.osate.aadl2.instance.InstanceObject) ModalPropertyValue(org.osate.aadl2.ModalPropertyValue) PropertyAssociation(org.osate.aadl2.PropertyAssociation) SystemInstance(org.osate.aadl2.instance.SystemInstance) ListValue(org.osate.aadl2.ListValue) SystemOperationMode(org.osate.aadl2.instance.SystemOperationMode)

Aggregations

ModalPropertyValue (org.osate.aadl2.ModalPropertyValue)56 PropertyAssociation (org.osate.aadl2.PropertyAssociation)44 BasicPropertyAssociation (org.osate.aadl2.BasicPropertyAssociation)29 PropertyExpression (org.osate.aadl2.PropertyExpression)29 Property (org.osate.aadl2.Property)28 BasicProperty (org.osate.aadl2.BasicProperty)21 ListValue (org.osate.aadl2.ListValue)20 ContainedNamedElement (org.osate.aadl2.ContainedNamedElement)11 IntegerLiteral (org.osate.aadl2.IntegerLiteral)11 NamedValue (org.osate.aadl2.NamedValue)11 ReferenceValue (org.osate.aadl2.ReferenceValue)11 ArrayList (java.util.ArrayList)10 Mode (org.osate.aadl2.Mode)10 RangeValue (org.osate.aadl2.RangeValue)10 StringLiteral (org.osate.aadl2.StringLiteral)10 ContainmentPathElement (org.osate.aadl2.ContainmentPathElement)9 RecordValue (org.osate.aadl2.RecordValue)9 BooleanLiteral (org.osate.aadl2.BooleanLiteral)8 ClassifierValue (org.osate.aadl2.ClassifierValue)7 RealLiteral (org.osate.aadl2.RealLiteral)7