/** * */ package xapi.model.impl; import xapi.collect.X_Collect; import xapi.collect.api.IntTo; import xapi.model.api.PrimitiveSerializer; import xapi.source.api.CharIterator; /** * @author James X. Nelson (james@wetheinter.net, @james) * */ public class ClusteringPrimitiveDeserializer extends DelegatingPrimitiveSerializer { private final IntTo<String> values; public ClusteringPrimitiveDeserializer(final PrimitiveSerializer primitives, final CharIterator in) { super(primitives); values = X_Collect.newList(String.class); int size = primitives.deserializeInt(in); while (size --> 0) { values.add(primitives.deserializeString(in)); } } @Override public String serializeClass(final Class<?> c) { // This class should only be used for deserializing. throw new UnsupportedOperationException(); } @Override public String serializeString(final String s) { // This class should only be used for deserializing. throw new UnsupportedOperationException(); } @Override public String deserializeString(final CharIterator s) { final int pos = deserializeInt(s); if (pos == -1) { return null; } return values.at(pos); } @Override public <C> Class<C> deserializeClass(final CharIterator c) { final int pos = deserializeInt(c); if (pos == -1) { return null; } final String value = values.at(pos); return loadClass(value); } }