Have a look at the following link...
http://www.ibm.com/developerworks/library/x-quick/index.html
But this converts from DTD -> QJML -> Java.
I have eliminiated the need for creating DTD.
You can create QJML directly from java Bean class if you have.
Just provide the java class and it will generate 90% code for QJML.
You can use it with minor tweeking...
private static String getQJML(Class c) throws ClassNotFoundException { suffix = c.getSimpleName().substring(c.getSimpleName().length()-2); System.out.println(suffix); String tagName = getTagName(c); StringBuilder output=new StringBuilder(""); output.append("<!-- ********************************************************************************** -->"); output.append("\n\t<bean tag=\"" + tagName + "\">"); if(!containsArrayOrDate(c)) output.append("\n\t\t<targetClass>" + c.getName() + "</targetClass>"); else output.append("\n\t\t<targetClass>" + "wrappers.ui.vo." + c.getSimpleName() + "</targetClass>"); output.append("\n\t\t<elements>"); output.append("\n\t\t\t<selection optional=\"True\" repeating=\"True\">"); Field fields[]= c.getDeclaredFields(); for(Field f: fields) { if(f.getName().charAt(0)>='A' && f.getName().charAt(0)<='Z') { if(!Modifier.toString(f.getModifiers()).contains("final")) { System.out.println("Class property " + f.getName() + " starts with upper case."); System.out.println("Cannot proceed"); return ""; } else { continue; } } // if property type does not ends with a VO if(!f.getType().getName().endsWith(suffix)) { // Means it is not a custom object (like AssetVO) // <item coin="asset.id"> output.append("\n\t\t\t\t<item coin=\"" + tagName + "." + f.getName() + "\">"); } else { // it ends in a VO e.g. AssetRangeVO // tag should be <item coin="assetRange"> output.append("\n\t\t\t\t<item coin=\"" + getTagName(f.getType())+ "\">"); } if(f.getType().isArray()) { //<property kind="list" name="wrapperSchedule"/> output.append("\n\t\t\t\t\t<property kind=\"list\" name=\"wrapper" + firstCaps(f.getName()) + "\"/>"); } else if(f.getType().equals(java.util.Date.class)) { // <property name="wrapperDate"/> output.append("\n\t\t\t\t\t<property name=\"wrapper" + firstCaps(f.getName()) + "\"/>"); } else if(f.getType().equals(java.util.List.class)) { String fldType = f.getGenericType().toString(); String typeOfList = fldType.substring("java.util.List<".length(), fldType.length()-1); if(typeOfList.endsWith(suffix)) { // It is a list of custom objects // For example, lets say if it is List<GoalVO>, then it should be defined as follows. // <property kind="list" name="goal"/> output.append("\n\t\t\t\t\t<property kind=\"list\" name=\"" + getTagName(Class.forName(typeOfList)) + "\"/>"); } else { //<property kind="list" name="propValues"/> output.append("\n\t\t\t\t\t<property kind=\"list\" name=\"" + f.getName() + "\"/>"); } } else { //<property name="propertName"/> output.append("\n\t\t\t\t\t<property name=\"" + f.getName() + "\"/>"); } output.append("\n\t\t\t\t</item>"); } output.append("\n\t\t\t</selection>"); output.append("\n\t\t</elements>"); output.append("\n\t</bean>"); for(Field fd: fields) { if(Modifier.toString(fd.getModifiers()).contains("final")) { // if the field is final, it // cannot be set via XML. continue; } // No need to generate if property Name ends in VO because the tag should be already defined. // Most likely it will be a VO object if(fd.getType().getName().endsWith(suffix)) continue; if(fd.getType().equals(java.util.List.class)) { // if it is a list of custom objects String fldType = fd.getGenericType().toString(); String typeOfList = fldType.substring("java.util.List<".length(), fldType.length()-1); if(typeOfList.endsWith(suffix)) { // It is a list of custom objects // so no need to definie its <text tag continue; } } if(fd.getType().isArray() && fd.getType().getComponentType().getClass().getName().endsWith(suffix)) { // it is an array and each element is a custom object continue; } output.append("\n\t<text label=\"" + tagName + "." + fd.getName() + "\" tag=\"" + fd.getName()+"\"" ); // Specify type based on the type of field. if(fd.getType().equals(int.class) || fd.getType().equals(Integer.class) || (fd.getType().isArray() && fd.getType().getComponentType().equals(int.class))) { output.append(" type=\"int\"/>"); continue; } if(fd.getType().equals(boolean.class) || fd.getType().equals(Boolean.class)) { output.append(" type=\"boolean\"/>"); continue; } if(fd.getType().equals(double.class)||fd.getType().equals(Double.class) || (fd.getType().isArray() && fd.getType().getComponentType().equals(double.class))) { output.append(" type=\"double\"/>"); continue; } if(fd.getType().equals(long.class)||fd.getType().equals(Long.class)|| (fd.getType().isArray() && fd.getType().getComponentType().equals(long.class))) { output.append(" type=\"long\"/>"); continue; } if(fd.getType().equals(java.util.List.class)) { output.append(" type=\"Needs to be filled\"/>"); continue; } output.append("/>"); } return output.toString(); }
No comments:
Post a Comment