use of org.geosdi.geoplatform.xml.wfs.v110.PropertyType in project VERDICT by ge-high-assurance.
the class Aadl2Vdm method translateComponentImplObjects.
// End of translateProcessorTypeObjects
/**
* Analyzing each component implementation
* @param comImpls
* @param m2
* @return
*/
public Model translateComponentImplObjects(List<ComponentImplementation> comImpls, Map<Property, String> componentPropertyToName, Map<Property, String> connPropertyToName, Model m2, HashSet<String> dataTypeDecl) {
Map<String, String> connectionToBusMap = new HashMap<>();
// creating an object for each implementation first as we will need it later
for (ComponentImplementation aSystemImpl : comImpls) {
// to pack the sysImpl as a VDM componentImpl
verdict.vdm.vdm_model.ComponentImpl packCompImpl = new verdict.vdm.vdm_model.ComponentImpl();
// setting "name" field of packCompImpl, will need later
packCompImpl.setName(aSystemImpl.getName());
// Note: Will skip "Nodebody" field for now
// ISSUE: No "id" field in Component implementations
packCompImpl.setId(aSystemImpl.getQualifiedName());
// adding object to "componentImpl" field of m2
m2.getComponentImpl().add(packCompImpl);
// update map (connection-name -> bus-Instance-Name)
for (PropertyAssociation propAssoc : aSystemImpl.getOwnedPropertyAssociations()) {
if (!(propAssoc.getProperty().getName().equalsIgnoreCase("Actual_Connection_Binding"))) {
System.out.println("System Implementation contains property " + propAssoc.getProperty().getName() + " which is not currently handled.");
continue;
}
if (propAssoc.getOwnedValues().size() != 1) {
throw new RuntimeException("Unexpected number of property owned values: " + propAssoc.getOwnedValues().size());
}
if (!(propAssoc.getOwnedValues().get(0).getOwnedValue() instanceof ListValueImpl)) {
throw new RuntimeException("Unexpected type of property owned value");
} else {
ListValueImpl listVal = (ListValueImpl) propAssoc.getOwnedValues().get(0).getOwnedValue();
if (listVal.getOwnedListElements().size() != 1) {
throw new RuntimeException("Unexpected number of list elements are associated with the property owned value");
} else if (!(listVal.getOwnedListElements().get(0) instanceof ReferenceValueImpl)) {
throw new RuntimeException("Unexpected number of list elements are associated with the property owned value");
} else {
ReferenceValueImpl refVal = (ReferenceValueImpl) listVal.getOwnedListElements().get(0);
ContainmentPathElement pathEle = refVal.getPath();
while (!(pathEle.getNamedElement() instanceof BusSubcomponent)) {
pathEle = pathEle.getPath();
}
String busInstanceName = pathEle.getNamedElement().getQualifiedName();
for (ContainedNamedElement connection : propAssoc.getAppliesTos()) {
// updating map (connection name -> bus name)
connectionToBusMap.put(connection.getPath().getNamedElement().getQualifiedName(), busInstanceName);
}
}
}
}
}
// Getting the reference of the object previously created and populating
for (ComponentImplementation aCompImpl : comImpls) {
// variable to refer to previously created object
verdict.vdm.vdm_model.ComponentImpl packCompImpl = new verdict.vdm.vdm_model.ComponentImpl();
// finding previously created object
for (verdict.vdm.vdm_model.ComponentImpl anImplObj : m2.getComponentImpl()) {
if (anImplObj.getId().equalsIgnoreCase(aCompImpl.getQualifiedName())) {
packCompImpl = anImplObj;
}
}
// setting "type" field of packCompImpl
for (verdict.vdm.vdm_model.ComponentType cType : m2.getComponentType()) {
if (aCompImpl.getType().getQualifiedName().equals(cType.getId())) {
packCompImpl.setType(cType);
}
}
// End of setting "type"
// a BlockImpl object to pack all info for packCompImpl.blockImpl
verdict.vdm.vdm_model.BlockImpl packBlockImpl = new verdict.vdm.vdm_model.BlockImpl();
// adding all subcomponents to "subcomponent" field of packBlockImpl
for (Subcomponent aSubComp : aCompImpl.getOwnedSubcomponents()) {
// to pack all information of a subcomponent
verdict.vdm.vdm_model.ComponentInstance packSubComp = new verdict.vdm.vdm_model.ComponentInstance();
// ISSUE: No "id" field in subcomponents
packSubComp.setId(aSubComp.getQualifiedName());
// setting "name" field of packSubComp
packSubComp.setName(aSubComp.getFullName());
// setting "specification" field of packSubComp
for (verdict.vdm.vdm_model.ComponentType cType : m2.getComponentType()) {
if (aSubComp.getComponentType().getName().equals(cType.getName())) {
packSubComp.setSpecification(cType);
}
}
// setting the "implementation" field of packSubComp
for (verdict.vdm.vdm_model.ComponentImpl cImpl : m2.getComponentImpl()) {
// if(aSubComp.getSubcomponentType().getName().equals(cImpl.getName())){
if (aSubComp.getSubcomponentType().getQualifiedName().equals(cImpl.getId())) {
packSubComp.setImplementation(cImpl);
}
}
// setting "attribute" field of packSubComp
// category of subComponent
String aSubCompCatName = aSubComp.getCategory().getName().toLowerCase();
// checking all collected properties in componentPropertyToName
for (Property prop : componentPropertyToName.keySet()) {
if (isApplicableToCat(prop, aSubCompCatName)) {
// create a GenericAttribute object to pack the property
verdict.vdm.vdm_data.GenericAttribute anAttribute = new verdict.vdm.vdm_data.GenericAttribute();
String value = "";
PropertyAcc propAcc = aSubComp.getPropertyValue(prop);
PropertyExpression defPropExpr = prop.getDefaultValue();
if (propAcc != null && !propAcc.getAssociations().isEmpty()) {
value = getStrRepofPropVal(aSubComp.getPropertyValue(prop));
} else if (defPropExpr != null) {
value = getStrRepofExpr(defPropExpr)[0];
}
if (!value.equals("")) {
// setting the "name" and "value" field of anAttribute
anAttribute.setName(componentPropertyToName.get(prop));
anAttribute.setValue(value);
// get the property type
PropertyType propType = prop.getPropertyType();
QName type = new QName("String");
if (propType instanceof AadlBooleanImpl) {
type = new QName("Bool");
} else if (propType instanceof AadlIntegerImpl) {
type = new QName("Int");
} else if (propType instanceof EnumerationTypeImpl) {
type = new QName("String");
} else {
if (!(propType instanceof AadlStringImpl)) {
type = new QName(propType.toString());
}
}
// parse propertyType fetched using prop.getOwnedPropertyType() and map it to "Bool", "Int", or "String"
anAttribute.setType(type);
// adding asAttribute to packSubComp
packSubComp.getAttribute().add(anAttribute);
}
} else {
// for outer if
continue;
}
}
// adding packSubComp to packBlockImpl
packBlockImpl.getSubcomponent().add(packSubComp);
packCompImpl.setBlockImpl(packBlockImpl);
}
// adding all connections to "connections" field of packBlockImpl
if (aCompImpl.getOwnedConnections() != null && !aCompImpl.getOwnedConnections().isEmpty()) {
for (Connection aConn : aCompImpl.getOwnedConnections()) {
// to pack all information of a connection
verdict.vdm.vdm_model.Connection packConn = new verdict.vdm.vdm_model.Connection();
// populate connectionKind
packConn.setConnectionKind(getConnectionKind(aConn));
// variables to unpack information from AADL object
String srcCompInstName = "";
String destCompInstName = "";
Context srcConnContext = aConn.getAllSourceContext();
Context destConnContext = aConn.getAllDestinationContext();
ConnectionEnd srcConnectionEnd = aConn.getAllSource();
ConnectionEnd destConnectionEnd = aConn.getAllDestination();
if (srcConnContext != null) {
srcCompInstName = srcConnContext.getName();
}
if (destConnContext != null) {
destCompInstName = destConnContext.getName();
}
String srcPortTypeName = "";
String destPortTypeName = "";
String srcPortName = srcConnectionEnd.getName();
String destPortName = destConnectionEnd.getName();
// variables to capture data type information
DataSubcomponentType srcDataSubCompType = null;
DataSubcomponentType destDataSubCompType = null;
if (srcConnectionEnd instanceof DataPort) {
srcPortTypeName = ((DataPort) srcConnectionEnd).isIn() ? (((DataPort) srcConnectionEnd).isOut() ? "inOut" : "in") : "out";
srcDataSubCompType = ((DataPort) srcConnectionEnd).getDataFeatureClassifier();
} else if (srcConnectionEnd instanceof EventDataPort) {
srcPortTypeName = ((EventDataPort) srcConnectionEnd).isIn() ? (((EventDataPort) srcConnectionEnd).isOut() ? "inOut" : "in") : "out";
srcDataSubCompType = ((EventDataPort) srcConnectionEnd).getDataFeatureClassifier();
} else if (srcConnectionEnd instanceof DataAccess) {
AccessType type = ((DataAccess) srcConnectionEnd).getKind();
if (type == AccessType.PROVIDES) {
srcPortTypeName = "providesDataAccess";
} else if (type == AccessType.REQUIRES) {
srcPortTypeName = "requiresDataAccess";
} else {
throw new RuntimeException("Unexpected access type: " + type);
}
srcDataSubCompType = ((DataAccess) srcConnectionEnd).getDataFeatureClassifier();
} else if (srcConnectionEnd instanceof DataSubcomponent) {
srcDataSubCompType = ((DataSubcomponent) srcConnectionEnd).getDataSubcomponentType();
srcPortTypeName = "data";
} else if (srcConnectionEnd instanceof BusAccess) {
// AccessType type = ((BusAccess) srcConnectionEnd).getKind();
// if(type == AccessType.PROVIDES) {
// srcPortTypeName = "providesBusAccess";
// } else if(type == AccessType.REQUIRES) {
// srcPortTypeName = "requiresBusAccess";
// } else {
// throw new RuntimeException("Unexpected access type: " + type);
// }
// BusFeatureClassifier busfeatureClassifier = ((BusAccess) srcConnectionEnd).getBusFeatureClassifier();
// if(busfeatureClassifier instanceof BusImplementation) {
// srcBusImpl = (BusImplementation)busfeatureClassifier;
// }
System.out.println("Warning: Unsupported AADL component element type: " + srcConnectionEnd);
continue;
} else if (srcConnectionEnd instanceof BusSubcomponent) {
// srcBusSubCompType = ((BusSubcomponent)srcConnectionEnd).getBusSubcomponentType();
// srcPortTypeName = "bus";
System.out.println("Warning: Unsupported AADL component element type: " + srcConnectionEnd);
continue;
} else if (srcConnectionEnd instanceof EventPort) {
srcPortTypeName = ((EventPort) srcConnectionEnd).isIn() ? (((EventPort) srcConnectionEnd).isOut() ? "inOut" : "in") : "out";
} else {
throw new RuntimeException("Unsupported AADL component element type: " + srcConnectionEnd + "encountered while processing connections");
}
if (destConnectionEnd instanceof DataPort) {
destPortTypeName = ((DataPort) destConnectionEnd).isIn() ? (((DataPort) destConnectionEnd).isOut() ? "inOut" : "in") : "out";
destDataSubCompType = ((DataPort) destConnectionEnd).getDataFeatureClassifier();
} else if (destConnectionEnd instanceof EventDataPort) {
destPortTypeName = ((EventDataPort) destConnectionEnd).isIn() ? (((EventDataPort) destConnectionEnd).isOut() ? "inOut" : "in") : "out";
destDataSubCompType = ((EventDataPort) destConnectionEnd).getDataFeatureClassifier();
} else if (destConnectionEnd instanceof DataAccess) {
AccessType type = ((DataAccess) destConnectionEnd).getKind();
if (type == AccessType.PROVIDES) {
destPortTypeName = "providesDataAccess";
} else if (type == AccessType.REQUIRES) {
destPortTypeName = "requiresDataAccess";
}
destDataSubCompType = ((DataAccess) destConnectionEnd).getDataFeatureClassifier();
} else if (destConnectionEnd instanceof DataSubcomponent) {
destDataSubCompType = ((DataSubcomponent) destConnectionEnd).getDataSubcomponentType();
destPortTypeName = "data";
} else if (destConnectionEnd instanceof BusAccess) {
// AccessType type = ((BusAccess) destConnectionEnd).getKind();
// if(type == AccessType.PROVIDES) {
// destPortTypeName = "providesBusAccess";
// } else if(type == AccessType.REQUIRES) {
// destPortTypeName = "requiresBusAccess";
// } else {
// throw new RuntimeException("Unexpected access type: " + type);
// }
// BusFeatureClassifier busfeatureClassifier = ((BusAccess) destConnectionEnd).getBusFeatureClassifier();
// if(busfeatureClassifier instanceof BusImplementation) {
// destBusImpl = (BusImplementation)busfeatureClassifier;
// }
System.out.println("Warning: Unsupported AADL component element type: " + destConnectionEnd);
continue;
} else if (destConnectionEnd instanceof BusSubcomponent) {
// destBusSubCompType = ((BusSubcomponent)destConnectionEnd).getBusSubcomponentType();
// destPortTypeName = "bus";
System.out.println("Warning: Unsupported AADL component element type: " + destConnectionEnd);
continue;
} else if (destConnectionEnd instanceof EventPort) {
destPortTypeName = ((EventPort) destConnectionEnd).isIn() ? (((EventPort) destConnectionEnd).isOut() ? "inOut" : "in") : "out";
} else {
throw new RuntimeException("Unsupported AADL component element type: " + destConnectionEnd + "encountered while processing connections");
}
// setting name
packConn.setName(aConn.getFullName());
packConn.setQualifiedName(aConn.getQualifiedName());
if (connectionToBusMap.containsKey(aConn.getQualifiedName())) {
packConn.setActualConnectionBinding(connectionToBusMap.get(aConn.getQualifiedName()));
}
// --- Populate packConn below ---
// to pack source
verdict.vdm.vdm_model.ConnectionEnd packSrcEnd = new verdict.vdm.vdm_model.ConnectionEnd();
// to pack "componentPort" of packSrcEnd
verdict.vdm.vdm_model.Port packSrcEndPort = new verdict.vdm.vdm_model.Port();
// } else
if (srcConnectionEnd instanceof EventPort) {
packSrcEndPort = createVdmConnectionEventPort(srcPortName, srcPortTypeName, srcConnectionEnd.getQualifiedName());
} else {
// if not a bus access port or bus implementation port or event port
packSrcEndPort = createVdmConnectionPort(srcPortName, srcPortTypeName, srcConnectionEnd.getQualifiedName(), srcDataSubCompType, m2, dataTypeDecl);
}
// If source port is independent of a component instance
if (srcCompInstName.equals("")) {
packSrcEnd.setComponentPort(packSrcEndPort);
} else {
// to pack "subcomponentPort" of packSrcEnd
verdict.vdm.vdm_model.CompInstancePort packSrcEndCompInstPort = new verdict.vdm.vdm_model.CompInstancePort();
// putting a reference to appropriate "subcomponent" from packBlockImpl in "subcomponent" of packSrcEndCompInstPort
for (verdict.vdm.vdm_model.ComponentInstance checkCompInst : packBlockImpl.getSubcomponent()) {
if (checkCompInst.getName().equals(srcCompInstName)) {
packSrcEndCompInstPort.setSubcomponent(checkCompInst);
break;
} else {
continue;
}
}
packSrcEndCompInstPort.setPort(packSrcEndPort);
// setting "subcomponentPort" of packSrcEnd
packSrcEnd.setSubcomponentPort(packSrcEndCompInstPort);
}
// adding to "source" of packConn
packConn.setSource(packSrcEnd);
// to pack destination
verdict.vdm.vdm_model.ConnectionEnd packDestEnd = new verdict.vdm.vdm_model.ConnectionEnd();
// to pack "componentPort" of packDestEnd
verdict.vdm.vdm_model.Port packDestEndPort = new verdict.vdm.vdm_model.Port();
// } else
if (destConnectionEnd instanceof EventPort) {
packDestEndPort = createVdmConnectionEventPort(destPortName, destPortTypeName, destConnectionEnd.getQualifiedName());
} else {
// if not a bus access port or bus implementation port or eventport
packDestEndPort = createVdmConnectionPort(destPortName, destPortTypeName, destConnectionEnd.getQualifiedName(), destDataSubCompType, m2, dataTypeDecl);
}
// If source port is independent of a component instance
if (destCompInstName.equals("")) {
packDestEnd.setComponentPort(packDestEndPort);
} else {
// to pack "subcomponentPort" of packSrcEnd
verdict.vdm.vdm_model.CompInstancePort packDestEndCompInstPort = new verdict.vdm.vdm_model.CompInstancePort();
// putting a reference to appropriate "subcomponent" from packBlockImpl in "subcomponent" of packSrcEndCompInstPort
for (verdict.vdm.vdm_model.ComponentInstance checkCompInst : packBlockImpl.getSubcomponent()) {
if (checkCompInst.getName().equals(destCompInstName)) {
packDestEndCompInstPort.setSubcomponent(checkCompInst);
break;
} else {
continue;
}
}
packDestEndCompInstPort.setPort(packDestEndPort);
// setting "subcomponentPort" of packDestEnd
packDestEnd.setSubcomponentPort(packDestEndCompInstPort);
}
// adding to "source" of packConn
packConn.setDestination(packDestEnd);
// adding connection properties from connProperty.ToName
for (Property prop : connPropertyToName.keySet()) {
// create a GenericAttribute object to pack the property
verdict.vdm.vdm_data.GenericAttribute aConnAttribute = new verdict.vdm.vdm_data.GenericAttribute();
String value = "";
PropertyAcc propAcc = aConn.getPropertyValue(prop);
PropertyExpression defPropExpr = prop.getDefaultValue();
if (propAcc != null && !propAcc.getAssociations().isEmpty()) {
value = getStrRepofPropVal(propAcc);
} else if (defPropExpr != null) {
value = getStrRepofExpr(defPropExpr)[0];
}
if (!value.equals("")) {
// setting the "name" and "value" field of anAttribute
aConnAttribute.setName(connPropertyToName.get(prop));
aConnAttribute.setValue(value);
PropertyType propType = prop.getPropertyType();
QName type = new QName("String");
if (propType instanceof AadlBooleanImpl) {
type = new QName("Bool");
} else if (propType instanceof AadlIntegerImpl) {
type = new QName("Int");
} else if (propType instanceof EnumerationTypeImpl) {
type = new QName("String");
} else {
if (!(propType instanceof AadlStringImpl)) {
type = new QName(propType.toString());
}
}
// parse propertyType fetched using prop.getOwnedPropertyType() and map it to "Bool", "Int", or "String"
aConnAttribute.setType(type);
// adding asAttribute to packSubComp
packConn.getAttribute().add(aConnAttribute);
}
}
if (aConn.isBidirectional()) {
packConn.setDirection(verdict.vdm.vdm_model.Direction.fromValue("bidirectional"));
// to pack reverse connection
verdict.vdm.vdm_model.Connection packReverseConn = new verdict.vdm.vdm_model.Connection();
packReverseConn.setName(packConn.getName() + "_reverse");
packReverseConn.setSource(packConn.getDestination());
packReverseConn.setDestination(packConn.getSource());
for (verdict.vdm.vdm_data.GenericAttribute anAttribute : packConn.getAttribute()) {
packReverseConn.getAttribute().add(anAttribute);
}
packReverseConn.setDirection(verdict.vdm.vdm_model.Direction.fromValue("bidirectional"));
// add packReverseConn to packBlockImpl
packBlockImpl.getConnection().add(packReverseConn);
} else {
packConn.setDirection(verdict.vdm.vdm_model.Direction.fromValue("unidirectional"));
}
// add packConn to packBlockImpl
packBlockImpl.getConnection().add(packConn);
packCompImpl.setBlockImpl(packBlockImpl);
}
}
// End of adding all connections
// setting "blackImpl" field of packCompImpl
// packCompImpl.setBlockImpl(packBlockImpl);
}
// return populated Model
return m2;
}
use of org.geosdi.geoplatform.xml.wfs.v110.PropertyType in project osate2 by osate.
the class PropertiesValidator method typeCheckPropertyValues.
/**
* checks and report mismatch in type of value and type
*
* @param pt:
* PropertyType or unresolved proxy or null
* @param pv:
* PropertyExpression or null
* @param prefix:
* String prefix to error message used for lists
* @since 2.0
*/
protected void typeCheckPropertyValues(PropertyType pt, PropertyExpression pv, String prefix, Element holder, String defName, int depth) {
if (Aadl2Util.isNull(pt) || pv == null || holder == null) {
return;
}
if (depth > 50) {
error(holder, "Cyclic value discovered for '" + defName + "'");
return;
}
depth++;
String msg = " to property '" + defName + "' of type '" + pt.eClass().getName() + "'";
if (!prefix.isEmpty() && !prefix.startsWith(" ")) {
prefix = prefix + " ";
}
if (pv instanceof ListValue) {
if (pt instanceof ListType) {
typeMatchListElements(((ListType) pt).getElementType(), ((ListValue) pv).getOwnedListElements(), holder, defName, depth);
} else {
error(holder, prefix + "Assigning a list of values" + msg);
}
} else if (pv instanceof Operation || pv instanceof BooleanLiteral) {
if (!(pt instanceof AadlBoolean)) {
error(holder, prefix + "Assigning a Boolean value" + msg);
}
} else if (pv instanceof StringLiteral) {
if (!(pt instanceof AadlString)) {
error(prefix + "Assigning String value" + msg, holder, null, ValidationMessageAcceptor.INSIGNIFICANT_INDEX, Diagnostic.LINKING_DIAGNOSTIC);
}
} else if (pv instanceof EnumerationLiteral || (pv instanceof NamedValue && ((NamedValue) pv).getNamedValue() instanceof EnumerationLiteral)) {
if (!(pt instanceof EnumerationType)) {
error(holder, prefix + "Assigning Enumeration literal" + msg);
}
} else if (pv instanceof UnitLiteral || (pv instanceof NamedValue && ((NamedValue) pv).getNamedValue() instanceof UnitLiteral)) {
if (!(pt instanceof UnitsType)) {
error(holder, prefix + "Assigning Unit literal" + msg);
}
} else if (pv instanceof IntegerLiteral) {
if (!(pt instanceof AadlInteger)) {
error(holder, prefix + "Assigning Integer value" + msg);
} else if (checkUnits((AadlInteger) pt, (IntegerLiteral) pv, holder)) {
checkInRange((AadlInteger) pt, (IntegerLiteral) pv);
}
} else if (pv instanceof RealLiteral) {
if (!(pt instanceof AadlReal)) {
error(holder, prefix + "Assigning Real value" + msg);
} else if (checkUnits((AadlReal) pt, (RealLiteral) pv, holder)) {
checkInRange((AadlReal) pt, (RealLiteral) pv);
}
} else if (pv instanceof RangeValue) {
if (!(pt instanceof RangeType)) {
error(holder, prefix + "Assigning Range value" + msg);
} else {
typeCheckPropertyValues(((RangeType) pt).getNumberType(), ((RangeValue) pv).getMinimumValue(), holder, defName, depth);
typeCheckPropertyValues(((RangeType) pt).getNumberType(), ((RangeValue) pv).getMaximumValue(), holder, defName, depth);
typeCheckPropertyValues(((RangeType) pt).getNumberType(), ((RangeValue) pv).getDeltaValue(), holder, defName, depth);
}
} else if (pv instanceof ClassifierValue) {
if (!(pt instanceof ClassifierType)) {
error(holder, prefix + "Assigning incorrect Classifier value" + msg);
return;
}
ClassifierValue cv = (ClassifierValue) pv;
ClassifierType ct = (ClassifierType) pt;
if (ct.getClassifierReferences().isEmpty()) {
return;
}
for (MetaclassReference mcri : ct.getClassifierReferences()) {
if (mcri.getMetaclass() != null && mcri.getMetaclass().isSuperTypeOf(cv.getClassifier().eClass())) {
return;
}
}
error(holder, prefix + "Assigning classifier value with incorrect Classifier" + msg);
} else if (pv instanceof RecordValue) {
if (!(pt instanceof RecordType)) {
error(holder, prefix + "Assigning Record value" + msg);
} else {
typeMatchRecordFields(((RecordValue) pv).getOwnedFieldValues(), holder, defName, depth);
}
} else if (pv instanceof ReferenceValue) {
if (!(pt instanceof ReferenceType)) {
error(holder, prefix + "Assigning incorrect reference value" + msg);
} else {
ReferenceType ptrt = (ReferenceType) pt;
if (ptrt.getNamedElementReferences().isEmpty()) {
return;
}
ReferenceValue pvrv = (ReferenceValue) pv;
EList<ContainmentPathElement> cpes = pvrv.getContainmentPathElements();
if (!cpes.isEmpty()) {
NamedElement ne = cpes.get(cpes.size() - 1).getNamedElement();
for (MetaclassReference mcri : ptrt.getNamedElementReferences()) {
if (mcri.getMetaclass().isSuperTypeOf(ne.eClass())) {
return;
}
}
error(holder, prefix + "Assigning reference value with incorrect Named Element class" + msg);
}
}
} else if (pv instanceof NamedValue) {
AbstractNamedValue nv = ((NamedValue) pv).getNamedValue();
if (nv instanceof PropertyConstant) {
final PropertyConstant propertyConstant = (PropertyConstant) nv;
final PropertyType pct = propertyConstant.getPropertyType();
if (!Aadl2Util.isNull(pct) && !Aadl2Util.arePropertyTypesEqual(pt, pct)) {
final String expected = getTypeName(pt);
final String actual = getTypeName(pct);
if (actual != null) {
if (expected != null) {
error(holder, "Property value of type " + actual + "; expected type " + expected);
} else {
error(holder, "Propery value of type " + actual + " does not match expected type");
}
} else {
if (expected != null) {
error(holder, "Property value is not of expected type " + expected);
} else {
error(holder, "Propery value is not of expected type");
}
}
} else {
// Issue 2222: is this still really necessary?
typeCheckPropertyValues(pt, propertyConstant.getConstantValue(), holder, defName, depth);
}
} else if (nv instanceof Property) {
PropertyType pvt = ((Property) nv).getPropertyType();
if (!Aadl2Util.isNull(pvt)) {
if (pvt.eClass() != pt.eClass() || !Aadl2Util.arePropertyTypesEqual(pt, pvt)) {
final String expected = getTypeName(pt);
final String actual = getTypeName(pvt);
if (actual != null) {
if (expected != null) {
error(holder, "Property value of type " + actual + "; expected type " + expected);
} else {
error(holder, "Propery value of type " + actual + " does not match expected type");
}
} else {
if (expected != null) {
error(holder, "Property value is not of expected type " + expected);
} else {
error(holder, "Propery value is not of expected type");
}
}
}
}
} else {
error(holder, "Enum/Unit literal validation should have happened before");
}
}
}
use of org.geosdi.geoplatform.xml.wfs.v110.PropertyType in project osate2 by osate.
the class PropertiesValidator method checkPropertySetElementReferenceForPackageProperties.
public void checkPropertySetElementReferenceForPackageProperties(NamedElement pse, Element context) {
if (Aadl2Util.isNull(pse)) {
return;
}
PropertySet referenceNS = (PropertySet) AadlUtil.getContainingTopLevelNamespace(pse);
PackageSection containingPackageSection = EcoreUtil2.getContainerOfType(context, PackageSection.class);
if (containingPackageSection == null) {
AadlPackage aadlPackage = EcoreUtil2.getContainerOfType(context, AadlPackage.class);
EList<ModelUnit> importedPropertySets = null;
PackageSection packageSection = aadlPackage.getPublicSection();
if (packageSection == null) {
packageSection = aadlPackage.getPrivateSection();
}
if (packageSection != null) {
importedPropertySets = packageSection.getImportedUnits();
for (ModelUnit importedPropertySet : importedPropertySets) {
if (importedPropertySet instanceof PropertySet && !importedPropertySet.eIsProxy() && (importedPropertySet == referenceNS || (referenceNS.getQualifiedName().equalsIgnoreCase(importedPropertySet.getQualifiedName())))) {
return;
}
}
}
if (packageSection != null) {
error("The referenced property set '" + referenceNS.getName() + "' of " + (pse instanceof Property ? "property '" : (pse instanceof PropertyType ? "property type '" : "property constant '")) + pse.getName() + "' is not listed in a with clause.", context, null, MISSING_WITH, referenceNS.getName(), EcoreUtil.getURI(referenceNS).toString(), EcoreUtil.getURI(packageSection).toString());
} else {
error("The referenced property set '" + referenceNS.getName() + "' of " + (pse instanceof Property ? "property '" : (pse instanceof PropertyType ? "property type '" : "property constant '")) + pse.getName() + "' is not listed in a with clause.", context, null);
}
}
}
use of org.geosdi.geoplatform.xml.wfs.v110.PropertyType in project osate2 by osate.
the class Aadl2OccurrenceComputer method createAnnotationMap.
@Override
public Map<Annotation, Position> createAnnotationMap(XtextEditor editor, final ITextSelection selection, final SubMonitor monitor) {
final IXtextDocument document = editor.getDocument();
if (document != null) {
return document.tryReadOnly(new CancelableUnitOfWork<Map<Annotation, Position>, XtextResource>() {
@Override
public Map<Annotation, Position> exec(XtextResource resource, final CancelIndicator cancelIndicator) throws Exception {
EObject target = eObjectAtOffsetHelper.resolveElementAt(resource, selection.getOffset());
if (target != null && !target.eIsProxy()) {
final List<EObjectReferenceAndIndex> references = newArrayList();
IReferenceFinder.Acceptor acceptor = new IReferenceFinder.Acceptor() {
@Override
public void accept(IReferenceDescription reference) {
throw new UnsupportedOperationException("Local references are announced per object");
}
@Override
public void accept(EObject source, URI sourceURI, EReference eReference, int index, EObject targetOrProxy, URI targetURI) {
EObjectReferenceAndIndex acceptMe = new EObjectReferenceAndIndex();
acceptMe.source = source;
acceptMe.reference = eReference;
acceptMe.idx = index;
references.add(acceptMe);
}
};
Iterable<URI> targetURIs = getTargetURIs(target);
if (!(targetURIs instanceof TargetURIs)) {
TargetURIs result = targetURIsProvider.get();
result.addAllURIs(targetURIs);
targetURIs = result;
}
IProgressMonitor localMonitor = new NullProgressMonitor() {
@Override
public boolean isCanceled() {
return monitor.isCanceled() || cancelIndicator.isCanceled();
}
};
referenceFinder.findReferences((TargetURIs) targetURIs, resource, acceptor, localMonitor);
operationCanceledManager.checkCanceled(cancelIndicator);
Map<Annotation, Position> result = newHashMapWithExpectedSize(references.size() + 1);
if (target.eResource() == resource) {
if (!references.isEmpty() || canBeReferencedLocally(target)) {
ITextRegion declarationRegion = locationInFileProvider.getSignificantTextRegion(target);
addOccurrenceAnnotation(DECLARATION_ANNOTATION_TYPE, document, declarationRegion, result);
declarationRegion = ((Aadl2LocationInFile) locationInFileProvider).getSecondaryTextRegion(target, !(target instanceof ComponentImplementation));
if (declarationRegion != null) {
addOccurrenceAnnotation(OCCURRENCE_ANNOTATION_TYPE, document, declarationRegion, result);
if (target instanceof ComponentType) {
ModelUnit pkg = EcoreUtil2.getContainerOfType(target, ModelUnit.class);
for (ComponentImplementation impl : EcoreUtil2.getAllContentsOfType(pkg, ComponentImplementation.class)) {
if (impl.getType() == target) {
declarationRegion = ((Aadl2LocationInFile) locationInFileProvider).getSecondaryTextRegion(impl, true);
if (declarationRegion != null) {
addOccurrenceAnnotation(OCCURRENCE_ANNOTATION_TYPE, document, declarationRegion, result);
}
}
}
}
}
}
}
for (EObjectReferenceAndIndex highlightMe : references) {
try {
if (localMonitor.isCanceled()) {
return emptyMap();
}
ITextRegion textRegion = locationInFileProvider.getSignificantTextRegion(highlightMe.source, highlightMe.reference, highlightMe.idx);
if (target instanceof ComponentImplementation) {
ComponentImplementation impl = (ComponentImplementation) target;
textRegion = getAdjustedRegion(document, textRegion, impl.getImplementationName(), textRegion);
} else if (target instanceof ComponentType || target instanceof Property || target instanceof PropertyType || target instanceof PropertyConstant) {
NamedElement named = (NamedElement) target;
textRegion = getAdjustedRegion(document, textRegion, named.getName(), textRegion);
} else if (target instanceof ModelUnit) {
NamedElement named = (NamedElement) target;
textRegion = getAdjustedRegion(document, textRegion, named.getName(), null);
}
if (textRegion != null) {
addOccurrenceAnnotation(OCCURRENCE_ANNOTATION_TYPE, document, textRegion, result);
}
} catch (Exception exc) {
// outdated index information. Ignore
}
}
return result;
}
return emptyMap();
}
}, () -> emptyMap());
} else {
return emptyMap();
}
}
use of org.geosdi.geoplatform.xml.wfs.v110.PropertyType in project osate2 by osate.
the class PropertiesValidator method checkPropertyAssociation.
protected void checkPropertyAssociation(PropertyAssociation pa) {
// type check value against type
Property pdef = pa.getProperty();
checkPropertySetElementReferenceForPackageProperties(pdef, pa);
checkPropertySetElementReference(pdef, pa);
if (Aadl2Util.isNull(pdef)) {
return;
}
PropertyType pt = pdef.getPropertyType();
if (Aadl2Util.isNull(pt)) {
return;
}
EList<ModalPropertyValue> pvl = pa.getOwnedValues();
for (ModalPropertyValue modalPropertyValue : pvl) {
typeCheckPropertyValues(pt, modalPropertyValue.getOwnedValue(), modalPropertyValue.getOwnedValue(), pdef.getQualifiedName(), 0);
}
checkAssociationAppliesTo(pa);
checkInBinding(pa);
if (pa.getProperty() != null) {
if ("Byte_Count".equalsIgnoreCase(pa.getProperty().getName())) {
boolean offerQuickFix = true;
for (ModalPropertyValue modalPropertyValue : pvl) {
PropertyExpression pe = modalPropertyValue.getOwnedValue();
if (!(pe instanceof NumberValue)) {
offerQuickFix = false;
break;
}
}
if (offerQuickFix) {
warning("Byte_Count is deprecated. Please use Memory_Size.", pa, null, BYTE_COUNT_DEPRECATED);
} else {
warning(pa, "Byte_Count is deprecated. Please use Memory_Size.");
}
} else // } else
if ("Source_Code_Size".equalsIgnoreCase(pa.getProperty().getName())) {
warning("Source_Code_Size is deprecated. Please use Code_Size.", pa, null, SOURCE_CODE_SIZE_DEPRECATED);
} else if ("Source_Data_Size".equalsIgnoreCase(pa.getProperty().getName())) {
warning("Source_Data_Size is deprecated. Please use Data_Size.", pa, null, SOURCE_DATA_SIZE_DEPRECATED);
} else if ("Source_Heap_Size".equalsIgnoreCase(pa.getProperty().getName())) {
warning("Source_Heap_Size is deprecated. Please use Heap_Size.", pa, null, SOURCE_HEAP_SIZE_DEPRECATED);
} else if ("Source_Stack_Size".equalsIgnoreCase(pa.getProperty().getName())) {
warning("Source_Stack_Size is deprecated. Please use Stack_Size.", pa, null, SOURCE_STACK_SIZE_DEPRECATED);
} else if ("Data_Volume".equalsIgnoreCase(pa.getProperty().getName())) {
warning("Data_Volume is deprecated. Please use Data_Rate.", pa, null, DATA_VOLUME_DEPRECATED);
}
}
checkConstantProperty(pa);
}
Aggregations