diff --git a/gef-integration.target/gef-integration.target b/gef-integration.target/gef-integration.target index 7db6c9a..c64c0d6 100644 --- a/gef-integration.target/gef-integration.target +++ b/gef-integration.target/gef-integration.target @@ -1,5 +1,6 @@ - + + diff --git a/org.sofproject.alsa.topo/.classpath b/org.sofproject.alsa.topo/.classpath index eca7bdb..2bce911 100644 --- a/org.sofproject.alsa.topo/.classpath +++ b/org.sofproject.alsa.topo/.classpath @@ -1,6 +1,10 @@ - + + + + + diff --git a/org.sofproject.alsa.topo/META-INF/MANIFEST.MF b/org.sofproject.alsa.topo/META-INF/MANIFEST.MF index 99e2537..aaba058 100644 --- a/org.sofproject.alsa.topo/META-INF/MANIFEST.MF +++ b/org.sofproject.alsa.topo/META-INF/MANIFEST.MF @@ -10,3 +10,4 @@ Export-Package: org.sofproject.alsa.topo.conf, Require-Bundle: org.sofproject.core, org.sofproject.topo.ui Bundle-Vendor: Intel Corporation +Import-Package: org.sofproject.gst.json diff --git a/org.sofproject.alsa.topo/src/org/sofproject/alsa/topo/model/AlsaTopoGraph.java b/org.sofproject.alsa.topo/src/org/sofproject/alsa/topo/model/AlsaTopoGraph.java index 6bd194a..8dd1706 100644 --- a/org.sofproject.alsa.topo/src/org/sofproject/alsa/topo/model/AlsaTopoGraph.java +++ b/org.sofproject.alsa.topo/src/org/sofproject/alsa/topo/model/AlsaTopoGraph.java @@ -536,7 +536,56 @@ public void serialize() throws CoreException, IOException { } outputFile.getParent().refreshLocal(1, null); } + + @Override + public String getPipelineString() { + try { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + Writer writer = new BufferedWriter(new OutputStreamWriter(os)); + // tlv-s + tlvs.serialize(writer); + + // vendor tokens + vTokensIndex.serialize(writer); + + // vendor tuples + vTuplesIndex.serialize(writer); + + // data + dataIndex.serialize(writer); + + // control bytes + controlBytes.serialize(writer); + + // control mixers + controlMixers.serialize(writer); + + // pcm capabilities + pcmCapsIndex.serialize(writer); + // pcm-s + pcms.serialize(writer); + + // be-s + beIndex.serialize(writer); + + // hw-configs + hwConfigs.serialize(writer); + + // pipelines (widgets + graphs) + pipelines.serialize(writer); + interConnections.serialize(writer); + + writer.close(); + os.close(); + + return os.toString(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + @Override public IRemoteOpsProvider getRemoteOpsProvider() { return null; // no extra ops diff --git a/org.sofproject.alsa.topo/src/org/sofproject/alsa/topo/model/AlsaTopoPipeline.java b/org.sofproject.alsa.topo/src/org/sofproject/alsa/topo/model/AlsaTopoPipeline.java index f7b2067..bfd0ece 100644 --- a/org.sofproject.alsa.topo/src/org/sofproject/alsa/topo/model/AlsaTopoPipeline.java +++ b/org.sofproject.alsa.topo/src/org/sofproject/alsa/topo/model/AlsaTopoPipeline.java @@ -29,7 +29,10 @@ package org.sofproject.alsa.topo.model; +import java.io.BufferedWriter; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Collection; import java.util.HashMap; diff --git a/org.sofproject.fw.ui/.classpath b/org.sofproject.fw.ui/.classpath index eca7bdb..2bce911 100644 --- a/org.sofproject.fw.ui/.classpath +++ b/org.sofproject.fw.ui/.classpath @@ -1,6 +1,10 @@ - + + + + + diff --git a/org.sofproject.gst.topo/.classpath b/org.sofproject.gst.topo/.classpath index eca7bdb..de70579 100644 --- a/org.sofproject.gst.topo/.classpath +++ b/org.sofproject.gst.topo/.classpath @@ -1,7 +1,17 @@ - + + + + + + + + + + + diff --git a/org.sofproject.gst.topo/META-INF/MANIFEST.MF b/org.sofproject.gst.topo/META-INF/MANIFEST.MF index dd4cd5d..96444d0 100644 --- a/org.sofproject.gst.topo/META-INF/MANIFEST.MF +++ b/org.sofproject.gst.topo/META-INF/MANIFEST.MF @@ -10,3 +10,9 @@ Require-Bundle: org.sofproject.core, org.sofproject.ui, org.sofproject.topo.ui, com.jcraft.jsch +Bundle-ClassPath: lib/jackson-annotations-2.10.1.jar, + lib/jackson-core-2.10.1.jar, + lib/jackson-databind-2.10.1.jar, + . +Export-Package: org.sofproject.gst.json +Import-Package: org.eclipse.ui diff --git a/org.sofproject.gst.topo/build.properties b/org.sofproject.gst.topo/build.properties index e9863e2..950c215 100644 --- a/org.sofproject.gst.topo/build.properties +++ b/org.sofproject.gst.topo/build.properties @@ -2,4 +2,7 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ - plugin.xml + plugin.xml,\ + lib/jackson-annotations-2.10.1.jar,\ + lib/jackson-core-2.10.1.jar,\ + lib/jackson-databind-2.10.1.jar diff --git a/org.sofproject.gst.topo/lib/jackson-annotations-2.10.1.jar b/org.sofproject.gst.topo/lib/jackson-annotations-2.10.1.jar new file mode 100644 index 0000000..a10399c Binary files /dev/null and b/org.sofproject.gst.topo/lib/jackson-annotations-2.10.1.jar differ diff --git a/org.sofproject.gst.topo/lib/jackson-core-2.10.1.jar b/org.sofproject.gst.topo/lib/jackson-core-2.10.1.jar new file mode 100644 index 0000000..1640a4e Binary files /dev/null and b/org.sofproject.gst.topo/lib/jackson-core-2.10.1.jar differ diff --git a/org.sofproject.gst.topo/lib/jackson-databind-2.10.1.jar b/org.sofproject.gst.topo/lib/jackson-databind-2.10.1.jar new file mode 100644 index 0000000..abe3748 Binary files /dev/null and b/org.sofproject.gst.topo/lib/jackson-databind-2.10.1.jar differ diff --git a/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonCustomOptionPane.java b/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonCustomOptionPane.java new file mode 100644 index 0000000..007b604 --- /dev/null +++ b/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonCustomOptionPane.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2018, Intel Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Intel Corporation nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +package org.sofproject.gst.json; + +import java.io.IOException; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.MessageBox; +import org.eclipse.swt.widgets.Monitor; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; +import org.sofproject.topo.ui.graph.ITopoGraph; +import org.sofproject.gst.json.JsonUtils; + +public class JsonCustomOptionPane { + + ITopoGraph graph; + + private static boolean isInteger(String s) { + try { + Integer.parseInt(s); + } catch (NumberFormatException e) { + return false; + } catch (NullPointerException e) { + return false; + } + return true; + } + + public JsonCustomOptionPane(Display display, ITopoGraph graph) { + this.graph = graph; + Shell shell = new Shell(display, SWT.CLOSE | SWT.TITLE | SWT.MIN); + + shell.setText("Serialize JSON"); + + GridLayout gridLayout = new GridLayout(4, false); + gridLayout.verticalSpacing = 8; + shell.setLayout(gridLayout); + + new Label(shell, SWT.NULL).setText("Name:"); + Text nameText = new Text(shell, SWT.SINGLE | SWT.BORDER); + GridData nameGridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + nameGridData.horizontalSpan = 3; + nameText.setLayoutData(nameGridData); + + new Label(shell, SWT.NULL).setText("Version:"); + Text versionText = new Text(shell, SWT.BORDER); + GridData versionGridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + versionGridData.horizontalSpan = 3; + versionText.setLayoutData(versionGridData); + + new Label(shell, SWT.NULL).setText("Description:"); + Text descriptionText = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); + GridData descriptionGridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + descriptionGridData.horizontalSpan = 3; + descriptionGridData.heightHint = 100; + descriptionGridData.widthHint = 200; + descriptionText.setLayoutData(descriptionGridData); + + new Label(shell, SWT.NULL).setText("Type:"); + Combo typeCombo = new Combo(shell, SWT.READ_ONLY); + typeCombo.setBounds(50, 50, 200, 65); + String items[] = { "Gstreamer", "Ffmpeg" }; + typeCombo.setItems(items); + typeCombo.setText(items[0]); + GridData typeGridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + typeGridData.horizontalSpan = 3; + typeCombo.setLayoutData(typeGridData); + + Button okButton = new Button(shell, SWT.PUSH); + okButton.setText("Ok"); + GridData buttonGridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + okButton.setLayoutData(buttonGridData); + okButton.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + if (nameText.getText().isEmpty()) { + MessageBox messageBox = new MessageBox(shell, SWT.ERROR); + messageBox.setMessage("Name cannot be empty!"); + messageBox.open(); + } else if (!isInteger(versionText.getText())) { + MessageBox messageBox = new MessageBox(shell, SWT.ERROR); + messageBox.setMessage("Version number should be an integer!"); + messageBox.open(); + } else { + try { + JsonProperty jsonProperty = new JsonProperty(nameText.getText(), descriptionText.getText(), + versionText.getText(), typeCombo.getItem(typeCombo.getSelectionIndex())); + new JsonUtils().serializeJson(jsonProperty, graph.getPipelineString()); + shell.close(); + } catch (CoreException | IOException error) { + error.printStackTrace(); // TODO: + } + } + } + }); + + Button cancelButton = new Button(shell, SWT.PUSH); + cancelButton.setText("Cancel"); + GridData cancelbuttonGridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + cancelButton.setLayoutData(cancelbuttonGridData); + cancelButton.addSelectionListener(new SelectionAdapter() { + + @Override + public void widgetSelected(SelectionEvent e) { + shell.close(); + } + }); + + Monitor primary = display.getPrimaryMonitor(); + Rectangle bounds = primary.getBounds(); + Rectangle rect = shell.getBounds(); + int x = bounds.x + (bounds.width - rect.width) / 2; + int y = bounds.y + (bounds.height - rect.height) / 2; + shell.setLocation(x, y); + + shell.pack(); + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + } + +} diff --git a/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonProperty.java b/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonProperty.java new file mode 100644 index 0000000..7db9f4b --- /dev/null +++ b/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonProperty.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2019, Intel Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Intel Corporation nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +package org.sofproject.gst.json; + +public class JsonProperty { + + private String name; + private String description; + private String version; + private String type; + private String template; + + public JsonProperty(String name, String description, String version, String type) { + this.name = name; + this.description = description; + this.version = version; + this.type = type; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public String getVersion() { + return version; + } + + public String getType() { + return type; + } + + public String getTemplate() { + return template; + } + + public void setTemplate(String newTemplate) { + this.template = newTemplate; + } +} diff --git a/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonUtils.java b/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonUtils.java new file mode 100644 index 0000000..5f87d1f --- /dev/null +++ b/org.sofproject.gst.topo/src/org/sofproject/gst/json/JsonUtils.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2019, Intel Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Intel Corporation nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +package org.sofproject.gst.json; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Paths; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class JsonUtils { + + public void serializeJson(JsonProperty jsonProperty, String pipelineString) throws CoreException, IOException { + try { + String projectPath = getProjectPath(); + File file; + if (projectPath != null) { + String path = Paths.get(projectPath, jsonProperty.getName(), jsonProperty.getVersion()).toString(); + new File(path).mkdirs(); + file = new File(Paths.get(path, "pipeline.json").toString()); + } else { + file = new File(jsonProperty.getName() + ".json"); + } + jsonProperty.setTemplate(pipelineString); + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + ObjectMapper obj = new ObjectMapper(); + obj.writeValue(writer, jsonProperty); + writer.close(); + + } catch (Exception e) { + System.out.println(e.toString()); + } + } + + public String getProjectPath() { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + IWorkbenchPage activePage = window.getActivePage(); + + IEditorPart activeEditor = activePage.getActiveEditor(); + + if (activeEditor != null) { + IEditorInput input = activeEditor.getEditorInput(); + + IProject project = input.getAdapter(IProject.class); + if (project == null) { + IResource resource = input.getAdapter(IResource.class); + if (resource != null) { + project = resource.getProject(); + IPath path = project.getLocation(); + return path.toString(); + } + } + } + + return null; + } + +} diff --git a/org.sofproject.gst.topo/src/org/sofproject/gst/topo/model/GstTopoGraph.java b/org.sofproject.gst.topo/src/org/sofproject/gst/topo/model/GstTopoGraph.java index 761fff4..5979483 100644 --- a/org.sofproject.gst.topo/src/org/sofproject/gst/topo/model/GstTopoGraph.java +++ b/org.sofproject.gst.topo/src/org/sofproject/gst/topo/model/GstTopoGraph.java @@ -34,8 +34,11 @@ import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; +import java.io.PrintWriter; import java.io.Writer; import java.util.ArrayList; import java.util.Arrays; @@ -192,6 +195,7 @@ public void serialize() throws CoreException, IOException { fileInput.setContents(new ByteArrayInputStream(os.toByteArray()), true, false, null); } + @Override public String getPipelineString() { try { ByteArrayOutputStream os = new ByteArrayOutputStream(); diff --git a/org.sofproject.gst.topo/src/org/sofproject/gst/topo/model/GstTopoNode.java b/org.sofproject.gst.topo/src/org/sofproject/gst/topo/model/GstTopoNode.java index a83ef4a..303fe4a 100644 --- a/org.sofproject.gst.topo/src/org/sofproject/gst/topo/model/GstTopoNode.java +++ b/org.sofproject.gst.topo/src/org/sofproject/gst/topo/model/GstTopoNode.java @@ -100,8 +100,8 @@ public GstTopoConnection getOutgoingConnection() { public void serialize(Writer writer) throws IOException { writer.write(elem.getName()); for (GstProperty prop : properties.values()) { - if (!prop.isChanged()) - continue; + //if (!prop.isChanged()) + // continue; writer.write(" "); prop.serialize(writer); } diff --git a/org.sofproject.topo.ui/.classpath b/org.sofproject.topo.ui/.classpath index eca7bdb..71ef766 100644 --- a/org.sofproject.topo.ui/.classpath +++ b/org.sofproject.topo.ui/.classpath @@ -1,7 +1,12 @@ - + + + + + + diff --git a/org.sofproject.topo.ui/META-INF/MANIFEST.MF b/org.sofproject.topo.ui/META-INF/MANIFEST.MF index e524341..4a39a02 100644 --- a/org.sofproject.topo.ui/META-INF/MANIFEST.MF +++ b/org.sofproject.topo.ui/META-INF/MANIFEST.MF @@ -22,7 +22,8 @@ Import-Package: com.google.common.collect;version="21.0.0", com.google.inject;version="1.3.0", com.google.inject.binder;version="1.3.0", com.google.inject.multibindings;version="1.3.0", - com.google.inject.util;version="1.3.0" + com.google.inject.util;version="1.3.0", + org.sofproject.gst.json Bundle-Vendor: Intel Corporation Export-Package: org.sofproject.topo.ui.editor, org.sofproject.topo.ui.graph diff --git a/org.sofproject.topo.ui/src/org/sofproject/topo/ui/editor/policies/TopoEditorOnClickHandler.java b/org.sofproject.topo.ui/src/org/sofproject/topo/ui/editor/policies/TopoEditorOnClickHandler.java index ac9b9de..71f5521 100644 --- a/org.sofproject.topo.ui/src/org/sofproject/topo/ui/editor/policies/TopoEditorOnClickHandler.java +++ b/org.sofproject.topo.ui/src/org/sofproject/topo/ui/editor/policies/TopoEditorOnClickHandler.java @@ -42,6 +42,7 @@ import org.eclipse.gef.mvc.fx.viewer.InfiniteCanvasViewer; import org.eclipse.swt.widgets.Display; import org.sofproject.core.ops.IRemoteOpsProvider; +import org.sofproject.gst.json.JsonCustomOptionPane; import org.sofproject.topo.ui.graph.GefTopoNode; import org.sofproject.topo.ui.graph.ITopoGraph; import org.sofproject.topo.ui.graph.ITopoNode; @@ -129,6 +130,15 @@ public void handle(ActionEvent event) { } }); menu.getItems().add(miSerialize); + MenuItem miSerializeJson = new MenuItem("Serialize Topology to Json"); + miSerializeJson.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent event) { + menu.hide(); + new JsonCustomOptionPane(Display.getCurrent(), getGraphFromHost()); + } + }); + menu.getItems().add(miSerializeJson); menu.show(((InfiniteCanvasViewer) viewer).getScene().getWindow(), e.getScreenX(), e.getScreenY()); } } diff --git a/org.sofproject.topo.ui/src/org/sofproject/topo/ui/graph/ITopoGraph.java b/org.sofproject.topo.ui/src/org/sofproject/topo/ui/graph/ITopoGraph.java index 34b896f..f4769dc 100644 --- a/org.sofproject.topo.ui/src/org/sofproject/topo/ui/graph/ITopoGraph.java +++ b/org.sofproject.topo.ui/src/org/sofproject/topo/ui/graph/ITopoGraph.java @@ -36,6 +36,7 @@ import org.eclipse.core.runtime.CoreException; import org.sofproject.core.binfile.BinFile; import org.sofproject.core.ops.IRemoteOpsProvider; +import org.sofproject.gst.json.JsonProperty; /** * Topology graph, implemented by a specific topology binding. @@ -69,6 +70,8 @@ public interface ITopoGraph { public BinFile getBinTopology(); public void serialize() throws CoreException, IOException; - + + public String getPipelineString(); + public IRemoteOpsProvider getRemoteOpsProvider(); }