001: /*
002: * $Id: SortableListViewHeaderGroup.java 460265 2006-04-16 13:36:52Z jdonnerstag $
003: * $Revision: 460265 $ $Date: 2006-04-16 15:36:52 +0200 (Sun, 16 Apr 2006) $
004: *
005: * ==================================================================== Licensed
006: * under the Apache License, Version 2.0 (the "License"); you may not use this
007: * file except in compliance with the License. You may obtain a copy of the
008: * License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing, software
013: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
014: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
015: * License for the specific language governing permissions and limitations under
016: * the License.
017: */
018: package wicket.examples.displaytag.list;
019:
020: import java.io.Serializable;
021: import java.util.List;
022:
023: import wicket.MarkupContainer;
024: import wicket.markup.ComponentTag;
025: import wicket.markup.html.list.ListView;
026: import wicket.util.collections.MicroMap;
027:
028: /**
029: * Maintains a group of sortable list view headers. By means of this group you
030: * change and maintain the information about which column shall be sorted. It
031: * also provides support for the list view to change the style of the header
032: * depending on its status.
033: *
034: * @see SortableListViewHeaderGroup
035: * @see SortableListViewHeaders
036: * @author Juergen Donnerstag
037: */
038: public class SortableListViewHeaderGroup implements Serializable {
039: /** contains the name of SortableTableHeader to be sorted */
040: final private MicroMap sorted = new MicroMap();
041:
042: /** The underlying listView to be sorted */
043: private ListView listView;
044:
045: /**
046: * Maintain a group SortableTableHeader
047: *
048: * @param container
049: * The html container the header will be added to
050: * @param listView
051: * The underlying ListView
052: */
053: public SortableListViewHeaderGroup(final MarkupContainer container,
054: final ListView listView) {
055: this .listView = listView;
056: }
057:
058: /**
059: * Set the column to be sorted
060: *
061: * @param name
062: * SortableTableHeader component name
063: */
064: protected final void setSortedColumn(final String name) {
065: listView.modelChanging();
066: sorted.clear();
067: sorted.put(name, null);
068: }
069:
070: /**
071: * True if column with name shall be sorted
072: *
073: * @param name
074: * column name
075: * @return True, if column must be sorted
076: */
077: protected final boolean isSorted(final String name) {
078: return sorted.containsKey(name);
079: }
080:
081: /**
082: * Get the list views's model data
083: *
084: * @return the list view's underlying list
085: */
086: protected List getListViewModelObject() {
087: return listView.getList();
088: }
089:
090: /**
091: * Get CSS style for a header. May be subclassed for company standards
092: *
093: * @param name
094: * The headers component name
095: * @param ascending
096: * Sorting order
097: * @return The CSS style to be applied to the tag's class attribute
098: */
099: protected final String getCssClass(final String name,
100: final boolean ascending) {
101: if (isSorted(name)) {
102: return (ascending ? "order2" : "order1")
103: + " sortable sorted";
104: }
105:
106: return null;
107: }
108:
109: /**
110: * Called by SortableListViewHeader and may be subclassed for company
111: * standards.
112: *
113: * @param tag
114: * component tag
115: * @param style
116: * CSS style
117: */
118: protected void handleComponentTag(final ComponentTag tag,
119: final String style) {
120: if (style != null) {
121: tag.put("class", style);
122: }
123: }
124: }
|