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 java.util.ArrayList;
019 import java.util.List;
020
021 import org.apache.commons.lang.StringUtils;
022 import org.kuali.kfs.sys.businessobject.AccountingLine;
023 import org.kuali.kfs.sys.document.web.AccountingLineViewLine;
024 import org.kuali.kfs.sys.document.web.AccountingLineViewLineFillingElement;
025 import org.kuali.kfs.sys.document.web.RenderableElement;
026 import org.kuali.kfs.sys.document.web.TableJoining;
027 import org.kuali.rice.kns.datadictionary.DataDictionaryDefinitionBase;
028 import org.kuali.rice.kns.datadictionary.exception.AttributeValidationException;
029
030 /**
031 * Data dictionary definition of a collection of elements which will be rendered as one table row in the table of each accounting line.
032 */
033 public class AccountingLineViewLineDefinition extends DataDictionaryDefinitionBase implements AccountingLineViewLineFillingDefinition {
034 private List<? extends AccountingLineViewRenderableElementDefinition> cells;
035 private String elementName;
036
037 /**
038 * Validates that:
039 * 1) there is at least one child element
040 * @see org.kuali.rice.kns.datadictionary.DataDictionaryDefinition#completeValidation(java.lang.Class, java.lang.Class)
041 */
042 public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass) {
043 if (cells == null || cells.size() == 0) {
044 throw new AttributeValidationException("At least one field must be specified to live within an AccountingLineViewLine"+(!StringUtils.isBlank(elementName) ? " ("+elementName+")" : ""));
045 }
046 }
047
048 /**
049 * Gets the fields attribute.
050 * @return Returns the fields.
051 */
052 public List<? extends AccountingLineViewRenderableElementDefinition> getFields() {
053 return cells;
054 }
055
056 /**
057 * Sets the fields attribute value.
058 * @param fields The fields to set.
059 */
060 public void setFields(List<? extends AccountingLineViewRenderableElementDefinition> fields) {
061 this.cells = fields;
062 }
063
064 /**
065 * Gets the elementName attribute.
066 * @return Returns the elementName.
067 */
068 public String getElementName() {
069 return elementName;
070 }
071
072 /**
073 * Sets the elementName attribute value.
074 * @param elementName The elementName to set.
075 */
076 public void setElementName(String elementName) {
077 this.elementName = elementName;
078 }
079
080 /**
081 * @see org.kuali.kfs.sys.document.datadictionary.AccountingLineViewRenderableElementDefinition#createLayoutElement(java.lang.Class)
082 */
083 public TableJoining createLayoutElement(Class<? extends AccountingLine> accountingLineClass) {
084 AccountingLineViewLine line = new AccountingLineViewLine();
085 line.setDefinition(this);
086 line.setElements(getChildrenRenderableElements(accountingLineClass));
087 return line;
088 }
089
090 /**
091 * Creates children renderable elements for all children of this line definition
092 * @param accountingLineClass accounting line class to pass through
093 * @return a List of renderable children elements
094 */
095 protected List<RenderableElement> getChildrenRenderableElements(Class<? extends AccountingLine> accountingLineClass) {
096 List<RenderableElement> elements = new ArrayList<RenderableElement>();
097 for (AccountingLineViewRenderableElementDefinition cellDefinition : cells) {
098 final RenderableElement element = (RenderableElement)cellDefinition.createLayoutElement(accountingLineClass);
099 if (element != null) {
100 elements.add(element);
101 }
102 }
103 return elements;
104 }
105
106 /**
107 * @see org.kuali.kfs.sys.document.datadictionary.AccountingLineViewLineFillingDefinition#createLineFillingLayoutElement(java.lang.Class)
108 */
109 public AccountingLineViewLineFillingElement createLineFillingLayoutElement(Class<? extends AccountingLine> accountingLineClass) {
110 return (AccountingLineViewLineFillingElement)createLayoutElement(accountingLineClass);
111 }
112
113 }