001 /** 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.devtools.generators.dd; 017 018 import org.apache.commons.beanutils.PropertyUtils; 019 import org.kuali.rice.krad.bo.BusinessObject; 020 021 import java.beans.PropertyDescriptor; 022 023 /** 024 * @deprecated this is for the legacy kns. 025 */ 026 @Deprecated 027 public class BeanDDCreator { 028 029 /** 030 * This method... 031 * @param args 032 */ 033 public static void main(String[] args) throws Exception { 034 String className = args[0]; 035 Class<? extends BusinessObject> boClass = (Class<? extends BusinessObject>)Class.forName( className ); 036 PropertyDescriptor[] props = PropertyUtils.getPropertyDescriptors( boClass ); 037 038 StringBuffer sb = new StringBuffer( 4000 ); 039 sb.append( "<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n" + 040 " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + 041 " xmlns:p=\"http://www.springframework.org/schema/p\"\r\n" + 042 " xsi:schemaLocation=\"http://www.springframework.org/schema/beans\r\n" + 043 " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\">\r\n" + 044 "\r\n" + 045 " <bean id=\"" ); 046 sb.append( boClass.getSimpleName() ); 047 sb.append( "\" parent=\"" ); 048 sb.append( boClass.getSimpleName() ); 049 sb.append( "-parentBean\" />\r\n" + 050 "\r\n" + 051 " <bean id=\"" ); 052 sb.append( boClass.getSimpleName() ); 053 sb.append( "-parentBean\" abstract=\"true\" parent=\"BusinessObjectEntry\"\r\n" + 054 " p:businessObjectClass=\"" ); 055 sb.append( boClass.getName() ); 056 sb.append( "\"\r\n" ); 057 sb.append( " p:titleAttribute=\"" ); 058 sb.append( "FILL ME IN" ); 059 sb.append( "\"\r\n" ); 060 sb.append( " p:objectLabel=\"" ); 061 sb.append( camelCaseToString( boClass.getSimpleName() ) ); 062 sb.append( "\"\r\n" ); 063 sb.append( " p:inquiryDefinition-ref=\"" ); 064 sb.append( boClass.getSimpleName() ); 065 sb.append( "-inquiryDefinition\"\r\n" ); 066 sb.append( " p:lookupDefinition-ref=\"" ); 067 sb.append( boClass.getSimpleName() ); 068 sb.append( "-lookupDefinition\" >\r\n" ); 069 sb.append( " <property name=\"attributes\" >\r\n" + 070 " <list>\r\n" ); 071 for ( PropertyDescriptor p : props ) { 072 if ( isNormalProperty(p) ) { 073 sb.append( " <ref bean=\"" ).append( boClass.getSimpleName() ).append( '-' ); 074 sb.append( p.getName() ); 075 sb.append( "\" />\r\n" ); 076 } 077 } 078 079 sb.append( " </list>\r\n" + 080 " </property>\r\n" + 081 " </bean>\r\n" + 082 "\r\n" ); 083 for ( PropertyDescriptor p : props ) { 084 if ( isNormalProperty(p) ) { 085 086 if ( p.getName().equals( "versionNumber" ) ) { 087 sb.append( getSimpleParentBeanReference( boClass, p.getName() ) ); 088 sb.append( getSimpleAbstractInheritanceBean(boClass, p.getName(), "GenericAttributes-versionNumber" ) ); 089 090 } else if ( p.getName().endsWith("chartOfAccountsCode" ) ) { 091 sb.append( getSimpleParentBeanReference( boClass, p.getName() ) ); 092 sb.append( getSimpleAbstractInheritanceBean(boClass, p.getName(), "Chart-chartOfAccountsCode" ) ); 093 094 } else if ( p.getName().endsWith("organizationCode" ) ) { 095 sb.append( getSimpleParentBeanReference( boClass, p.getName() ) ); 096 sb.append( getSimpleAbstractInheritanceBean(boClass, p.getName(), "Org-organizationCode" ) ); 097 098 } else if ( p.getName().endsWith("accountNumber" ) ) { 099 sb.append( getSimpleParentBeanReference( boClass, p.getName() ) ); 100 sb.append( getSimpleAbstractInheritanceBean(boClass, p.getName(), "Account-accountNumber" ) ); 101 102 } else if ( p.getName().equals("active" ) ) { 103 sb.append( getSimpleParentBeanReference( boClass, p.getName() ) ); 104 sb.append( getSimpleAbstractInheritanceBean(boClass, p.getName(), "GenericAttributes-activeIndicator" ) ); 105 106 } else if ( p.getName().equals("codeAndDescription" ) ) { 107 sb.append( getSimpleParentBeanReference( boClass, p.getName() ) ); 108 sb.append( getSimpleAbstractInheritanceBeanWithLabel(boClass, p.getName(), "CommonField-CodeAndDescription", camelCaseToString(boClass.getSimpleName()) ) ); 109 110 } else if ( p.getPropertyType() == Boolean.TYPE ) { 111 sb.append( getSimpleParentBeanReference( boClass, p.getName() ) ); 112 sb.append( getSimpleAbstractInheritanceBean(boClass, p.getName(), "GenericAttributes-genericBoolean" ) ); 113 114 } else { 115 // attribute bean 116 sb.append( getSimpleParentBeanReference( boClass, p.getName() ) ); 117 // attribute parent bean 118 sb.append( " <bean id=\"" ).append( boClass.getSimpleName() ).append( '-' ); 119 sb.append( p.getName() ).append( "-parentBean\" parent=\"AttributeDefinition\" abstract=\"true\"\r\n" ); 120 sb.append( " p:name=\"" ).append( p.getName() ).append( "\"\r\n" ); 121 sb.append( " p:forceUppercase=\"false\"\r\n" ); 122 sb.append( " p:label=\"" ).append( camelCaseToString(p.getName()) ).append( "\"\r\n" ); 123 sb.append( " p:shortLabel=\"" ).append( camelCaseToString(p.getName()) ).append( "\"\r\n" ); 124 sb.append( " p:maxLength=\"10\"\r\n" ); 125 sb.append( " p:required=\"false\" >\r\n" ); 126 sb.append( " <property name=\"validationPattern\" >\r\n" + 127 " <bean parent=\"AnyCharacterValidationPattern\"\r\n" + 128 " p:allowWhitespace=\"true\" />\r\n" + 129 " </property>\r\n" + 130 " <property name=\"control\" >\r\n" + 131 " <bean parent=\"TextControlDefinition\"\r\n" + 132 " p:size=\"10\" />\r\n" + 133 " </property>\r\n" + 134 " </bean>\r\n" ); 135 136 } 137 sb.append( "\r\n" ); 138 } 139 } 140 // inquiry definition 141 142 sb.append( getSimpleParentBeanReference( boClass, "inquiryDefinition" ) ); 143 sb.append( "\r\n" ); 144 sb.append( " <bean id=\"" ); 145 sb.append( boClass.getSimpleName() ); 146 sb.append( "-inquiryDefinition-parentBean\" abstract=\"true\" parent=\"InquiryDefinition\"\r\n" + 147 " p:title=\"" ); 148 sb.append( camelCaseToString(boClass.getSimpleName() ) ); 149 sb.append( " Inquiry\" >\r\n" + 150 " <property name=\"inquirySections\" >\r\n" + 151 " <list>\r\n" + 152 " <bean parent=\"InquirySectionDefinition\"\r\n" + 153 " p:title=\"" ); 154 sb.append( camelCaseToString(boClass.getSimpleName() ) ); 155 sb.append( " Attributes\"\r\n" + 156 " p:numberOfColumns=\"1\" >\r\n" + 157 " <property name=\"inquiryFields\" >\r\n" + 158 " <list>\r\n" ); 159 for ( PropertyDescriptor p : props ) { 160 if ( isNormalProperty(p) ) { 161 sb.append(" <bean parent=\"FieldDefinition\" p:attributeName=\"" ); 162 sb.append( p.getName() ).append( "\" />\r\n" ); 163 } 164 } 165 sb.append( " </list>\r\n" + 166 " </property>\r\n" + 167 " </bean>\r\n" + 168 " </list>\r\n" + 169 " </property>\r\n" + 170 " </bean>\r\n" + 171 "\r\n" ); 172 173 sb.append( getSimpleParentBeanReference( boClass, "lookupDefinition" ) ); 174 sb.append( "\r\n" ); 175 sb.append( " <bean id=\"" ); 176 sb.append( boClass.getSimpleName() ); 177 sb.append( "-lookupDefinition-parentBean\" abstract=\"true\" parent=\"LookupDefinition\"\r\n" + 178 " p:title=\"" ); 179 sb.append( camelCaseToString(boClass.getSimpleName() ) ); 180 sb.append( " Lookup\" \r\n" ); 181 //sb.append( " p:instructions=\"Lookup a " ); 182 //sb.append( camelCaseToString(boClass.getSimpleName() ) ); 183 sb.append( "\" >\r\n" ); 184 sb.append( " <property name=\"defaultSort\" >\r\n" + 185 " <bean parent=\"SortDefinition\">\r\n" + 186 " <property name=\"attributeNames\" >\r\n" + 187 " <list>\r\n" + 188 " <value>FILL ME IN</value>\r\n" + 189 " </list>\r\n" + 190 " </property>\r\n" + 191 " <property name=\"sortAscending\" value=\"true\" />\r\n" + 192 " </bean>\r\n" + 193 " </property>\r\n" + 194 " <property name=\"lookupFields\" >\r\n" + 195 " <list>\r\n" ); 196 for ( PropertyDescriptor p : props ) { 197 if ( isNormalProperty(p) ) { 198 sb.append(" <bean parent=\"FieldDefinition\" p:attributeName=\"" ); 199 sb.append( p.getName() ).append( "\" />\r\n" ); 200 } 201 } 202 sb.append( " </list>\r\n" + 203 " </property>\r\n" + 204 " <property name=\"resultFields\" >\r\n" + 205 " <list>\r\n" ); 206 for ( PropertyDescriptor p : props ) { 207 if ( isNormalProperty(p) ) { 208 sb.append(" <bean parent=\"FieldDefinition\" p:attributeName=\"" ); 209 sb.append( p.getName() ).append( "\" />\r\n" ); 210 } 211 } 212 sb.append( " </list>\r\n" + 213 " </property>\r\n" + 214 " </bean>\r\n" ); 215 sb.append( "\r\n</beans>" ); 216 System.out.println( sb.toString() ); 217 } 218 219 public static String getSimpleAbstractInheritanceBean( Class<? extends BusinessObject> boClass, String propertyName, String parentBean ) { 220 StringBuffer sb = new StringBuffer( 100 ); 221 sb.append( " <bean id=\"" ); 222 sb.append( boClass.getSimpleName() ); 223 sb.append( "-" ).append( propertyName ).append( "-parentBean\" abstract=\"true\" parent=\"" ); 224 sb.append( parentBean ).append( "\" \r\n" ); 225 sb.append( " p:name=\"" ).append( propertyName ).append( "\"\r\n" ); 226 sb.append( " p:required=\"false\" />\r\n" ); 227 return sb.toString(); 228 } 229 230 public static String getSimpleAbstractInheritanceBeanWithLabel( Class<? extends BusinessObject> boClass, String propertyName, String parentBean, String label ) { 231 StringBuffer sb = new StringBuffer( 100 ); 232 sb.append( " <bean id=\"" ); 233 sb.append( boClass.getSimpleName() ); 234 sb.append( "-" ).append( propertyName ).append( "-parentBean\" abstract=\"true\" parent=\"" ); 235 sb.append( parentBean ).append( "\" \r\n" ); 236 sb.append( " p:name=\"" ).append( propertyName ).append( "\"\r\n" ); 237 sb.append( " p:label=\"" ).append( label ).append( "\"\r\n" ); 238 sb.append( " p:required=\"false\" />\r\n" ); 239 return sb.toString(); 240 } 241 242 public static String getSimpleParentBeanReference( Class<? extends BusinessObject> boClass, String propertyName ) { 243 StringBuffer sb = new StringBuffer( 100 ); 244 sb.append( " <bean id=\"" ); 245 sb.append( boClass.getSimpleName() ); 246 sb.append( "-" ).append( propertyName ).append( "\" parent=\"" ); 247 sb.append( boClass.getSimpleName() ); 248 sb.append( "-" ).append( propertyName ).append( "-parentBean\" />\r\n" ); 249 return sb.toString(); 250 } 251 252 public static boolean isNormalProperty( PropertyDescriptor p ) { 253 return p.getPropertyType()!= null 254 && !BusinessObject.class.isAssignableFrom( p.getPropertyType() ) 255 && !p.getName().equals( "objectId" ) 256 && !p.getName().equals( "class" ) 257 && !p.getName().startsWith( "boNote" ) 258 && !p.getName().startsWith( "autoIncrementSet" ) 259 && !p.getName().equals( "newCollectionRecord" ); 260 } 261 262 public static String camelCaseToString( String className ) { 263 StringBuffer newName = new StringBuffer( className ); 264 // upper case the 1st letter 265 newName.replace(0, 1, newName.substring(0, 1).toUpperCase()); 266 // loop through, inserting spaces when cap 267 for ( int i = 0; i < newName.length(); i++ ) { 268 if ( Character.isUpperCase(newName.charAt(i)) ) { 269 newName.insert(i, ' '); 270 i++; 271 } 272 } 273 274 return newName.toString().trim().replace( "Uc", "UC" ); 275 } 276 }