Search in sources :

Example 1 with Target

use of org.osate.ba.aadlba.Target in project osate2 by osate.

the class AadlBaLegalityRulesChecker method D_6_L3_And_L4_Check.

/**
 * Document: AADL Behavior Annex draft
 * Version : 0.94
 * Type    : Legality rule
 * Section : D.6 Behavior Action Language
 * Object  : Check legality rules D.6.(L3), D.6.(L4)
 * Keys    : local variable port variable assigned action set
 */
public boolean D_6_L3_And_L4_Check(BehaviorActionBlock bab) {
    BehaviorActions beActions = bab.getContent();
    // Temporary list of targets passed between recursive calls of
    // buildActionSetAssignedValuesLists method.
    List<Target> lActionSetTar = new ArrayList<Target>();
    // Set of duplicated targets between multiple action sets.
    Set<Target> lDuplicates = new HashSet<Target>();
    buildActionSetAssignedTargetLists(beActions, lActionSetTar, lDuplicates);
    String localVariableErrorMsg = "The same local variable must not be " + "assigned to in different actions of an action set" + ": Behavior Annex D.6.(L3) legality rules failed";
    String portErrorMsg = "The same port variable must not be assigned to " + "in different actions of an action set: " + "Behavior Annex D.6.(L4) legality rules failed";
    String tmp;
    for (Target tar : lDuplicates) {
        // Local variable case.
        if (tar instanceof BehaviorVariableHolder) {
            tmp = localVariableErrorMsg;
        } else // Port case.
        {
            tmp = portErrorMsg;
        }
        reportLegalityError(tar, tmp);
    }
    return lDuplicates.isEmpty();
}
Also used : Target(org.osate.ba.aadlba.Target) ArrayList(java.util.ArrayList) BehaviorActions(org.osate.ba.aadlba.BehaviorActions) BehaviorVariableHolder(org.osate.ba.aadlba.BehaviorVariableHolder) HashSet(java.util.HashSet)

Example 2 with Target

use of org.osate.ba.aadlba.Target in project osate2 by osate.

the class PortDequeueActionImpl method basicSetTarget.

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public NotificationChain basicSetTarget(Target newTarget, NotificationChain msgs) {
    Target oldTarget = target;
    target = newTarget;
    if (eNotificationRequired()) {
        ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AadlBaPackage.PORT_DEQUEUE_ACTION__TARGET, oldTarget, newTarget);
        if (msgs == null)
            msgs = notification;
        else
            msgs.add(notification);
    }
    return msgs;
}
Also used : Target(org.osate.ba.aadlba.Target) ENotificationImpl(org.eclipse.emf.ecore.impl.ENotificationImpl)

Example 3 with Target

use of org.osate.ba.aadlba.Target in project osate2 by osate.

the class AadlBaNameResolver method assignmentActionResolver.

private boolean assignmentActionResolver(AssignmentAction act) {
    boolean result = false;
    Target t = act.getTarget();
    result = targetResolver(t);
    if (!(act.getValueExpression() instanceof Any)) {
        result &= valueExpressionResolver(act.getValueExpression());
    }
    return result;
}
Also used : Target(org.osate.ba.aadlba.Target) Any(org.osate.ba.aadlba.Any)

Example 4 with Target

use of org.osate.ba.aadlba.Target in project osate2 by osate.

the class AadlBaUtils method getTypeHolder.

/**
 * Returns the TypeHolder (data representation and component's DataClassifier
 * if any) of the given Element object.
 * <BR><BR>
 * For now, only the following objects are supported:<BR>
 * <BR>_ IterativeVariable
 * <BR>_ DataClassifier
 * <BR>_ Target
 * <BR>_ Value
 * <BR><BR>
 *
 * @param el the given Element object.
 * @param parentContainer only for AADLBA declarative objects which have no
 * parent set, yet
 * @return the type holder of the given Element object. If the given element
 * is null, it returns the default type holder object.
 * @exception UnsupportedOperationException for the unsupported types
 * or Element instances.
 * @exception DimensionException in any case of array dimension overflow.
 */
public static TypeHolder getTypeHolder(Element el, ComponentClassifier parentContainer) throws DimensionException {
    TypeHolder result = null;
    if (el instanceof IterativeVariable) {
        IterativeVariable iv = (IterativeVariable) el;
        result = getTypeHolder(iv);
        processArrayDataRepresentation(el, result, 0);
        return result;
    } else if (el instanceof DataClassifier) {
        DataClassifier dc = (DataClassifier) el;
        result = getTypeHolder(dc);
        return result;
    } else if (el instanceof ValueConstant) {
        return result = getTypeHolder((ValueConstant) el, parentContainer);
    } else if (el instanceof Target || el instanceof ValueVariable) {
        result = getTypeHolder((Value) el, parentContainer);
        // The declared variable dimension: the number of [] in the element
        // declaration.
        int declaredDim = 0;
        // The expression dimension: the number of [] in the expression.
        // Only targets and values can express dimension.
        int exprDim = 0;
        boolean hasToProcessDataRepresentation = false;
        // for/forall statement.
        if (el.eContainer() instanceof ForOrForAllStatement) {
            hasToProcessDataRepresentation = true;
        }
        // Either ElementHolder or DataComponentReference object.
        Element bindedEl = null;
        ElementHolder elHolder = null;
        if (el instanceof ElementHolder) {
            elHolder = (ElementHolder) el;
            bindedEl = elHolder.getElement();
        } else // DataComponentReference case.
        {
            DataComponentReference dcr = (DataComponentReference) el;
            elHolder = dcr.getData().get(dcr.getData().size() - 1);
        }
        bindedEl = elHolder.getElement();
        if (elHolder instanceof IndexableElement) {
            IndexableElement ie = (IndexableElement) elHolder;
            if (ie.isSetArrayIndexes()) {
                exprDim = ie.getArrayIndexes().size();
            }
        }
        // Set up the declared, expression dimension and dimension sizes.
        if (bindedEl instanceof ArrayableElement) {
            ArrayableElement ae = (ArrayableElement) bindedEl;
            if (false == ae.getArrayDimensions().isEmpty()) {
                EList<ArrayDimension> adl = ae.getArrayDimensions();
                declaredDim = adl.size();
                if (exprDim <= declaredDim) {
                    long[] ds = new long[declaredDim - exprDim];
                    for (int i = exprDim; i < declaredDim; i++) {
                        ds[i - exprDim] = adl.get(i).getSize().getSize();
                    }
                    result.setDimensionSizes(ds);
                }
            }
        }
        // or if the element is an element values of a for/forall statement.
        if (declaredDim == 0 && (exprDim > 0 || hasToProcessDataRepresentation)) {
            processArrayDataRepresentation(el, result, exprDim);
        } else {
            if (exprDim <= declaredDim) {
                result.setDimension(declaredDim - exprDim);
            } else {
                // The given type is expressed as an array in AADL standard
                // core way. We don't evaluate array behavior expressed in
                // the Data Model Annex standard as we don't want to mix up
                // the two standards.
                String msg = "mixs up AADL standard array and data model array";
                throw new DimensionException(el, msg, true);
            }
        }
        return result;
    } else if (el == null || el instanceof Abstract) {
        // returns the default type holder for untyped prototypes.
        return new TypeHolder();
    } else {
        String errorMsg = "getTypeHolder : " + el.getClass().getSimpleName() + " is not supported yet at line " + Aadl2Utils.getLocationReference(el).getLine() + ".";
        System.err.println(errorMsg);
        throw new UnsupportedOperationException(errorMsg);
    }
}
Also used : IndexableElement(org.osate.ba.aadlba.IndexableElement) IterativeVariable(org.osate.ba.aadlba.IterativeVariable) Abstract(org.osate.aadl2.Abstract) StructUnionElement(org.osate.ba.aadlba.StructUnionElement) BehaviorNamedElement(org.osate.ba.aadlba.BehaviorNamedElement) NamedElement(org.osate.aadl2.NamedElement) ArrayableElement(org.osate.aadl2.ArrayableElement) Element(org.osate.aadl2.Element) BehaviorElement(org.osate.ba.aadlba.BehaviorElement) IndexableElement(org.osate.ba.aadlba.IndexableElement) ElementHolder(org.osate.ba.aadlba.ElementHolder) PropertyElementHolder(org.osate.ba.aadlba.PropertyElementHolder) DataClassifier(org.osate.aadl2.DataClassifier) AadlString(org.osate.aadl2.AadlString) DataComponentReference(org.osate.ba.aadlba.DataComponentReference) TypeHolder(org.osate.ba.analyzers.TypeHolder) Target(org.osate.ba.aadlba.Target) ValueVariable(org.osate.ba.aadlba.ValueVariable) EList(org.eclipse.emf.common.util.EList) ValueConstant(org.osate.ba.aadlba.ValueConstant) ArrayableElement(org.osate.aadl2.ArrayableElement) ForOrForAllStatement(org.osate.ba.aadlba.ForOrForAllStatement)

Example 5 with Target

use of org.osate.ba.aadlba.Target in project osate2 by osate.

the class AssignmentActionImpl method basicSetTarget.

/**
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public NotificationChain basicSetTarget(Target newTarget, NotificationChain msgs) {
    Target oldTarget = target;
    target = newTarget;
    if (eNotificationRequired()) {
        ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AadlBaPackage.ASSIGNMENT_ACTION__TARGET, oldTarget, newTarget);
        if (msgs == null)
            msgs = notification;
        else
            msgs.add(notification);
    }
    return msgs;
}
Also used : Target(org.osate.ba.aadlba.Target) ENotificationImpl(org.eclipse.emf.ecore.impl.ENotificationImpl)

Aggregations

Target (org.osate.ba.aadlba.Target)7 ENotificationImpl (org.eclipse.emf.ecore.impl.ENotificationImpl)3 ArrayList (java.util.ArrayList)2 EList (org.eclipse.emf.common.util.EList)2 BehaviorActions (org.osate.ba.aadlba.BehaviorActions)2 HashSet (java.util.HashSet)1 List (java.util.List)1 AadlString (org.osate.aadl2.AadlString)1 Abstract (org.osate.aadl2.Abstract)1 ArrayableElement (org.osate.aadl2.ArrayableElement)1 DataClassifier (org.osate.aadl2.DataClassifier)1 Element (org.osate.aadl2.Element)1 NamedElement (org.osate.aadl2.NamedElement)1 Any (org.osate.ba.aadlba.Any)1 AssignmentAction (org.osate.ba.aadlba.AssignmentAction)1 BasicAction (org.osate.ba.aadlba.BasicAction)1 BehaviorAction (org.osate.ba.aadlba.BehaviorAction)1 BehaviorActionBlock (org.osate.ba.aadlba.BehaviorActionBlock)1 BehaviorActionCollection (org.osate.ba.aadlba.BehaviorActionCollection)1 BehaviorActionSequence (org.osate.ba.aadlba.BehaviorActionSequence)1