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 Compound.Part. */ @Generated("net.nullschool.grains.generate.GrainGenerator") public enum PartFactory implements GrainFactory { INSTANCE; private static final ConstMap<String, GrainProperty> $PROPERTIES = GrainTools.asPropertyMap( new SimpleGrainProperty("make", int.class), new SimpleGrainProperty("model", int.class)); private static final String[] $KEYS = $PROPERTIES.keySet().toArray(new String[2]); private static final PartGrain $DEFAULT = newBuilder().build(); public static PartGrain defaultValue() { return $DEFAULT; } public static PartBuilder newBuilder() { return new PartBuilderImpl(); } public ConstMap<String, GrainProperty> getBasisProperties() { return $PROPERTIES; } public PartGrain getDefaultValue() { return defaultValue(); } public PartBuilder getNewBuilder() { return newBuilder(); } public String toString() { return getClass().getName(); } /** * Code generated implementation of PartGrain. */ @PublicInterfaceRef(PartGrain.class) @GrainFactoryRef(PartFactory.class) private static final class PartGrainImpl extends AbstractGrain implements PartGrain, Serializable { private final int make; private final int model; private final ConstSortedMap<String, Object> $extensions; private PartGrainImpl( int make, int model, ConstSortedMap<String, Object> $extensions) { this.make = make; this.model = model; 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 getMake() { return make; } public PartGrain withMake(int make) { return new PartGrainImpl( make, model, $extensions); } public int getModel() { return model; } public PartGrain withModel(int model) { return new PartGrainImpl( make, model, $extensions); } public Object get(Object $key) { switch ((String)$key) { case "make": return getMake(); case "model": return getModel(); default: return $extensions.get($key); } } private PartGrain with(String $key, Object $value, boolean $dissoc) { switch ($key) { case "make": return withMake($value == null ? 0 : (int)$value); case "model": return withModel($value == null ? 0 : (int)$value); } ConstSortedMap<String, Object> $newExtensions = $dissoc ? $extensions.without($key) : $extensions.with($key, $value); if ($newExtensions == $extensions) { return this; } return new PartGrainImpl( make, model, $newExtensions); } public PartGrain with(String $key, Object $value) { return with($key, $value, false); } public PartGrain withAll(Map<? extends String, ?> $map) { return $map.isEmpty() ? this : MapTools.putAll(newBuilder(), $map).build(); } public PartGrain without(Object $key) { return with((String)$key, null, true); } public PartGrain withoutAll(Collection<?> $keys) { return $keys.isEmpty() ? this : MapTools.removeAll(newBuilder(), $keys).build(); } public PartBuilder newBuilder() { PartBuilderImpl $builder = new PartBuilderImpl(); $builder.make = this.make; $builder.model = this.model; $builder.$extensions.putAll(this.$extensions); return $builder; } public ConstMap<String, Object> extensions() { return $extensions; } private Object writeReplace() { return new PartGrainProxy().setPayload(this); } private void readObject(ObjectInputStream in) throws InvalidObjectException { throw new InvalidObjectException("proxy expected"); } } /** * Code generated serialization proxy for serializing instances of PartGrainImpl. */ private static final class PartGrainProxy extends AbstractGrainProxy { private static final long serialVersionUID = 1; protected PartBuilder newBuilder() { return PartFactory.newBuilder(); } } /** * Code generated implementation of PartBuilder. */ @PublicInterfaceRef(PartBuilder.class) @GrainFactoryRef(PartFactory.class) private static final class PartBuilderImpl extends AbstractGrainBuilder implements PartBuilder { private int make; private int model; 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 getMake() { return make; } public PartBuilder setMake(int make) { this.make = make; return this; } public int getModel() { return model; } public PartBuilder setModel(int model) { this.model = model; return this; } public Object get(Object $key) { switch ((String)$key) { case "make": return getMake(); case "model": return getModel(); default: return $extensions.get($key); } } private Object put(String $key, Object $value, boolean $dissoc) { Object $original; switch ($key) { case "make": $original = getMake(); setMake($value == null ? 0 : (int)$value); return $original; case "model": $original = getModel(); setModel($value == null ? 0 : (int)$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 PartGrain build() { return new PartGrainImpl( make, model, BasicCollections.asSortedMap($extensions)); } } }