X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.document.linking.ui%2Fsrc%2Forg%2Fsimantics%2Fdocument%2Flinking%2Fge%2FSourceObjectDropAction.java;h=663e630f7fe5131a9c74101bdf86dd945f483893;hp=818447c43616a3c880260e843e27f7c433159a5f;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hpb=24e2b34260f219f0d1644ca7a138894980e25b14 diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/SourceObjectDropAction.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/SourceObjectDropAction.java index 818447c43..663e630f7 100644 --- a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/SourceObjectDropAction.java +++ b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/SourceObjectDropAction.java @@ -1,91 +1,91 @@ -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(); - } - }); - } - } - }); - - } - }; - - } - - - - -} +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(); + } + }); + } + } + }); + + } + }; + + } + + + + +}