package net.sf.minuteProject.plugin.mapping; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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.BeanMap; import net.sf.minuteProject.loader.mapping.node.BeanMapping; import net.sf.minuteProject.loader.mapping.node.Call; import net.sf.minuteProject.loader.mapping.node.Function; import net.sf.minuteProject.loader.mapping.node.Service; import net.sf.minuteProject.loader.mapping.node.Variable; public class MappingServiceUtils { public static final String END_PACKAGE_APPENDER = "END_PACKAGE_APPENDER"; public static final String EXPECTED_BUSINESS_PACKAGE = "EXPECTED_BUSINESS_PACKAGE"; public static final String[] JAVA_DEFAULT_OBJECT_AND_PRIMITIVE = {"Boolean", "boolean", "String", "Integer", "int", "Long", "long", "Object"}; MappingMapBeanUtils mappingMapBeanUtils = new MappingMapBeanUtils(); public MappingServiceUtils() { } //TODO set in MappingMapBeanUtils public Bean getOriginTypeFromCallMappingObject (String objectName, BeanMapping beanMapping) { return getTypeFromCallMappingObject(objectName, beanMapping, "ORIGIN"); } public Bean getTargetTypeFromCallMappingObject (String objectName, BeanMapping beanMapping) { return getTypeFromCallMappingObject(objectName, beanMapping, "TARGET"); } public Bean getTypeFromCallMappingObject (String objectName, BeanMapping beanMapping, String direction) { BeanMap beanMap = beanMapping.getBeanMap(); BeanMapping beanMappingCalled = getBeanMapping(objectName, beanMap); if (direction.equals("ORIGIN")) return mappingMapBeanUtils.getBean(beanMap, beanMappingCalled.getOriginBean()) ; if (direction.equals("TARGET")) return mappingMapBeanUtils.getBean(beanMap, beanMappingCalled.getTargetBean()) ; return null; } protected BeanMapping getCalledBeanMapping (String objectName, BeanMapping beanMapping) { BeanMap beanMap = beanMapping.getBeanMap(); return getBeanMapping(objectName, beanMap); } protected BeanMapping getBeanMapping (String objectName, BeanMap beanMap) { for (BeanMapping beanMapping : beanMap.getMappings().getMappings()) { if (beanMapping.getName().equals(objectName)) return beanMapping; } return null; } // public String test() { return "test2"; } public String getServicePackage (Template template, Service service) { String packageName = service.getPackageName(); if (packageName!=null && !packageName.equals("")) return packageName; String rootPackageName = service.getRootPackageName(); String technicalPackageName = service.getTechnicalPackageName(); String businessPackageName = service.getBusinessPackageName(); String servicePackageName = rootPackageName+"."+technicalPackageName+"."+businessPackageName; String appender = template.getPropertyValue(END_PACKAGE_APPENDER); if (appender!=null) { return servicePackageName+"."+appender; } return servicePackageName; } public String getFunctionReturnObject (Template template, Function function) { if (function==null) return ""; String ret = function.getReturn(); if (isAmongDefaultObject(ret)) return ret; if (!ret.equals("")) return mappingMapBeanUtils.getBeanClassName(ret, function.getBeanMap(), template); String holder = function.getHolder(); if (function.isReturnWrappedInHolder()==true && !holder.equals("")) return mappingMapBeanUtils.getBeanClassName(holder, function.getBeanMap(), template); return "void"; } public String getFunctionImportReturnObject (Template template, Function function) { if (function==null) return ""; String ret = function.getReturn(); if (isAmongDefaultObject(ret)) return ""; if (!ret.equals("")) { // Bean bean = mappingMapBeanUtils.getBean(function.getBeanMap(), ret); // return mappingMapBeanUtils.getPackageForBean(bean); return mappingMapBeanUtils.getPackageForBean(function.getBeanMap(), ret); } String holder = function.getHolder(); if (function.isReturnWrappedInHolder()==true && !holder.equals("")) return mappingMapBeanUtils.getPackageForBean(function.getBeanMap(), holder); // return mappingMapBeanUtils.getBeanClassName(holder, function.getBeanMap(), template); return ""; } private boolean isAmongDefaultObject (String input) { for (int i = 0; i < JAVA_DEFAULT_OBJECT_AND_PRIMITIVE.length; i++) { if (JAVA_DEFAULT_OBJECT_AND_PRIMITIVE[i].equals(input)) return true; } return false; } public boolean isToGenerateBasedOnIsNotInPackageAndInBusinessPackage (Template template, GeneratorBean generatorBean) { String expectedBP = template.getPropertyValue(EXPECTED_BUSINESS_PACKAGE); if (expectedBP==null) return false; boolean ret = mappingMapBeanUtils.isToGenerateBasedOnIsNotInPackage(template, generatorBean); if (ret) { if (generatorBean instanceof Service) { Service service = (Service) generatorBean; if (expectedBP.equals(service.getBusinessPackageName())) return true; } } return false; } public String getServiceClassName (Template template, Service service) { if (service==null) return "SERVICE_CANNOT_BE_NULL"; if (template==null) return "TEMPLATE_CANNOT_BE_NULL"; return template.getOutputFileMain(service); } public List<Bean> getFunctionInputObjects(Function function) { List<Bean> list = new ArrayList<Bean>(); // System.out.println("function input ="+function.getInput()); StringTokenizer st = new StringTokenizer(function.getInput(),","); while (st.hasMoreTokens()) { String s = (String) st.nextToken(); // System.out.println("token = "+s); Bean bean = mappingMapBeanUtils.getBean(function.getBeanMap(), s); // System.out.println("bean = "+bean); list.add(bean); } return list; } public List<Bean> getDistinctVariables(Service service) { List<Bean> beans= new ArrayList<Bean>(); Map<String, Bean> map = new HashMap<String, Bean>(); for (Function function : service.getFunctions().getFunctions()) { map.putAll(getDistinctVariables(function)); } beans.addAll(map.values()); return beans; } public Map<String, Bean> getDistinctVariables(Function function) { Map<String, Bean> map = new HashMap<String, Bean>(); for (Variable variable : function.getVariables().getVariables()) { Bean bean = mappingMapBeanUtils.getBean(function.getBeanMap(), variable.getBean()); if (bean!=null) map.put(variable.getName(), bean); } return map; } public List<Service> getDistinctCalledServices(Service service) { List<Service> services= new ArrayList<Service>(); Map<String, Service> map = new HashMap<String, Service>(); for (Function function : service.getFunctions().getFunctions()) { for (Call call : function.getCalls().getCalls()) { Service serviceCalled = getCalledService(call); if (serviceCalled!=null) map.put(call.getService(), serviceCalled); } } services.addAll(map.values()); return services; } public Service getCalledService (Call call) { return getService(call.getBeanMap(), call.getService()); } private Service getService (BeanMap beanMap, String serviceName) { if (serviceName!=null) { for (Service service : beanMap.getServices().getServices()) { String name = service.getName(); if (name==null) break; if (service.getName().equals(serviceName)) return service; } } return null; } }