X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.document.ui%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Fui%2Factions%2FFolderDropAction.java;h=e5eef2e4aba93df661ffb52e3e46fb44292fd4cb;hb=e34fedee69a6f7e3ef2188a70d8be60f7d179c10;hp=3004919b4633913f3c74bb0913a873a479d9007d;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.document.ui/src/org/simantics/document/ui/actions/FolderDropAction.java b/bundles/org.simantics.document.ui/src/org/simantics/document/ui/actions/FolderDropAction.java index 3004919b4..e5eef2e4a 100644 --- a/bundles/org.simantics.document.ui/src/org/simantics/document/ui/actions/FolderDropAction.java +++ b/bundles/org.simantics.document.ui/src/org/simantics/document/ui/actions/FolderDropAction.java @@ -1,77 +1,77 @@ -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 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; - - } - -} +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 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; + + } + +}