use of org.osate.aadl2.PropertyAssociation in project osate2 by osate.
the class PropertyUtils method getEnumValue.
/**
* Extract enumeration value from a specified property. May return null.
*
* @param i
* component instance.
* @param propertyName
* property name.
* @return property value.
* enumeration.
*/
public static String getEnumValue(NamedElement i, String propertyName) {
PropertyAssociation pa = findPropertyAssociation(propertyName, i);
if (pa != null) {
Property p = pa.getProperty();
if (p.getName().equalsIgnoreCase(propertyName)) {
List<ModalPropertyValue> values = pa.getOwnedValues();
if (values.size() == 1) {
ModalPropertyValue v = values.get(0);
PropertyExpression expr = v.getOwnedValue();
if (expr instanceof EnumerationLiteral) {
return ((EnumerationLiteral) expr).getName();
} else if (expr instanceof NamedValue) {
NamedValue nv = (NamedValue) expr;
if (nv.getNamedValue() instanceof EnumerationLiteral) {
EnumerationLiteral el = (EnumerationLiteral) nv.getNamedValue();
return el.getName();
}
}
}
}
}
// try on a refined NamedElement
if (i instanceof RefinableElement) {
RefinableElement re = (RefinableElement) i;
if (re.getRefinedElement() != null) {
return getEnumValue(re.getRefinedElement(), propertyName);
}
}
return null;
}
use of org.osate.aadl2.PropertyAssociation in project osate2 by osate.
the class PropertyUtils method getRecordValue.
/**
* * TODO: DOC ME !
*
* May return null
*
* @param i
* @param propertyName
* @return
*/
public static RecordValue getRecordValue(NamedElement i, String propertyName) {
PropertyAssociation pa = findPropertyAssociation(propertyName, i);
if (pa != null) {
Property p = pa.getProperty();
if (p.getName().equalsIgnoreCase(propertyName)) {
List<ModalPropertyValue> values = pa.getOwnedValues();
if (values.size() == 1) {
ModalPropertyValue v = values.get(0);
PropertyExpression expr = v.getOwnedValue();
if (expr instanceof RecordValue) {
return ((RecordValue) expr);
}
}
}
}
return null;
}
use of org.osate.aadl2.PropertyAssociation in project osate2 by osate.
the class PropertyUtils method setFloatValue.
public static boolean setFloatValue(NamedElement e, String propertyName, float value) {
PropertyAssociation pa = findPropertyAssociation(propertyName, e);
if (pa != null) {
RealLiteral r = Aadl2Factory.eINSTANCE.createRealLiteral();
r.setValue(value);
r.setUnit(getUnit(pa));
pa.getOwnedValues().get(0).setOwnedValue(r);
return true;
}
return false;
}
use of org.osate.aadl2.PropertyAssociation in project osate2 by osate.
the class PropertyUtils method getComponentInstanceList.
/**
* TODO: DOC ME !
*
* May return null.
*
* @param object
* @param propertyName
* @return
*/
public static List<ComponentInstance> getComponentInstanceList(NamedElement object, String propertyName) {
List<ComponentInstance> res = null;
PropertyAssociation pa = findPropertyAssociation(propertyName, object);
if (pa != null) {
res = new ArrayList<ComponentInstance>();
Property p = pa.getProperty();
if (p.getName().equals(propertyName)) {
List<ModalPropertyValue> values = pa.getOwnedValues();
if (values.size() == 1) {
ModalPropertyValue v = values.get(0);
PropertyExpression expr = v.getOwnedValue();
if (expr instanceof ListValue) {
ListValue lv = (ListValue) expr;
for (PropertyExpression pe : lv.getOwnedListElements()) {
if (pe instanceof InstanceReferenceValue) {
InstanceReferenceValue c = ((InstanceReferenceValue) pe);
res.add((ComponentInstance) c.getReferencedInstanceObject());
}
}
}
}
}
}
return res;
}
use of org.osate.aadl2.PropertyAssociation in project osate2 by osate.
the class CacheContainedPropertyAssociationsSwitch method processContainedPropertyAssociations.
/**
* Copy contained property associations to the instance model.
* Don't fully evaluate the property expression. Just replace reference values with
* a reference to the referenced instance object.
*
* @param modeContext
* @param ci
* @param propertyAssociations
*/
protected void processContainedPropertyAssociations(final ComponentInstance modeContext, final ComponentInstance ci, final EList<PropertyAssociation> propertyAssociations) {
for (PropertyAssociation pa : propertyAssociations) {
// OsateDebug.osateDebug ("[CacheContainedProperty] Process contained property association: " + pa.getProperty().getName());
Property prop = pa.getProperty();
if (Aadl2Util.isNull(prop) || Aadl2Util.isNull(prop.getType())) {
continue;
}
for (ContainedNamedElement cne : pa.getAppliesTos()) {
final EList<ContainmentPathElement> cpes = cne.getContainmentPathElements();
if (cpes != null && !cpes.isEmpty()) {
final NamedElement last = cpes.get(cpes.size() - 1).getNamedElement();
final List<InstanceObject> ios = ci.findInstanceObjects(cpes);
for (InstanceObject io : ios) {
// OsateDebug.osateDebug (" io=" + io);
PropertyAssociationInstance newPA = InstanceFactory.eINSTANCE.createPropertyAssociationInstance();
newPA.setProperty(prop);
newPA.setPropertyAssociation(pa);
newPA.getOwnedValues().addAll(EcoreUtil.copyAll(pa.getOwnedValues()));
// replace reference values in the context of the contained PA's owner
for (Iterator<Element> content = EcoreUtil.getAllProperContents(newPA, false); content.hasNext(); ) {
Element elem = content.next();
if (elem instanceof ReferenceValue) {
// TODO: LW what if ref to connection?
try {
PropertyExpression irv = ((ReferenceValue) elem).instantiate(ci);
if (irv != null) {
EcoreUtil.replace(elem, irv);
}
} catch (InvalidModelException e) {
error(io, e.getMessage());
}
}
}
if (last instanceof Connection) {
final PropertyAssociation existingPA = scProps.retrieveSCProperty((ConnectionInstance) io, prop, (Connection) last);
if (existingPA != null && isConstant(existingPA)) {
/*
* Cannot put the error on the property association that is affected because it might
* be a declarative model element at this point. Need to report the error on the
* instance object itself.
*/
getErrorManager().error(io, "Property association for \"" + prop.getQualifiedName() + "\" is constant. A contained property association in classifier \"" + pa.getContainingClassifier().getQualifiedName() + "\" tries to replace it.");
} else {
scProps.recordSCProperty((ConnectionInstance) io, prop, (Connection) last, newPA);
}
} else {
final PropertyAssociation existingPA = io.getPropertyValue(prop, false).first();
if (existingPA != null && isConstant(existingPA)) {
/*
* Cannot put the error on the property association that is affected because it might
* be a declarative model element at this point. Need to report the error on the
* instance object itself.
*/
getErrorManager().error(io, "Property association for \"" + prop.getQualifiedName() + "\" is constant. A contained property association in classifier \"" + pa.getContainingClassifier().getQualifiedName() + "\" tries to replace it.");
} else {
io.removePropertyAssociations(prop);
io.getOwnedPropertyAssociations().add(newPA);
}
}
}
}
}
checkIfCancelled();
if (cancelled()) {
break;
}
}
}
Aggregations