]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.proconf.g3d.shapeeditor/src/org/simantics/proconf/g3d/shapeeditor/actions/ImportAction.java
Moved 3D plug-ins to /3d/branches/dev.
[simantics/3d.git] / org.simantics.proconf.g3d.shapeeditor / src / org / simantics / proconf / g3d / shapeeditor / actions / ImportAction.java
diff --git a/org.simantics.proconf.g3d.shapeeditor/src/org/simantics/proconf/g3d/shapeeditor/actions/ImportAction.java b/org.simantics.proconf.g3d.shapeeditor/src/org/simantics/proconf/g3d/shapeeditor/actions/ImportAction.java
new file mode 100644 (file)
index 0000000..7a4d063
--- /dev/null
@@ -0,0 +1,81 @@
+package org.simantics.proconf.g3d.shapeeditor.actions;\r
+\r
+import java.io.BufferedInputStream;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.FileDialog;\r
+import org.simantics.db.Graph;\r
+import org.simantics.db.GraphRequestAdapter;\r
+import org.simantics.db.GraphRequestStatus;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.layer0.utils.serialization.ConnectionPointList;\r
+import org.simantics.layer0.utils.serialization.TransferableGraph;\r
+import org.simantics.layer0.utils.serialization.TransferableGraphUtils;\r
+import org.simantics.proconf.g3d.shapeeditor.views.ShapeEditorBase;\r
+import org.simantics.utils.ErrorLogger;\r
+\r
+public class ImportAction extends Action {\r
+       \r
+       private ShapeEditorBase parent;\r
+       \r
+       public ImportAction(ShapeEditorBase parent) {\r
+               this.parent = parent;\r
+               setText("Import");\r
+               setId("g3d shape import");\r
+       }\r
+       \r
+       @Override\r
+       public void run() {\r
+               try {\r
+                       doImport();\r
+               } catch (IOException e) {\r
+                       ErrorLogger.defaultLogError(e);\r
+               }\r
+       }\r
+       \r
+       private void doImport() throws IOException {\r
+               FileDialog dialog = new FileDialog(parent.getRenderingComposite().getShell(),SWT.OPEN);\r
+               String filename = dialog.open();\r
+               if (filename == null)\r
+                       return;\r
+               File file = new File(filename);\r
+               FileInputStream fis = new FileInputStream(file);\r
+               BufferedInputStream bis = new BufferedInputStream(fis);\r
+               byte[] data = new byte[0];\r
+               byte[] buf = new byte[256];\r
+               int res = 0;\r
+               while ((res = bis.read(buf)) != -1) {\r
+                       byte[] newData = new byte[data.length + res];\r
+                       System.arraycopy(data, 0, newData, 0, data.length);\r
+                       System.arraycopy(buf, 0, newData, data.length, res);\r
+                       data = newData;\r
+               }\r
+               bis.close();\r
+               final byte fdata[] = data;\r
+               parent.getSession().asyncWrite(new GraphRequestAdapter() {\r
+                       @Override\r
+                       public GraphRequestStatus perform(Graph g) throws Exception {\r
+                               TransferableGraph sg = TransferableGraphUtils.deserialize(fdata);\r
+                               ConnectionPointList purposes = TransferableGraphUtils.integrateTransferableGraph(g, sg, null);\r
+                               Resource modelResource = purposes.getSingleByDescription(TransferableGraphUtils.CP_OBJECT).resource;\r
+                   Resource currentModelResource = parent.getModelResource();\r
+                   for (Statement s : g.getStatements(modelResource)) {\r
+                       g.removeStatements(currentModelResource, s.getPredicate());\r
+                   }\r
+                               for (Statement s : g.getStatements(modelResource)) {\r
+                                       \r
+                                       g.removeStatement(s);\r
+                                       g.addStatement(currentModelResource, s.getPredicate(), s.getObject());\r
+                               }\r
+                   \r
+                               return GraphRequestStatus.transactionComplete();\r
+                       }\r
+               });\r
+       }\r
+\r
+}\r