Browse Source

new Adapter and few changes

Teh-Hai Julian Zheng 8 years ago
parent
commit
6d0d56b913

+ 0 - 1
src/TypeAdapter/AbstractCpsObjectAdapter.java

@@ -26,7 +26,6 @@ public class AbstractCpsObjectAdapter implements JsonSerializer<AbstractCpsObjec
 		return object;
 	}
 	
-	
 	@Override
 	public AbstractCpsObject deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2)
 			throws JsonParseException {

+ 5 - 0
src/TypeAdapter/ColorAdapter.java

@@ -0,0 +1,5 @@
+package TypeAdapter;
+
+public class ColorAdapter {
+
+}

+ 45 - 0
src/TypeAdapter/CpsEdgeAdapter.java

@@ -0,0 +1,45 @@
+package TypeAdapter;
+
+import java.lang.reflect.Type;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+import classes.CpsEdge;
+
+public class CpsEdgeAdapter implements JsonSerializer<CpsEdge>, JsonDeserializer<CpsEdge> {
+
+	@Override
+	public JsonElement serialize(CpsEdge arg0, Type arg1, JsonSerializationContext arg2) {
+		// TODO Auto-generated method stub
+		JsonObject object = new JsonObject();
+		object.add("type", new JsonPrimitive(arg0.getClass().getSimpleName()));
+		object.add("properties", arg2.serialize(arg0, arg0.getClass()));
+		object.add("a", new JsonPrimitive(arg0.getA().getID()));
+		object.add("b", new JsonPrimitive(arg0.getB().getID()));
+		
+		return object;
+	}
+
+	@Override
+	public CpsEdge deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
+		// TODO Auto-generated method stub
+		JsonObject object = arg0.getAsJsonObject();
+		String type = object.get("type").getAsString();
+		JsonElement element = object.get("properties");
+		try {
+			String packageName = "classes.";
+			return arg2.deserialize(element, Class.forName(packageName + type));
+		} catch (ClassNotFoundException cnfe) {
+			// TODO: handle exception
+			throw new JsonParseException("Unknown element type: " + type, cnfe);
+		}
+	}
+
+}

+ 0 - 1
src/TypeAdapter/PositionAdapter.java

@@ -5,7 +5,6 @@ import java.lang.reflect.Type;
 import com.google.gson.JsonDeserializationContext;
 import com.google.gson.JsonDeserializer;
 import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
 import com.google.gson.JsonPrimitive;
 import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;

+ 1 - 0
src/classes/AbstractCpsObject.java

@@ -38,6 +38,7 @@ public abstract class AbstractCpsObject {
 	@Expose
 	String sav;
 	/* borderColor the user sets */
+	@Expose
 	Color borderColor = Color.WHITE;
 	/* a Tag that can be used */
 	ArrayList<Integer> tags;

+ 0 - 2
src/classes/CpsEdge.java

@@ -43,10 +43,8 @@ public class CpsEdge {
 	// for internal use --> flow of electricity (simulation state)
 	ArrayList<Integer> pseudoTags;
 	// Source
-	@Expose
 	AbstractCpsObject a;
 	// Destination
-	@Expose
 	AbstractCpsObject b;
 
 	/**

+ 5 - 5
src/classes/HolonElement.java

@@ -26,8 +26,8 @@ public class HolonElement {
 	/* If the gadget is working xor not (true xor false) */
 	@Expose
 	private boolean active;
-	@Expose
 	/* Total Energy */
+	@Expose
 	private float totalEnergy;
 	/* +: for Consumers and -: Producers */
 	@Expose
@@ -40,7 +40,7 @@ public class HolonElement {
 	private String obj;
 	/* Unique Id of the Element */
 	@Expose
-	private int id; 
+	private int id;
 	/*
 	 * Energy at each point of the graph with 100 predefined points. At the
 	 * beginning, it starts with all values at energy
@@ -76,7 +76,7 @@ public class HolonElement {
 	 * @param element
 	 *            element to copy
 	 */
-	public HolonElement(HolonElement element)	 {
+	public HolonElement(HolonElement element) {
 		setEleName(element.getEleName());
 		setAmount(element.getAmount());
 		setEnergy(element.getEnergy());
@@ -86,8 +86,8 @@ public class HolonElement {
 		for (int i = 0; i < energyAt.length; i++) {
 			energyAt[i] = element.getEnergyAt()[i];
 		}
-		for (Point p :element.getGraphPoints()) {
-			this.graphPoints.add(new Point((int)p.getX(), (int)p.getY()));
+		for (Point p : element.getGraphPoints()) {
+			this.graphPoints.add(new Point((int) p.getX(), (int) p.getY()));
 		}
 		setSav("CVS");
 		setObj(element.getObj());

+ 5 - 0
src/classes/HolonObject.java

@@ -4,6 +4,8 @@ import java.awt.Color;
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import com.google.gson.annotations.Expose;
+
 import ui.controller.MultiPurposeController;
 
 /**
@@ -19,12 +21,14 @@ public class HolonObject extends AbstractCpsObject {
 	 * Color of the actual state (red = no supplied, yellow = partially supplied
 	 * and green = supplied)
 	 */
+	@Expose
 	private Color stateColor;
 	/* Array of all consumers */
 	private ArrayList<HolonElement> elements;
 	/* Array of all Indices of Elements */
 	private HashMap<String, Integer> eleIdx;
 	/* Total of consumption */
+	@Expose
 	private float currentEnergy;
 	/* Array for tracking Production */
 	private float[] trackingProd;
@@ -39,6 +43,7 @@ public class HolonObject extends AbstractCpsObject {
 	public final static int PRODUCER = 3;
 	public final static int PARTIALLY_SUPPLIED = 4;
 	
+	@Expose
 	private int state = 0;
 
 	/**

+ 11 - 4
src/ui/controller/StoreController.java

@@ -14,6 +14,7 @@ import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 
 import TypeAdapter.AbstractCpsObjectAdapter;
+import TypeAdapter.CpsEdgeAdapter;
 import classes.Category;
 import classes.CpsEdge;
 import classes.AbstractCpsObject;
@@ -58,8 +59,9 @@ public class StoreController {
 	public void writeSaveFile(String path) throws IOException {
 
 		GsonBuilder builder = new GsonBuilder();
-		builder.registerTypeAdapter(AbstractCpsObject.class, new AbstractCpsObjectAdapter()).serializeNulls()
-				.setPrettyPrinting();
+		builder.registerTypeAdapter(AbstractCpsObject.class, new AbstractCpsObjectAdapter())
+				.registerTypeAdapter(CpsEdge.class, new CpsEdgeAdapter()).serializeNulls()
+				.excludeFieldsWithoutExposeAnnotation().setPrettyPrinting();
 		Gson gson = builder.create();
 
 		JSONObject json = new JSONObject();
@@ -76,8 +78,13 @@ public class StoreController {
 		// writeEdges(json);
 		// writeElementGraph(json);
 		int i = 1;
-		for (AbstractCpsObject cps : model.getObjectsOnCanvas()) {
-			String k = gson.toJson(cps);
+//		for (AbstractCpsObject cps : model.getObjectsOnCanvas()) {
+//			String k = gson.toJson(cps, AbstractCpsObject.class);
+//			System.out.println(k);
+//		}
+
+		for (CpsEdge edge : model.getEdgesOnCanvas()) {
+			String k = gson.toJson(edge);
 			System.out.println(k);
 		}