-package org.simantics.document.ui.actions;\r
-\r
-import java.util.List;\r
-\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.exception.DatabaseException;\r
-import org.simantics.db.layer0.SelectionHints;\r
-import org.simantics.db.layer0.adapter.DropActionFactory;\r
-import org.simantics.document.DocumentResource;\r
-import org.simantics.ui.SimanticsUI;\r
-import org.simantics.utils.ui.ISelectionUtils;\r
-\r
-public class FolderDropAction implements DropActionFactory {\r
- \r
- private Resource folderType;\r
- private Resource relation;\r
- private Resource inverse;\r
- \r
- public FolderDropAction(ReadGraph graph, String folderUri, String relationUri) throws DatabaseException {\r
- folderType = graph.getResource(folderUri);\r
- relation = graph.getResource(relationUri);\r
- inverse = graph.getPossibleInverse(relation);\r
- }\r
- \r
- @Override\r
- public Runnable create(ReadGraph g, Object target, Object source, int operation) throws DatabaseException {\r
- final Resource lib = ISelectionUtils.getSinglePossibleKey(target, SelectionHints.KEY_MAIN, Resource.class);\r
-\r
- if (lib == null)\r
- return null;\r
-\r
- final List<Resource> selections = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, Resource.class);\r
-\r
- if (selections.isEmpty()) {\r
- return null;\r
- }\r
- if (!g.isInstanceOf(lib, folderType))\r
- return null;\r
- DocumentResource doc = DocumentResource.getInstance(g);\r
- for (Resource r : selections) {\r
- if (!g.isInstanceOf(r, doc.Document))\r
- return null;\r
- }\r
- Runnable runnable = 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
- \r
- for (Resource r : selections) {\r
- if (!graph.hasStatement(lib,relation,r)) {\r
- if (inverse != null) {\r
- // check if moved document is children of another document (tree revisions)\r
- // if it is, prevent moving it.\r
- Resource r2 = graph.getPossibleObject(r, inverse);\r
- if (r2 != null && !graph.isInstanceOf(r2, folderType))\r
- continue;\r
- graph.deny(r,inverse);\r
- }\r
- graph.claim(lib, relation,r);\r
- }\r
- }\r
- }\r
- });\r
- }\r
- };\r
- return runnable;\r
- \r
- }\r
-\r
-}\r
+package org.simantics.document.ui.actions;
+
+import java.util.List;
+
+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.exception.DatabaseException;
+import org.simantics.db.layer0.SelectionHints;
+import org.simantics.db.layer0.adapter.DropActionFactory;
+import org.simantics.document.DocumentResource;
+import org.simantics.ui.SimanticsUI;
+import org.simantics.utils.ui.ISelectionUtils;
+
+public class FolderDropAction implements DropActionFactory {
+
+ private Resource folderType;
+ private Resource relation;
+ private Resource inverse;
+
+ public FolderDropAction(ReadGraph graph, String folderUri, String relationUri) throws DatabaseException {
+ folderType = graph.getResource(folderUri);
+ relation = graph.getResource(relationUri);
+ inverse = graph.getPossibleInverse(relation);
+ }
+
+ @Override
+ public Runnable create(ReadGraph g, Object target, Object source, int operation) throws DatabaseException {
+ final Resource lib = ISelectionUtils.getSinglePossibleKey(target, SelectionHints.KEY_MAIN, Resource.class);
+
+ if (lib == null)
+ return null;
+
+ final List<Resource> selections = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, Resource.class);
+
+ if (selections.isEmpty()) {
+ return null;
+ }
+ if (!g.isInstanceOf(lib, folderType))
+ return null;
+ DocumentResource doc = DocumentResource.getInstance(g);
+ for (Resource r : selections) {
+ if (!g.isInstanceOf(r, doc.Document))
+ return null;
+ }
+ Runnable runnable = new Runnable() {
+
+ @Override
+ public void run() {
+ SimanticsUI.getSession().asyncRequest(new WriteRequest() {
+
+ @Override
+ public void perform(WriteGraph graph) throws DatabaseException {
+
+ for (Resource r : selections) {
+ if (!graph.hasStatement(lib,relation,r)) {
+ if (inverse != null) {
+ // check if moved document is children of another document (tree revisions)
+ // if it is, prevent moving it.
+ Resource r2 = graph.getPossibleObject(r, inverse);
+ if (r2 != null && !graph.isInstanceOf(r2, folderType))
+ continue;
+ graph.deny(r,inverse);
+ }
+ graph.claim(lib, relation,r);
+ }
+ }
+ }
+ });
+ }
+ };
+ return runnable;
+
+ }
+
+}