package com.bagri.client.hazelcast.serialize.system;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import com.bagri.client.hazelcast.serialize.DataSerializationFactoryImpl;
import com.bagri.core.model.Element;
import com.bagri.core.system.Collection;
import com.bagri.core.system.Fragment;
import com.bagri.core.system.Index;
import com.bagri.core.system.Module;
import com.bagri.core.system.Resource;
import com.bagri.core.system.Schema;
import com.bagri.core.system.TriggerDefinition;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.StreamSerializer;
public class SchemaSerializer extends EntitySerializer implements StreamSerializer<Schema> {
@Override
public int getTypeId() {
return DataSerializationFactoryImpl.cli_XDMSchema;
}
@Override
public Schema read(ObjectDataInput in) throws IOException {
Object[] entity = super.readEntity(in);
Schema xSchema = new Schema(
(int) entity[0],
(Date) entity[1],
(String) entity[2],
in.readUTF(),
in.readUTF(),
in.readBoolean(),
(Properties) in.readObject());
int size = in.readInt();
for (int i=0; i < size; i++) {
Collection cln = in.readObject();
xSchema.addCollection(cln);
}
size = in.readInt();
for (int i=0; i < size; i++) {
Fragment fgt = in.readObject();
xSchema.addFragment(fgt);
}
size = in.readInt();
for (int i=0; i < size; i++) {
Index idx = in.readObject();
xSchema.addIndex(idx);
}
size = in.readInt();
for (int i=0; i < size; i++) {
Resource res = in.readObject();
xSchema.addResource(res);
}
size = in.readInt();
for (int i=0; i < size; i++) {
TriggerDefinition trg = in.readObject();
xSchema.addTrigger(trg);
}
return xSchema;
}
@Override
public void write(ObjectDataOutput out, Schema xSchema) throws IOException {
super.writeEntity(out, xSchema);
out.writeUTF(xSchema.getName());
out.writeUTF(xSchema.getDescription());
out.writeBoolean(xSchema.isActive());
out.writeObject(xSchema.getProperties());
out.writeInt(xSchema.getCollections().size());
for (Collection collection: xSchema.getCollections()) {
out.writeObject(collection);
}
out.writeInt(xSchema.getFragments().size());
for (Fragment fragment: xSchema.getFragments()) {
out.writeObject(fragment);
}
out.writeInt(xSchema.getIndexes().size());
for (Index index: xSchema.getIndexes()) {
out.writeObject(index);
}
out.writeInt(xSchema.getResources().size());
for (Resource resource: xSchema.getResources()) {
out.writeObject(resource);
}
out.writeInt(xSchema.getTriggers().size());
for (TriggerDefinition trigger: xSchema.getTriggers()) {
out.writeObject(trigger);
}
}
}