001 /**
002 * Copyright 2005-2014 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 MaintDocDDCreator {
028
029 public static void main( String[] args ) throws Exception {
030 String className = args[0];
031 Class boClass = Class.forName( className );
032 PropertyDescriptor[] props = PropertyUtils.getPropertyDescriptors( boClass );
033
034 StringBuffer sb = new StringBuffer( 4000 );
035 sb.append( "<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n" +
036 " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" +
037 " xmlns:p=\"http://www.springframework.org/schema/p\"\r\n" +
038 " xsi:schemaLocation=\"http://www.springframework.org/schema/beans\r\n" +
039 " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\">\r\n" +
040 "\r\n" +
041 " <bean id=\"" );
042 sb.append( boClass.getSimpleName() );
043 sb.append( "MaintenanceDocument\" parent=\"" );
044 sb.append( boClass.getSimpleName() );
045 sb.append( "MaintenanceDocument-parentBean\" />\r\n" +
046 "\r\n" +
047 " <bean id=\"" );
048 sb.append( boClass.getSimpleName() );
049 sb.append( "MaintenanceDocument-parentBean\" abstract=\"true\" parent=\"MaintenanceDocumentEntry\"\r\n" +
050 " p:businessObjectClass=\"" );
051 sb.append( boClass.getName() );
052 sb.append( "\"\r\n" );
053 sb.append( " p:maintainableClass=\"" );
054 sb.append( "org.kuali.core.maintenance.KualiMaintainableImpl" );
055 sb.append( "\"\r\n" );
056 sb.append( " p:label=\"" );
057 sb.append( BeanDDCreator.camelCaseToString( boClass.getSimpleName() ) );
058 sb.append( " Maintenance Document\"\r\n" );
059 sb.append( " p:shortLabel=\"" );
060 sb.append( BeanDDCreator.camelCaseToString( boClass.getSimpleName() ) );
061 sb.append( " Maint. Doc.\"\r\n" );
062 sb.append( " p:documentTypeName=\"" );
063 sb.append( boClass.getSimpleName() + "MaintenanceDocument" );
064 sb.append( "\"\r\n" );
065 sb.append( " p:documentTypeCode=\"" );
066 sb.append( "FILLMEIN" );
067 sb.append( "\"\r\n" );
068 sb.append( " p:businessRulesClass=\"" );
069 sb.append( "org.kuali.core.maintenance.rules.MaintenanceDocumentRuleBase" );
070 sb.append( "\"\r\n" );
071 sb.append( " p:preRulesCheckClass=\"" );
072 sb.append( "FILLMEIN" );
073 sb.append( "\"\r\n" );
074 sb.append( " p:documentAuthorizerClass=\"" );
075 sb.append( "org.kuali.kfs.sys.document.authorization.FinancialSystemMaintenanceDocumentAuthorizerBase" );
076 sb.append( "\"\r\n" );
077 sb.append( " p:workflowProperties-ref=\"" );
078 sb.append( boClass.getSimpleName() );
079 sb.append( "MaintenanceDocument-workflowProperties\" >\r\n" );
080 sb.append( "\r\n" );
081
082 sb.append( " <property name=\"authorizations\" >\r\n" +
083 " <list>\r\n" +
084 " <bean parent=\"AuthorizationDefinition\">\r\n" +
085 " <property name=\"action\" value=\"initiate\" />\r\n" +
086 " <property name=\"authorizedGroups\" >\r\n" +
087 " <set>\r\n" +
088 " <value>SY_MAINTENANCE_USERS</value>\r\n" +
089 " </set>\r\n" +
090 " </property>\r\n" +
091 " </bean>\r\n" +
092 " </list>\r\n" +
093 " </property>\r\n" +
094 "" );
095 sb.append( " <property name=\"lockingKeys\" >\r\n" +
096 " <list>\r\n" +
097 " <value>FILLMEIN</value>\r\n" +
098 " </list>\r\n" +
099 " </property>\r\n" +
100 "");
101 sb.append( " <property name=\"helpDefinition\" >\r\n" +
102 " <bean parent=\"HelpDefinition\" p:parameterClass=\"" );
103 sb.append( boClass.getName() );
104 sb.append( "\" p:parameterName=\"" );
105 sb.append( camelCaseToHelpParm( boClass.getSimpleName() ) );
106 sb.append( "\" />\r\n" +
107 " </property>\r\n" +
108 "" );
109 sb.append( " <property name=\"defaultExistenceChecks\" >\r\n" +
110 " <list>\r\n" +
111 "" );
112 for ( PropertyDescriptor pd : props ) {
113 if ( isReferenceBoProperty(pd)) {
114 sb.append( " <bean parent=\"ReferenceDefinition\"\r\n" +
115 " p:attributeName=\"" );
116 sb.append( pd.getName() );
117 sb.append( "\"\r\n" +
118 " p:activeIndicatorAttributeName=\"active\"\r\n" +
119 " p:attributeToHighlightOnFail=\"FILLMEIN\" />\r\n" +
120 "" );
121 }
122 }
123 sb.append( " </list>\r\n" +
124 " </property>\r\n" +
125 "" );
126
127 sb.append( " <property name=\"maintainableSections\" >\r\n" +
128 " <list>\r\n" +
129 " <ref bean=\"" );
130 sb.append( boClass.getSimpleName() );
131 sb.append( "MaintenanceDocument-MainSection\" />\r\n" +
132 " </list>\r\n" +
133 " </property>\r\n" +
134 " </bean>\r\n\r\n");
135
136 sb.append( " <bean id=\"" );
137 sb.append( boClass.getSimpleName() );
138 sb.append( "MaintenanceDocument-MainSection\" parent=\"" );
139 sb.append( boClass.getSimpleName() );
140 sb.append( "MaintenanceDocument-MainSection-parentBean\" />\r\n" +
141 "\r\n" +
142 " <bean id=\"" );
143 sb.append( boClass.getSimpleName() );
144 sb.append( "MaintenanceDocument-MainSection-parentBean\" abstract=\"true\" parent=\"MaintainableSectionDefinition\"\r\n" +
145 " p:title=\"" );
146 sb.append( BeanDDCreator.camelCaseToString( boClass.getSimpleName() ) );
147 sb.append( " Maintenance\" >\r\n" +
148 " <property name=\"maintainableItems\" >\r\n" +
149 " <list>\r\n" +
150 "" );
151 for ( PropertyDescriptor pd : props ) {
152 if ( BeanDDCreator.isNormalProperty(pd) && !pd.getName().endsWith("codeAndDescription" ) ) {
153
154 sb.append( " <bean parent=\"MaintainableFieldDefinition\"\r\n" +
155 " p:name=\"" );
156 sb.append( pd.getName() );
157 if ( pd.getName().endsWith("active" ) ) {
158 sb.append( "\"\r\n" +
159 " p:defaultValue=\"true\" />\r\n" );
160 } else if ( pd.getName().equals("versionNumber" ) ) {
161 sb.append( "\" />\r\n" );
162 } else {
163 sb.append( "\"\r\n" +
164 " p:required=\"true\" />\r\n" );
165 }
166 }
167 }
168 sb.append( " </list>\r\n" +
169 " </property>\r\n" +
170 " </bean>\r\n" +
171 "" );
172 sb.append( " <bean id=\"" );
173 sb.append( boClass.getSimpleName() );
174 sb.append( "MaintenanceDocument-workflowProperties\" parent=\"" );
175 sb.append( boClass.getSimpleName() );
176 sb.append( "MaintenanceDocument-workflowProperties-parentBean\" />\r\n" +
177 "\r\n" +
178 " <bean id=\"" );
179 sb.append( boClass.getSimpleName() );
180 sb.append( "MaintenanceDocument-workflowProperties-parentBean\" abstract=\"true\" parent=\"CommonWorkflow-MaintenanceDocument\" />\r\n" +
181 // " <property name=\"workflowPropertyGroups\" >\r\n" +
182 // " <list>\r\n" +
183 // " <bean parent=\"WorkflowPropertyGroup\">\r\n" +
184 // " <property name=\"workflowProperties\" >\r\n" +
185 // " <list>\r\n" +
186 // " <bean parent=\"WorkflowProperty\" p:path=\"newMaintainableObject.businessObject\" />\r\n" +
187 // " <bean parent=\"WorkflowProperty\" p:path=\"oldMaintainableObject.businessObject\" />\r\n" +
188 // " </list>\r\n" +
189 // " </property>\r\n" +
190 // " </bean>\r\n" +
191 // " </list>\r\n" +
192 // " </property>\r\n" +
193 // " </bean>\r\n" +
194 "</beans>" );
195 System.out.println( sb.toString() );
196 }
197
198 public static String camelCaseToHelpParm( String className ) {
199 StringBuffer newName = new StringBuffer( className );
200 // lower case the 1st letter
201 newName.replace(0, 1, newName.substring(0, 1).toLowerCase());
202 // loop through, inserting spaces when cap
203 for ( int i = 0; i < newName.length(); i++ ) {
204 if ( Character.isUpperCase(newName.charAt(i)) ) {
205 newName.insert(i, '_');
206 i++;
207 }
208 }
209 return newName.toString().toUpperCase().trim();
210 }
211
212 public static boolean isReferenceBoProperty( PropertyDescriptor p ) {
213 return p.getPropertyType()!= null
214 && BusinessObject.class.isAssignableFrom( p.getPropertyType() )
215 && !p.getName().startsWith( "boNote" )
216 && !p.getName().startsWith( "extension" )
217 && !p.getName().equals( "newCollectionRecord" );
218 }
219
220 }