]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.ui/src/org/simantics/ui/selection/WorkbenchSelectionUtils.java
Provide classifications and datatype for Variable-based drag sources
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / selection / WorkbenchSelectionUtils.java
index 111ac8a3a2722b89b7945343830d059e2c3d82f5..e3e6eeafe9270432ab1a1a1dd984d8f8ea3d2306 100644 (file)
@@ -11,6 +11,7 @@ import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.simantics.Simantics;
+import org.simantics.databoard.type.Datatype;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.RequestProcessor;
 import org.simantics.db.Resource;
@@ -19,8 +20,8 @@ import org.simantics.db.common.primitiverequest.Supertypes;
 import org.simantics.db.common.primitiverequest.Types;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.request.PossibleGUID;
-import org.simantics.db.layer0.request.PossibleVariableGUID;
 import org.simantics.db.layer0.request.PossibleURI;
+import org.simantics.db.layer0.request.PossibleVariableGUID;
 import org.simantics.db.layer0.request.PossibleVariableRepresents;
 import org.simantics.db.layer0.request.VariableRead;
 import org.simantics.db.layer0.request.VariableURI;
@@ -108,12 +109,30 @@ public class WorkbenchSelectionUtils {
                if(var != null) {
                        String uri = processor.syncRequest(new VariableURI(var));
                        String guid = processor.syncRequest(new PossibleVariableGUID(var));
+                       
+                       Set<String> classifications = processor.syncRequest(new VariableRead<Set<String>>(var) {
+                               @Override
+                               public Set<String> perform(ReadGraph graph) throws DatabaseException {
+                                       return var.getClassifications(graph);
+                               }
+                       });
+                       String classificationsStr = toJSONStringArray(new ArrayList<>(classifications));
+                       
+                       Datatype datatype = processor.syncRequest(new VariableRead<Datatype>(var) {
+                               @Override
+                               public Datatype perform(ReadGraph graph) throws DatabaseException {
+                                       return var.getPossibleDatatype(graph);
+                               }
+                       });
+                       
                        return toJSONObjectString(
                                        "type", "\"Variable\"",
                                        "uri", safeQuotedString(uri),
                                        "guid", safeQuotedString(guid),
                                        "resourceId", res == null ? "" : Long.toString(res.getResourceId()),
-                                       "typeResources", typesStr);
+                                       "typeResources", typesStr,
+                                       "classifications", classificationsStr,
+                                       "datatype", safeQuotedString(datatype != null ? datatype.getClass().getName() : null));
                }
                if(res != null) {
                    String uri = processor.syncRequest(new PossibleURI(res));