package net.karneim.pojobuilder.analysis; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.lang.model.element.AnnotationValue; import net.karneim.pojobuilder.GeneratePojoBuilder; public class Directives { private boolean generateCopyMethod = false; private String copyMethodName = null; private String intoPackage = GeneratePojoBuilder.DEFAULT_PACKAGE; private String builderName = GeneratePojoBuilder.DEFAULT_NAME; private String baseclassName = Object.class.getName(); private String builderInterfaceName = Void.class.getName(); private boolean generateBuilderProperties = false; private boolean generationGap = false; private String setterNamePattern = GeneratePojoBuilder.DEFAULT_SETTER_NAME; private String staticFactoryMethod = GeneratePojoBuilder.DEFAULT_FACTORY_METHOD; private String validatorClassname = Void.class.getName(); private String optionalClassname = Void.class.getName(); private List<PropertyPattern> includeProperties = new ArrayList<PropertyPattern>(); private List<PropertyPattern> excludeProperties = new ArrayList<PropertyPattern>(); @SuppressWarnings("unchecked") public Directives(Map<String, Object> valueMap) { if (valueMap == null) { throw new NullPointerException("valueMap must not be null!"); } baseclassName = (String) valueMap.get("withBaseclass"); builderInterfaceName = (String) valueMap.get("withBuilderInterface"); generateBuilderProperties = (Boolean) valueMap.get("withBuilderProperties"); builderName = (String) valueMap.get("withName"); intoPackage = (String) valueMap.get("intoPackage"); generationGap = (Boolean) valueMap.get("withGenerationGap"); generateCopyMethod = (Boolean) valueMap.get("withCopyMethod"); if (generateCopyMethod) { copyMethodName = "copy"; // TODO make configurable in annotation! } setterNamePattern = (String) valueMap.get("withSetterNamePattern"); staticFactoryMethod = (String) valueMap.get("withFactoryMethod"); validatorClassname = (String) valueMap.get("withValidator"); optionalClassname = (String) valueMap.get("withOptionalProperties"); includeProperties = newList((List<AnnotationValue>) valueMap.get("includeProperties")); excludeProperties = newList((List<AnnotationValue>) valueMap.get("excludeProperties")); } private List<PropertyPattern> newList(List<AnnotationValue> array) { List<PropertyPattern> result = new ArrayList<PropertyPattern>(array.size()); for (AnnotationValue elem : array) { result.add(new PropertyPattern(String.valueOf(elem.getValue()))); } return result; } public boolean isGenerateCopyMethod() { return generateCopyMethod; } public void setGenerateCopyMethod(boolean generateCopyMethod) { this.generateCopyMethod = generateCopyMethod; } public String getCopyMethodName() { return copyMethodName; } public void setCopyMethodName(String copyMethodName) { this.copyMethodName = copyMethodName; } public String getValidatorClassname() { return validatorClassname; } public void setValidatorClassname(String validatorClassname) { this.validatorClassname = validatorClassname; } public boolean isGenerationGap() { return generationGap; } public boolean isGenerateBuilderProperties() { return generateBuilderProperties; } public void setGenerateBuilderProperties(boolean generateBuilderProperties) { this.generateBuilderProperties = generateBuilderProperties; } public void setGenerationGap(boolean generationGap) { this.generationGap = generationGap; } public void setIntoPackage(String intoPackage) { if (intoPackage == null) { throw new IllegalArgumentException("intoPackage==null"); } if (intoPackage.startsWith("java.")) { throw new AnalysisException("Value for attribute 'intoPackage' must not start with 'java.'"); } this.intoPackage = intoPackage; } public String getIntoPackage() { return intoPackage; } public String getBuilderName() { return builderName; } public void setBuilderName(String builderName) { if (builderName == null || builderName.trim().isEmpty()) { throw new AnalysisException("Value for attribute 'withName' must not be empty."); } this.builderName = builderName; } public void setBaseclassName(String baseclassName) { this.baseclassName = baseclassName; } public String getBaseclassName() { return baseclassName; } public String getBuilderInterfaceName() { return builderInterfaceName; } public void setBuilderInterfaceName(String builderInterfaceName) { this.builderInterfaceName = builderInterfaceName; } public String getSetterNamePattern() { return setterNamePattern; } public void setSetterNamePattern(String pattern) { this.setterNamePattern = pattern; } public String getOptionalClassname() { return optionalClassname; } public void setOptionalClassname(String optionalClassname) { this.optionalClassname = optionalClassname; } public String getStaticFactoryMethod() { return staticFactoryMethod; } public void setStaticFactoryMethod(String staticFactoryMethod) { this.staticFactoryMethod = staticFactoryMethod; } public List<PropertyPattern> getExcludeProperties() { return excludeProperties; } public void setExcludeProperties(List<PropertyPattern> excludeProperties) { this.excludeProperties = excludeProperties; } public List<PropertyPattern> getIncludeProperties() { return includeProperties; } public void setIncludeProperties(List<PropertyPattern> includeProperties) { this.includeProperties = includeProperties; } @Override public String toString() { return "Directives [generateCopyMethod=" + generateCopyMethod + ", copyMethodName=" + copyMethodName + ", intoPackage=" + intoPackage + ", builderName=" + builderName + ", baseclassName=" + baseclassName + ", builderInterfaceName=" + builderInterfaceName + ", generateBuilderProperties=" + generateBuilderProperties + ", generationGap=" + generationGap + ", setterNamePattern=" + setterNamePattern + ", staticFactoryMethod=" + staticFactoryMethod + ", validatorClassname=" + validatorClassname + ", optionalClassname=" + optionalClassname + ", includeProperties=" + includeProperties + ", excludeProperties=" + excludeProperties + "]"; } }