package net.nullschool.grains.generate.model; import java.io.InvalidObjectException; import java.io.ObjectInputStream; import java.io.Serializable; import java.util.Collection; import java.util.Map; import java.util.TreeMap; import javax.annotation.Generated; import net.nullschool.collect.ConstMap; import net.nullschool.collect.ConstSortedMap; import net.nullschool.collect.IteratorTools; import net.nullschool.collect.MapIterator; import net.nullschool.collect.MapTools; import net.nullschool.collect.basic.BasicCollections; import net.nullschool.grains.AbstractGrain; import net.nullschool.grains.AbstractGrainBuilder; import net.nullschool.grains.AbstractGrainProxy; import net.nullschool.grains.GrainFactory; import net.nullschool.grains.GrainFactoryRef; import net.nullschool.grains.GrainProperty; import net.nullschool.grains.GrainTools; import net.nullschool.grains.SimpleGrainProperty; import net.nullschool.reflect.PublicInterfaceRef; /** * Factory for constructing Grain instances of Complete.Node. */ @Generated("net.nullschool.grains.generate.GrainGenerator") public enum NodeFactory implements GrainFactory { INSTANCE; private static final ConstMap<String, GrainProperty> $PROPERTIES = GrainTools.asPropertyMap( new SimpleGrainProperty("id", int.class), new SimpleGrainProperty("complete", CompleteGrain.class)); private static final String[] $KEYS = $PROPERTIES.keySet().toArray(new String[2]); private static final NodeGrain $DEFAULT = newBuilder().build(); public static NodeGrain defaultValue() { return $DEFAULT; } public static NodeBuilder newBuilder() { return new NodeBuilderImpl(); } public ConstMap<String, GrainProperty> getBasisProperties() { return $PROPERTIES; } public NodeGrain getDefaultValue() { return defaultValue(); } public NodeBuilder getNewBuilder() { return newBuilder(); } public String toString() { return getClass().getName(); } /** * Code generated implementation of NodeGrain. */ @PublicInterfaceRef(NodeGrain.class) @GrainFactoryRef(NodeFactory.class) private static final class NodeGrainImpl extends AbstractGrain implements NodeGrain, Serializable { private final int id; private final CompleteGrain complete; private final ConstSortedMap<String, Object> $extensions; private NodeGrainImpl( int id, CompleteGrain complete, ConstSortedMap<String, Object> $extensions) { this.id = id; this.complete = complete; this.$extensions = $extensions; } public int size() { return 2 + $extensions.size(); } public MapIterator<String, Object> iterator() { return IteratorTools.chainMapIterators(new BasisIter($KEYS), $extensions.iterator()); } public int getId() { return id; } public NodeGrain withId(int id) { return new NodeGrainImpl( id, complete, $extensions); } public CompleteGrain getComplete() { return complete; } public NodeGrain withComplete(CompleteGrain complete) { return new NodeGrainImpl( id, complete, $extensions); } public Object get(Object $key) { switch ((String)$key) { case "id": return getId(); case "complete": return getComplete(); default: return $extensions.get($key); } } private NodeGrain with(String $key, Object $value, boolean $dissoc) { switch ($key) { case "id": return withId($value == null ? 0 : (int)$value); case "complete": return withComplete((CompleteGrain)$value); } ConstSortedMap<String, Object> $newExtensions = $dissoc ? $extensions.without($key) : $extensions.with($key, $value); if ($newExtensions == $extensions) { return this; } return new NodeGrainImpl( id, complete, $newExtensions); } public NodeGrain with(String $key, Object $value) { return with($key, $value, false); } public NodeGrain withAll(Map<? extends String, ?> $map) { return $map.isEmpty() ? this : MapTools.putAll(newBuilder(), $map).build(); } public NodeGrain without(Object $key) { return with((String)$key, null, true); } public NodeGrain withoutAll(Collection<?> $keys) { return $keys.isEmpty() ? this : MapTools.removeAll(newBuilder(), $keys).build(); } public NodeBuilder newBuilder() { NodeBuilderImpl $builder = new NodeBuilderImpl(); $builder.id = this.id; $builder.complete = this.complete; $builder.$extensions.putAll(this.$extensions); return $builder; } public ConstMap<String, Object> extensions() { return $extensions; } private Object writeReplace() { return new NodeGrainProxy().setPayload(this); } private void readObject(ObjectInputStream in) throws InvalidObjectException { throw new InvalidObjectException("proxy expected"); } } /** * Code generated serialization proxy for serializing instances of NodeGrainImpl. */ private static final class NodeGrainProxy extends AbstractGrainProxy { private static final long serialVersionUID = 1; protected NodeBuilder newBuilder() { return NodeFactory.newBuilder(); } } /** * Code generated implementation of NodeBuilder. */ @PublicInterfaceRef(NodeBuilder.class) @GrainFactoryRef(NodeFactory.class) private static final class NodeBuilderImpl extends AbstractGrainBuilder implements NodeBuilder { private int id; private CompleteGrain complete; private final TreeMap<String, Object> $extensions = new TreeMap<>(); public int size() { return 2 + $extensions.size(); } public MapIterator<String, Object> iterator() { return IteratorTools.chainMapIterators(new BasisIter($KEYS), IteratorTools.newMapIterator($extensions)); } public int getId() { return id; } public NodeBuilder setId(int id) { this.id = id; return this; } public CompleteGrain getComplete() { return complete; } public NodeBuilder setComplete(CompleteGrain complete) { this.complete = complete; return this; } public Object get(Object $key) { switch ((String)$key) { case "id": return getId(); case "complete": return getComplete(); default: return $extensions.get($key); } } private Object put(String $key, Object $value, boolean $dissoc) { Object $original; switch ($key) { case "id": $original = getId(); setId($value == null ? 0 : (int)$value); return $original; case "complete": $original = getComplete(); setComplete((CompleteGrain)$value); return $original; default: return $dissoc ? $extensions.remove($key) : $extensions.put($key, $value); } } public Object put(String $key, Object $value) { return put($key, $value, false); } public Object remove(Object $key) { return put((String)$key, null, true); } public NodeGrain build() { return new NodeGrainImpl( id, complete, BasicCollections.asSortedMap($extensions)); } } }