package org.aplikator.client.shared.rpc.marshaller;
import org.aplikator.client.shared.descriptor.EntityDTO;
import org.aplikator.client.shared.descriptor.PropertyDTO;
import org.jboss.errai.marshalling.client.api.Marshaller;
import org.jboss.errai.marshalling.client.api.MarshallingSession;
import org.jboss.errai.marshalling.client.api.annotations.ClientMarshaller;
import org.jboss.errai.marshalling.client.api.annotations.ServerMarshaller;
import org.jboss.errai.marshalling.client.api.json.EJObject;
import org.jboss.errai.marshalling.client.api.json.EJValue;
import org.jboss.errai.marshalling.client.marshallers.AbstractNullableMarshaller;
@ClientMarshaller(EntityDTO.class)
@ServerMarshaller(EntityDTO.class)
public class EntityDTOMarshaller extends AbstractNullableMarshaller<EntityDTO> {
/*@Override
public Class<EntityDTO> getTypeHandled() {
return EntityDTO.class;
}*/
@Override
public EntityDTO[] getEmptyArray() {
return new EntityDTO[0];
}
@Override
public EntityDTO doNotNullDemarshall(EJValue o, MarshallingSession ctx) {
if (o.isObject() != null) {
EJObject ejObject = o.isObject();
EntityDTO edto = new EntityDTO();
DemarshallingUtils.clientDescriptorBaseUnMarshall(ejObject, edto);
Marshaller<Object> marsh = ctx
.getMarshallerInstance(PropertyDTO.class.getName());
PropertyDTO pk = (PropertyDTO) marsh.demarshall(
ejObject.get("primaryKey"), ctx);
edto.setPrimaryKey(pk);
if (ejObject.containsKey("indexed")) {
edto.setIndexed(ejObject.get("indexed").isBoolean()
.booleanValue());
}
return edto;
} else
return null;
}
@Override
public String doNotNullMarshall(EntityDTO o, MarshallingSession ctx) {
StringBuilder builder = new StringBuilder().append('{');
MarshallingUtils.clientDescriptorBase(builder, o).append(',');
MarshallingUtils.key("primaryKey", builder).append(':');
Marshaller<Object> marsh = ctx.getMarshallerInstance(PropertyDTO.class
.getName());
builder.append(marsh.marshall(o.getPrimaryKey(), ctx)).append(',');
MarshallingUtils.bool("indexed", o.isIndexed(), builder);
builder.append('}');
return builder.toString();
}
}