package automately.core.data; import com.hazelcast.nio.ObjectDataInput; import com.hazelcast.nio.ObjectDataOutput; import io.jsync.app.core.persistence.IdentifiedDataType; import io.jsync.json.JsonObject; import io.jsync.json.impl.Json; import io.jsync.utils.Token; import java.io.IOException; import java.util.Date; /** * The Meta class is a DataType used by JCluster. * It's main purpose is to store any extra data belonging to a user * or any other object. */ public class Meta extends IdentifiedDataType { public String userToken; public String key; public Object value; public Date created = new Date(); public Date updated = new Date(); private String token = Token.generateToken().toHex(); public Meta() { this("", ""); } public Meta(String key, Object value) { this.key = key; this.value = value; } @Override public void writeData(ObjectDataOutput dataOutput) throws IOException { dataOutput.writeUTF(token); dataOutput.writeUTF(userToken); dataOutput.writeUTF(key); dataOutput.writeObject(value); dataOutput.writeObject(created); dataOutput.writeObject(updated); } @Override public void readData(ObjectDataInput dataInput) throws IOException { token = dataInput.readUTF(); userToken = dataInput.readUTF(); key = dataInput.readUTF(); value = dataInput.readObject(); created = dataInput.readObject(); updated = dataInput.readObject(); } @Override public void loadJson(JsonObject json) { if (json != null) { this.token = json.getString("token", this.token); this.userToken = json.getString("userToken", this.userToken); this.key = json.getString("key", this.key); this.value = json.getField("value"); // THIS IS REQUIRED if(json.getValue("created") instanceof JsonObject && json.getObject("created", new JsonObject()).containsField("$numberLong")){ json.putValue("created", Long.valueOf(json.getObject("created", new JsonObject()).getValue("$numberLong"))); } this.created = new Date(json.getLong("created", created.getTime())); // THIS IS REQUIRED if(json.getValue("updated") instanceof JsonObject && json.getObject("updated", new JsonObject()).containsField("$numberLong")){ json.putValue("updated", Long.valueOf(json.getObject("updated", new JsonObject()).getValue("$numberLong"))); } this.updated = new Date(json.getLong("updated", updated.getTime())); } } @Override public JsonObject toJson() { JsonObject ret = new JsonObject(Json.encode(this)); ret.putString("token", token); ret.putNumber("created", created.getTime()); ret.putNumber("updated", updated.getTime()); ret.removeField("factoryId"); ret.removeField("id"); return ret; } public String token() { return token; } @Override public int getFactoryId() { return IdentifiedDataTypeFactory.FACTORY_ID; } @Override public int getId() { return IdentifiedDataTypeFactory.META_TYPE; } }