001: /**********************************************************************************
002: * $URL: https://source.sakaiproject.org/svn/osp/tags/sakai_2-4-1/matrix/tool/src/java/org/theospi/portfolio/matrix/taggable/tool/DecoratedTaggingProvider.java $
003: * $Id: DecoratedTaggingProvider.java 22575 2007-03-13 23:10:19Z jmpease@syr.edu $
004: ***********************************************************************************
005: *
006: * Copyright (c) 2007 The Sakai Foundation.
007: *
008: * Licensed under the Educational Community License, Version 1.0 (the "License");
009: * you may not use this file except in compliance with the License.
010: * You may obtain a copy of the License at
011: *
012: * http://www.opensource.org/licenses/ecl1.php
013: *
014: * Unless required by applicable law or agreed to in writing, software
015: * distributed under the License is distributed on an "AS IS" BASIS,
016: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: * See the License for the specific language governing permissions and
018: * limitations under the License.
019: *
020: **********************************************************************************/package org.theospi.portfolio.matrix.taggable.tool;
021:
022: import java.util.ArrayList;
023: import java.util.List;
024:
025: import org.sakaiproject.assignment.taggable.api.Tag;
026: import org.sakaiproject.assignment.taggable.api.TagColumn;
027: import org.sakaiproject.assignment.taggable.api.TagList;
028: import org.sakaiproject.assignment.taggable.api.TaggableActivity;
029: import org.sakaiproject.assignment.taggable.api.TaggingProvider;
030:
031: /**
032: * Wrapper around {@link TaggingProvider} for displaying a pageable/sortable
033: * list of tags for an activity or item. Since there may be multiple providers
034: * each with a list of tags displayed on a single page, this class enables each
035: * provider to maintain the page/sort state of its list separate from others.
036: *
037: * @author The Sakai Foundation.
038: */
039: public class DecoratedTaggingProvider {
040:
041: private Sort sort;
042:
043: private Pager pager;
044:
045: private TaggableActivity activity;
046:
047: private TaggingProvider provider;
048:
049: private TagList tagList;
050:
051: protected final static int[] PAGESIZES = { 5, 10, 20, 50, 100, 200 };
052:
053: public DecoratedTaggingProvider(TaggableActivity activity,
054: TaggingProvider provider) {
055: this .activity = activity;
056: this .provider = provider;
057: sort = new Sort("", true);
058: tagList = provider.getTags(activity);
059: pager = new Pager(tagList.size(), 0, 20);
060: }
061:
062: public Sort getSort() {
063: return sort;
064: }
065:
066: public Pager getPager() {
067: return pager;
068: }
069:
070: public boolean getAllowViewTags() {
071: return provider.allowViewTags(activity.getContext());
072: }
073:
074: public TaggingProvider getProvider() {
075: return provider;
076: }
077:
078: public List<Tag> getTags() {
079: List<Tag> tags = new ArrayList<Tag>();
080: if (tagList != null) {
081: tagList.sort(tagList.getColumn(sort.getSort()), sort
082: .isAscending());
083: tags = tagList.subList(pager.getFirstItem(), pager
084: .getLastItemNumber());
085: }
086: return tags;
087: }
088:
089: public List<TagColumn> getColumns() {
090: return provider.getTags(activity).getColumns();
091: }
092:
093: public class Sort {
094:
095: protected String sortString = "";
096:
097: protected boolean ascending = true;
098:
099: public Sort(String sort, boolean ascending) {
100: sortString = sort;
101: this .ascending = ascending;
102: }
103:
104: public boolean isAscending() {
105: return ascending;
106: }
107:
108: public void setAscending(boolean ascending) {
109: this .ascending = ascending;
110: }
111:
112: public String getSort() {
113: return sortString;
114: }
115:
116: public void setSort(String sort) {
117: sortString = sort;
118: }
119: }
120:
121: public class Pager {
122:
123: protected int totalItems;
124:
125: protected int firstItem;
126:
127: protected int pageSize;
128:
129: public static final String FIRST = "|<", PREVIOUS = "<",
130: NEXT = ">", LAST = ">|";
131:
132: public Pager(int totalItems, int firstItem, int pageSize) {
133: this .totalItems = totalItems;
134: this .firstItem = firstItem;
135: this .pageSize = pageSize;
136: }
137:
138: public int getFirstItemNumber() {
139: return firstItem + 1;
140: }
141:
142: public int getLastItemNumber() {
143: int n = firstItem + pageSize;
144: return (totalItems < n ? totalItems : n);
145: }
146:
147: public boolean getCanFirst() {
148: return firstItem > 0;
149: }
150:
151: public boolean getCanPrevious() {
152: return getCanFirst();
153: }
154:
155: public boolean getCanNext() {
156: return getLastItemNumber() < totalItems;
157: }
158:
159: public boolean getCanLast() {
160: return getCanNext();
161: }
162:
163: public int[] getPageSizes() {
164: return PAGESIZES;
165: }
166:
167: public int getFirstItem() {
168: return firstItem;
169: }
170:
171: public void setFirstItem(int firstItem) {
172: this .firstItem = firstItem;
173: }
174:
175: public int getPageSize() {
176: return pageSize;
177: }
178:
179: public void setPageSize(int pageSize) {
180: this .pageSize = pageSize;
181: }
182:
183: public int getTotalItems() {
184: return totalItems;
185: }
186:
187: public void setTotalItems(int totalItems) {
188: this.totalItems = totalItems;
189: }
190: }
191: }
|