001 /* 002 * Copyright 2011 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.kfs.sys.document.datadictionary; 017 018 import org.kuali.kfs.sys.businessobject.AccountingLine; 019 import org.kuali.kfs.sys.context.SpringContext; 020 import org.kuali.kfs.sys.document.service.AccountingLineRenderingService; 021 import org.kuali.kfs.sys.document.web.AccountingLineViewDebitCreditAmountLayoutElement; 022 import org.kuali.kfs.sys.document.web.TableJoining; 023 import org.kuali.rice.kns.datadictionary.BusinessObjectEntry; 024 import org.kuali.rice.kns.datadictionary.MaintainableFieldDefinition; 025 import org.kuali.rice.kns.service.DataDictionaryService; 026 import org.kuali.rice.kns.util.FieldUtils; 027 import org.kuali.rice.kns.web.ui.Field; 028 import org.kuali.rice.kns.web.ui.FieldBridge; 029 030 /** 031 * Data dictionary meta data that represents a debit/credit amount field. By default, it expects the new line debit amount property on the form 032 * to be called "newSourceLineDebit", the debit amount on a new line to be called "newSourceLineCredit", and for the 033 * form to have a collection VoucherAccountingLineHelper implementation objects called "voucherLineHelpers", though 034 * these can be overridden. 035 */ 036 public class AccountingLineViewDebitCreditAmountFieldDefinition extends MaintainableFieldDefinition implements AccountingLineViewRenderableElementDefinition { 037 private String newLineDebitAmountProperty = "newSourceLineDebit"; 038 private String newLineCreditAmountProperty = "newSourceLineCredit"; 039 private String voucherLineHelperProperty = "voucherLineHelper"; 040 private boolean useShortLabels = true; 041 private String amountFieldName = "amount"; 042 043 /** 044 * @see org.kuali.kfs.sys.document.datadictionary.AccountingLineViewRenderableElementDefinition#createLayoutElement(java.lang.Class) 045 */ 046 public TableJoining createLayoutElement(Class<? extends AccountingLine> accountingLineClass) { 047 AccountingLineViewDebitCreditAmountLayoutElement layoutElement = new AccountingLineViewDebitCreditAmountLayoutElement(); 048 049 layoutElement.setDebitAmountField(createFieldForPropertyName(amountFieldName, accountingLineClass)); 050 layoutElement.setDebitFieldDefinition(createFieldDefinitionForProperty(amountFieldName)); 051 052 layoutElement.setCreditAmountField(createFieldForPropertyName(amountFieldName, accountingLineClass)); 053 layoutElement.setCreditFieldDefinition(createFieldDefinitionForProperty(amountFieldName)); 054 055 layoutElement.setDefinition(this); 056 057 return layoutElement; 058 } 059 060 /** 061 * Creates a field for the given AccountingLine class and property name 062 * @param propertyName the name of the property to create a Field for 063 * @param accountingLineClass the Class of the AccountingLine we're planning on rendering 064 * @return an appropriately created Field 065 */ 066 protected Field createFieldForPropertyName(String propertyName, Class<? extends AccountingLine> accountingLineClass) { 067 Field realField = FieldUtils.getPropertyField(accountingLineClass, propertyName, false); 068 FieldBridge.setupField(realField, this, null); 069 if (useShortLabels) { 070 BusinessObjectEntry boEntry = SpringContext.getBean(DataDictionaryService.class).getDataDictionary().getBusinessObjectEntry(accountingLineClass.getName()); 071 realField.setFieldLabel(boEntry.getAttributeDefinition(propertyName).getShortLabel()); 072 } 073 return realField; 074 } 075 076 /** 077 * Creates an AccountingLineViewFieldDefinition for the given property name 078 * @param propertyName the name of the field property that we're creating a definition for 079 * @return an appropriately created AccountingLineViewFieldDefinition 080 */ 081 protected AccountingLineViewFieldDefinition createFieldDefinitionForProperty(String propertyName) { 082 AccountingLineViewFieldDefinition fieldDefinition = SpringContext.getBean(AccountingLineRenderingService.class).createGenericAccountingLineViewFieldDefinition(this); 083 fieldDefinition.setName(propertyName); 084 return fieldDefinition; 085 } 086 087 /** 088 * Gets the newLineCreditAmountProperty attribute. 089 * @return Returns the newLineCreditAmountProperty. 090 */ 091 public String getNewLineCreditAmountProperty() { 092 return newLineCreditAmountProperty; 093 } 094 095 /** 096 * Sets the newLineCreditAmountProperty attribute value. 097 * @param newLineCreditAmountProperty The newLineCreditAmountProperty to set. 098 */ 099 public void setNewLineCreditAmountProperty(String newLineCreditAmountProperty) { 100 this.newLineCreditAmountProperty = newLineCreditAmountProperty; 101 } 102 103 /** 104 * Gets the newLineDebitAmountProperty attribute. 105 * @return Returns the newLineDebitAmountProperty. 106 */ 107 public String getNewLineDebitAmountProperty() { 108 return newLineDebitAmountProperty; 109 } 110 111 /** 112 * Sets the newLineDebitAmountProperty attribute value. 113 * @param newLineDebitAmountProperty The newLineDebitAmountProperty to set. 114 */ 115 public void setNewLineDebitAmountProperty(String newLineDebitAmountProperty) { 116 this.newLineDebitAmountProperty = newLineDebitAmountProperty; 117 } 118 119 /** 120 * Gets the voucherLineHelpersProperty attribute. 121 * @return Returns the voucherLineHelpersProperty. 122 */ 123 public String getVoucherLineHelperProperty() { 124 return voucherLineHelperProperty; 125 } 126 127 /** 128 * Sets the voucherLineHelpersProperty attribute value. 129 * @param voucherLineHelpersProperty The voucherLineHelpersProperty to set. 130 */ 131 public void setVoucherLineHelperProperty(String voucherLineHelpersProperty) { 132 this.voucherLineHelperProperty = voucherLineHelpersProperty; 133 } 134 135 /** 136 * Gets the useShortLabels attribute. 137 * @return Returns the useShortLabels. 138 */ 139 public boolean shouldUseShortLabels() { 140 return useShortLabels; 141 } 142 143 /** 144 * Sets the useShortLabels attribute value. 145 * @param useShortLabels The useShortLabels to set. 146 */ 147 public void setUseShortLabels(boolean useShortLabels) { 148 this.useShortLabels = useShortLabels; 149 } 150 151 /** 152 * Gets the amountFieldName attribute. 153 * @return Returns the amountFieldName. 154 */ 155 public String getAmountFieldName() { 156 return amountFieldName; 157 } 158 159 /** 160 * Sets the amountFieldName attribute value. 161 * @param amountFieldName The amountFieldName to set. 162 */ 163 public void setAmountFieldName(String amountFieldName) { 164 this.amountFieldName = amountFieldName; 165 } 166 167 }