// Path: src/main/java/de/galan/verjson/core/Versions.java
// public class Versions {
// 
// 	private ListMultimap<Long, Step> steps;
// 	private String namespace;
// 	private Map<Class<?>, JsonSerializer<?>> serializers;
// 	private Map<Class<?>, JsonDeserializer<?>> deserializers;
// 	private SetMultimap<Class<?>, Pair<Class<?>, String>> polys;
// 	private boolean includeTimestamp;
// 
// 
// 	public Versions() {
// 		this(null);
// 	}
// 
// 
// 	public Versions(String namespace) {
// 		setNamespace(namespace);
// 		steps = ArrayListMultimap.create();
// 		serializers = Maps.newHashMap();
// 		deserializers = Maps.newHashMap();
// 		polys = HashMultimap.create();
// 		includeTimestamp = true;
// 	}
// 
// 
// 	public void setNamespace(String namespace) {
// 		this.namespace = namespace;
// 	}
// 
// 
// 	public String getNamespace() {
// 		return namespace;
// 	}
// 
// 
// 	public void configure() {
// 		// can be overriden
// 	}
// 
// 
// 	public ListMultimap<Long, Step> getSteps() {
// 		return steps;
// 	}
// 
// 
// 	public Versions add(Long sourceVersion, Step step) {
// 		if (step != null) {
// 			getSteps().put(sourceVersion, step);
// 		}
// 		return this;
// 	}
// 
// 
// 	public <T> void registerSubclass(Class<T> parentClass, Class<? extends T> childClass, String typeName) {
// 		getRegisteredSubclasses().put(parentClass, new Pair<Class<?>, String>(childClass, typeName));
// 	}
// 
// 
// 	public SetMultimap<Class<?>, Pair<Class<?>, String>> getRegisteredSubclasses() {
// 		return polys;
// 	}
// 
// 
// 	public <T> Versions registerSerializer(JsonSerializer<T> serializer) {
// 		if (serializer != null) {
// 			serializers.put(serializer.getClass(), serializer);
// 		}
// 		return this;
// 	}
// 
// 
// 	public <T> Versions registerDeserializer(JsonDeserializer<T> deserializer) {
// 		if (deserializer != null) {
// 			deserializers.put(deserializer.getClass(), deserializer);
// 		}
// 		return this;
// 	}
// 
// 
// 	public Collection<JsonSerializer<?>> getSerializer() {
// 		return serializers.values();
// 	}
// 
// 
// 	public Collection<JsonDeserializer<?>> getDeserializer() {
// 		return deserializers.values();
// 	}
// 
// 
// 	public boolean isIncludeTimestamp() {
// 		return includeTimestamp;
// 	}
// 
// 
// 	/** A timestamp is added to the meta-data, this can be avoided by setting this property to false */
// 	public void setIncludeTimestamp(boolean includeTimestamp) {
// 		this.includeTimestamp = includeTimestamp;
// 	}
// 
// }


import de.galan.verjson.core.Versions;
package de.galan.verjson.samples.v1;



/**
 * Versions for first version
 * 
 * @author daniel
 */
public class Example1Versions extends Versions {

	@Override
// Path: src/main/java/de/galan/verjson/core/Versions.java
// public class Versions {
// 
// 	private ListMultimap<Long, Step> steps;
// 	private String namespace;
// 	private Map<Class<?>, JsonSerializer<?>> serializers;
// 	private Map<Class<?>, JsonDeserializer<?>> deserializers;
// 	private SetMultimap<Class<?>, Pair<Class<?>, String>> polys;
// 	private boolean includeTimestamp;
// 
// 
// 	public Versions() {
// 		this(null);
// 	}
// 
// 
// 	public Versions(String namespace) {
// 		setNamespace(namespace);
// 		steps = ArrayListMultimap.create();
// 		serializers = Maps.newHashMap();
// 		deserializers = Maps.newHashMap();
// 		polys = HashMultimap.create();
// 		includeTimestamp = true;
// 	}
// 
// 
// 	public void setNamespace(String namespace) {
// 		this.namespace = namespace;
// 	}
// 
// 
// 	public String getNamespace() {
// 		return namespace;
// 	}
// 
// 
// 	public void configure() {
// 		// can be overriden
// 	}
// 
// 
// 	public ListMultimap<Long, Step> getSteps() {
// 		return steps;
// 	}
// 
// 
// 	public Versions add(Long sourceVersion, Step step) {
// 		if (step != null) {
// 			getSteps().put(sourceVersion, step);
// 		}
// 		return this;
// 	}
// 
// 
// 	public <T> void registerSubclass(Class<T> parentClass, Class<? extends T> childClass, String typeName) {
// 		getRegisteredSubclasses().put(parentClass, new Pair<Class<?>, String>(childClass, typeName));
// 	}
// 
// 
// 	public SetMultimap<Class<?>, Pair<Class<?>, String>> getRegisteredSubclasses() {
// 		return polys;
// 	}
// 
// 
// 	public <T> Versions registerSerializer(JsonSerializer<T> serializer) {
// 		if (serializer != null) {
// 			serializers.put(serializer.getClass(), serializer);
// 		}
// 		return this;
// 	}
// 
// 
// 	public <T> Versions registerDeserializer(JsonDeserializer<T> deserializer) {
// 		if (deserializer != null) {
// 			deserializers.put(deserializer.getClass(), deserializer);
// 		}
// 		return this;
// 	}
// 
// 
// 	public Collection<JsonSerializer<?>> getSerializer() {
// 		return serializers.values();
// 	}
// 
// 
// 	public Collection<JsonDeserializer<?>> getDeserializer() {
// 		return deserializers.values();
// 	}
// 
// 
// 	public boolean isIncludeTimestamp() {
// 		return includeTimestamp;
// 	}
// 
// 
// 	/** A timestamp is added to the meta-data, this can be avoided by setting this property to false */
// 	public void setIncludeTimestamp(boolean includeTimestamp) {
// 		this.includeTimestamp = includeTimestamp;
// 	}
// 
// }


// Path: src/test/java/de/galan/verjson/samples/v1/Example1Versions.java
import de.galan.verjson.core.Versions;

package de.galan.verjson.samples.v1;



/**
 * Versions for first version
 * 
 * @author daniel
 */
public class Example1Versions extends Versions {

	@Override
	public void configure() {