
net.vvakame.util.jsonpullparser.builder.JsonPropertyBuilder Maven / Gradle / Ivy
package net.vvakame.util.jsonpullparser.builder;
/**
* JSON property builder.
* @author vvakame
* @param
* @param
*/
public class JsonPropertyBuilder implements JsonPropertyBuilderCreator {
Class extends JsonPropertyCoder> coderClass;
String name;
JsonModelCoder coder;
JsonCoderRouter
router;
/**
* the constructor.
* @param coderClass
* @param name
* @param coder
* @param router
* @category constructor
*/
public JsonPropertyBuilder(Class extends JsonPropertyCoder> coderClass, String name,
JsonModelCoder coder, JsonCoderRouter
router) {
this.coderClass = coderClass;
this.name = name;
this.coder = coder;
this.router = router;
}
@Override
@SuppressWarnings("unchecked")
public JsonPropertyBuilder get() {
return this;
}
/**
* Sets the JSON key name it uses.
* @param name
* @return this
* @author vvakame
*/
public JsonPropertyBuilder name(String name) {
this.name = name;
return this;
}
/**
* Sets the JSON value coder it uses.
* @param coder
* @return this
* @author vvakame
*/
public JsonPropertyBuilder coder(JsonModelCoder coder) {
this.coder = coder;
return this;
}
/**
* Sets the JSON value router it uses.
* @param router
* @return this
* @author vvakame
*/
public JsonPropertyBuilder router(JsonCoderRouter router) {
this.router = router;
return this;
}
/**
* Fixiates the current state for coding.
*
* @return A JsonModelCoder instance for the actual coding.
* @author vvakame
*/
public JsonPropertyCoder fix() {
JsonPropertyCoder coder = null;
try {
coder = coderClass.newInstance();
} catch (InstantiationException e) {
throw new IllegalArgumentException(e);
} catch (IllegalAccessException e) {
throw new IllegalArgumentException(e);
}
coder.name = this.name;
coder.coder = this.coder;
coder.router = this.router;
return coder;
}
}