/**********************************************************************************
* $URL: https://source.sakaiproject.org/contrib/syracuse/taggable/branches/oncourse_osp_enhancements/taggable-impl/impl/src/java/org/sakaiproject/taggable/impl/TagListImpl.java $
* $Id: TagListImpl.java 45892 2008-02-22 19:54:48Z chmaurer@iupui.edu $
***********************************************************************************
*
* Copyright (c) 2006, 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.taggable.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.sakaiproject.taggable.api.TagColumn;
import org.sakaiproject.taggable.api.TagList;
import org.sakaiproject.taggable.api.Tag;
import org.sakaiproject.util.ResourceLoader;
public class TagListImpl extends ArrayList<Tag> implements TagList {
private static ResourceLoader messages = new ResourceLoader("taggable-impl");
/** Displayable column names */
public static final String WORKSITE_NAME = messages
.getString("column_worksite"), PARENT_NAME = messages
.getString("column_parent"), CRITERIA_NAME = messages
.getString("column_criteria"), RUBRIC_NAME = messages
.getString("column_rubric"), RATIONALE_NAME = messages
.getString("column_rationale"), VISIBLE_NAME = messages
.getString("column_visible"), EXPORTABLE_NAME = messages
.getString("column_exportable");
/** Column descriptions */
public static final String WORKSITE_DESC = messages
.getString("column_worksite_desc"), PARENT_DESC = messages
.getString("column_parent_desc"), CRITERIA_DESC = messages
.getString("column_criteria_desc"), RUBRIC_DESC = messages
.getString("column_rubric_desc"), RATIONALE_DESC = messages
.getString("column_rationale_desc"), VISIBLE_DESC = messages
.getString("column_visible_desc"), EXPORTABLE_DESC = messages
.getString("column_exportable_desc");
public static final String NA = messages.getString("na");
protected List<TagColumn> columns;
public TagListImpl() {
columns = new ArrayList<TagColumn>();
columns.add(new TagColumnImpl(CRITERIA, CRITERIA_NAME, CRITERIA_DESC, true));
columns.add(new TagColumnImpl(PARENT, PARENT_NAME, PARENT_DESC,
true));
columns.add(new TagColumnImpl(WORKSITE, WORKSITE_NAME,
WORKSITE_DESC, true));
}
public TagListImpl(List<TagColumn> theColumns) {
columns = theColumns;
}
public List<TagColumn> getColumns() {
return columns;
}
public TagColumn getColumn(String name) {
TagColumn column = null;
for (TagColumn c : columns) {
if (c.getName().equals(name)) {
column = c;
}
}
return column;
}
public void sort(final TagColumn column, final boolean ascending) {
Collections.sort(this, new Comparator<Tag>() {
public int compare(Tag o1, Tag o2) {
Tag t1 = null;
Tag t2 = null;
if (ascending) {
t1 = o1;
t2 = o2;
} else {
t2 = o1;
t1 = o2;
}
int value = 0;
if (column != null) {
if (column.isSortable()) {
value = t1.getField(column).compareToIgnoreCase(
t2.getField(column));
}
} else {
value = t1.getField(getColumn(WORKSITE))
.compareToIgnoreCase(
t2.getField(getColumn(WORKSITE)));
}
return value;
}
});
}
}