View Javadoc

1   /**
2    * Copyright 2005-2012 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.krad.datadictionary;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.rice.krad.datadictionary.exception.AttributeValidationException;
20  
21  import java.util.ArrayList;
22  import java.util.Iterator;
23  import java.util.List;
24  
25  /**
26                  The defaultSort element specifies the sequence in which the
27                  lookup search results should be displayed.  It contains an
28                  ascending/descending indicator and a list of attribute names.
29  
30                  DD: See SortDefinition.java
31  
32                  JSTL: defaultSort is a Map with the following keys:
33                  * sortAscending (boolean String)
34                  * sortAttributes (Map)
35  
36                  By the time JSTL export occurs, the optional attributeName from the defaultSort
37                  tag will have been converted into the first contained sortAttribute
38   */
39  public class SortDefinition extends DataDictionaryDefinitionBase {
40      private static final long serialVersionUID = -1092811342186612461L;
41      
42  	protected boolean sortAscending = true;
43      protected List<String> attributeNames = new ArrayList<String>();
44  
45      public SortDefinition() {}
46  
47  
48      /**
49                         The sortAttribute element defines one part of the sort key.
50                          The full sort key is comprised of the sortAttribute's in the
51                          order in which they have been defined.
52  
53                          DD: See SortAttributesDefinition.java.
54  
55                          JSTL: sortAttribute is a Map which is accessed using a
56                          key of the attributeName of the sortAttribute.
57                          It contains a single entry with the following key:
58                              * "attributeName"
59  
60                          The associated value is the attributeName of the sortAttribute.
61                          See LookupMapBuilder.java
62       * @throws IllegalArgumentException if the given attributeName is blank
63       */
64      public void setAttributeName(String attributeName) {
65          if (StringUtils.isBlank(attributeName)) {
66              throw new IllegalArgumentException("invalid (blank) attributeName");
67          }
68          if (attributeNames.size() != 0) {
69              throw new IllegalStateException("unable to set sort attributeName when sortAttributes have already been added");
70          }
71  
72          attributeNames.add(attributeName);
73      }
74  
75      /**
76       * @return the List of associated attribute names as Strings
77       */
78      public List<String> getAttributeNames() {
79          return this.attributeNames;
80      }
81  
82  
83      /**
84       * @return true if items should sort in ascending order
85       */
86      public boolean getSortAscending() {
87          return sortAscending;
88      }
89  
90      public void setSortAscending(boolean sortAscending) {
91          this.sortAscending = sortAscending;
92      }
93  
94  
95      /**
96       * Directly validate simple fields.
97       * 
98       * @see org.kuali.rice.krad.datadictionary.DataDictionaryDefinition#completeValidation(java.lang.Class, java.lang.Object)
99       */
100     public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass) {
101         for ( String attributeName : attributeNames ) {
102             if (!DataDictionary.isPropertyOf(rootBusinessObjectClass, attributeName)) {
103                 throw new AttributeValidationException("unable to find sort attribute '" + attributeName + "' in rootBusinessObjectClass '" + rootBusinessObjectClass.getName() + "' (" + "" + ")");
104             }            
105         }
106     }
107 
108 
109     /**
110      * @see java.lang.Object#toString()
111      */
112     public String toString() {
113         StringBuffer attrList = new StringBuffer("[");
114         for (Iterator<String> i = attributeNames.iterator(); i.hasNext();) {
115             attrList.append(i.next());
116             if (i.hasNext()) {
117                 attrList.append(",");
118             }
119         }
120         attrList.append("]");
121 
122         return "SortDefinition :  " + attrList.toString();
123     }
124 
125 
126     /**
127                      The sortAttributes element allows a multiple-part sort key
128                       to be defined
129 
130                       JSTL: sortAttributes is a Map which is accessed using a
131                       key of "sortAttributes". This map contains an entry for
132                       sort attribute.  The key is:
133                       * attributeName of a sort field.
134                       The associated value is a sortAttribute ExportMap.
135      */
136     public void setAttributeNames(List<String> attributeNames) {
137         this.attributeNames = attributeNames;
138     }
139     
140 }