package com.bagri.client.hazelcast.serialize.system;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.bagri.client.hazelcast.serialize.DataSerializationFactoryImpl;
import com.bagri.core.system.DataType;
import com.bagri.core.system.Function;
import com.bagri.core.system.Parameter;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.StreamSerializer;
public class FunctionSerializer implements StreamSerializer<Function> {
@Override
public void destroy() {
}
@Override
public int getTypeId() {
return DataSerializationFactoryImpl.cli_XDMFunction;
}
@Override
public Function read(ObjectDataInput in) throws IOException {
Function xFunc = new Function(
in.readUTF(),
in.readUTF(),
(DataType) in.readObject(),
in.readUTF(),
in.readUTF());
int cnt = in.readInt();
for (int i=0; i < cnt; i++) {
Parameter xp = in.readObject();
xFunc.getParameters().add(xp);
}
cnt = in.readInt();
for (int i=0; i < cnt; i++) {
String name = in.readUTF();
xFunc.addAnnotation(name, null);
int sz = in.readInt();
for (int j=0; j < sz; j++) {
xFunc.addAnnotation(name, in.readUTF());
}
}
return xFunc;
}
@Override
public void write(ObjectDataOutput out, Function xFunc) throws IOException {
out.writeUTF(xFunc.getClassName());
out.writeUTF(xFunc.getMethod());
out.writeObject(xFunc.getResult());
out.writeUTF(xFunc.getDescription());
out.writeUTF(xFunc.getPrefix());
out.writeInt(xFunc.getParameters().size());
for (Parameter xp: xFunc.getParameters()) {
out.writeObject(xp);
}
out.writeInt(xFunc.getAnnotations().size());
for (Map.Entry<String, List<String>> entry: xFunc.getAnnotations().entrySet()) {
out.writeUTF(entry.getKey());
out.writeInt(entry.getValue().size());
for (String value: entry.getValue()) {
out.writeUTF(value);
}
}
}
}