Search in sources :

Example 6 with BehaviorTransition

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

the class DeclarativeUtils method reinstanciateBehaviorTransition.

/**
 * Instanciates the behavior transitions from the given behavior annex's
 * declarative behavior transitions.<BR><BR>
 *
 * declarative behavior transitions design many source states to one
 * destination state. behavior transitions design one source state to one
 * destination state.
 *
 * @param ba the given behavior annex
 */
public static void reinstanciateBehaviorTransition(BehaviorAnnex ba, AadlBaHyperlink hl) {
    DeclarativeBehaviorTransition dbt = null;
    List<BehaviorTransition> clones = new ArrayList<BehaviorTransition>();
    BehaviorTransition currentClone = null;
    for (BehaviorTransition tmpBt : ba.getTransitions()) {
        dbt = (DeclarativeBehaviorTransition) tmpBt;
        for (Identifier idSrcState : dbt.getSrcStates()) {
            currentClone = AadlBaFactory.eINSTANCE.createBehaviorTransition();
            currentClone.setName(dbt.getName());
            BehaviorState srcState = (BehaviorState) idSrcState.getBaRef();
            currentClone.setSourceState(srcState);
            hl.addToHyperlinking(idSrcState.getAadlBaLocationReference(), srcState);
            currentClone.setCondition(dbt.getCondition());
            currentClone.setDestinationState((BehaviorState) dbt.getDestState().getBaRef());
            hl.addToHyperlinking(dbt.getDestState().getAadlBaLocationReference(), dbt.getDestState().getBaRef());
            currentClone.setActionBlock(dbt.getActionBlock());
            currentClone.setPriority(dbt.getPriority());
            currentClone.setLocationReference(dbt.getLocationReference());
            clones.add(currentClone);
            AadlBaVisitors.putTransitionWhereSrc(srcState, currentClone);
        }
    }
    ba.unsetTransitions();
    ba.getTransitions().addAll(clones);
}
Also used : Identifier(org.osate.ba.declarative.Identifier) DeclarativeBehaviorTransition(org.osate.ba.declarative.DeclarativeBehaviorTransition) ArrayList(java.util.ArrayList) BehaviorState(org.osate.ba.aadlba.BehaviorState) DeclarativeBehaviorTransition(org.osate.ba.declarative.DeclarativeBehaviorTransition) BehaviorTransition(org.osate.ba.aadlba.BehaviorTransition)

Example 7 with BehaviorTransition

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

the class AadlBaVisitors method sort.

// Sort (insertion) behavior transitions list
// according to their priority (highest to the lowest).
// In case of equality, the order of transition appearance in the aadl
// code is applied.
// Behavior transition which have execution condition set to "otherwise"
// will be set at the end of the list.
/**
 * @since 4.0
 */
protected static void sort(List<BehaviorTransition> btl) {
    BehaviorTransition tmp = null;
    int i;
    int j;
    for (i = btl.size() - 2; i >= 0; i--) {
        tmp = btl.get(i);
        j = i;
        while (j < btl.size() - 1 && AadlBaUtils.compareBehaviorTransitionPriority(btl.get(j + 1), tmp)) {
            btl.set(j, btl.get(j + 1));
            j++;
        }
        btl.set(j, tmp);
    }
}
Also used : BehaviorTransition(org.osate.ba.aadlba.BehaviorTransition)

Example 8 with BehaviorTransition

use of org.osate.ba.aadlba.BehaviorTransition in project osate-plugin by sireum.

the class BAVisitor method caseBehaviorAnnex.

@Override
public Boolean caseBehaviorAnnex(BehaviorAnnex o) {
    // NA for BA
    boolean doNotProve = true;
    // NA for BA
    List<BTSAssertion> _assertions = new ArrayList<>();
    // NA for BA
    Option<BTSAssertion> _invariant = toNone();
    List<BTSVariableDeclaration> _variables = new ArrayList<>();
    if (o.getVariables() != null) {
        for (BehaviorVariable bv : o.getVariables()) {
            visit(bv);
            _variables.addAll(pop());
        }
    }
    List<BTSStateDeclaration> _states = new ArrayList<>();
    for (BehaviorState bs : o.getStates()) {
        visit(bs);
        _states.add(pop());
    }
    List<BTSTransition> _transitions = new ArrayList<>();
    for (BehaviorTransition bt : o.getTransitions()) {
        visit(bt);
        _transitions.add(pop());
    }
    BTSBLESSAnnexClause b = BTSBLESSAnnexClause$.MODULE$.apply(doNotProve, VisitorUtil.toISZ(_assertions), _invariant, VisitorUtil.toISZ(_variables), VisitorUtil.toISZ(_states), VisitorUtil.toISZ(_transitions));
    push(b);
    return false;
}
Also used : BehaviorVariable(org.osate.ba.aadlba.BehaviorVariable) ArrayList(java.util.ArrayList) BehaviorTransition(org.osate.ba.aadlba.BehaviorTransition) BTSAssertion(org.sireum.hamr.ir.BTSAssertion) BTSTransition(org.sireum.hamr.ir.BTSTransition) BTSVariableDeclaration(org.sireum.hamr.ir.BTSVariableDeclaration) BehaviorState(org.osate.ba.aadlba.BehaviorState) BTSStateDeclaration(org.sireum.hamr.ir.BTSStateDeclaration) BTSBLESSAnnexClause(org.sireum.hamr.ir.BTSBLESSAnnexClause)

Example 9 with BehaviorTransition

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

the class AadlBaResolver method resolveAnnex.

@SuppressWarnings("rawtypes")
@Override
public void resolveAnnex(String annexName, List annexElements, AnalysisErrorReporterManager errManager) {
    Iterator<?> it = annexElements.iterator();
    BehaviorAnnex ba;
    AadlBaNameResolver nameResolver;
    AadlBaRulesCheckersDriver semanticAnalysis;
    AadlBaTypeChecker typeChecker;
    DataTypeChecker dataTypeChecker = new AdaLikeDataTypeChecker(errManager);
    while (it.hasNext()) {
        boolean result = false;
        ba = (BehaviorAnnex) it.next();
        nameResolver = new AadlBaNameResolver(ba, errManager);
        result = nameResolver.resolveNames();
        // failed.
        if (result) {
            typeChecker = new AadlBaTypeChecker(ba, dataTypeChecker, errManager);
            AadlBaHyperlink hyperlinker;
            // under OSATE2.
            if (Platform.isRunning()) {
                hyperlinker = new XtextAadlBaHyperlink(ba);
            } else // Set the default hyperlink builder that does nothing.
            {
                hyperlinker = new DefaultAadlBaHyperlink();
            }
            typeChecker.setAadlBaHyperlink(hyperlinker);
            result = typeChecker.checkTypes();
            if (result) {
                semanticAnalysis = new AadlBaRulesCheckersDriver(ba, errManager);
                result = semanticAnalysis.process(ba);
            }
            DeclarativeUtils.reinstanciateBehaviorTransition(ba, hyperlinker);
            for (BehaviorTransition trans : ba.getTransitions()) {
                if (trans.getSourceState() != null)
                    hyperlinker.addToHyperlinking(trans.getSourceState().getAadlBaLocationReference(), trans.getSourceState());
                if (trans.getDestinationState() != null)
                    hyperlinker.addToHyperlinking(trans.getDestinationState().getAadlBaLocationReference(), trans.getSourceState());
            }
        // XXX DEBUG
        // AadlBaUnparser unparser = new AadlBaUnparser() ;
        // System.out.println(unparser.process(ba));
        // DEBUG
        // System.out.println("### nb errors : " + errManager.getNumErrors()) ;
        }
    }
}
Also used : AadlBaTypeChecker(org.osate.ba.analyzers.AadlBaTypeChecker) AdaLikeDataTypeChecker(org.osate.ba.analyzers.AdaLikeDataTypeChecker) DataTypeChecker(org.osate.ba.analyzers.DataTypeChecker) AdaLikeDataTypeChecker(org.osate.ba.analyzers.AdaLikeDataTypeChecker) DefaultAadlBaHyperlink(org.osate.ba.texteditor.DefaultAadlBaHyperlink) BehaviorAnnex(org.osate.ba.aadlba.BehaviorAnnex) AadlBaRulesCheckersDriver(org.osate.ba.analyzers.AadlBaRulesCheckersDriver) XtextAadlBaHyperlink(org.osate.ba.texteditor.XtextAadlBaHyperlink) DefaultAadlBaHyperlink(org.osate.ba.texteditor.DefaultAadlBaHyperlink) AadlBaHyperlink(org.osate.ba.texteditor.AadlBaHyperlink) XtextAadlBaHyperlink(org.osate.ba.texteditor.XtextAadlBaHyperlink) AadlBaNameResolver(org.osate.ba.analyzers.AadlBaNameResolver) BehaviorTransition(org.osate.ba.aadlba.BehaviorTransition)

Example 10 with BehaviorTransition

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

the class AadlBaUnparser method initSwitches.

/**
 * Specific aadlba switch to unparse components
 */
protected void initSwitches() {
    aadlbaSwitch = new AadlBaSwitch<String>() {

        /**
         * Top-level method to unparse "behavior_specification"
         * annexsubclause
         */
        // public String caseAnnexSubclause(AnnexSubclause object) {
        // //FIXME : TODO : update location reference
        // 
        // process((BehaviorAnnex) object);
        // 
        // return DONE;
        // }
        /**
         * Unparse behaviorannex
         */
        @Override
        public String caseBehaviorAnnex(BehaviorAnnex object) {
            // DB: Improve code formatting
            aadlbaText.addOutputNewline("");
            // FIXME : TODO : update location reference
            if (object.isSetVariables()) {
                aadlbaText.addOutputNewline("variables");
                aadlbaText.incrementIndent();
                processEList(object.getVariables());
                aadlbaText.decrementIndent();
            }
            if (object.isSetStates()) {
                aadlbaText.addOutputNewline("states");
                aadlbaText.incrementIndent();
                processEList(object.getStates());
                aadlbaText.decrementIndent();
            }
            if (object.isSetTransitions()) {
                aadlbaText.addOutputNewline("transitions");
                aadlbaText.incrementIndent();
                processEList(object.getTransitions());
                aadlbaText.decrementIndent();
            }
            return DONE;
        }

        /**
         * Unparse behaviorvariable
         */
        @Override
        public String caseBehaviorVariable(BehaviorVariable object) {
            // FIXME : TODO : update location reference
            aadlbaText.addOutput(object.getName());
            for (ArrayDimension ad : object.getArrayDimensions()) {
                aadlbaText.addOutput("[");
                if (ad instanceof DeclarativeArrayDimension) {
                    DeclarativeArrayDimension dad = (DeclarativeArrayDimension) ad;
                    process(dad.getDimension());
                } else if (ad instanceof ArrayDimension) {
                    aadlbaText.addOutput(Long.toString(ad.getSize().getSize()));
                }
                aadlbaText.addOutput("]");
            }
            aadlbaText.addOutput(" : ");
            if (object.getDataClassifier() instanceof QualifiedNamedElement) {
                QualifiedNamedElement qn = (QualifiedNamedElement) object.getDataClassifier();
                aadlbaText.addOutput(getNamespace(qn));
                process(qn);
            } else if (object.getDataClassifier() instanceof DataClassifier) {
                aadlbaText.addOutput(object.getDataClassifier().getQualifiedName());
            }
            aadlbaText.addOutputNewline(";");
            return DONE;
        }

        private String getNamespace(final QualifiedNamedElement qn) {
            final Identifier baNameSpace = qn.getBaNamespace();
            final StringBuilder nameSpace = new StringBuilder();
            if (baNameSpace != null && !Strings.isNullOrEmpty(baNameSpace.getId())) {
                nameSpace.append(baNameSpace.getId()).append("::");
            }
            return nameSpace.toString();
        }

        /**
         * Unparse behaviorstate
         */
        @Override
        public String caseBehaviorState(BehaviorState object) {
            // FIXME : TODO : update location reference
            aadlbaText.addOutput(object.getName());
            aadlbaText.addOutput(" : ");
            if (object.isInitial()) {
                aadlbaText.addOutput("initial ");
            }
            if (object.isComplete()) {
                aadlbaText.addOutput("complete ");
            }
            if (object.isFinal()) {
                aadlbaText.addOutput("final ");
            }
            aadlbaText.addOutputNewline("state;");
            return DONE;
        }

        /**
         * Unparse behaviortransition
         */
        @Override
        public String caseBehaviorTransition(BehaviorTransition object) {
            // FIXME : TODO : update location reference
            String tid = object.getName();
            Long num = object.getPriority();
            if (tid != null) {
                aadlbaText.addOutput(tid);
                if (num != AadlBaVisitors.DEFAULT_TRANSITION_PRIORITY) {
                    // numeral
                    aadlbaText.addOutput(" [");
                    aadlbaText.addOutput(String.valueOf(num));
                    aadlbaText.addOutput("]");
                }
                aadlbaText.addOutput(" : ");
            }
            if (object.getSourceState() != null) {
                aadlbaText.addOutput(object.getSourceState().getName());
            } else if (object instanceof DeclarativeBehaviorTransition) {
                DeclarativeBehaviorTransition dbt = (DeclarativeBehaviorTransition) object;
                for (Identifier id : dbt.getSrcStates()) {
                    aadlbaText.addOutput(id.getId());
                    if (dbt.getSrcStates().get(dbt.getSrcStates().size() - 1) != id) {
                        aadlbaText.addOutput(",");
                    }
                }
            }
            aadlbaText.addOutput(" -[");
            process(object.getCondition());
            aadlbaText.addOutput("]-> ");
            if (object.getDestinationState() != null) {
                aadlbaText.addOutput(object.getDestinationState().getName());
            } else if (object instanceof DeclarativeBehaviorTransition) {
                DeclarativeBehaviorTransition dbt = (DeclarativeBehaviorTransition) object;
                aadlbaText.addOutput(dbt.getDestState().getId());
            }
            if (object.getActionBlock() != null) {
                aadlbaText.addOutput(" ");
                process(object.getActionBlock());
            }
            aadlbaText.addOutputNewline(";");
            return DONE;
        }

        @Override
        public String caseExecutionTimeoutCatch(ExecutionTimeoutCatch object) {
            aadlbaText.addOutput("timeout");
            return DONE;
        }

        @Override
        public String caseOtherwise(Otherwise object) {
            aadlbaText.addOutput("otherwise");
            return DONE;
        }

        /**
         * Unparse dispatchcondition
         */
        @Override
        public String caseDispatchCondition(DispatchCondition object) {
            // FIXME : TODO : update location reference
            aadlbaText.addOutput("on dispatch");
            if (object.getDispatchTriggerCondition() != null) {
                aadlbaText.addOutput(" ");
                process(object.getDispatchTriggerCondition());
            }
            if (object.isSetFrozenPorts()) {
                aadlbaText.addOutput(" frozen ");
                processEList(object.getFrozenPorts(), ", ");
            }
            return DONE;
        }

        @Override
        public String caseDispatchTriggerConditionStop(DispatchTriggerConditionStop object) {
            aadlbaText.addOutput("stop");
            return DONE;
        }

        @Override
        public String caseDispatchRelativeTimeout(DispatchRelativeTimeout object) {
            aadlbaText.addOutput("timeout ");
            return DONE;
        }

        @Override
        public String caseCompletionRelativeTimeout(CompletionRelativeTimeout object) {
            aadlbaText.addOutput("timeout ");
            caseBehaviorTime(object);
            return DONE;
        }

        @Override
        public String caseDispatchTriggerLogicalExpression(DispatchTriggerLogicalExpression object) {
            processEList(object.getDispatchConjunctions(), " or ");
            return DONE;
        }

        @Override
        public String caseDispatchConjunction(DispatchConjunction object) {
            processEList(object.getDispatchTriggers(), " and ");
            return DONE;
        }

        @Override
        public String caseBehaviorActionBlock(BehaviorActionBlock object) {
            aadlbaText.addOutputNewline("{");
            aadlbaText.incrementIndent();
            // aadlbaText.addOutput("{");
            process(object.getContent());
            aadlbaText.decrementIndent();
            aadlbaText.addOutputNewline("");
            aadlbaText.addOutput("}");
            if (object.getTimeout() != null) {
                aadlbaText.addOutput(" timeout ");
                process(object.getTimeout());
            }
            return DONE;
        }

        @Override
        public String caseBehaviorActionSequence(BehaviorActionSequence object) {
            // DB: Indentation problem when using \n direcly
            processEList(object.getActions(), ";", true);
            // processEList(object.getActions(), ";\n");
            return DONE;
        }

        @Override
        public String caseBehaviorActionSet(BehaviorActionSet object) {
            // DB: Indentation problem when using \n direcly
            processEList(object.getActions(), " &", true);
            // processEList(object.getActions(), " &\n");
            return DONE;
        }

        /**
         * Unparse ifstatement
         */
        @Override
        public String caseIfStatement(IfStatement object) {
            // FIXME : TODO : update location reference
            boolean hasToOutputTerminator = true;
            if (object.isElif()) {
                aadlbaText.addOutputNewline("");
                aadlbaText.addOutput("elsif (");
                hasToOutputTerminator = false;
            } else {
                aadlbaText.addOutput("if (");
                hasToOutputTerminator = true;
            }
            process(object.getLogicalValueExpression());
            aadlbaText.addOutputNewline(")");
            aadlbaText.incrementIndent();
            process(object.getBehaviorActions());
            aadlbaText.decrementIndent();
            if (object.getElseStatement() != null) {
                process(object.getElseStatement());
            }
            if (hasToOutputTerminator) {
                aadlbaText.addOutputNewline("");
                aadlbaText.addOutput("end if");
            }
            return DONE;
        }

        @Override
        public String caseElseStatement(ElseStatement object) {
            aadlbaText.addOutputNewline("");
            aadlbaText.addOutputNewline("else");
            aadlbaText.incrementIndent();
            process(object.getBehaviorActions());
            aadlbaText.decrementIndent();
            return DONE;
        }

        /**
         * Unparse fororforallstatement
         */
        @Override
        public String caseForOrForAllStatement(ForOrForAllStatement object) {
            // FIXME : TODO : update location reference
            if (object.isForAll()) {
                aadlbaText.addOutput("forall (");
            } else {
                aadlbaText.addOutput("for (");
            }
            process(object.getIterativeVariable());
            aadlbaText.addOutput(" in ");
            process(object.getIteratedValues());
            aadlbaText.addOutputNewline(") {");
            // aadlbaText.addOutputNewline("{");
            aadlbaText.incrementIndent();
            process(object.getBehaviorActions());
            aadlbaText.decrementIndent();
            aadlbaText.addOutputNewline("");
            aadlbaText.addOutput("}");
            return DONE;
        }

        @Override
        public String caseIterativeVariable(IterativeVariable iv) {
            aadlbaText.addOutput(iv.getName());
            aadlbaText.addOutput(" : ");
            // DB: Use qualified name when classifier is declared outside the package
            final DataClassifier dataClass = iv.getDataClassifier();
            final String dataClassName;
            if (dataClass.getElementRoot() == iv.getElementRoot()) {
                dataClassName = dataClass.getName();
            } else {
                dataClassName = dataClass.getQualifiedName();
            }
            aadlbaText.addOutput(dataClassName);
            return DONE;
        }

        @Override
        public String caseWhileOrDoUntilStatement(WhileOrDoUntilStatement object) {
            if (object.isDoUntil()) {
                return caseDoUntilStatement(object);
            } else {
                return caseWhileStatement(object);
            }
        }

        /**
         * Unparse whilestatement
         */
        public String caseWhileStatement(WhileOrDoUntilStatement object) {
            // FIXME : TODO : update location reference
            aadlbaText.addOutput("while (");
            process(object.getLogicalValueExpression());
            aadlbaText.addOutputNewline(") {");
            // aadlbaText.addOutputNewline("{");
            aadlbaText.incrementIndent();
            process(object.getBehaviorActions());
            aadlbaText.decrementIndent();
            aadlbaText.addOutputNewline("");
            aadlbaText.addOutputNewline("}");
            return DONE;
        }

        /**
         * Unparse dountilstatement
         */
        public String caseDoUntilStatement(WhileOrDoUntilStatement object) {
            // FIXME : TODO : update location reference
            aadlbaText.addOutputNewline("do");
            process(object.getBehaviorActions());
            aadlbaText.addOutputNewline("");
            aadlbaText.addOutput("until (");
            process(object.getLogicalValueExpression());
            aadlbaText.addOutputNewline(")");
            return DONE;
        }

        /**
         * Unparse integerrange
         */
        @Override
        public String caseIntegerRange(IntegerRange object) {
            // FIXME : TODO : update location reference
            process(object.getLowerIntegerValue());
            aadlbaText.addOutput(" .. ");
            process(object.getUpperIntegerValue());
            return DONE;
        }

        /**
         * Unparse timedaction
         */
        @Override
        public String caseTimedAction(TimedAction object) {
            aadlbaText.addOutput("computation (");
            process(object.getLowerTime());
            if (object.getUpperTime() != null) {
                aadlbaText.addOutput(" .. ");
                process(object.getUpperTime());
            }
            aadlbaText.addOutput(")");
            if (object.isSetProcessorClassifier()) {
                aadlbaText.addOutput(" in binding (");
                processEList(object.getProcessorClassifier(), ", ", object, false);
                aadlbaText.addOutput(")");
            }
            return DONE;
        }

        /**
         * Unparse assignmentaction
         */
        @Override
        public String caseAssignmentAction(AssignmentAction object) {
            // FIXME : TODO : update location reference
            process(object.getTarget());
            aadlbaText.addOutput(" := ");
            process(object.getValueExpression());
            return DONE;
        }

        @Override
        public String caseAny(Any object) {
            aadlbaText.addOutput("any");
            return DONE;
        }

        @Override
        public String caseElementHolder(ElementHolder el) {
            if (el instanceof Reference) {
                return processReference((Reference) el);
            }
            Element refContainer = Aadl2Visitors.getContainingPackageSection(el.getElement());
            Element holderPackageOrPropertySet = Aadl2Visitors.getContainingPackageSection(el);
            if (refContainer != null && holderPackageOrPropertySet != null && false == holderPackageOrPropertySet.equals(refContainer) && false == (el instanceof DataSubcomponentHolder)) {
                StringBuilder sb = new StringBuilder(el.getElement().getQualifiedName());
                String prefix = sb.substring(0, sb.lastIndexOf("::") + 2);
                aadlbaText.addOutput(prefix);
            }
            if (el instanceof GroupableElement) {
                GroupableElement ge = (GroupableElement) el;
                if (ge.isSetGroupHolders()) {
                    processEList(ge.getGroupHolders(), ".");
                    aadlbaText.addOutput(".");
                }
            }
            aadlbaText.addOutput(el.getElement().getName());
            if (el instanceof IndexableElement) {
                IndexableElement ie = (IndexableElement) el;
                if (ie.isSetArrayIndexes()) {
                    caseArrayIndex(ie.getArrayIndexes());
                }
            }
            return DONE;
        }

        private String processReference(Reference ref) {
            for (ArrayableIdentifier id : ref.getIds()) {
                aadlbaText.addOutput(id.getId());
                caseArrayIndex(id.getArrayIndexes());
                if (id != ref.getIds().get(ref.getIds().size() - 1)) {
                    aadlbaText.addOutput(".");
                }
            }
            return DONE;
        }

        private String processCommAction(CommAction object) {
            process(object.getReference());
            if (object.isLock()) {
                aadlbaText.addOutput("!<");
            } else if (object.isUnlock()) {
                aadlbaText.addOutput("!>");
            } else if (object.isPortDequeue()) {
                aadlbaText.addOutput(" ?");
            } else {
                aadlbaText.addOutput(" !");
            }
            if (object.isSetParameters() == true) {
                aadlbaText.addOutput(" (");
                processEList(object.getParameters(), ",");
                aadlbaText.addOutput(")");
                return DONE;
            } else if (object.getTarget() != null) {
                aadlbaText.addOutput(" (");
                process(object.getTarget());
                aadlbaText.addOutput(")");
                return DONE;
            }
            return DONE;
        }

        /**
         * Unparse arrayindex
         */
        public String caseArrayIndex(EList<IntegerValue> object) {
            // FIXME : TODO : update location reference
            for (IntegerValue iv : object) {
                aadlbaText.addOutput("[");
                process(iv);
                aadlbaText.addOutput("]");
            }
            return DONE;
        }

        /**
         * Unparse datacomponentreference
         */
        @Override
        public String caseDataComponentReference(DataComponentReference object) {
            // FIXME : TODO : update location reference
            processEList(object.getData(), ".");
            return DONE;
        }

        @Override
        public String defaultCase(EObject object) {
            if (object instanceof CommAction) {
                return processCommAction((CommAction) object);
            } else if (object instanceof Reference) {
                return processReference((Reference) object);
            } else if (object instanceof QualifiedNamedElement) {
                QualifiedNamedElement qn = (QualifiedNamedElement) object;
                aadlbaText.addOutput(qn.getBaName().getId());
            } else if (object instanceof org.osate.ba.declarative.NamedValue) {
                org.osate.ba.declarative.NamedValue nv = (org.osate.ba.declarative.NamedValue) object;
                process(nv.getReference());
                if (nv.isCount()) {
                    aadlbaText.addOutput("' count");
                }
                if (nv.isFresh()) {
                    aadlbaText.addOutput("' fresh");
                }
                if (nv.isDequeue()) {
                    aadlbaText.addOutput(" ?");
                }
            } else if (object instanceof DeclarativePropertyReference) {
                DeclarativePropertyReference dpr = (DeclarativePropertyReference) object;
                if (dpr.getQualifiedName().getBaName().getId().isEmpty()) {
                    aadlbaText.addOutput("#");
                }
                aadlbaText.addOutput(dpr.getQualifiedName().getBaNamespace().getId());
                aadlbaText.addOutput("::");
                if (false == dpr.getQualifiedName().getBaName().getId().isEmpty()) {
                    aadlbaText.addOutput(dpr.getQualifiedName().getBaName().getId());
                    aadlbaText.addOutput("#");
                }
                processEList(dpr.getPropertyNames(), ".");
            } else if (object instanceof DeclarativePropertyName) {
                DeclarativePropertyName dpn = (DeclarativePropertyName) object;
                aadlbaText.addOutput(dpn.getPropertyName().getId());
                // field
                process(dpn.getField());
                // indexes
                caseArrayIndex(dpn.getIndexes());
            }
            return DONE;
        }

        @Override
        public String caseSubprogramCallAction(SubprogramCallAction object) {
            if (object.getProxy() != null) {
                process(object.getProxy());
                aadlbaText.addOutput(".");
            }
            process(object.getSubprogram());
            aadlbaText.addOutput(" !");
            if (object.isSetParameterLabels()) {
                aadlbaText.addOutput(" (");
                processEList(object.getParameterLabels(), ", ");
                aadlbaText.addOutput(")");
            }
            return DONE;
        }

        @Override
        public String casePortSendAction(PortSendAction object) {
            process(object.getPort());
            aadlbaText.addOutput(" !");
            if (object.getValueExpression() != null) {
                aadlbaText.addOutput(" (");
                process(object.getValueExpression());
                aadlbaText.addOutput(")");
            }
            return DONE;
        }

        @Override
        public String casePortFreezeAction(PortFreezeAction object) {
            return casePortActionOrValue(object, " >>");
        }

        @Override
        public String casePortDequeueAction(PortDequeueAction object) {
            process(object.getPort());
            aadlbaText.addOutput(" ?");
            if (object.getTarget() != null) {
                aadlbaText.addOutput(" (");
                process(object.getTarget());
                aadlbaText.addOutput(")");
            }
            return DONE;
        }

        @Override
        public String caseLockAction(LockAction object) {
            return caseSharedDataAction(object, "!<");
        }

        @Override
        public String caseUnlockAction(UnlockAction object) {
            return caseSharedDataAction(object, "!>");
        }

        public String caseSharedDataAction(SharedDataAction object, String token) {
            if (object.getDataAccess() != null) {
                process(object.getDataAccess());
                aadlbaText.addOutput(" ");
            } else {
                aadlbaText.addOutput("*");
            }
            aadlbaText.addOutput(token);
            return DONE;
        }

        /**
         * Unparse behaviortime
         */
        @Override
        public String caseBehaviorTime(BehaviorTime object) {
            // FIXME : TODO : update location reference
            process(object.getIntegerValue());
            aadlbaText.addOutput(" ");
            if (object.getUnit() != null) {
                aadlbaText.addOutput(object.getUnit().getName());
            } else {
                if (object instanceof DeclarativeTime) {
                    DeclarativeTime dt = (DeclarativeTime) object;
                    aadlbaText.addOutput(dt.getUnitId().getId());
                }
            }
            return DONE;
        }

        @Override
        public String casePortDequeueValue(PortDequeueValue object) {
            return casePortActionOrValue(object, " ?");
        }

        @Override
        public String casePortCountValue(PortCountValue object) {
            return casePortActionOrValue(object, "' count");
        }

        @Override
        public String casePortFreshValue(PortFreshValue object) {
            return casePortActionOrValue(object, "' fresh");
        }

        public String casePortActionOrValue(PortHolder object, String token) {
            caseElementHolder(object);
            aadlbaText.addOutput(token);
            return DONE;
        }

        /**
         * Unparse booleanliteral
         */
        @Override
        public String caseBehaviorBooleanLiteral(BehaviorBooleanLiteral object) {
            // FIXME : TODO : update location reference
            if (object.isValue()) {
                aadlbaText.addOutput("true");
            } else {
                aadlbaText.addOutput("false");
            }
            return DONE;
        }

        /**
         * Unparse stringliteral
         */
        @Override
        public String caseBehaviorStringLiteral(BehaviorStringLiteral object) {
            // FIXME : TODO : update location reference
            // DB: Manage adding double quotes
            aadlbaText.addOutput(doubleQuoteString(object.getValue()));
            return DONE;
        }

        @Override
        public String caseBehaviorRealLiteral(BehaviorRealLiteral object) {
            aadlbaText.addOutput(String.valueOf(object.getValue()));
            return DONE;
        }

        @Override
        public String caseBehaviorIntegerLiteral(BehaviorIntegerLiteral object) {
            aadlbaText.addOutput(Long.toString(object.getValue()));
            return DONE;
        }

        /**
         * Unparse valueexpression
         */
        @Override
        public String caseValueExpression(ValueExpression object) {
            // FIXME : TODO : update location reference
            Iterator<Relation> itRel = object.getRelations().iterator();
            process(itRel.next());
            if (object.isSetLogicalOperators()) {
                Iterator<LogicalOperator> itOp = object.getLogicalOperators().iterator();
                while (itRel.hasNext()) {
                    LogicalOperator lo = itOp.next();
                    if (lo != LogicalOperator.NONE) {
                        aadlbaText.addOutput(" " + lo.getLiteral() + " ");
                    }
                    process(itRel.next());
                }
            }
            return DONE;
        }

        /**
         * Unparse relation
         */
        @Override
        public String caseRelation(Relation object) {
            // FIXME : TODO : update location reference
            process(object.getFirstExpression());
            if (object.getSecondExpression() != null) {
                if (object.getRelationalOperator() != RelationalOperator.NONE) {
                    aadlbaText.addOutput(" " + object.getRelationalOperator().getLiteral() + " ");
                }
                process(object.getSecondExpression());
            }
            return DONE;
        }

        /**
         * Unparse simpleexpression
         */
        @Override
        public String caseSimpleExpression(SimpleExpression object) {
            // FIXME : TODO : update location reference
            if (object.isSetUnaryAddingOperator() && object.getUnaryAddingOperator() != UnaryAddingOperator.NONE) {
                aadlbaText.addOutput(object.getUnaryAddingOperator().getLiteral());
            }
            Iterator<Term> itTerm = object.getTerms().iterator();
            process(itTerm.next());
            if (object.isSetBinaryAddingOperators()) {
                Iterator<BinaryAddingOperator> itOp = object.getBinaryAddingOperators().iterator();
                while (itTerm.hasNext()) {
                    BinaryAddingOperator bao = itOp.next();
                    if (bao != BinaryAddingOperator.NONE) {
                        aadlbaText.addOutput(" " + bao.getLiteral() + " ");
                    }
                    process(itTerm.next());
                }
            }
            return DONE;
        }

        /**
         * Unparse term
         */
        @Override
        public String caseTerm(Term object) {
            // FIXME : TODO : update location reference
            Iterator<Factor> itFact = object.getFactors().iterator();
            process(itFact.next());
            if (object.isSetMultiplyingOperators()) {
                Iterator<MultiplyingOperator> itOp = object.getMultiplyingOperators().iterator();
                while (itFact.hasNext()) {
                    MultiplyingOperator mo = itOp.next();
                    if (mo != MultiplyingOperator.NONE) {
                        aadlbaText.addOutput(" " + mo.getLiteral() + " ");
                    }
                    process(itFact.next());
                }
            }
            return DONE;
        }

        /**
         * Unparse factor
         */
        @Override
        public String caseFactor(Factor object) {
            // FIXME : TODO : update location reference
            if (object.isSetUnaryNumericOperator() || object.isSetUnaryBooleanOperator()) {
                Enumerator e = null;
                if (object.isSetUnaryNumericOperator()) {
                    e = object.getUnaryNumericOperator();
                    if (e != UnaryNumericOperator.NONE) {
                        aadlbaText.addOutput(e.getLiteral() + " ");
                    }
                } else if (object.isSetUnaryBooleanOperator()) {
                    e = object.getUnaryBooleanOperator();
                    if (e != UnaryBooleanOperator.NONE) {
                        aadlbaText.addOutput(e.getLiteral() + " ");
                    }
                }
            }
            if (object.getFirstValue() instanceof ValueExpression) {
                aadlbaText.addOutput("(");
                process(object.getFirstValue());
                aadlbaText.addOutput(")");
            } else {
                process(object.getFirstValue());
            }
            if (object.isSetBinaryNumericOperator()) {
                BinaryNumericOperator bno = object.getBinaryNumericOperator();
                if (bno != BinaryNumericOperator.NONE) {
                    aadlbaText.addOutput(" " + bno.getLiteral() + " ");
                }
                if (object.getSecondValue() instanceof ValueExpression) {
                    aadlbaText.addOutput("(");
                    process(object.getSecondValue());
                    aadlbaText.addOutput(")");
                } else {
                    process(object.getSecondValue());
                }
            }
            return DONE;
        }

        @Override
        public String caseBehaviorPropertyConstant(BehaviorPropertyConstant object) {
            aadlbaText.addOutput("#");
            if (object.getPropertySet() != null) {
                aadlbaText.addOutput(object.getPropertySet().getQualifiedName());
                aadlbaText.addOutput("::");
            }
            aadlbaText.addOutput(object.getProperty().getName());
            return DONE;
        }

        @Override
        public String casePropertySetPropertyReference(PropertySetPropertyReference object) {
            aadlbaText.addOutput("#");
            if (object.getPropertySet() != null) {
                aadlbaText.addOutput(object.getPropertySet().getQualifiedName());
                aadlbaText.addOutput("::");
            }
            processEList(object.getProperties(), ".");
            return DONE;
        }

        @Override
        public String caseClassifierPropertyReference(ClassifierPropertyReference object) {
            org.osate.aadl2.Classifier c = object.getClassifier();
            process(c, object);
            aadlbaText.addOutput("#");
            processEList(object.getProperties(), ".");
            return DONE;
        }

        @Override
        public String caseClassifierFeaturePropertyReference(ClassifierFeaturePropertyReference object) {
            process(object.getComponent());
            aadlbaText.addOutput("#");
            processEList(object.getProperties(), ".");
            return DONE;
        }

        @Override
        public String casePropertyNameHolder(PropertyNameHolder pnh) {
            PropertyElementHolder peh = pnh.getProperty();
            Element el = peh.getElement();
            if (el instanceof NamedElement) {
                aadlbaText.addOutput(((NamedElement) el).getName());
            } else if (el instanceof PropertyAssociation) {
                aadlbaText.addOutput(((PropertyAssociation) el).getProperty().getName());
            } else {
                String tmp = unparse((PropertyExpression) el);
                aadlbaText.addOutput(tmp);
            }
            if (pnh.getField() != null) {
                aadlbaText.addOutput(".");
                process(pnh.getField());
            } else if (peh.isSetArrayIndexes()) {
                caseArrayIndex(peh.getArrayIndexes());
            }
            return DONE;
        }

        @Override
        public String caseUpperBound(UpperBound object) {
            aadlbaText.addOutput("upper_bound");
            return DONE;
        }

        @Override
        public String caseLowerBound(LowerBound object) {
            aadlbaText.addOutput("lower_bound");
            return DONE;
        }
    };
}
Also used : ExecutionTimeoutCatch(org.osate.ba.aadlba.ExecutionTimeoutCatch) SubprogramCallAction(org.osate.ba.aadlba.SubprogramCallAction) BehaviorTime(org.osate.ba.aadlba.BehaviorTime) ClassifierPropertyReference(org.osate.ba.aadlba.ClassifierPropertyReference) DeclarativeBehaviorTransition(org.osate.ba.declarative.DeclarativeBehaviorTransition) DispatchTriggerLogicalExpression(org.osate.ba.aadlba.DispatchTriggerLogicalExpression) GroupableElement(org.osate.ba.aadlba.GroupableElement) TimedAction(org.osate.ba.aadlba.TimedAction) BehaviorIntegerLiteral(org.osate.ba.aadlba.BehaviorIntegerLiteral) BehaviorTransition(org.osate.ba.aadlba.BehaviorTransition) DeclarativeBehaviorTransition(org.osate.ba.declarative.DeclarativeBehaviorTransition) ArrayableIdentifier(org.osate.ba.declarative.ArrayableIdentifier) DataComponentReference(org.osate.ba.aadlba.DataComponentReference) SimpleExpression(org.osate.ba.aadlba.SimpleExpression) DispatchTriggerConditionStop(org.osate.ba.aadlba.DispatchTriggerConditionStop) IfStatement(org.osate.ba.aadlba.IfStatement) DataSubcomponentHolder(org.osate.ba.aadlba.DataSubcomponentHolder) QualifiedNamedElement(org.osate.ba.declarative.QualifiedNamedElement) Otherwise(org.osate.ba.aadlba.Otherwise) Identifier(org.osate.ba.declarative.Identifier) ArrayableIdentifier(org.osate.ba.declarative.ArrayableIdentifier) AbstractEnumerator(org.eclipse.emf.common.util.AbstractEnumerator) Enumerator(org.eclipse.emf.common.util.Enumerator) PortFreezeAction(org.osate.ba.aadlba.PortFreezeAction) UpperBound(org.osate.ba.aadlba.UpperBound) EObject(org.eclipse.emf.ecore.EObject) Factor(org.osate.ba.aadlba.Factor) PropertySetPropertyReference(org.osate.ba.aadlba.PropertySetPropertyReference) BehaviorState(org.osate.ba.aadlba.BehaviorState) BehaviorActionSet(org.osate.ba.aadlba.BehaviorActionSet) BinaryNumericOperator(org.osate.ba.aadlba.BinaryNumericOperator) ForOrForAllStatement(org.osate.ba.aadlba.ForOrForAllStatement) PropertyElementHolder(org.osate.ba.aadlba.PropertyElementHolder) IterativeVariable(org.osate.ba.aadlba.IterativeVariable) BehaviorAnnex(org.osate.ba.aadlba.BehaviorAnnex) AssignmentAction(org.osate.ba.aadlba.AssignmentAction) PortDequeueAction(org.osate.ba.aadlba.PortDequeueAction) LogicalOperator(org.osate.ba.aadlba.LogicalOperator) PortDequeueValue(org.osate.ba.aadlba.PortDequeueValue) ElementHolder(org.osate.ba.aadlba.ElementHolder) PropertyElementHolder(org.osate.ba.aadlba.PropertyElementHolder) Term(org.osate.ba.aadlba.Term) DeclarativeTime(org.osate.ba.declarative.DeclarativeTime) PortSendAction(org.osate.ba.aadlba.PortSendAction) DispatchCondition(org.osate.ba.aadlba.DispatchCondition) ElseStatement(org.osate.ba.aadlba.ElseStatement) BehaviorBooleanLiteral(org.osate.ba.aadlba.BehaviorBooleanLiteral) MultiplyingOperator(org.osate.ba.aadlba.MultiplyingOperator) LockAction(org.osate.ba.aadlba.LockAction) QualifiedNamedElement(org.osate.ba.declarative.QualifiedNamedElement) NamedElement(org.osate.aadl2.NamedElement) CompletionRelativeTimeout(org.osate.ba.aadlba.CompletionRelativeTimeout) IndexableElement(org.osate.ba.aadlba.IndexableElement) DispatchConjunction(org.osate.ba.aadlba.DispatchConjunction) LowerBound(org.osate.ba.aadlba.LowerBound) BehaviorVariable(org.osate.ba.aadlba.BehaviorVariable) PropertyAssociation(org.osate.aadl2.PropertyAssociation) QualifiedNamedElement(org.osate.ba.declarative.QualifiedNamedElement) NamedElement(org.osate.aadl2.NamedElement) Element(org.osate.aadl2.Element) BehaviorElement(org.osate.ba.aadlba.BehaviorElement) IndexableElement(org.osate.ba.aadlba.IndexableElement) GroupableElement(org.osate.ba.aadlba.GroupableElement) WhileOrDoUntilStatement(org.osate.ba.aadlba.WhileOrDoUntilStatement) PortHolder(org.osate.ba.aadlba.PortHolder) AbstractNamedValue(org.osate.aadl2.AbstractNamedValue) NamedValue(org.osate.aadl2.NamedValue) DataClassifier(org.osate.aadl2.DataClassifier) DataClassifier(org.osate.aadl2.DataClassifier) Any(org.osate.ba.aadlba.Any) DeclarativePropertyName(org.osate.ba.declarative.DeclarativePropertyName) PortCountValue(org.osate.ba.aadlba.PortCountValue) Relation(org.osate.ba.aadlba.Relation) BehaviorPropertyConstant(org.osate.ba.aadlba.BehaviorPropertyConstant) DeclarativeArrayDimension(org.osate.ba.declarative.DeclarativeArrayDimension) ClassifierFeaturePropertyReference(org.osate.ba.aadlba.ClassifierFeaturePropertyReference) BehaviorStringLiteral(org.osate.ba.aadlba.BehaviorStringLiteral) BehaviorRealLiteral(org.osate.ba.aadlba.BehaviorRealLiteral) Iterator(java.util.Iterator) BehaviorActionBlock(org.osate.ba.aadlba.BehaviorActionBlock) DeclarativePropertyReference(org.osate.ba.declarative.DeclarativePropertyReference) SharedDataAction(org.osate.ba.aadlba.SharedDataAction) CommAction(org.osate.ba.declarative.CommAction) IntegerRange(org.osate.ba.aadlba.IntegerRange) DeclarativePropertyReference(org.osate.ba.declarative.DeclarativePropertyReference) PropertySetPropertyReference(org.osate.ba.aadlba.PropertySetPropertyReference) ClassifierFeaturePropertyReference(org.osate.ba.aadlba.ClassifierFeaturePropertyReference) ClassifierPropertyReference(org.osate.ba.aadlba.ClassifierPropertyReference) Reference(org.osate.ba.declarative.Reference) DataComponentReference(org.osate.ba.aadlba.DataComponentReference) IntegerValue(org.osate.ba.aadlba.IntegerValue) PortFreshValue(org.osate.ba.aadlba.PortFreshValue) DispatchRelativeTimeout(org.osate.ba.aadlba.DispatchRelativeTimeout) PropertyNameHolder(org.osate.ba.aadlba.PropertyNameHolder) UnlockAction(org.osate.ba.aadlba.UnlockAction) ValueExpression(org.osate.ba.aadlba.ValueExpression) BinaryAddingOperator(org.osate.ba.aadlba.BinaryAddingOperator) BehaviorActionSequence(org.osate.ba.aadlba.BehaviorActionSequence) ArrayDimension(org.osate.aadl2.ArrayDimension) DeclarativeArrayDimension(org.osate.ba.declarative.DeclarativeArrayDimension)

Aggregations

BehaviorTransition (org.osate.ba.aadlba.BehaviorTransition)14 DeclarativeBehaviorTransition (org.osate.ba.declarative.DeclarativeBehaviorTransition)10 BehaviorState (org.osate.ba.aadlba.BehaviorState)6 BehaviorAnnex (org.osate.ba.aadlba.BehaviorAnnex)5 BehaviorVariable (org.osate.ba.aadlba.BehaviorVariable)4 ArrayList (java.util.ArrayList)2 Optional (java.util.Optional)2 NamedElement (org.osate.aadl2.NamedElement)2 BehaviorActionBlock (org.osate.ba.aadlba.BehaviorActionBlock)2 DispatchCondition (org.osate.ba.aadlba.DispatchCondition)2 ValueExpression (org.osate.ba.aadlba.ValueExpression)2 Iterator (java.util.Iterator)1 Adapters (org.eclipse.core.runtime.Adapters)1 AbstractEnumerator (org.eclipse.emf.common.util.AbstractEnumerator)1 BasicEList (org.eclipse.emf.common.util.BasicEList)1 Enumerator (org.eclipse.emf.common.util.Enumerator)1 EObject (org.eclipse.emf.ecore.EObject)1 EcoreUtil (org.eclipse.emf.ecore.util.EcoreUtil)1 GridLayoutFactory (org.eclipse.jface.layout.GridLayoutFactory)1 IFilter (org.eclipse.jface.viewers.IFilter)1