package net.sf.minuteProject.plugin.mapping; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; import net.sf.minuteProject.configuration.bean.GeneratorBean; import net.sf.minuteProject.configuration.bean.Template; import net.sf.minuteProject.loader.mapping.node.Bean; import net.sf.minuteProject.loader.mapping.node.BeanAttribute; import net.sf.minuteProject.loader.mapping.node.BeanMap; import net.sf.minuteProject.loader.mapping.node.BeanMapping; import net.sf.minuteProject.loader.mapping.node.BeanMappingProperties; import net.sf.minuteProject.loader.mapping.node.BeanMappingProperty; import net.sf.minuteProject.loader.mapping.node.BeanMappings; import net.sf.minuteProject.loader.mapping.node.Service; import net.sf.minuteProject.loader.mapping.node.Validation; import net.sf.minuteProject.loader.mapping.node.ValidationProperty; import net.sf.minuteProject.loader.mapping.node.Variable; import net.sf.minuteProject.utils.CommonUtils; import net.sf.minuteProject.utils.FormatUtils; public class MappingMapBeanUtils { public static final String DEFAULT_STRING_RETURN = ""; public static final String BEAN_OBJECT_TEMPLATE = "BeanObject"; public static final String VALIDATION_WRAPPER_TEMPLATE = "ValidationWrapper"; public static final String NAME_INFO = "NAME"; public static final String PACKAGE_INFO = "PACKAGE"; public static final String DEFAULT_SUPER_CLASS = "DEFAULT_SUPER_CLASS"; public static final String DEFAULT_SUPER_CLASS_OTHERWISE_SPECIFIED = "DEFAULT_SUPER_CLASS_OTHERWISE_SPECIFIED"; public String getTypeFormObjectVariable (String variable, String objectName, BeanMapping beanMapping) { Bean bean = getBean(beanMapping, objectName); for (BeanAttribute att : bean.getAttributes()) { if (att.getName().equals(variable)) return getType(att); } return "NOT TYPE FOUND"; } private String getType (BeanAttribute beanAttribute) { String type = beanAttribute.getType(); if (type!=null && type.equals("")) return beanAttribute.getRefType(); return type; } private BeanAttribute getBeanAttribute (String beanName, String attributeName, BeanMap beanMap) { Bean bean = getBean(beanMap, beanName); if (bean!=null) { getBeanAttribute(bean, attributeName); } return null; } private BeanAttribute getBeanAttribute (Bean bean, String attributeName) { return bean.getFirstBeanAttributeFromAttributeByName(attributeName); } private String getBeanAttributeClassName (Bean bean, String attributeName) { BeanAttribute beanAttribute = getBeanAttribute (bean, attributeName); if (beanAttribute!=null) return getType(beanAttribute); return "NO_CLASSNAME"; } public String getPackageName(BeanAttribute beanAttribute) { if (beanAttribute==null) return "ATTRIBUTE_DOES_NOT_HAVE_PACKAGE"; String packageName = beanAttribute.getPackageName(); if (packageName==null) return "ATTRIBUTE_DOES_NOT_HAVE_PACKAGE"; if (!packageName.equals("")) return packageName; Bean attributeBean = getBean(beanAttribute); if (attributeBean==null) return "ATTRIBUTE_DOES_NOT_HAVE_PACKAGE"; return attributeBean.getPackageName(); } public String getPackageName(BeanMapping beanMapping, Template template) { return beanMapping.getPackageName(); } public String getPackageName (Bean bean) { return getPackageForBean(bean); } public String getPackageForBean (BeanMapping beanMapping, String beanName) { return getPackageForBean(getBean(beanMapping, beanName)); } public String getPackageForBean (BeanMap beanMap, String beanName) { return getPackageForBean(getBean(beanMap, beanName)); } public String getPackageForBean (Bean bean) { if (bean!=null) return bean.getPackageName(); return "NO_PACKAGE_SPECIFIED"; } public Bean getBean (BeanMap beanMap, String beanName) { for (Bean bean: beanMap.getBeans().getBeans()) { if (bean.getName().equals(beanName)) return bean; } return null; } public Bean getBean (BeanMapping beanMapping, String beanName) { BeanMap beanMap = beanMapping.getBeanMap(); return getBean(beanMap, beanName); } public Bean getBean (BeanAttribute beanAttribute) { // BeanMap beanMap = beanMapping.getBeanMap(); for (Bean bean: beanAttribute.getBeanMap().getBeans().getBeans()) { if (bean.getName().equals(beanAttribute.getRefType())) return bean; } // no reference found return null; } public String getBeanClassName (Bean bean, Template template) { if (bean!=null) { Template templateTarget = CommonUtils.getTargetTemplate(template, BEAN_OBJECT_TEMPLATE); return CommonUtils.getClassName(bean, templateTarget); } return "BEAN CANNOT BE NULL"; } public String getBeanClassName (String beanName, BeanMapping beanMapping, Template template) { Bean bean = getBean(beanMapping, beanName); return getBeanClassName(bean, template); } public String getBeanClassName (String beanName, BeanMap beanMap, Template template) { Bean bean = getBean(beanMap, beanName); return getBeanClassName(bean, template); } public String getBeanClassName (BeanAttribute beanAttribute, Template template) { Bean bean = getBean(beanAttribute); if (bean!=null) { getBeanClassName(bean, template); } return FormatUtils.firstUpperCase(beanAttribute.getRefType()); } public BeanMappingProperty[] getSimpleProperties (BeanMappingProperties beanMappingProperties) { return beanMappingProperties.getMapPropertysArray(); } public boolean isCallMapping (BeanMappingProperty beanMappingProperty) { if (beanMappingProperty.getCallMapping()!=null && !beanMappingProperty.getCallMapping().equals("")) return true; return false; } public boolean isLoop (BeanMappingProperty beanMappingProperty) { if (beanMappingProperty.getIsLoop()!=null && !beanMappingProperty.getIsLoop().equals("")) return true; return false; } public BeanMapping getCalledBeanMapping (BeanMappingProperty beanMappingProperty) { if (isCallMapping(beanMappingProperty)) { String calledBeanMapping = beanMappingProperty.getCallMapping(); BeanMappings beanMappings = beanMappingProperty.getBeanMap().getMappings(); for (BeanMapping beanMapping : beanMappings.getMappings()) { if (beanMapping.getName().equals(calledBeanMapping)) return beanMapping; } } return null; } public int getPathLevel (BeanMappingProperty beanMappingProperty) { String what = beanMappingProperty.getWhat(); if (what!=null) { return getPathLevel(what); } return 0; } public int getPathLevel (String beanPath) { StringTokenizer st = new StringTokenizer(beanPath, "."); return st.countTokens(); } public String getAvoidNullPointerTest (BeanMapping beanMapping, BeanMappingProperty beanMappingProperty) { String what = beanMappingProperty.getWhat(); String originBeanVariable = FormatUtils.getJavaNameVariable(beanMapping.getOriginBean()); return getAvoidNullPointerTest(originBeanVariable, what); } public String getAvoidNullPointerTest (String rootVariable, String beanPath) { List<String> distinctBeanPath = getDistinctBeanPath(beanPath); Iterator iter = distinctBeanPath.iterator(); StringBuffer sb = new StringBuffer("("); while (iter.hasNext()) { String element = (String) iter.next(); String javaPath = getJavaPathFromBeanPath(element); sb.append(rootVariable); sb.append("."); sb.append(javaPath); sb.append("!=null"); if (iter.hasNext()) { sb.append(" && "); } } sb.append(")"); return sb.toString(); } private List<String> getDistinctBeanPath (String beanPath) { List<String> list = new ArrayList<String>(); StringTokenizer st = new StringTokenizer(beanPath, "."); int i=0; StringBuffer sb = new StringBuffer(); while (st.hasMoreTokens()) { String token = st.nextToken(); sb.append(token); list.add(sb.toString()); if (st.hasMoreTokens()) sb.append("."); } return list; } public String getMappingPropertyMethodResult (BeanMapping beanMapping, BeanMappingProperty beanMappingProperty) { String function = beanMappingProperty.getFunction(); String what = beanMappingProperty.getWhat(); String originBeanVariable = FormatUtils.getJavaNameVariable(beanMapping.getOriginBean()); if (function.equals("")) { String whatMappingMethod = getJavaPathFromBeanPath(what); return originBeanVariable+"."+whatMappingMethod; } else { return getFunction (originBeanVariable, beanMappingProperty);//function, what); } } private String getJavaPathFromBeanPath (String beanPath) { StringTokenizer st = new StringTokenizer(beanPath, "."); StringBuffer sb = new StringBuffer(); while (st.hasMoreTokens()) { String token = st.nextToken(); String tokenJavaName = FormatUtils.firstUpperCase(token); sb.append("get"); sb.append(tokenJavaName); sb.append("()"); if (st.hasMoreTokens()) sb.append("."); } return sb.toString(); } public String getFunction (String originBeanVariable, BeanMappingProperty beanMappingProperty) { String function = beanMappingProperty.getFunction(); String what = beanMappingProperty.getWhat(); if (function.equals("concat")) { return getConcatFunction (originBeanVariable, what); } if (function.equals("defaultValue")) { return " new "+getDefaultObjectConstructor(beanMappingProperty)+"(\""+beanMappingProperty.getValue()+"\") "; } return "FUNCTION_NOT_AVAILABLE"; } private String getDefaultObjectConstructor (BeanMappingProperty beanMappingProperty) { return " String "; } private String getConcatFunction(String originBeanVariable, String what) { StringTokenizer st = new StringTokenizer(what, ","); StringBuffer sb = new StringBuffer(); while (st.hasMoreTokens()) { String token = st.nextToken(); String tokenJavaName = FormatUtils.getJavaName(token); sb.append(originBeanVariable); sb.append("."); sb.append("get"); sb.append(tokenJavaName); sb.append("()"); if (st.hasMoreTokens()) sb.append("+"); } return sb.toString(); } // validation part public boolean isMandatoryCheck (ValidationProperty validationProperty) { return isPropertyToCheckBasedOnBoolean(validationProperty.getMandatory()); } public boolean isMaxLengthCheck (ValidationProperty validationProperty) { return isPropertyToCheckBasedOnValue(validationProperty.getMaxLength()); } public boolean isPropertyToCheckBasedOnBoolean (String property) { if (property!=null && property.equals("true")) return true; return false; } public boolean isPropertyToCheckBasedOnValue (String property) { if (property!=null && !property.equals(DEFAULT_STRING_RETURN)) return true; return false; } public String getValidationMethodName (ValidationProperty validationProperty) { String name = validationProperty.getFunction(); if (!name.equals(DEFAULT_STRING_RETURN)) return name; else { String what = validationProperty.getWhat(); if (!what.equals(DEFAULT_STRING_RETURN)) { return getValidationMethodName(what); } return "NO_VALIDATION_NAME_FOUND"; } } private String getValidationMethodName (String name) { String nameFormat = FormatUtils.firstUpperCaseOnly(name); return "validate"+nameFormat; } public boolean isValidationOfABean (Validation validation) { return isPropertyToCheckBasedOnValue(validation.getBean()); } public Bean getValidationBean (Validation validation) { if (isValidationOfABean(validation)) { return getBean(validation.getBeanMap(), validation.getBean()); } return null; } public String getVariableFunctionParam (Variable variable, Bean validationBean, Template template) { return getVariableFunctionParam(variable, validationBean, template, false); } public String getVariableFunctionTypeAndParam (Variable variable, Bean validationBean, Template template) { return getVariableFunctionParam(variable, validationBean, template, true); } public String getVariableFunctionParam (Variable variable, Bean validationBean, Template template, boolean withType) { String functionParam = variable.getFunctionParam(); // variable.getBeanMap(); StringTokenizer st = new StringTokenizer(functionParam, ","); StringBuffer sb = new StringBuffer(); while (st.hasMoreTokens()) { String attribute = st.nextToken(); if (withType) { String tokenJavaName = getBeanAttributeClassName (validationBean, attribute); sb.append(tokenJavaName); sb.append(" "); } sb.append(attribute); if (st.hasMoreTokens()) sb.append(", "); } return sb.toString(); } public String getBeanDefaultSuperOtherwiseSpecifiedInfo (BeanMap beanMap, Bean bean, String info) { String superInfo = getBeanSuperInfo (beanMap, bean, info); if (superInfo!=null && !superInfo.equals(DEFAULT_STRING_RETURN)) return superInfo; return getBeanDefaultSuperInfo (info); } private String getBeanSuperInfo (BeanMap beanMap, Bean bean, String info) { if (!bean.getExtendType().equals(DEFAULT_STRING_RETURN)) { Bean superBean = getBean(bean.getBeanMap(), bean.getExtendType()); if (superBean!=null) { if (info.equals(NAME_INFO)) return superBean.getName(); if (info.equals(PACKAGE_INFO)) return superBean.getPackageName(); } } return DEFAULT_STRING_RETURN; } public String getBeanSuperName (Template template, BeanMap beanMap, Bean bean) { return getBeanSuperInfo(template, beanMap, bean, NAME_INFO); } public String getBeanSuperPackage (Template template, BeanMap beanMap, Bean bean) { return getBeanSuperInfo(template, beanMap, bean, PACKAGE_INFO); } private String getBeanSuperInfo (Template template, BeanMap beanMap, Bean bean, String info) { if (template.getIsTrueProperty(DEFAULT_SUPER_CLASS_OTHERWISE_SPECIFIED)) return getBeanDefaultSuperOtherwiseSpecifiedInfo(beanMap, bean, info); if (template.getIsTrueProperty(DEFAULT_SUPER_CLASS)) return getBeanDefaultSuperInfo (info); return getBeanSuperInfo(beanMap, bean, info); } private String getBeanDefaultSuperInfo (String info) { if (info.equals(NAME_INFO)) return "DataTransferObject"; if (info.equals(PACKAGE_INFO)) return "net.sf.minuteProject.architecture.bsla.dto"; return DEFAULT_STRING_RETURN; } public boolean isToGenerateBasedOnIsNotInPackage(Template template, GeneratorBean generatorBean) { return !isToGenerateBasedOnIsInPackage(template, generatorBean); } public boolean isToGenerateBasedOnIsInPackage(Template template, GeneratorBean generatorBean) { if (generatorBean instanceof Bean) { Bean bean = (Bean)generatorBean; return bean.isInPackage(); } if (generatorBean instanceof Service) { Service service = (Service)generatorBean; return service.isInPackage(); } return false; } public Validation getValidator(ValidationProperty validationProperty) { if (!validationProperty.getValidator().equals("")){ return getValidatorFromValidationProperty(validationProperty); } return null; } public Validation getValidatorFromValidationProperty(ValidationProperty validationProperty) { for (Validation validation : validationProperty.getBeanMap().getValidations().getValidations()) { if (validation.getName()!=null && validation.getName().equals(validationProperty.getValidator())) return validation; } return null; } public String getValidatorClassName (Validation validation, Template template) { if (validation!=null) { Template templateTarget = CommonUtils.getTargetTemplate(template, VALIDATION_WRAPPER_TEMPLATE); return CommonUtils.getClassName(validation, templateTarget); } return "VALIDATION CANNOT BE NULL"; } }