/**
* ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium.
*/
package org.esupportail.helpdesk.web.beans;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.esupportail.helpdesk.domain.beans.User;
import org.springframework.util.StringUtils;
/**
* A bean that gives to column to print at a given position.
*/
public class ControlPanelColumnOrderer extends HashMap<Integer, String> {
/**
* The serialization id.
*/
private static final long serialVersionUID = 6367418668009353140L;
/**
* The columns.
*/
private static final String [] COLUMNS = {
"ID",
"CREATION_DATE_TIME",
"CREATION_DATE",
"DEPARTMENT",
"CREATION_DEPARTMENT",
"CATEGORY",
"LABEL",
"STATUS",
"PRIORITY",
"CHANGE_DATE",
"CHANGE_DATE_TIME",
"OWNER",
"MANAGER",
};
/**
* The default columns.
*/
private static final String [] DEFAULT_COLUMNS = {
"ID",
"CREATION_DATE_TIME",
"DEPARTMENT",
"CATEGORY",
"LABEL",
"STATUS",
"OWNER",
"MANAGER",
};
/**
* The column names.
*/
private List<String> columnNames;
/**
* Bean constructor.
* @param user
*/
public ControlPanelColumnOrderer(final User user) {
super();
String [] columnNamesArray = null;
if (StringUtils.hasText(user.getControlPanelColumns())) {
columnNamesArray = user.getControlPanelColumns().split(":");
}
if (columnNamesArray == null || columnNamesArray.length == 0) {
columnNamesArray = DEFAULT_COLUMNS;
}
columnNames = new ArrayList<String>();
for (String columnName : columnNamesArray) {
columnNames.add(columnName);
}
}
/**
* @see java.util.HashMap#get(java.lang.Object)
*/
@Override
public String get(final Object order) {
String result = null;
if (order != null) {
try {
int n = Integer.parseInt(order.toString());
if (n < columnNames.size() && n >= 0) {
result = columnNames.get(n);
}
} catch (NumberFormatException e) {
// return null
}
}
return result;
}
/**
* @return the missing column names.
*/
public List<String> getMissingColumnNames() {
List<String> missingColumnNames = new ArrayList<String>();
for (String columnName : COLUMNS) {
if (!columnNames.contains(columnName)) {
missingColumnNames.add(columnName);
}
}
return missingColumnNames;
}
/**
* Remove a column.
* @param index the index of the column to remove
*/
public void removeColumn(final int index) {
// List<String> oldColumnNames = columnNames;
// columnNames = new ArrayList<String>();
// for (int i = 0; i < oldColumnNames.size(); i++) {
// if (index != i) {
// columnNames.add(oldColumnNames.get(i));
// }
// }
columnNames.remove(index);
}
/**
* Move a column right.
* @param index the index of the column to move
*/
public void moveColumnRight(final int index) {
if (index >= columnNames.size() || index < 0) {
return;
}
String columnName = columnNames.get(index);
columnNames.set(index, columnNames.get(index + 1));
columnNames.set(index + 1, columnName);
}
/**
* Move a column left.
* @param index the index of the column to move
*/
public void moveColumnLeft(final int index) {
if (index > columnNames.size() || index <= 0) {
return;
}
String columnName = columnNames.get(index);
columnNames.set(index, columnNames.get(index - 1));
columnNames.set(index - 1, columnName);
}
/**
* Add a column.
* @param columnName the name of the column to add
*/
public void addColumn(final String columnName) {
columnNames.add(columnName);
}
/**
* @return the orderer as a String.
*/
public String asString() {
String separator = "";
String result = "";
for (String columnName : columnNames) {
result += separator + columnName;
separator = ":";
}
return result;
}
/**
* @return the number of columns
*/
public int getColumnsNumber() {
return columnNames.size();
}
}