/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.sys.document.datadictionary;
import org.kuali.kfs.sys.businessobject.AccountingLine;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.document.service.AccountingLineRenderingService;
import org.kuali.kfs.sys.document.web.AccountingLineViewDebitCreditAmountLayoutElement;
import org.kuali.kfs.sys.document.web.TableJoining;
import org.kuali.rice.kns.datadictionary.MaintainableFieldDefinition;
import org.kuali.rice.kns.service.DataDictionaryService;
import org.kuali.rice.kns.util.FieldUtils;
import org.kuali.rice.kns.web.ui.Field;
import org.kuali.rice.kns.web.ui.FieldBridge;
/**
* Data dictionary meta data that represents a debit/credit amount field. By default, it expects the new line debit amount property on the form
* to be called "newSourceLineDebit", the debit amount on a new line to be called "newSourceLineCredit", and for the
* form to have a collection VoucherAccountingLineHelper implementation objects called "voucherLineHelpers", though
* these can be overridden.
*/
public class AccountingLineViewDebitCreditAmountFieldDefinition extends MaintainableFieldDefinition implements AccountingLineViewRenderableElementDefinition {
private String newLineDebitAmountProperty = "newSourceLineDebit";
private String newLineCreditAmountProperty = "newSourceLineCredit";
private String voucherLineHelperProperty = "voucherLineHelper";
private boolean useShortLabels = true;
private String amountFieldName = "amount";
/**
* @see org.kuali.kfs.sys.document.datadictionary.AccountingLineViewRenderableElementDefinition#createLayoutElement(java.lang.Class)
*/
public TableJoining createLayoutElement(Class<? extends AccountingLine> accountingLineClass) {
AccountingLineViewDebitCreditAmountLayoutElement layoutElement = new AccountingLineViewDebitCreditAmountLayoutElement();
layoutElement.setDebitAmountField(createFieldForPropertyName(amountFieldName, accountingLineClass));
layoutElement.setDebitFieldDefinition(createFieldDefinitionForProperty(amountFieldName));
layoutElement.setCreditAmountField(createFieldForPropertyName(amountFieldName, accountingLineClass));
layoutElement.setCreditFieldDefinition(createFieldDefinitionForProperty(amountFieldName));
layoutElement.setDefinition(this);
return layoutElement;
}
/**
* Creates a field for the given AccountingLine class and property name
* @param propertyName the name of the property to create a Field for
* @param accountingLineClass the Class of the AccountingLine we're planning on rendering
* @return an appropriately created Field
*/
protected Field createFieldForPropertyName(String propertyName, Class<? extends AccountingLine> accountingLineClass) {
Field realField = FieldUtils.getPropertyField(accountingLineClass, propertyName, false);
FieldBridge.setupField(realField, this, null);
if (useShortLabels) {
org.kuali.rice.krad.datadictionary.BusinessObjectEntry boEntry = SpringContext.getBean(DataDictionaryService.class).getDataDictionary().getBusinessObjectEntry(accountingLineClass.getName());
realField.setFieldLabel(boEntry.getAttributeDefinition(propertyName).getShortLabel());
}
return realField;
}
/**
* Creates an AccountingLineViewFieldDefinition for the given property name
* @param propertyName the name of the field property that we're creating a definition for
* @return an appropriately created AccountingLineViewFieldDefinition
*/
protected AccountingLineViewFieldDefinition createFieldDefinitionForProperty(String propertyName) {
AccountingLineViewFieldDefinition fieldDefinition = SpringContext.getBean(AccountingLineRenderingService.class).createGenericAccountingLineViewFieldDefinition(this);
fieldDefinition.setName(propertyName);
return fieldDefinition;
}
/**
* Gets the newLineCreditAmountProperty attribute.
* @return Returns the newLineCreditAmountProperty.
*/
public String getNewLineCreditAmountProperty() {
return newLineCreditAmountProperty;
}
/**
* Sets the newLineCreditAmountProperty attribute value.
* @param newLineCreditAmountProperty The newLineCreditAmountProperty to set.
*/
public void setNewLineCreditAmountProperty(String newLineCreditAmountProperty) {
this.newLineCreditAmountProperty = newLineCreditAmountProperty;
}
/**
* Gets the newLineDebitAmountProperty attribute.
* @return Returns the newLineDebitAmountProperty.
*/
public String getNewLineDebitAmountProperty() {
return newLineDebitAmountProperty;
}
/**
* Sets the newLineDebitAmountProperty attribute value.
* @param newLineDebitAmountProperty The newLineDebitAmountProperty to set.
*/
public void setNewLineDebitAmountProperty(String newLineDebitAmountProperty) {
this.newLineDebitAmountProperty = newLineDebitAmountProperty;
}
/**
* Gets the voucherLineHelpersProperty attribute.
* @return Returns the voucherLineHelpersProperty.
*/
public String getVoucherLineHelperProperty() {
return voucherLineHelperProperty;
}
/**
* Sets the voucherLineHelpersProperty attribute value.
* @param voucherLineHelpersProperty The voucherLineHelpersProperty to set.
*/
public void setVoucherLineHelperProperty(String voucherLineHelpersProperty) {
this.voucherLineHelperProperty = voucherLineHelpersProperty;
}
/**
* Gets the useShortLabels attribute.
* @return Returns the useShortLabels.
*/
public boolean shouldUseShortLabels() {
return useShortLabels;
}
/**
* Sets the useShortLabels attribute value.
* @param useShortLabels The useShortLabels to set.
*/
public void setUseShortLabels(boolean useShortLabels) {
this.useShortLabels = useShortLabels;
}
/**
* Gets the amountFieldName attribute.
* @return Returns the amountFieldName.
*/
public String getAmountFieldName() {
return amountFieldName;
}
/**
* Sets the amountFieldName attribute value.
* @param amountFieldName The amountFieldName to set.
*/
public void setAmountFieldName(String amountFieldName) {
this.amountFieldName = amountFieldName;
}
}