1 package org.simantics.modeling.template2d.ui.function;
\r
3 import java.util.Vector;
\r
5 import org.simantics.databoard.Bindings;
\r
6 import org.simantics.db.ReadGraph;
\r
7 import org.simantics.db.Resource;
\r
8 import org.simantics.db.WriteGraph;
\r
9 import org.simantics.db.common.request.ReadRequest;
\r
10 import org.simantics.db.common.request.WriteRequest;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.db.layer0.variable.Variable;
\r
13 import org.simantics.db.layer0.variable.Variables;
\r
14 import org.simantics.diagram.function.PredefinedVariables;
\r
15 import org.simantics.diagram.stubs.DiagramResource;
\r
16 import org.simantics.image2.ontology.ImageResource;
\r
17 import org.simantics.modeling.template2d.ontology.Template2dResource;
\r
18 import org.simantics.project.ontology.ProjectResource;
\r
19 import org.simantics.simulation.ontology.SimulationResource;
\r
20 import org.simantics.utils.ui.dialogs.ShowMessage;
\r
22 public class LinkSVGImage {
\r
24 public static void linkSVGImage(WriteGraph graph, final Resource parent, final Resource child) {
\r
26 final String[] uri = {null};
\r
27 final String[] msg = {null};
\r
28 final String errmsg = "Creation of image reference failed. Activate an experiment and try to copy and paste an image again.";
\r
31 graph.syncRequest(new ReadRequest() {
\r
33 public void run(ReadGraph g) throws DatabaseException {
\r
34 if (parent == null || child == null) {
\r
38 //Layer0 L0 = Layer0.getInstance(g);
\r
39 ImageResource IMG = ImageResource.getInstance(g);
\r
40 if (!g.isInstanceOf(child, IMG.SvgImage)){
\r
45 Variable parentV = Variables.getVariable(g, parent);
\r
46 if (parentV == null){
\r
51 Vector<Variable> grandOfParent = new Vector<Variable>();
\r
52 Variable tmp = parentV;
\r
54 grandOfParent.add(0, tmp);
\r
55 tmp = tmp.getParent(g);
\r
57 while (tmp != null);
\r
59 // System.err.println(parentV.getURI(g));
\r
60 // String parentUri = parentV.getURI(g);
\r
62 Variable childV = Variables.getVariable(g, child);
\r
63 String childUri = null;
\r
64 if (childV == null){
\r
69 Vector<Variable> grandOfChild = new Vector<Variable>();
\r
72 grandOfChild.add(0, tmp);
\r
73 tmp = tmp.getParent(g);
\r
75 while (tmp != null);
\r
77 int k = -1; // index of the most nearest common parent
\r
78 int maxLen = (grandOfChild.size() < grandOfParent.size())? grandOfChild.size() : grandOfParent.size();
\r
79 for (int i = 0;i < maxLen; i++){
\r
80 if (grandOfChild.get(i).equals(grandOfParent.get(i)))
\r
85 if (k == -1) // no common parent
\r
90 //StructuralResource2 STR = StructuralResource2.getInstance(g);
\r
91 SimulationResource SIMU = SimulationResource.getInstance(g);
\r
92 ProjectResource PROJ = ProjectResource.getInstance(g);
\r
93 Template2dResource TEPLATE2D = Template2dResource.getInstance(g);
\r
94 Resource root = g.getRootLibrary();;
\r
95 Resource type = null;
\r
96 String predefined = null;
\r
97 Resource res = null;
\r
99 tmp = grandOfChild.get(k);
\r
100 res = tmp.getRepresents(g);
\r
101 if (res.equals(root)){
\r
102 predefined = PredefinedVariables.root;
\r
105 type = g.getPossibleType(res, SIMU.Model);
\r
107 predefined = PredefinedVariables.model;
\r
110 type = g.getPossibleType(res, PROJ.Project);
\r
112 predefined = PredefinedVariables.project;
\r
115 type = g.getPossibleType(res, TEPLATE2D.DrawingTemplate);
\r
117 predefined = PredefinedVariables.template;
\r
121 if (predefined == null) // no predefined common parent
\r
126 Variable resV = Variables.getVariable(g, res);
\r
127 String resUri = resV.getURI(g);
\r
129 childUri = childV.getURI(g);
\r
130 // System.err.println(childUri);
\r
132 Resource childModel = Variables.getModel(g, childV);
\r
133 Resource parentModel = Variables.getModel(g, parentV);
\r
134 if (childModel == null || parentModel == null){
\r
139 if (!parentModel.equals(childModel)){
\r
144 // Variable modelV = Variables.getVariable(g, childModel);
\r
145 // if (modelV == null){
\r
146 // msg[0] = errmsg[0];
\r
150 // String modelUri = modelV.getURI(g);
\r
152 if (childUri.startsWith(resUri)){
\r
153 uri[0] = childUri.substring(resUri.length());
\r
154 uri[0] = "pre:/" + predefined + uri[0];
\r
155 // System.err.println(uri);
\r
159 graph.syncRequest(new WriteRequest() {
\r
161 public void perform(WriteGraph g) throws DatabaseException {
\r
162 if (uri == null || parent == null){
\r
166 DiagramResource DIA = DiagramResource.getInstance(g);
\r
167 Template2dResource TEMPLATE2D = Template2dResource.getInstance(g);
\r
169 Resource var = g.getPossibleObject(parent, DIA.Scenegraph_SVGImage_document);
\r
171 msg[0] = "Creation of image reference failed. Only SVG images are supported for now.";
\r
175 g.claimLiteral(var, TEMPLATE2D.Profiles_VariableReference_path, uri[0] + "#data", Bindings.STRING);
\r
178 if (msg[0] != null){
\r
179 ShowMessage.showWarning("Warning", msg[0]);
\r
181 } catch (Exception e) {
\r
182 // TODO: handle exception
\r
183 e.printStackTrace();
\r