-package org.simantics.document.linking.ge;\r
-\r
-import org.eclipse.jface.dialogs.MessageDialog;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.request.WriteRequest;\r
-import org.simantics.db.common.utils.NameUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.adapter.DropActionFactory;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.document.linking.ontology.DocumentLink;\r
-import org.simantics.document.linking.utils.SourceLinkUtil;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.ui.SimanticsUI;\r
-import org.simantics.utils.ui.AdaptionUtils;\r
-\r
-public class SourceObjectDropAction implements DropActionFactory {\r
- \r
- \r
- @Override\r
- public Runnable create(ReadGraph g, Object target, Object source, int operation)\r
- throws DatabaseException {\r
- Variable t = (Variable)target;\r
- Resource s = AdaptionUtils.adaptToSingle(source, Resource.class);\r
- if (s == null) {\r
- Variable sv = AdaptionUtils.adaptToSingle(source, Variable.class);\r
- if (sv != null)\r
- s = sv.getRepresents(g);\r
- }\r
-\r
- if(t == null || s == null)\r
- return null;\r
- DocumentLink sl = DocumentLink.getInstance(g);\r
- if (g.isInstanceOf(s, sl.Source)) {\r
- return null;\r
- }\r
- return getRunnable(t, s);\r
- }\r
- \r
- private Runnable getRunnable(final Variable tv, final Resource s) {\r
- return new Runnable() {\r
- \r
- @Override\r
- public void run() {\r
- SimanticsUI.getSession().asyncRequest(new WriteRequest() {\r
- \r
- @Override\r
- public void perform(WriteGraph graph) throws DatabaseException {\r
- Layer0 l0 = Layer0.getInstance(graph);\r
- \r
- Resource relation = tv.getPossiblePredicateResource(graph);\r
- Resource instance; \r
- if (relation != null && graph.isInstanceOf(relation, l0.FunctionalRelation)) {\r
- instance = tv.getParent(graph).getPossibleRepresents(graph);\r
- } else {\r
- instance = tv.getPossibleRepresents(graph);\r
- }\r
- if (instance == null)\r
- return;\r
- \r
- try {\r
- SourceLinkUtil.createDocumentLink(graph, instance, relation, s);\r
- } catch (final DatabaseException e) {\r
- String l = NameUtils.getSafeLabel(graph, s);\r
- if (l.length() == 0)\r
- l = NameUtils.getSafeName(graph, s);\r
- final String label = l;\r
- Display.getDefault().asyncExec(new Runnable() {\r
- \r
- @Override\r
- public void run() {\r
- String dialogMessage = "Cannot create document link to \"" + label +"\":" + e.getMessage();\r
- MessageDialog dialog = new MessageDialog(Display.getCurrent().getActiveShell(), "Document Link", null, dialogMessage, MessageDialog.INFORMATION, new String[]{"OK"}, 0); \r
- dialog.open();\r
- }\r
- });\r
- }\r
- }\r
- });\r
- \r
- }\r
- };\r
- \r
- }\r
- \r
- \r
- \r
- \r
-}\r
+package org.simantics.document.linking.ge;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.request.WriteRequest;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.adapter.DropActionFactory;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.document.linking.ontology.DocumentLink;
+import org.simantics.document.linking.utils.SourceLinkUtil;
+import org.simantics.layer0.Layer0;
+import org.simantics.ui.SimanticsUI;
+import org.simantics.utils.ui.AdaptionUtils;
+
+public class SourceObjectDropAction implements DropActionFactory {
+
+
+ @Override
+ public Runnable create(ReadGraph g, Object target, Object source, int operation)
+ throws DatabaseException {
+ Variable t = (Variable)target;
+ Resource s = AdaptionUtils.adaptToSingle(source, Resource.class);
+ if (s == null) {
+ Variable sv = AdaptionUtils.adaptToSingle(source, Variable.class);
+ if (sv != null)
+ s = sv.getRepresents(g);
+ }
+
+ if(t == null || s == null)
+ return null;
+ DocumentLink sl = DocumentLink.getInstance(g);
+ if (g.isInstanceOf(s, sl.Source)) {
+ return null;
+ }
+ return getRunnable(t, s);
+ }
+
+ private Runnable getRunnable(final Variable tv, final Resource s) {
+ return new Runnable() {
+
+ @Override
+ public void run() {
+ SimanticsUI.getSession().asyncRequest(new WriteRequest() {
+
+ @Override
+ public void perform(WriteGraph graph) throws DatabaseException {
+ Layer0 l0 = Layer0.getInstance(graph);
+
+ Resource relation = tv.getPossiblePredicateResource(graph);
+ Resource instance;
+ if (relation != null && graph.isInstanceOf(relation, l0.FunctionalRelation)) {
+ instance = tv.getParent(graph).getPossibleRepresents(graph);
+ } else {
+ instance = tv.getPossibleRepresents(graph);
+ }
+ if (instance == null)
+ return;
+
+ try {
+ SourceLinkUtil.createDocumentLink(graph, instance, relation, s);
+ } catch (final DatabaseException e) {
+ String l = NameUtils.getSafeLabel(graph, s);
+ if (l.length() == 0)
+ l = NameUtils.getSafeName(graph, s);
+ final String label = l;
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ String dialogMessage = "Cannot create document link to \"" + label +"\":" + e.getMessage();
+ MessageDialog dialog = new MessageDialog(Display.getCurrent().getActiveShell(), "Document Link", null, dialogMessage, MessageDialog.INFORMATION, new String[]{"OK"}, 0);
+ dialog.open();
+ }
+ });
+ }
+ }
+ });
+
+ }
+ };
+
+ }
+
+
+
+
+}