diff options
Diffstat (limited to 'src/main')
4 files changed, 73 insertions, 9 deletions
| diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPSerializer.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPSerializer.java index f858468..3b7e633 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPSerializer.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUPSerializer.java @@ -4,7 +4,9 @@ import com.esotericsoftware.kryo.Kryo;  import com.esotericsoftware.kryo.Serializer;  import com.esotericsoftware.kryo.io.Input;  import com.esotericsoftware.kryo.io.Output; +import org.assertj.core.data.MapEntry;  import pl.edu.mimuw.cloudatlas.agent.messages.*; +import pl.edu.mimuw.cloudatlas.interpreter.query.Absyn.Program;  import pl.edu.mimuw.cloudatlas.model.*;  import java.io.ByteArrayInputStream; @@ -13,10 +15,8 @@ import java.net.Inet4Address;  import java.net.InetAddress;  import java.net.UnknownHostException;  import java.rmi.Remote; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.HashMap; -import java.util.LinkedHashMap; +import java.text.DateFormat; +import java.util.*;  /**   * Serializes classes to and from byte arrays for UDP use @@ -75,12 +75,16 @@ public class UDUPSerializer {              public void write(Kryo kryo, Output output, Object object) {                  ValueList vl = (ValueList) object;                  kryo.writeObject(output, ((TypeCollection) vl.getType()).getElementType()); -                kryo.writeObject(output, vl.getValue()); +                ArrayList<Value> al = new ArrayList<>(); +                for (Value v : vl.getValue()) { +                    al.add(v); +                } +                kryo.writeObject(output, al);              }              @Override              public Object read(Kryo kryo, Input input, Class type) { -                Type t = kryo.readObject(input, Type.class); +                TypePrimitive t = kryo.readObject(input, TypePrimitive.class);                  ArrayList list = kryo.readObject(input, ArrayList.class);                  return new ValueList(list, t);              } @@ -91,25 +95,74 @@ public class UDUPSerializer {              public void write(Kryo kryo, Output output, Object object) {                  ValueSet vs = (ValueSet) object;                  kryo.writeObject(output, ((TypeCollection) vs.getType()).getElementType()); -                kryo.writeObject(output, vs.getValue()); +                HashSet<Value> hs = new HashSet(); +                for (Value v : vs.getValue()) { +                    hs.add(v); +                } +                kryo.writeObject(output, hs);              }              @Override              public Object read(Kryo kryo, Input input, Class type) { -                Type t = kryo.readObject(input, Type.class); +                TypePrimitive t = kryo.readObject(input, TypePrimitive.class);                  HashSet set = kryo.readObject(input, HashSet.class);                  return new ValueSet(set, t);              }          }); +        kryo.register(AttributesMap.class, new Serializer() { +            @Override +            public void write(Kryo kryo, Output output, Object object) { +                AttributesMap attribMap = (AttributesMap) object; +                HashMap<Attribute, Value> hashMap = new HashMap<>(); + +                for (Map.Entry<Attribute, Value> e : attribMap) { +                    hashMap.put(e.getKey(), e.getValue()); +                } + +                kryo.writeObject(output, hashMap); +            } + +            @Override +            public Object read(Kryo kryo, Input input, Class type) { +                HashMap<Attribute, Value> hashMap = kryo.readObject(input, HashMap.class); +                AttributesMap attribMap = new AttributesMap(); +                for (Map.Entry<Attribute, Value> e : hashMap.entrySet()) { +                    attribMap.add(e.getKey(), e.getValue()); +                } +                return attribMap; +            } +        }); + +        kryo.register(ValueQuery.class, new Serializer() { +            @Override +            public void write(Kryo kryo, Output output, Object object) { +                ValueQuery vq = (ValueQuery) object; +                kryo.writeObject(output, vq.getCode()); +            } + +            @Override +            public Object read(Kryo kryo, Input input, Class type) { +                String code = kryo.readObject(input, String.class); +                ValueQuery vq = null; +                try { +                    vq = new ValueQuery(code); +                } catch (Exception e) { +                    System.out.println("Value query deserialization failed"); +                    e.printStackTrace(); +                } +                return vq; +            } +        }); +          // model          kryo.register(Value.class);          kryo.register(ValueBoolean.class);          kryo.register(ValueContact.class);          kryo.register(ValueDuration.class); +        kryo.register(ValueDouble.class);          kryo.register(ValueInt.class);          kryo.register(ValueNull.class); -        kryo.register(ValueQuery.class);          kryo.register(ValueSet.class);          kryo.register(ValueString.class);          kryo.register(ValueTime.class); @@ -121,6 +174,7 @@ public class UDUPSerializer {          kryo.register(AttributesUtil.class);          kryo.register(Type.class); +        kryo.register(Type.PrimaryType.class);          kryo.register(TypeCollection.class);          kryo.register(TypePrimitive.class); @@ -156,7 +210,10 @@ public class UDUPSerializer {          kryo.register(byte[].class);          kryo.register(LinkedHashMap.class);          kryo.register(HashMap.class); +        kryo.register(HashSet.class);          kryo.register(ModuleType.class); +        kryo.register(DateFormat.class); +        kryo.register(ArrayList.class);      }      public UDUPMessage deserialize(byte[] packetData) { @@ -169,6 +226,7 @@ public class UDUPSerializer {      public byte[] serialize(UDUPMessage msg) {          ByteArrayOutputStream out = new ByteArrayOutputStream();          Output kryoOut = new Output(out); +        System.out.println("SERIALIZING " + msg.getContent());          kryo.writeObject(kryoOut, msg);          kryoOut.flush();          kryoOut.close(); diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/model/Type.java b/src/main/java/pl/edu/mimuw/cloudatlas/model/Type.java index 0994cba..4453aea 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/model/Type.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/model/Type.java @@ -49,6 +49,8 @@ public abstract class Type implements Serializable {          this.primaryType = primaryType;      } +    public Type() { this.primaryType = PrimaryType.NULL; }; +      /**       * Returns the primary type of this type.       * diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java b/src/main/java/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java index ad07c0a..a17cafa 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java @@ -78,6 +78,8 @@ public class TypePrimitive extends Type {       */      public static final TypePrimitive QUERY = new TypePrimitive(PrimaryType.QUERY); +    private TypePrimitive() {} +      private TypePrimitive(PrimaryType primaryType) {          super(primaryType);          switch(primaryType) { diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java b/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java index 82e1602..6d233ea 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/model/ValueQuery.java @@ -32,6 +32,8 @@ public class ValueQuery extends Value {          this.query = null;      } +    public String getCode() { return code; } +      public Program getQuery() {          return query;      } |