
net.vvakame.util.jsonpullparser.builder.JsonModelBuilder Maven / Gradle / Ivy
package net.vvakame.util.jsonpullparser.builder;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* JSON model builder.
* @author vvakame
* @param
*/
public abstract class JsonModelBuilder {
protected Class baseClass;
protected boolean treatUnknownKeyAsError;
protected Map> map =
new LinkedHashMap>();
/**
* the constructor.
* @param baseClass
* @param treatUnknownKeyAsError
* @category constructor
*/
public JsonModelBuilder(Class baseClass, boolean treatUnknownKeyAsError) {
this.baseClass = baseClass;
this.treatUnknownKeyAsError = treatUnknownKeyAsError;
}
/**
* Attaches property builder for the all types.
* @return this
* @author vvakame
*/
public abstract JsonModelBuilder addAll();
/**
* Attaches property builder for the given types.
* @param creators
* @return this
* @author vvakame
*/
public JsonModelBuilder add(JsonPropertyBuilderCreator... creators) {
for (JsonPropertyBuilderCreator creator : creators) {
addSub(creator. get());
}
return this;
}
/**
* Attaches property builder for the given types.
* @param creator
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator) {
addSub(creator. get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2) {
addSub(creator1. get());
addSub(creator2.
get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3) {
addSub(creator1. get());
addSub(creator2.
get());
addSub(creator3.
get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4) {
addSub(creator1. get());
addSub(creator2.
get());
addSub(creator3.
get());
addSub(creator4.
get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5) {
addSub(creator1. get());
addSub(creator2.
get());
addSub(creator3.
get());
addSub(creator4.
get());
addSub(creator5.
get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6) {
addSub(creator1. get());
addSub(creator2.
get());
addSub(creator3.
get());
addSub(creator4.
get());
addSub(creator5.
get());
addSub(creator6.
get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @param creator7
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6, JsonPropertyBuilderCreator creator7) {
addSub(creator1. get());
addSub(creator2.
get());
addSub(creator3.
get());
addSub(creator4.
get());
addSub(creator5.
get());
addSub(creator6.
get());
addSub(creator7.
get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @param creator7
* @param creator8
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6, JsonPropertyBuilderCreator creator7,
JsonPropertyBuilderCreator creator8) {
addSub(creator1. get());
addSub(creator2.
get());
addSub(creator3.
get());
addSub(creator4.
get());
addSub(creator5.
get());
addSub(creator6.
get());
addSub(creator7.
get());
addSub(creator8.
get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @param creator7
* @param creator8
* @param creator9
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6, JsonPropertyBuilderCreator creator7,
JsonPropertyBuilderCreator creator8, JsonPropertyBuilderCreator creator9) {
addSub(creator1. get());
addSub(creator2.
get());
addSub(creator3.
get());
addSub(creator4.
get());
addSub(creator5.
get());
addSub(creator6.
get());
addSub(creator7.
get());
addSub(creator8.
get());
addSub(creator9.
get());
return this;
}
/**
* Attaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @param creator7
* @param creator8
* @param creator9
* @param creator10
* @return this
* @author vvakame
*/
public
JsonModelBuilder add(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6, JsonPropertyBuilderCreator creator7,
JsonPropertyBuilderCreator creator8, JsonPropertyBuilderCreator creator9,
JsonPropertyBuilderCreator creator10) {
addSub(creator1. get());
addSub(creator2.
get());
addSub(creator3.
get());
addSub(creator4.
get());
addSub(creator5.
get());
addSub(creator6.
get());
addSub(creator7.
get());
addSub(creator8.
get());
addSub(creator9.
get());
addSub(creator10.
get());
return this;
}
protected
void addSub(JsonPropertyBuilder builder) {
map.put(builder.name, builder);
}
/**
* Detaches property builder for the given types.
* @param creators
* @return this
* @author vvakame
*/
public JsonModelBuilder rm(JsonPropertyBuilderCreator... creators) {
for (JsonPropertyBuilderCreator creator : creators) {
rmSub(creator. get());
}
return this;
}
protected
void rmSub(JsonPropertyBuilder builder) {
map.remove(builder.name);
}
/**
* Detaches property builder for the given types.
* @param creator
* @return this
* @author vvakame
*/
public JsonModelBuilder rm(JsonPropertyBuilderCreator creator) {
rmSub(creator. get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2) {
rmSub(creator1. get());
rmSub(creator2.
get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3) {
rmSub(creator1. get());
rmSub(creator2.
get());
rmSub(creator3.
get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4) {
rmSub(creator1. get());
rmSub(creator2.
get());
rmSub(creator3.
get());
rmSub(creator4.
get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5) {
rmSub(creator1. get());
rmSub(creator2.
get());
rmSub(creator3.
get());
rmSub(creator4.
get());
rmSub(creator5.
get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6) {
rmSub(creator1. get());
rmSub(creator2.
get());
rmSub(creator3.
get());
rmSub(creator4.
get());
rmSub(creator5.
get());
rmSub(creator6.
get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @param creator7
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6, JsonPropertyBuilderCreator creator7) {
rmSub(creator1. get());
rmSub(creator2.
get());
rmSub(creator3.
get());
rmSub(creator4.
get());
rmSub(creator5.
get());
rmSub(creator6.
get());
rmSub(creator7.
get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @param creator7
* @param creator8
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6, JsonPropertyBuilderCreator creator7,
JsonPropertyBuilderCreator creator8) {
rmSub(creator1. get());
rmSub(creator2.
get());
rmSub(creator3.
get());
rmSub(creator4.
get());
rmSub(creator5.
get());
rmSub(creator6.
get());
rmSub(creator7.
get());
rmSub(creator8.
get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @param creator7
* @param creator8
* @param creator9
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6, JsonPropertyBuilderCreator creator7,
JsonPropertyBuilderCreator creator8, JsonPropertyBuilderCreator creator9) {
rmSub(creator1. get());
rmSub(creator2.
get());
rmSub(creator3.
get());
rmSub(creator4.
get());
rmSub(creator5.
get());
rmSub(creator6.
get());
rmSub(creator7.
get());
rmSub(creator8.
get());
rmSub(creator9.
get());
return this;
}
/**
* Detaches property builder for the given types.
* @param creator1
* @param creator2
* @param creator3
* @param creator4
* @param creator5
* @param creator6
* @param creator7
* @param creator8
* @param creator9
* @param creator10
* @return this
* @author vvakame
*/
public
JsonModelBuilder rm(JsonPropertyBuilderCreator creator1,
JsonPropertyBuilderCreator creator2, JsonPropertyBuilderCreator creator3,
JsonPropertyBuilderCreator creator4, JsonPropertyBuilderCreator creator5,
JsonPropertyBuilderCreator creator6, JsonPropertyBuilderCreator creator7,
JsonPropertyBuilderCreator creator8, JsonPropertyBuilderCreator creator9,
JsonPropertyBuilderCreator creator10) {
rmSub(creator1. get());
rmSub(creator2.
get());
rmSub(creator3.
get());
rmSub(creator4.
get());
rmSub(creator5.
get());
rmSub(creator6.
get());
rmSub(creator7.
get());
rmSub(creator8.
get());
rmSub(creator9.
get());
rmSub(creator10.
get());
return this;
}
/**
* Detaches property builder for the given names.
* @param names
* @return this
* @author vvakame
*/
public JsonModelBuilder rm(String... names) {
for (String name : names) {
rmSub(name);
}
return this;
}
protected void rmSub(String name) {
map.remove(name);
}
/**
* Sets if the exception should be thrown upon deserializing unknown keys.
* @param treatUnknownKeyAsError
* @return this
* @author vvakame
*/
public JsonModelBuilder treatUnknownKeyAsError(boolean treatUnknownKeyAsError) {
this.treatUnknownKeyAsError = treatUnknownKeyAsError;
return this;
}
/**
* Fixiates the current state for coding.
* @return A JsonModelCoder instance for the actual coding.
* @author vvakame
*/
public JsonModelCoder fix() {
Map> properties =
new LinkedHashMap>();
for (String key : map.keySet()) {
JsonPropertyBuilder builder = map.get(key);
JsonPropertyCoder fixed = builder.fix();
properties.put(key, fixed);
}
JsonModelCoder fixed =
new JsonModelCoder(baseClass, treatUnknownKeyAsError, properties);
return fixed;
}
}