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;
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;
}
private void createGraphListener() {
- 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 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<ComponentTypePropertiesResult>() {
+ Simantics.getSession().asyncRequest(new ComponentTypePropertiesResultRequest(this.data.componentType, this.sections), new Listener<ComponentTypePropertiesResult>() {
@Override
public void execute(final ComponentTypePropertiesResult result) {
SWTUtils.asyncExec(data.form.getDisplay(), new Runnable() {
});
}
- 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();
}