001/**
002 * Copyright 2005-2016 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 */
016package org.kuali.rice.devtools.generators.dd;
017
018import org.apache.commons.beanutils.PropertyUtils;
019import org.kuali.rice.krad.bo.BusinessObject;
020
021import java.beans.PropertyDescriptor;
022
023/**
024 * @deprecated this is for the legacy kns.
025 */
026@Deprecated
027public 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}