ソースを参照

new saveFile Format including images. loading not done. Own extension for savefile possible

Teh-Hai Julian Zheng 8 年 前
コミット
3dfa269198
3 ファイル変更106 行追加45 行削除
  1. 3 1
      src/ui/controller/Control.java
  2. 86 36
      src/ui/controller/StoreController.java
  3. 17 8
      src/ui/view/GUI.java

+ 3 - 1
src/ui/controller/Control.java

@@ -6,6 +6,8 @@ import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 
 
+import org.apache.commons.compress.archivers.ArchiveException;
+
 import classes.AbstractCpsObject;
 import classes.AbstractCpsObject;
 import classes.Category;
 import classes.Category;
 import classes.CpsEdge;
 import classes.CpsEdge;
@@ -463,7 +465,7 @@ public class Control {
 	 * @throws IOException
 	 * @throws IOException
 	 *             exception
 	 *             exception
 	 */
 	 */
-	public void saveFile(String path) throws IOException {
+	public void saveFile(String path) throws IOException, ArchiveException {
 		storeController.writeSaveFile(path);
 		storeController.writeSaveFile(path);
 	}
 	}
 
 

+ 86 - 36
src/ui/controller/StoreController.java

@@ -5,9 +5,13 @@ import java.awt.Point;
 import java.awt.image.BufferedImage;
 import java.awt.image.BufferedImage;
 import java.awt.image.DataBufferByte;
 import java.awt.image.DataBufferByte;
 import java.awt.image.WritableRaster;
 import java.awt.image.WritableRaster;
+import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.nio.file.FileSystems;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Path;
@@ -19,7 +23,13 @@ import java.util.List;
 
 
 import javax.imageio.ImageIO;
 import javax.imageio.ImageIO;
 
 
+import org.apache.commons.compress.archivers.ArchiveException;
+import org.apache.commons.compress.archivers.ArchiveOutputStream;
+import org.apache.commons.compress.archivers.ArchiveStreamFactory;
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.compressors.CompressorOutputStream;
+import org.apache.commons.compress.compressors.CompressorStreamFactory;
+import org.apache.commons.compress.utils.IOUtils;
 
 
 import com.google.gson.Gson;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.GsonBuilder;
@@ -29,7 +39,6 @@ import com.sun.corba.se.spi.ior.Writeable;
 
 
 import TypeAdapter.AbstractCpsObjectAdapter;
 import TypeAdapter.AbstractCpsObjectAdapter;
 import TypeAdapter.ColorAdapter;
 import TypeAdapter.ColorAdapter;
-import TypeAdapter.ImageAdapter;
 import TypeAdapter.PositionAdapter;
 import TypeAdapter.PositionAdapter;
 
 
 import classes.Category;
 import classes.Category;
@@ -96,21 +105,33 @@ public class StoreController {
 	 * @throws IOException
 	 * @throws IOException
 	 *             exception
 	 *             exception
 	 */
 	 */
-	public void writeSaveFile(String path) throws IOException {
-		
-		
+	public void writeSaveFile(String path) throws IOException, ArchiveException {
+
+		File dst = new File(path);
+		File holonFile = File.createTempFile("tmp", ".json");
+		dst.delete();
+
+		OutputStream out = new FileOutputStream(dst);
+		ArchiveOutputStream stream = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP,
+				out);
 
 
 		initNumeration();
 		initNumeration();
 		JsonObject file = new JsonObject();
 		JsonObject file = new JsonObject();
 		initialize(MODE.COMPLETE, file);
 		initialize(MODE.COMPLETE, file);
 		storeCategory(file);
 		storeCategory(file);
 		storeCanvas(file);
 		storeCanvas(file);
+		storeData(stream);
 
 
-		FileWriter writer = new FileWriter(path);
+		FileWriter writer = new FileWriter(holonFile);
 		writer.write(gson.toJson(file));
 		writer.write(gson.toJson(file));
-
 		writer.flush();
 		writer.flush();
 		writer.close();
 		writer.close();
+
+		addFileToSave(holonFile, stream);
+
+		stream.finish();
+		out.close();
+
 	}
 	}
 
 
 	/**
 	/**
@@ -346,37 +367,66 @@ public class StoreController {
 
 
 	}
 	}
 
 
+	private void storeData(ArchiveOutputStream stream) throws IOException {
+		// TODO Auto-generated method stub
+		ArrayList<String> images = new ArrayList<>();
+		Files.newDirectoryStream(Paths.get(System.getProperty("user.home") + "/HolonGUI/Images"),
+				p -> p.toFile().isFile()).forEach(p -> images.add(p.toString()));
+		for (String str : images) {
+			File src = new File(str);
+			addFileToSave(src, stream);
+		}
+
+	}
+
 	private void imageToJson(JsonObject file) {
 	private void imageToJson(JsonObject file) {
-//		ArrayList<String> images = new ArrayList<>();
-//		BufferedImage buffered = null;
-//		WritableRaster raster = null;
-//		DataBufferByte data = null;
-//		String k = null;
-//		JsonObject temp = new JsonObject();
-//
-//		try {
-//			Files.newDirectoryStream(Paths.get(System.getProperty("user.home") + "/HolonGUI/Images"),
-//					p -> p.toFile().isFile()).forEach(p -> images.add(p.toString()));
-//			
-//			for (String str : images) {
-//				System.out.println("aaaaa");
-//				k = "IMAGE" + getNumerator(NUMTYPE.IMAGE);
-//				buffered = ImageIO.read(new File(str));
-//				raster = buffered.getRaster();
-//				data = (DataBufferByte) raster.getDataBuffer();
-//
-//				temp.add("Image", new JsonPrimitive(str.substring(str.indexOf("/HolonGUI/Images"), str.length())));
-//				for (int i = 0; i < data.getData().length; i++) {
-//					temp.add("" + i, new JsonPrimitive(data.getData()[i]));
-//					System.out.println(i);
-//				}
-//
-//				file.add(k, gson.toJsonTree(temp));
-//			}
-//		} catch (IOException e) {
-//			// TODO Auto-generated catch block
-//			e.printStackTrace();
-//		}
+		// ArrayList<String> images = new ArrayList<>();
+		// BufferedImage buffered = null;
+		// WritableRaster raster = null;
+		// DataBufferByte data = null;
+		// String k = null;
+		// JsonObject temp = new JsonObject();
+		//
+		// try {
+		// Files.newDirectoryStream(Paths.get(System.getProperty("user.home") +
+		// "/HolonGUI/Images"),
+		// p -> p.toFile().isFile()).forEach(p -> images.add(p.toString()));
+		//
+		// for (String str : images) {
+		// System.out.println("aaaaa");
+		// k = "IMAGE" + getNumerator(NUMTYPE.IMAGE);
+		// buffered = ImageIO.read(new File(str));
+		// raster = buffered.getRaster();
+		// data = (DataBufferByte) raster.getDataBuffer();
+		//
+		// temp.add("Image", new
+		// JsonPrimitive(str.substring(str.indexOf("/HolonGUI/Images"),
+		// str.length())));
+		// for (int i = 0; i < data.getData().length; i++) {
+		// temp.add("" + i, new JsonPrimitive(data.getData()[i]));
+		// System.out.println(i);
+		// }
+		//
+		// file.add(k, gson.toJsonTree(temp));
+		// }
+		// } catch (IOException e) {
+		// // TODO Auto-generated catch block
+		// e.printStackTrace();
+		// }
+	}
+
+	private void addFileToSave(File src, ArchiveOutputStream stream) throws IOException {
+
+		String entryName = src.getName();
+		ZipArchiveEntry entry = new ZipArchiveEntry(entryName);
+		stream.putArchiveEntry(entry);
+
+		BufferedInputStream input = new BufferedInputStream(new FileInputStream(src));
+
+		IOUtils.copy(input, stream);
+		input.close();
+		stream.closeArchiveEntry();
+
 	}
 	}
 
 
 	/**
 	/**

+ 17 - 8
src/ui/view/GUI.java

@@ -63,6 +63,8 @@ import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.TreeCellRenderer;
 import javax.swing.tree.TreeCellRenderer;
 
 
+import org.apache.commons.compress.archivers.ArchiveException;
+
 import classes.AbstractCpsObject;
 import classes.AbstractCpsObject;
 import classes.Category;
 import classes.Category;
 import classes.CpsUpperNode;
 import classes.CpsUpperNode;
@@ -692,9 +694,10 @@ public class GUI<E> implements CategoryListener {
 					backgroundDialog.setVisible(true);
 					backgroundDialog.setVisible(true);
 				} else if (((JScrollPane) tabbedPane.getSelectedComponent()).getViewport()
 				} else if (((JScrollPane) tabbedPane.getSelectedComponent()).getViewport()
 						.getComponent(0) instanceof UpperNodeCanvas) {
 						.getComponent(0) instanceof UpperNodeCanvas) {
-					UpperNodeCanvas uNodeCanvas = (UpperNodeCanvas)(((JScrollPane) tabbedPane.getSelectedComponent()).getViewport()
-							.getComponent(0));
-					BackgroundPopUp backgroundDialog = new BackgroundPopUp(model, controller,null, uNodeCanvas.upperNode);
+					UpperNodeCanvas uNodeCanvas = (UpperNodeCanvas) (((JScrollPane) tabbedPane.getSelectedComponent())
+							.getViewport().getComponent(0));
+					BackgroundPopUp backgroundDialog = new BackgroundPopUp(model, controller, null,
+							uNodeCanvas.upperNode);
 					backgroundDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
 					backgroundDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
 					backgroundDialog.setVisible(true);
 					backgroundDialog.setVisible(true);
 					uNodeCanvas.repaint();
 					uNodeCanvas.repaint();
@@ -1535,16 +1538,22 @@ public class GUI<E> implements CategoryListener {
 			private void menuSaveActionPerformed(java.awt.event.ActionEvent evt) {
 			private void menuSaveActionPerformed(java.awt.event.ActionEvent evt) {
 				JFileChooser fileChooser = new JFileChooser();
 				JFileChooser fileChooser = new JFileChooser();
 				JFrame test = new JFrame();
 				JFrame test = new JFrame();
-				FileNameExtensionFilter jsonFilter = new FileNameExtensionFilter("*.json", "json");
-				fileChooser.setFileFilter(jsonFilter);
+				FileNameExtensionFilter holonFilter = new FileNameExtensionFilter("Holon Save File(.holon)", "holon");
+				FileNameExtensionFilter ownFilter = new FileNameExtensionFilter("Own Extension(.ext)", " ");
+				fileChooser.addChoosableFileFilter(holonFilter);
+				fileChooser.addChoosableFileFilter(ownFilter);
+				fileChooser.setFileFilter(holonFilter);
+
 
 
 				if (fileChooser.showSaveDialog(test) == JFileChooser.APPROVE_OPTION) {
 				if (fileChooser.showSaveDialog(test) == JFileChooser.APPROVE_OPTION) {
 					String file = fileChooser.getSelectedFile().getPath();
 					String file = fileChooser.getSelectedFile().getPath();
-					if (!file.endsWith(".json"))
-						file += ".json";
+					if (fileChooser.getFileFilter().equals(holonFilter)) {
+						if (!file.endsWith(".holon"))
+							file += ".holon";
+					}
 					try {
 					try {
 						controller.saveFile(new File(file).getAbsolutePath());
 						controller.saveFile(new File(file).getAbsolutePath());
-					} catch (IOException e) {
+					} catch (IOException | ArchiveException e) {
 						// TODO Auto-generated catch block
 						// TODO Auto-generated catch block
 						e.printStackTrace();
 						e.printStackTrace();
 					}
 					}