X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.template2d.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Ftemplate2d%2Fui%2Ffunction%2FLinkSVGImage.java;h=aa0527f80fd082622ded42dde092681d9c15dd5f;hb=f496d2407d0f78557e323986a04eb2b3020d4eff;hp=912c74f68d4e439b67107e55abf4008357174d8b;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/function/LinkSVGImage.java b/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/function/LinkSVGImage.java index 912c74f68..aa0527f80 100644 --- a/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/function/LinkSVGImage.java +++ b/bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/function/LinkSVGImage.java @@ -1,189 +1,189 @@ -package org.simantics.modeling.template2d.ui.function; - -import java.util.Vector; - -import org.simantics.databoard.Bindings; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.WriteGraph; -import org.simantics.db.common.request.ReadRequest; -import org.simantics.db.common.request.WriteRequest; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.Variable; -import org.simantics.db.layer0.variable.Variables; -import org.simantics.diagram.function.PredefinedVariables; -import org.simantics.diagram.stubs.DiagramResource; -import org.simantics.image2.ontology.ImageResource; -import org.simantics.modeling.template2d.ontology.Template2dResource; -import org.simantics.project.ontology.ProjectResource; -import org.simantics.simulation.ontology.SimulationResource; -import org.simantics.utils.ui.dialogs.ShowMessage; - -public class LinkSVGImage { - - public static void linkSVGImage(WriteGraph graph, final Resource parent, final Resource child) { - - final String[] uri = {null}; - final String[] msg = {null}; - final String errmsg = "Creation of image reference failed. Activate an experiment and try to copy and paste an image again."; - - try { - graph.syncRequest(new ReadRequest() { - @Override - public void run(ReadGraph g) throws DatabaseException { - if (parent == null || child == null) { - msg[0] = errmsg; - return; - } - //Layer0 L0 = Layer0.getInstance(g); - ImageResource IMG = ImageResource.getInstance(g); - if (!g.isInstanceOf(child, IMG.SvgImage)){ - msg[0] = errmsg; - return; - } - - Variable parentV = Variables.getVariable(g, parent); - if (parentV == null){ - msg[0] = errmsg; - return; - } - - Vector grandOfParent = new Vector(); - Variable tmp = parentV; - do { - grandOfParent.add(0, tmp); - tmp = tmp.getParent(g); - } - while (tmp != null); - -// System.err.println(parentV.getURI(g)); -// String parentUri = parentV.getURI(g); - - Variable childV = Variables.getVariable(g, child); - String childUri = null; - if (childV == null){ - msg[0] = errmsg; - return; - } - - Vector grandOfChild = new Vector(); - tmp = childV; - do { - grandOfChild.add(0, tmp); - tmp = tmp.getParent(g); - } - while (tmp != null); - - int k = -1; // index of the most nearest common parent - int maxLen = (grandOfChild.size() < grandOfParent.size())? grandOfChild.size() : grandOfParent.size(); - for (int i = 0;i < maxLen; i++){ - if (grandOfChild.get(i).equals(grandOfParent.get(i))) - k++; - else - break; - } - if (k == -1) // no common parent - { - msg[0] = errmsg; - return; - } - //StructuralResource2 STR = StructuralResource2.getInstance(g); - SimulationResource SIMU = SimulationResource.getInstance(g); - ProjectResource PROJ = ProjectResource.getInstance(g); - Template2dResource TEPLATE2D = Template2dResource.getInstance(g); - Resource root = g.getRootLibrary();; - Resource type = null; - String predefined = null; - Resource res = null; - for (;k >= 0;k--){ - tmp = grandOfChild.get(k); - res = tmp.getRepresents(g); - if (res.equals(root)){ - predefined = PredefinedVariables.root; - break; - } - type = g.getPossibleType(res, SIMU.Model); - if (type != null){ - predefined = PredefinedVariables.model; - break; - } - type = g.getPossibleType(res, PROJ.Project); - if (type != null){ - predefined = PredefinedVariables.project; - break; - } - type = g.getPossibleType(res, TEPLATE2D.DrawingTemplate); - if (type != null){ - predefined = PredefinedVariables.template; - break; - } - } - if (predefined == null) // no predefined common parent - { - msg[0] = errmsg; - return; - } - Variable resV = Variables.getVariable(g, res); - String resUri = resV.getURI(g); - - childUri = childV.getURI(g); -// System.err.println(childUri); - - Resource childModel = Variables.getModel(g, childV); - Resource parentModel = Variables.getModel(g, parentV); - if (childModel == null || parentModel == null){ - msg[0] = errmsg; - return; - } - - if (!parentModel.equals(childModel)){ - msg[0] = errmsg; - return; - } - -// Variable modelV = Variables.getVariable(g, childModel); -// if (modelV == null){ -// msg[0] = errmsg[0]; -// return; -// } -// -// String modelUri = modelV.getURI(g); - - if (childUri.startsWith(resUri)){ - uri[0] = childUri.substring(resUri.length()); - uri[0] = "pre:/" + predefined + uri[0]; -// System.err.println(uri); - } - } - }); - graph.syncRequest(new WriteRequest() { - @Override - public void perform(WriteGraph g) throws DatabaseException { - if (uri == null || parent == null){ - msg[0] = errmsg; - return; - } - DiagramResource DIA = DiagramResource.getInstance(g); - Template2dResource TEMPLATE2D = Template2dResource.getInstance(g); - - Resource var = g.getPossibleObject(parent, DIA.Scenegraph_SVGImage_document); - if (var == null){ - msg[0] = "Creation of image reference failed. Only SVG images are supported for now."; - return; - } - - g.claimLiteral(var, TEMPLATE2D.Profiles_VariableReference_path, uri[0] + "#data", Bindings.STRING); - } - }); - if (msg[0] != null){ - ShowMessage.showWarning("Warning", msg[0]); - } - } catch (Exception e) { - // TODO: handle exception - e.printStackTrace(); - } - - } - - +package org.simantics.modeling.template2d.ui.function; + +import java.util.Vector; + +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.ReadRequest; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.diagram.function.PredefinedVariables; +import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.image2.ontology.ImageResource; +import org.simantics.modeling.template2d.ontology.Template2dResource; +import org.simantics.project.ontology.ProjectResource; +import org.simantics.simulation.ontology.SimulationResource; +import org.simantics.utils.ui.dialogs.ShowMessage; + +public class LinkSVGImage { + + public static void linkSVGImage(WriteGraph graph, final Resource parent, final Resource child) { + + final String[] uri = {null}; + final String[] msg = {null}; + final String errmsg = "Creation of image reference failed. Activate an experiment and try to copy and paste an image again."; + + try { + graph.syncRequest(new ReadRequest() { + @Override + public void run(ReadGraph g) throws DatabaseException { + if (parent == null || child == null) { + msg[0] = errmsg; + return; + } + //Layer0 L0 = Layer0.getInstance(g); + ImageResource IMG = ImageResource.getInstance(g); + if (!g.isInstanceOf(child, IMG.SvgImage)){ + msg[0] = errmsg; + return; + } + + Variable parentV = Variables.getVariable(g, parent); + if (parentV == null){ + msg[0] = errmsg; + return; + } + + Vector grandOfParent = new Vector(); + Variable tmp = parentV; + do { + grandOfParent.add(0, tmp); + tmp = tmp.getParent(g); + } + while (tmp != null); + +// System.err.println(parentV.getURI(g)); +// String parentUri = parentV.getURI(g); + + Variable childV = Variables.getVariable(g, child); + String childUri = null; + if (childV == null){ + msg[0] = errmsg; + return; + } + + Vector grandOfChild = new Vector(); + tmp = childV; + do { + grandOfChild.add(0, tmp); + tmp = tmp.getParent(g); + } + while (tmp != null); + + int k = -1; // index of the most nearest common parent + int maxLen = (grandOfChild.size() < grandOfParent.size())? grandOfChild.size() : grandOfParent.size(); + for (int i = 0;i < maxLen; i++){ + if (grandOfChild.get(i).equals(grandOfParent.get(i))) + k++; + else + break; + } + if (k == -1) // no common parent + { + msg[0] = errmsg; + return; + } + //StructuralResource2 STR = StructuralResource2.getInstance(g); + SimulationResource SIMU = SimulationResource.getInstance(g); + ProjectResource PROJ = ProjectResource.getInstance(g); + Template2dResource TEPLATE2D = Template2dResource.getInstance(g); + Resource root = g.getRootLibrary();; + Resource type = null; + String predefined = null; + Resource res = null; + for (;k >= 0;k--){ + tmp = grandOfChild.get(k); + res = tmp.getRepresents(g); + if (res.equals(root)){ + predefined = PredefinedVariables.root; + break; + } + type = g.getPossibleType(res, SIMU.Model); + if (type != null){ + predefined = PredefinedVariables.model; + break; + } + type = g.getPossibleType(res, PROJ.Project); + if (type != null){ + predefined = PredefinedVariables.project; + break; + } + type = g.getPossibleType(res, TEPLATE2D.DrawingTemplate); + if (type != null){ + predefined = PredefinedVariables.template; + break; + } + } + if (predefined == null) // no predefined common parent + { + msg[0] = errmsg; + return; + } + Variable resV = Variables.getVariable(g, res); + String resUri = resV.getURI(g); + + childUri = childV.getURI(g); +// System.err.println(childUri); + + Resource childModel = Variables.getModel(g, childV); + Resource parentModel = Variables.getModel(g, parentV); + if (childModel == null || parentModel == null){ + msg[0] = errmsg; + return; + } + + if (!parentModel.equals(childModel)){ + msg[0] = errmsg; + return; + } + +// Variable modelV = Variables.getVariable(g, childModel); +// if (modelV == null){ +// msg[0] = errmsg[0]; +// return; +// } +// +// String modelUri = modelV.getURI(g); + + if (childUri.startsWith(resUri)){ + uri[0] = childUri.substring(resUri.length()); + uri[0] = "pre:/" + predefined + uri[0]; +// System.err.println(uri); + } + } + }); + graph.syncRequest(new WriteRequest() { + @Override + public void perform(WriteGraph g) throws DatabaseException { + if (uri == null || parent == null){ + msg[0] = errmsg; + return; + } + DiagramResource DIA = DiagramResource.getInstance(g); + Template2dResource TEMPLATE2D = Template2dResource.getInstance(g); + + Resource var = g.getPossibleObject(parent, DIA.Scenegraph_SVGImage_document); + if (var == null){ + msg[0] = "Creation of image reference failed. Only SVG images are supported for now."; + return; + } + + g.claimLiteral(var, TEMPLATE2D.Profiles_VariableReference_path, uri[0] + "#data", Bindings.STRING); + } + }); + if (msg[0] != null){ + ShowMessage.showWarning("Warning", msg[0]); + } + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } + + } + + } \ No newline at end of file