X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2FcomponentTypeEditor%2FComponentTypeViewer.java;h=089d0bdbc649336b608829bacaf7d70e1927ba03;hp=38f24b4f7ddb53d8d7b6b3dafc84403c35042533;hb=0b4ab685b0aa54ba8fbe0a5742e27726c862cfd9;hpb=6fc013b9a70621230879014575b244f3714d5ba8 diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewer.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewer.java index 38f24b4f7..089d0bdbc 100644 --- a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewer.java +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/ComponentTypeViewer.java @@ -12,8 +12,6 @@ package org.simantics.modeling.ui.componentTypeEditor; import java.util.ArrayList; -import java.util.Collections; -import java.util.List; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.resource.JFaceResources; @@ -34,26 +32,19 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; import org.simantics.Simantics; -import org.simantics.browsing.ui.graph.impl.GetEnumerationValue; import org.simantics.databoard.Bindings; import org.simantics.databoard.binding.Binding; -import org.simantics.databoard.binding.error.BindingException; import org.simantics.databoard.type.Datatype; -import org.simantics.databoard.type.NumberType; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.NamedResource; -import org.simantics.db.common.request.IsEnumeratedValue; -import org.simantics.db.common.request.UniqueRead; -import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.util.Layer0Utils; import org.simantics.db.procedure.Listener; import org.simantics.db.request.Read; import org.simantics.layer0.Layer0; import org.simantics.modeling.ui.Activator; -import org.simantics.operation.Layer0X; -import org.simantics.structural.stubs.StructuralResource2; +import org.simantics.modeling.utils.ComponentTypePropertiesResult; +import org.simantics.modeling.utils.ComponentTypeViewerPropertyInfo; import org.simantics.utils.ui.ErrorLogger; import org.simantics.utils.ui.SWTUtils; @@ -167,94 +158,7 @@ public class ComponentTypeViewer { } private void createGraphListener() { - Simantics.getSession().asyncRequest(new UniqueRead() { - @Override - public ComponentTypePropertiesResult perform(ReadGraph graph) throws DatabaseException { - List result = new ArrayList<>(); - List 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 if (graph.sync(new IsEnumeratedValue(assertion))) { - defaultValue = GetEnumerationValue.getEnumerationValueName(graph, assertion); - } 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() { + Simantics.getSession().asyncRequest(new ComponentTypePropertiesResultRequest(this.data.componentType, this.sections), new Listener() { @Override public void execute(final ComponentTypePropertiesResult result) { SWTUtils.asyncExec(data.form.getDisplay(), new Runnable() { @@ -284,16 +188,6 @@ public class ComponentTypeViewer { }); } - protected Datatype getPossibleDatatype(ReadGraph graph, Resource literal) throws DatabaseException { - Binding binding = Bindings.getBindingUnchecked(Datatype.class); - for (Resource dataTypeResource : graph.getObjects(literal, Layer0.getInstance(graph).HasDataType)) { - Datatype dt = graph.getPossibleValue(dataTypeResource, binding); - if (dt != null) - return dt; - } - return null; - } - public void setFocus() { data.form.setFocus(); }