/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Portions Copyright 2007 Sun Microsystems, Inc. */ package org.opends.statuspanel.ui; import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; import javax.swing.table.AbstractTableModel; import org.opends.statuspanel.DatabaseDescriptor; import org.opends.statuspanel.i18n.ResourceProvider; /** * This class is just a table model used to display the information about * databases in a table. * */ public class DatabasesTableModel extends AbstractTableModel implements SortableTableModel, Comparator { private static final long serialVersionUID = -5650762484071136983L; private HashSet data = new HashSet(); private ArrayList dataArray = new ArrayList(); private final String[] COLUMN_NAMES = { getMsg("backendid-column"), getMsg("basedn-column"), getMsg("number-entries-column") }; private int sortColumn = 0; private boolean sortAscending = true; /** * Sets the data for this table model. * @param newData the data for this table model. */ public void setData(Set newData) { if (!newData.equals(data)) { data.clear(); data.addAll(newData); dataArray.clear(); TreeSet sortedSet = new TreeSet(this); sortedSet.addAll(data); dataArray.addAll(sortedSet); fireTableDataChanged(); } } /** * Updates the table model contents and sorts its contents depending on the * sort options set by the user. */ public void forceResort() { dataArray.clear(); TreeSet sortedSet = new TreeSet(this); sortedSet.addAll(data); dataArray.addAll(sortedSet); fireTableDataChanged(); } /** * Comparable implementation. * @param desc1 the first database descriptor to compare. * @param desc2 the second database descriptor to compare. * @return 1 if according to the sorting options set by the user the first * database descriptor must be put before the second descriptor, 0 if they * are equivalent in terms of sorting and -1 if the second descriptor must * be put before the first descriptor. */ public int compare(DatabaseDescriptor desc1, DatabaseDescriptor desc2) { int result = 0; if (sortColumn == 0) { result = desc1.getBackendID().compareTo(desc2.getBackendID()); if (result == 0) { result = desc1.getBaseDn().compareTo(desc2.getBaseDn()); } if (result == 0) { if (desc1.getEntries() > desc2.getEntries()) { result = 1; } else if (desc1.getEntries() < desc2.getEntries()) { result = -1; } } } else if (sortColumn == 1) { result = desc1.getBaseDn().compareTo(desc2.getBaseDn()); if (result == 0) { result = desc1.getBackendID().compareTo(desc2.getBackendID()); } if (result == 0) { if (desc1.getEntries() > desc2.getEntries()) { result = 1; } else if (desc1.getEntries() < desc2.getEntries()) { result = -1; } } } else { if (desc1.getEntries() > desc2.getEntries()) { result = 1; } else if (desc1.getEntries() < desc2.getEntries()) { result = -1; } if (result == 0) { result = desc1.getBackendID().compareTo(desc2.getBackendID()); } if (result == 0) { result = desc1.getBaseDn().compareTo(desc2.getBaseDn()); } } if (!sortAscending) { result = -result; } return result; } /** * {@inheritDoc} */ public int getColumnCount() { return 3; } /** * {@inheritDoc} */ public int getRowCount() { return dataArray.size(); } /** * {@inheritDoc} */ public Object getValueAt(int row, int col) { Object v; DatabaseDescriptor desc = dataArray.get(row); if (col == 0) { v = desc.getBackendID(); } else if (col == 1) { v = desc.getBaseDn(); } else { v = new Integer(desc.getEntries()); } return v; } /** * {@inheritDoc} */ public String getColumnName(int col) { return COLUMN_NAMES[col]; } /** * Returns whether the sort is ascending or descending. * @return true if the sort is ascending and false * otherwise. */ public boolean isSortAscending() { return sortAscending; } /** * Sets whether to sort ascending of descending. * @param sortAscending whether to sort ascending or descending. */ public void setSortAscending(boolean sortAscending) { this.sortAscending = sortAscending; } /** * Returns the column index used to sort. * @return the column index used to sort. */ public int getSortColumn() { return sortColumn; } /** * Sets the column index used to sort. * @param sortColumn column index used to sort.. */ public void setSortColumn(int sortColumn) { this.sortColumn = sortColumn; } /** * The following three methods are just commodity methods to get localized * messages. */ private String getMsg(String key) { return getI18n().getMsg(key); } private ResourceProvider getI18n() { return ResourceProvider.getInstance(); } }