/* * 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 java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.sys.businessobject.AccountingLine; import org.kuali.kfs.sys.document.web.AccountingLineViewLine; import org.kuali.kfs.sys.document.web.AccountingLineViewLineFillingElement; import org.kuali.kfs.sys.document.web.RenderableElement; import org.kuali.kfs.sys.document.web.TableJoining; import org.kuali.rice.krad.datadictionary.DataDictionaryDefinitionBase; import org.kuali.rice.krad.datadictionary.exception.AttributeValidationException; /** * Data dictionary definition of a collection of elements which will be rendered as one table row in the table of each accounting line. */ public class AccountingLineViewLineDefinition extends DataDictionaryDefinitionBase implements AccountingLineViewLineFillingDefinition { private List<? extends AccountingLineViewRenderableElementDefinition> cells; private String elementName; /** * Validates that: * 1) there is at least one child element * @see org.kuali.rice.krad.datadictionary.DataDictionaryDefinition#completeValidation(java.lang.Class, java.lang.Class) */ public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass) { if (cells == null || cells.size() == 0) { throw new AttributeValidationException("At least one field must be specified to live within an AccountingLineViewLine"+(!StringUtils.isBlank(elementName) ? " ("+elementName+")" : "")); } } /** * Gets the fields attribute. * @return Returns the fields. */ public List<? extends AccountingLineViewRenderableElementDefinition> getFields() { return cells; } /** * Sets the fields attribute value. * @param fields The fields to set. */ public void setFields(List<? extends AccountingLineViewRenderableElementDefinition> fields) { this.cells = fields; } /** * Gets the elementName attribute. * @return Returns the elementName. */ public String getElementName() { return elementName; } /** * Sets the elementName attribute value. * @param elementName The elementName to set. */ public void setElementName(String elementName) { this.elementName = elementName; } /** * @see org.kuali.kfs.sys.document.datadictionary.AccountingLineViewRenderableElementDefinition#createLayoutElement(java.lang.Class) */ public TableJoining createLayoutElement(Class<? extends AccountingLine> accountingLineClass) { AccountingLineViewLine line = new AccountingLineViewLine(); line.setDefinition(this); line.setElements(getChildrenRenderableElements(accountingLineClass)); return line; } /** * Creates children renderable elements for all children of this line definition * @param accountingLineClass accounting line class to pass through * @return a List of renderable children elements */ protected List<RenderableElement> getChildrenRenderableElements(Class<? extends AccountingLine> accountingLineClass) { List<RenderableElement> elements = new ArrayList<RenderableElement>(); for (AccountingLineViewRenderableElementDefinition cellDefinition : cells) { final RenderableElement element = (RenderableElement)cellDefinition.createLayoutElement(accountingLineClass); if (element != null) { elements.add(element); } } return elements; } /** * @see org.kuali.kfs.sys.document.datadictionary.AccountingLineViewLineFillingDefinition#createLineFillingLayoutElement(java.lang.Class) */ public AccountingLineViewLineFillingElement createLineFillingLayoutElement(Class<? extends AccountingLine> accountingLineClass) { return (AccountingLineViewLineFillingElement)createLayoutElement(accountingLineClass); } }