- Simantics.getSession().asyncRequest(new UniqueRead<ComponentTypePropertiesResult>() {
- @Override
- public ComponentTypePropertiesResult perform(ReadGraph graph) throws DatabaseException {
- List<ComponentTypeViewerPropertyInfo> result = new ArrayList<>();
- List<NamedResource> connectionPoints = new ArrayList<>();
- Layer0 L0 = Layer0.getInstance(graph);
- Layer0X L0X = Layer0X.getInstance(graph);
- StructuralResource2 STR = StructuralResource2.getInstance(graph);
-
- boolean typeIsImmutable = graph.isImmutable(data.componentType)
- || graph.hasStatement(data.componentType, STR.ComponentType_Locked)
- || Layer0Utils.isPublished(graph, data.componentType)
- || Layer0Utils.isContainerPublished(graph, data.componentType);
-
- for(Resource relation : graph.getObjects(data.componentType, L0.DomainOf)) {
- if(graph.isSubrelationOf(relation, L0.HasProperty)) {
- String name = graph.getRelatedValue(relation, L0.HasName);
- String type = graph.getPossibleRelatedValue(relation, L0.RequiresValueType);
- String label = graph.getPossibleRelatedValue(relation, L0.HasLabel);
- if (label == null)
- label = ""; //$NON-NLS-1$
- String description = graph.getPossibleRelatedValue(relation, L0.HasDescription);
- if (description == null)
- description = ""; //$NON-NLS-1$
- NumberType numberType = null;
- if(type == null)
- type = "Double"; //$NON-NLS-1$
- String unit = graph.getPossibleRelatedValue(relation, L0X.HasUnit, Bindings.STRING);
- String defaultValue = "0"; //$NON-NLS-1$
- String expression = null;
-
- for(Resource assertion : graph.getAssertedObjects(data.componentType, relation)) {
- try {
- expression = graph.getPossibleRelatedValue(assertion, L0.SCLValue_expression, Bindings.STRING);
- if(expression != null) {
- defaultValue = "=" + expression; //$NON-NLS-1$
- } else {
- Datatype dt = getPossibleDatatype(graph, assertion);
- if (dt == null)
- continue;
- if (dt instanceof NumberType)
- numberType = (NumberType) dt;
- Binding binding = Bindings.getBinding(dt);
- Object value = graph.getValue(assertion, binding);
- try {
- defaultValue = binding.toString(value, true);
- } catch (BindingException e) {
- ErrorLogger.defaultLogError(e);
- }
- }
- } catch(DatabaseException e) {
- ErrorLogger.defaultLogError(e);
- }
- }
-
- String valid = expression != null ? DerivedPropertiesSection.validateMonitorExpression(graph, data.componentType, relation, expression) : null;
-
- boolean immutable = typeIsImmutable || graph.isImmutable(relation);
- ComponentTypeViewerPropertyInfo info =
- new ComponentTypeViewerPropertyInfo(relation, name, type, defaultValue, numberType, unit, label, description, expression, valid, immutable);
-
- Object sectionSpecificData = null;
- double priority = Double.NEGATIVE_INFINITY;
- for(ComponentTypeViewerSection section : sections) {
- Object temp = section.getSectionSpecificData(graph, info);
- if(temp != null) {
- double sectionPriority = section.getDataPriority();
- if(sectionPriority > priority) {
- sectionSpecificData = temp;
- priority = sectionPriority;
- }
- }
- }
- info.sectionSpecificData = sectionSpecificData;
-
- result.add(info);
-
- } else if (graph.isInstanceOf(relation, STR.ConnectionRelation)) {
- NamedResource nr = new NamedResource(NameUtils.getSafeName(graph, relation), relation);
- connectionPoints.add(nr);
- }
- }
- Collections.sort(result);
- return new ComponentTypePropertiesResult(result, connectionPoints, typeIsImmutable);
- }
- }, new Listener<ComponentTypePropertiesResult>() {