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);
}
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);
}
}
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;
}
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()) ;
}
}
}
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;
}
};
}
Aggregations