From 23478ecdd6598109a162539a96003d6302504aab Mon Sep 17 00:00:00 2001 From: miettinen Date: Fri, 25 Oct 2013 06:25:53 +0000 Subject: [PATCH] Export model and export model as... buttons to Sysdyn (refs #4487). git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@28117 ac1ea38d-2e2b-0410-8846-a27921b304fc --- org.simantics.sysdyn.ontology/graph.tg | Bin 155646 -> 155992 bytes .../graph/Sysdyn.pgraph | 2 + .../org/simantics/sysdyn/SysdynResource.java | 12 ++ org.simantics.sysdyn.ui/icons/save_as.png | Bin 0 -> 613 bytes org.simantics.sysdyn.ui/plugin.xml | 124 ++++++++--- .../sysdyn/ui/browser/nodes/ExportTester.java | 110 ++++++++++ .../exports/ExportModelAsButtonHandler.java | 43 ++++ .../exports/ExportModelButtonHandler.java | 135 ++++++++++++ .../handlers/exports/ExportModelHandler.java | 200 ++++++++++++++---- .../ResourceSelectionProcessor.java | 2 + 10 files changed, 557 insertions(+), 71 deletions(-) create mode 100644 org.simantics.sysdyn.ui/icons/save_as.png create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/ExportTester.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelAsButtonHandler.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelButtonHandler.java diff --git a/org.simantics.sysdyn.ontology/graph.tg b/org.simantics.sysdyn.ontology/graph.tg index 0ee27c2dec0a744b43c45953d589653eb722a732..17eab9a3c4491791d58cd0ddfcbc86aac5f97fc8 100644 GIT binary patch literal 155992 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 literal 155646 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 diff --git a/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph b/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph index f180d4f1..fa30152a 100644 --- a/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph +++ b/org.simantics.sysdyn.ontology/graph/Sysdyn.pgraph @@ -47,6 +47,8 @@ SYSDYN.SysdynModel -- SYSDYN.SysdynModel.variableFilter --> L0.String -- SYSDYN.SysdynModel.fmuFile --> L0.ByteArray -- SYSDYN.SysdynModel.timeUnit --> L0.String -- SYSDYN.SysdynModel.lastExportFileName --> L0.String -- SYSDYN.SysdynModel.lastExportFilePath --> L0.String -- SYSDYN.SysdynModel.exeFile --> L0.ByteArray 31nDB~E>42Z3PN!# z1&i7gK?+Kt3WBu82yLxR(kAcS`yGc2wn>@~E|>Fh`0<_NF5R1dd}_3KIhajLN*4!PAHKHK@>1KIR(|}|ZYKF4Nm8S2THDO^^4%|8 zzdyf7*A#NEskM!aGvg87=Pa&lP#Pb?r4h}x*lKvT8y;^3ge&&|Oo~m$US`N(q?m9d zjd8$k%LoP%{NB#+KF|XI5jn@(r zaGl~XGfcuvoIM#MvpyFHd=OC_6CrR8GvS=!B5)=m0(qXJ{uhWW50uZ1Fgi4X1585u z-k-(}pTBSRkKi1%y|{9IjOWXDNaG^7|As8IxIOihrIqR-5gf=mnJ-M-B#sIP48c4; zczhm^4k>Z$Sj>rG$MEnTg(x{-@bVlVDv-v8L@!{cnZ15C`{m+`H#!};36LRK=eGb# z@nM$wZkx7OwHx5N7xjAmTAt@K07;U}01VPSfc5qD#Y&|z4NxwZmjDLoLN}mVttJZ# z3l3m%axwuJqluD%s0E6^DE(uV0ihF)y00000NkvXXu0mjfq;dlM literal 0 HcmV?d00001 diff --git a/org.simantics.sysdyn.ui/plugin.xml b/org.simantics.sysdyn.ui/plugin.xml index 0c03ed70..69b129a7 100644 --- a/org.simantics.sysdyn.ui/plugin.xml +++ b/org.simantics.sysdyn.ui/plugin.xml @@ -21,7 +21,7 @@ icon="platform:/plugin/com.famfamfam.silk/icons/plugin.png" id="org.simantics.sysdyn.ui.diagramViewer" matchingStrategy="org.simantics.ui.workbench.editor.input.ResourceEditorInputMatchingStrategy" - name="System dynamic diagram viewer"> + name="System Dynamic Diagram Viewer"> + name="Modelica Code Viewer"> + name="System Dynamics"> + name="Playback Experiment"> + name="Game Experiment"> + name="Sensitivity Analysis Experiment"> + + + + + + + icon="platform:/plugin/com.famfamfam.silk/icons/table_save.png" + id="org.simantics.sysdyn.ui.save.button" + label="Save Results"> @@ -334,7 +348,7 @@ hoverIcon="platform:/plugin/com.famfamfam.silk/icons/control_play_blue.png" icon="platform:/plugin/com.famfamfam.silk/icons/control_play.png" id="org.simantics.sysdyn.ui.playback.button" - label="Start playback" + label="Start Playback" style="pulldown" tooltip="Start playback"> @@ -550,7 +564,7 @@ + name="Export To PNG"> + name="Export To SVG"> + name="Paste Special"> + name="Show In Charts"> + name="Show In Charts"> + name="Export Model"> + name="Import Model"> + + + + @@ -1655,6 +1677,7 @@ + - - + + + + @@ -1854,6 +1879,46 @@ class="org.simantics.sysdyn.ui.handlers.FindReplaceHandler" commandId="org.eclipse.ui.edit.findReplace"> + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2276,6 +2341,13 @@ properties="nodeClass" type="org.eclipse.jface.viewers.IStructuredSelection"> + + @@ -2286,12 +2358,12 @@ --> @@ -2369,7 +2441,7 @@ + label="System Dynamics Ontology Dependencies"> + name="Import Vensim Model (.mdl)"> a = AdaptionUtils.adaptToCollection(receiver, AbstractNode.class); + if (a.size() > 1) // Multiple selections. + return false; + if (a.size() == 1) + inputResource = (Resource)a.iterator().next().data; + } + if (inputResource == null) { + DiagramEditor editor = null; + IWorkbench workbench = PlatformUI.getWorkbench(); + IWorkbenchWindow[] windows = workbench.getWorkbenchWindows(); + // To ask for the active window doesn't work, so browse through all + // windows and when an active editor is found, use that + for (IWorkbenchWindow window : windows) { + IWorkbenchPage page = window.getActivePage(); + if (page != null) { + try { + editor = (DiagramEditor)page.getActiveEditor(); + if (editor != null) + // Found one + break; + } catch (ClassCastException e) { + continue; + } + } + } + if (editor != null) { + if (editor instanceof DiagramEditor) { + inputResource = editor.getInputResource(); + } + } else { + return false; + } + } + final Resource resource = inputResource; + + Session session = SimanticsUI.peekSession(); + if (session == null) + return false; + + if (DatabaseJob.inProgress()) + return false; + + // Check if we can get the model of the resource. + try { + return session.syncRequest(new Read() { + @Override + public Boolean perform(ReadGraph g) throws DatabaseException { + if (g.sync(new PossibleModel(resource)) != null) { + return true; + } + return false; + } + }); + } catch (DatabaseException e) { + // Purposefully not logging these exceptions, there might be way too + // many even under normal circumstances. + // TODO: add debug tracing options controlling the printing of these exceptions + return false; + } + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelAsButtonHandler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelAsButtonHandler.java new file mode 100644 index 00000000..57a6cb42 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelAsButtonHandler.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2010 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.handlers.exports; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.simantics.db.Resource; + +/** + * Exports a selected model asking the location. + * Model determination is based on any resource of the model. + * + * @author Tuomas Miettinen + * + */ +public class ExportModelAsButtonHandler extends ExportModelButtonHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + final Resource model = determineModel(event); + if (model == null) + return null; + + String selected = getAbsolutePath(model, event, true); + + if (selected != null) + createFile(model, selected); + + return null; + } + +} + diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelButtonHandler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelButtonHandler.java new file mode 100644 index 00000000..bb6388ca --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelButtonHandler.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2010 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.handlers.exports; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.handlers.HandlerUtil; +import org.simantics.browsing.ui.common.node.AbstractNode; +import org.simantics.browsing.ui.platform.PropertyPageView; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.request.PossibleModel; +import org.simantics.db.request.Read; +import org.simantics.modeling.ui.diagramEditor.DiagramEditor; +import org.simantics.ui.SimanticsUI; +import org.simantics.ui.utils.ResourceAdaptionUtils; +import org.simantics.utils.ui.AdaptionUtils; + +/** + * Exports a selected model without asking the location. + * Model determination is based on any resource of the model. + * + * @author Tuomas Miettinen + * + */ +public class ExportModelButtonHandler extends ExportModelHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + final Resource model = determineModel(event); + if (model == null) + return null; + + String selected = getAbsolutePath(model, event, false); + + if (selected != null) + createFile(model, selected); + + return null; + } + + @Override + protected Resource determineModel(ExecutionEvent event) { + ISelection sel = HandlerUtil.getCurrentSelection(event); + if (sel == null) { + // No selection, this is true e.g. in PropertyPageView + IWorkbenchPart activePart = HandlerUtil.getActivePart(event); + // In such a case get the selection the PropertyPageView point to. + if (activePart instanceof PropertyPageView) + sel = ((PropertyPageView)activePart).getLastSelection(); + } + + // Get the Resource of the selection + Resource inputResource = ResourceAdaptionUtils.toSingleResource(sel); + if (inputResource == null) { + // Coner case for when export is called when some folder in model browser is selected. + if (sel instanceof IStructuredSelection) { + IStructuredSelection iss = (IStructuredSelection) sel; + if (iss.size() == 1) { + Object element = iss.getFirstElement(); + AbstractNode a = AdaptionUtils.adaptToSingle(element, AbstractNode.class); + if (a != null) + inputResource = (Resource)a.data; + } + } + } + + // When the selection doesn't have a resource, use the currently active diagram. + if (inputResource == null) { + DiagramEditor editor = null; + IWorkbench workbench = PlatformUI.getWorkbench(); + IWorkbenchWindow[] windows = workbench.getWorkbenchWindows(); + // To ask for the active window doesn't work, so browse through all + // windows and when an active editor is found, use that + for (IWorkbenchWindow window : windows) { + IWorkbenchPage page = window.getActivePage(); + if (page != null) { + try { + editor = (DiagramEditor)page.getActiveEditor(); + if (editor != null) + // Found one + break; + } catch (ClassCastException e) { + continue; + } + } + } + if (editor != null && editor instanceof DiagramEditor) { + inputResource = editor.getInputResource(); + } else { + return null; + } + } + + // Now that we finally have determined which Resource is selected, we just need + // to get the model of that Resource. + Resource model; + final Resource resource = inputResource; + try { + model = SimanticsUI.getSession().syncRequest(new Read() { + + @Override + public Resource perform(ReadGraph graph) throws DatabaseException { + return graph.sync(new PossibleModel(resource)); + } + + }); + if(model == null) return null; + } catch (DatabaseException e1) { + e1.printStackTrace(); + return null; + } + return model; + } + +} + diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelHandler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelHandler.java index 8d2ec6d2..ee0efbb9 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelHandler.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelHandler.java @@ -26,8 +26,10 @@ import org.eclipse.ui.handlers.HandlerUtil; 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.primitiverequest.PossibleRelatedValue; 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.adapter.SubgraphExtent.ExtentStatus; import org.simantics.db.layer0.util.ModelTransferableGraphSourceRequest; @@ -36,6 +38,7 @@ import org.simantics.db.request.Read; import org.simantics.graph.db.TransferableGraphSource; import org.simantics.graph.db.TransferableGraphs; import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.ui.Activator; import org.simantics.sysdyn.ui.utils.imports.ImportUtilsUI; import org.simantics.ui.SimanticsUI; @@ -43,6 +46,7 @@ import org.simantics.ui.utils.ResourceAdaptionUtils; /** * Exports a selected model + * Model determination is based on the very Resource of the model. * * @author Teemu Lempinen * @author Tuomas Miettinen @@ -52,51 +56,26 @@ public class ExportModelHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { - ISelection sel = HandlerUtil.getCurrentSelection(event); - final Resource model = ResourceAdaptionUtils.toSingleResource(sel); - if(model == null) return null; - - // FIXME: Model browser doesn't change its selection even if the selected object is removed, - // so you can try to export a removed model - String name = null; - try { - name = SimanticsUI.getSession().syncRequest(new Read() { - @Override - public String perform(ReadGraph graph) throws DatabaseException { - if (!graph.hasStatement(model, Layer0.getInstance(graph).PartOf)) - return null; - Layer0 l0 = Layer0.getInstance(graph); - String name = graph.syncRequest(new PossibleRelatedValue(model, l0.HasName, Bindings.STRING )); - return name; - - } - - }); - } catch (DatabaseException e1) { - e1.printStackTrace(); - } - // Do not export if the resource has no name - if(name == null) return null; - - // Find a location (and name) for the exported library using FileDialog - Shell shell = HandlerUtil.getActiveShellChecked(event); - FileDialog fd = new FileDialog(shell, SWT.SAVE); - fd.setText("Export Model"); - fd.setFileName(name); - String path = Activator.getDefault().getPreferenceStore().getString(ImportUtilsUI.IMPORTMODELTPATH); - if(path.isEmpty() || !(new File(path).exists())) - path = Platform.getLocation().toOSString(); - fd.setFilterPath(path); - String[] filterExt = {"*.tg"}; - fd.setFilterExtensions(filterExt); - fd.setOverwrite(true); - final String selected = fd.open(); - if(selected == null) return null; + final Resource model = determineModel(event); + if (model == null) + return null; + + String selected = getAbsolutePath(model, event, true); + + if (selected != null) + createFile(model, selected); - // Save location to preference store - Activator.getDefault().getPreferenceStore().setValue(ImportUtilsUI.IMPORTMODELTPATH, (new File(selected)).getParent()); + return null; + } + /** + * Create the export file. + * @param model Model which is exported. + * @param fileName Full name of the file. + */ + protected void createFile(final Resource model, final String fileName) { + // Asynchronously create the file using transferable graph SimanticsUI.getSession().asyncRequest(new ReadRequest() { @@ -116,14 +95,145 @@ public class ExportModelHandler extends AbstractHandler { TransferableGraphSource s = graph.syncRequest(new ModelTransferableGraphSourceRequest(conf)); try { - TransferableGraphs.writeTransferableGraph(graph, "sysdynModel", 1, s,new File(selected)); + TransferableGraphs.writeTransferableGraph(graph, "sysdynModel", 1, s,new File(fileName)); } catch (Exception e) { e.printStackTrace(); } } }); - - return null; } + + /** + * Get the model Resource based on the event. + * @param event + * @return model Resource which the event refers to. + */ + protected Resource determineModel(ExecutionEvent event) { + // Just get the selected model. + ISelection sel = HandlerUtil.getCurrentSelection(event); + final Resource model = ResourceAdaptionUtils.toSingleResource(sel); + return model; + } + + /** + * Get the absolute save path for the export file and save it to the database. + * @param model Model Resource which is exported. + * @param event + * @param saveAs true if save as... functionality is used; otherwise save + * functionality is used. + * @return The full path name of the exported model. + * @throws ExecutionException + */ + protected String getAbsolutePath(final Resource model, ExecutionEvent event, boolean saveAs) throws ExecutionException { + + // Determine the default path. + String path = null; + try { + //If the model has been exported earlier, use that path. + path = SimanticsUI.getSession().syncRequest(new Read() { + + @Override + public String perform(ReadGraph graph) throws DatabaseException { + if (!graph.hasStatement(model, Layer0.getInstance(graph).PartOf)) + return null; + SysdynResource SR = SysdynResource.getInstance(graph); + String path = graph.syncRequest(new PossibleRelatedValue(model, SR.SysdynModel_lastExportFilePath, Bindings.STRING )); + return path; + + } + + }); + } catch (DatabaseException e1) { + e1.printStackTrace(); + } + // If this is the initial save: + if (path == null) { + if (saveAs == false) { + // Save == Save as... when there has been no earlier save. + return getAbsolutePath(model, event, true); + } + // Use import default path. + path = Activator.getDefault().getPreferenceStore().getString(ImportUtilsUI.IMPORTMODELTPATH); + } + if(path.isEmpty() || !(new File(path).exists())) + path = Platform.getLocation().toOSString(); + + // Determine the default name + // FIXME: Model browser doesn't change its selection even if the selected object is removed, + // so you can try to export a removed model + String name = null; + try { + name = SimanticsUI.getSession().syncRequest(new Read() { + @Override + public String perform(ReadGraph graph) throws DatabaseException { + if (!graph.hasStatement(model, Layer0.getInstance(graph).PartOf)) + return null; + Layer0 l0 = Layer0.getInstance(graph); + SysdynResource SR = SysdynResource.getInstance(graph); + // If the model has been exported earlier, use that name. + // When mere Save has progressed here, there is always be the name in the database. + String name = graph.syncRequest(new PossibleRelatedValue(model, SR.SysdynModel_lastExportFileName, Bindings.STRING )); + if (name == null) { + // If not, use the model name. + name = graph.syncRequest(new PossibleRelatedValue(model, l0.HasName, Bindings.STRING )); + } + return name; + + } + + }); + } catch (DatabaseException e1) { + e1.printStackTrace(); + } + // Do not export if the resource has no name + if(name == null) return null; + + final String selected; + String fullPath = null; + if (saveAs == true) { + // Find a location (and name) for the exported library using FileDialog + Shell shell = HandlerUtil.getActiveShellChecked(event); + FileDialog fd = new FileDialog(shell, SWT.SAVE); + fd.setText("Export Model"); + fd.setFileName(name); + + fd.setFilterPath(path); + String[] filterExt = {"*.tg"}; + fd.setFilterExtensions(filterExt); + fd.setOverwrite(true); + fullPath = fd.open(); + } + else { + // Save to the earlier location. + fullPath = path; + if (path.charAt(path.length() - 1) != '\\') + fullPath += "\\"; // Saving to C:\ would otherwise add excess backslashes. + fullPath += name; + } + selected = fullPath; + + if(selected == null) return null; + + // Save location to preference store + try { + SimanticsUI.getSession().syncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + SysdynResource SR = SysdynResource.getInstance(graph); + graph.deny(model, SR.SysdynModel_lastExportFilePath); + graph.deny(model, SR.SysdynModel_lastExportFileName); + graph.addLiteral(model, SR.SysdynModel_lastExportFilePath, SR.SysdynModel_lastExportFilePath_Inverse, l0.String, new File(selected).getParent(), Bindings.STRING); + graph.addLiteral(model, SR.SysdynModel_lastExportFileName, SR.SysdynModel_lastExportFilePath_Inverse, l0.String, new File(selected).getName(), Bindings.STRING); + } + }); + } catch (DatabaseException e1) { + e1.printStackTrace(); + } + + return selected; + + } } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java index 744e6316..3b516bbb 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java @@ -79,6 +79,8 @@ public class ResourceSelectionProcessor implements SelectionProcessor)selection) { Resource r = AdaptionUtils.adaptToSingle(o, Resource.class); + if (r == null) + continue; Resource component = backend.getPossibleObject(r, mr.ElementToComponent); if (component != null) { r = component; -- 2.47.1