package com.intrbiz.bergamot.compat.config.tool; import java.lang.reflect.Method; import java.util.LinkedList; import java.util.List; import com.intrbiz.bergamot.compat.config.model.ConfigObject; import com.intrbiz.bergamot.compat.config.model.NagiosCommandCfg; import com.intrbiz.bergamot.compat.config.model.NagiosContactCfg; import com.intrbiz.bergamot.compat.config.model.NagiosContactgroupCfg; import com.intrbiz.bergamot.compat.config.model.NagiosHostCfg; import com.intrbiz.bergamot.compat.config.model.NagiosHostgroupCfg; import com.intrbiz.bergamot.compat.config.model.NagiosServiceCfg; import com.intrbiz.bergamot.compat.config.model.NagiosServicegroupCfg; import com.intrbiz.bergamot.compat.config.model.NagiosTimeperiodCfg; public class ResolveGenerator { public static boolean containsMethod(Method[] methods, String name) { for (Method method : methods) { if (name.equals(method.getName())) return true; } return false; } public static String generateResolveMethods(Class<? extends ConfigObject<?>> model) { List<Method> getters = new LinkedList<Method>(); // find all getters for (Method method : model.getDeclaredMethods()) { if ((method.getName().startsWith("get") || method.getName().startsWith("is")) && (! containsMethod(model.getDeclaredMethods(), "resolve" + method.getName().substring(method.getName().startsWith("is") ? 2 : 3))) && (!"getObjectName".equals(method.getName()))) { getters.add(method); } } // StringBuilder code = new StringBuilder(); // for (Method getter : getters) { String returnType = getter.getReturnType().getSimpleName(); if ("List".equals(returnType)) returnType = "List<String>"; // code.append("\r\n"); code.append(" public ").append(returnType).append(" resolve").append(getter.getName().substring(getter.getName().startsWith("is") ? 2 : 3)).append("()\r\n"); code.append(" {\r\n"); code.append(" return this.resolveProperty((p) -> { return p.").append(getter.getName()).append("(); });\r\n"); code.append(" }\r\n"); } // return code.toString(); } @SuppressWarnings("unchecked") public static void main(String[] args) { for (Class<? extends ConfigObject<?>> cls : new Class[] { NagiosCommandCfg.class, NagiosContactCfg.class, NagiosContactgroupCfg.class, NagiosHostCfg.class, NagiosHostgroupCfg.class, NagiosServiceCfg.class, NagiosServicegroupCfg.class, NagiosTimeperiodCfg.class }) { System.out.println(cls.getName() + "\r\n"); System.out.println(generateResolveMethods(cls)); System.out.println(); } } }