--- /dev/null
+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