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 }