111 lines
3.5 KiB
Java
111 lines
3.5 KiB
Java
// serialization/AStoreCADState.java
|
|
// (c)2016 MindView LLC: see Copyright.txt
|
|
// We make no guarantees that this code is fit for any purpose.
|
|
// Visit http://mindviewinc.com/Books/OnJava/ for more book information.
|
|
// Saving the state of a pretend CAD system.
|
|
import java.io.*;
|
|
import java.util.*;
|
|
|
|
abstract class Shape implements Serializable {
|
|
public static final int RED = 1, BLUE = 2, GREEN = 3;
|
|
private int xPos, yPos, dimension;
|
|
private static Random rand = new Random(47);
|
|
private static int counter = 0;
|
|
public abstract void setColor(int newColor);
|
|
public abstract int getColor();
|
|
public Shape(int xVal, int yVal, int dim) {
|
|
xPos = xVal;
|
|
yPos = yVal;
|
|
dimension = dim;
|
|
}
|
|
public String toString() {
|
|
return getClass() +
|
|
"color[" + getColor() + "] xPos[" + xPos +
|
|
"] yPos[" + yPos + "] dim[" + dimension + "]\n";
|
|
}
|
|
public static Shape randomFactory() {
|
|
int xVal = rand.nextInt(100);
|
|
int yVal = rand.nextInt(100);
|
|
int dim = rand.nextInt(100);
|
|
switch(counter++ % 3) {
|
|
default:
|
|
case 0: return new Circle(xVal, yVal, dim);
|
|
case 1: return new Square(xVal, yVal, dim);
|
|
case 2: return new Line(xVal, yVal, dim);
|
|
}
|
|
}
|
|
}
|
|
|
|
class Circle extends Shape {
|
|
private static int color = RED;
|
|
public Circle(int xVal, int yVal, int dim) {
|
|
super(xVal, yVal, dim);
|
|
}
|
|
public void setColor(int newColor) { color = newColor; }
|
|
public int getColor() { return color; }
|
|
}
|
|
|
|
class Square extends Shape {
|
|
private static int color;
|
|
public Square(int xVal, int yVal, int dim) {
|
|
super(xVal, yVal, dim);
|
|
color = RED;
|
|
}
|
|
public void setColor(int newColor) { color = newColor; }
|
|
public int getColor() { return color; }
|
|
}
|
|
|
|
class Line extends Shape {
|
|
private static int color = RED;
|
|
public static void
|
|
serializeStaticState(ObjectOutputStream os)
|
|
throws IOException { os.writeInt(color); }
|
|
public static void
|
|
deserializeStaticState(ObjectInputStream os)
|
|
throws IOException { color = os.readInt(); }
|
|
public Line(int xVal, int yVal, int dim) {
|
|
super(xVal, yVal, dim);
|
|
}
|
|
public void setColor(int newColor) { color = newColor; }
|
|
public int getColor() { return color; }
|
|
}
|
|
|
|
public class AStoreCADState {
|
|
public static void main(String[] args) throws Exception {
|
|
List<Class<? extends Shape>> shapeTypes =
|
|
new ArrayList<>();
|
|
// Add references to the class objects:
|
|
shapeTypes.add(Circle.class);
|
|
shapeTypes.add(Square.class);
|
|
shapeTypes.add(Line.class);
|
|
List<Shape> shapes = new ArrayList<>();
|
|
// Make some shapes:
|
|
for(int i = 0; i < 10; i++)
|
|
shapes.add(Shape.randomFactory());
|
|
// Set all the static colors to GREEN:
|
|
for(int i = 0; i < 10; i++)
|
|
((Shape)shapes.get(i)).setColor(Shape.GREEN);
|
|
// Save the state vector:
|
|
ObjectOutputStream out = new ObjectOutputStream(
|
|
new FileOutputStream("CADState.dat"));
|
|
out.writeObject(shapeTypes);
|
|
Line.serializeStaticState(out);
|
|
out.writeObject(shapes);
|
|
// Display the shapes:
|
|
System.out.println(shapes);
|
|
}
|
|
}
|
|
/* Output:
|
|
[class Circlecolor[3] xPos[58] yPos[55] dim[93]
|
|
, class Squarecolor[3] xPos[61] yPos[61] dim[29]
|
|
, class Linecolor[3] xPos[68] yPos[0] dim[22]
|
|
, class Circlecolor[3] xPos[7] yPos[88] dim[28]
|
|
, class Squarecolor[3] xPos[51] yPos[89] dim[9]
|
|
, class Linecolor[3] xPos[78] yPos[98] dim[61]
|
|
, class Circlecolor[3] xPos[20] yPos[58] dim[16]
|
|
, class Squarecolor[3] xPos[40] yPos[11] dim[22]
|
|
, class Linecolor[3] xPos[4] yPos[83] dim[6]
|
|
, class Circlecolor[3] xPos[75] yPos[10] dim[42]
|
|
]
|
|
*/
|