package org.neo4j.smack.serialization.strategy;
import java.util.Collections;
import java.util.Map;
import org.neo4j.graphdb.DynamicRelationshipType;
import org.neo4j.smack.api.UrlReverseLookerUpper;
import org.neo4j.smack.serialization.DeserializationStrategy;
import org.neo4j.smack.serialization.Deserializer;
/**
* Deserializes a relationship
*/
public class RelationshipCreationDeserializationStrategy implements
DeserializationStrategy<RelationshipCreationDescription> {
private static final String TYPE_KEY = "type";
private static final String TO_KEY = "to";
private static final String DATA_KEY = "data";
// TODO: Use some object pooling pattern to re-use RelationshipCreationDescription instances
@Override
public RelationshipCreationDescription deserialize(Deserializer in)
{
RelationshipCreationDescription desc = new RelationshipCreationDescription();
Map<String, Object> raw = in.readMap();
desc.setType(DynamicRelationshipType.withName((String) raw.get(TYPE_KEY)));
desc.setEndNodeId(UrlReverseLookerUpper.nodeId((String)raw.get(TO_KEY)));
@SuppressWarnings("unchecked")
Map<String,Object> properties = raw.containsKey(DATA_KEY) ? (Map<String,Object>)raw.get(DATA_KEY) : Collections.<String,Object>emptyMap();
desc.setProperties(properties.entrySet().iterator());
return desc;
}
}