From 1d5f9c9484a47d91ab2c4cf3796e5b1effca89ec Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 18 Apr 2007 14:15:39 +0000
Subject: [PATCH] The following changes have two main goals:
---
opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/DatabasesTableModel.java | 405 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 355 insertions(+), 50 deletions(-)
diff --git a/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/DatabasesTableModel.java b/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/DatabasesTableModel.java
index ffcdd4e..d6ce8b5 100644
--- a/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/DatabasesTableModel.java
+++ b/opendj-sdk/opends/src/statuspanel/org/opends/statuspanel/ui/DatabasesTableModel.java
@@ -35,7 +35,8 @@
import javax.swing.table.AbstractTableModel;
-import org.opends.statuspanel.DatabaseDescriptor;
+import org.opends.quicksetup.ui.SortableTableModel;
+import org.opends.statuspanel.BaseDNDescriptor;
import org.opends.statuspanel.i18n.ResourceProvider;
/**
@@ -44,16 +45,19 @@
*
*/
public class DatabasesTableModel extends AbstractTableModel
-implements SortableTableModel, Comparator<DatabaseDescriptor>
+implements SortableTableModel, Comparator<BaseDNDescriptor>
{
private static final long serialVersionUID = -5650762484071136983L;
- private HashSet<DatabaseDescriptor> data = new HashSet<DatabaseDescriptor>();
- private ArrayList<DatabaseDescriptor> dataArray =
- new ArrayList<DatabaseDescriptor>();
+ private HashSet<BaseDNDescriptor> data = new HashSet<BaseDNDescriptor>();
+ private ArrayList<BaseDNDescriptor> dataArray =
+ new ArrayList<BaseDNDescriptor>();
private final String[] COLUMN_NAMES = {
- getMsg("backendid-column"),
getMsg("basedn-column"),
- getMsg("number-entries-column")
+ getMsg("backendid-column"),
+ getMsg("number-entries-column"),
+ getMsg("synchronized-column"),
+ getMsg("missing-changes-column"),
+ getMsg("age-of-oldest-missing-change-column")
};
private int sortColumn = 0;
private boolean sortAscending = true;
@@ -62,15 +66,15 @@
* Sets the data for this table model.
* @param newData the data for this table model.
*/
- public void setData(Set<DatabaseDescriptor> newData)
+ public void setData(Set<BaseDNDescriptor> newData)
{
if (!newData.equals(data))
{
data.clear();
data.addAll(newData);
dataArray.clear();
- TreeSet<DatabaseDescriptor> sortedSet =
- new TreeSet<DatabaseDescriptor>(this);
+ TreeSet<BaseDNDescriptor> sortedSet =
+ new TreeSet<BaseDNDescriptor>(this);
sortedSet.addAll(data);
dataArray.addAll(sortedSet);
fireTableDataChanged();
@@ -84,8 +88,8 @@
public void forceResort()
{
dataArray.clear();
- TreeSet<DatabaseDescriptor> sortedSet =
- new TreeSet<DatabaseDescriptor>(this);
+ TreeSet<BaseDNDescriptor> sortedSet =
+ new TreeSet<BaseDNDescriptor>(this);
sortedSet.addAll(data);
dataArray.addAll(sortedSet);
fireTableDataChanged();
@@ -93,77 +97,189 @@
/**
* Comparable implementation.
- * @param desc1 the first database descriptor to compare.
- * @param desc2 the second database descriptor to compare.
+ * @param desc1 the first replica descriptor to compare.
+ * @param desc2 the second replica 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)
+ public int compare(BaseDNDescriptor desc1, BaseDNDescriptor desc2)
{
int result = 0;
if (sortColumn == 0)
{
- result = desc1.getBackendID().compareTo(desc2.getBackendID());
+ result = compareDns(desc1, desc2);
if (result == 0)
{
- result = desc1.getBaseDn().compareTo(desc2.getBaseDn());
+ result = compareBackendIDs(desc1, desc2);
}
if (result == 0)
{
- if (desc1.getEntries() > desc2.getEntries())
- {
- result = 1;
- }
- else if (desc1.getEntries() < desc2.getEntries())
- {
- result = -1;
- }
+ result = compareEntries(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareSync(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareMissingChanges(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareAgeOfOldestMissingChange(desc1, desc2);
}
}
- else if (sortColumn == 1)
+
+ if (sortColumn == 1)
{
- result = desc1.getBaseDn().compareTo(desc2.getBaseDn());
+ result = compareBackendIDs(desc1, desc2);
if (result == 0)
{
- result = desc1.getBackendID().compareTo(desc2.getBackendID());
+ result = compareDns(desc1, desc2);
}
if (result == 0)
{
- if (desc1.getEntries() > desc2.getEntries())
- {
- result = 1;
- }
- else if (desc1.getEntries() < desc2.getEntries())
- {
- result = -1;
- }
+ result = compareEntries(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareSync(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareMissingChanges(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareAgeOfOldestMissingChange(desc1, desc2);
}
}
- else
+ else if (sortColumn == 2)
{
- if (desc1.getEntries() > desc2.getEntries())
+ result = compareEntries(desc1, desc2);
+
+ if (result == 0)
{
- result = 1;
- }
- else if (desc1.getEntries() < desc2.getEntries())
- {
- result = -1;
+ result = compareBackendIDs(desc1, desc2);
}
if (result == 0)
{
- result = desc1.getBackendID().compareTo(desc2.getBackendID());
+ result = compareDns(desc1, desc2);
}
if (result == 0)
{
- result = desc1.getBaseDn().compareTo(desc2.getBaseDn());
+ result = compareSync(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareMissingChanges(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareAgeOfOldestMissingChange(desc1, desc2);
+ }
+ }
+ else if (sortColumn == 3)
+ {
+ result = compareSync(desc1, desc2);
+
+ if (result == 0)
+ {
+ result = compareBackendIDs(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareDns(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareEntries(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareMissingChanges(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareAgeOfOldestMissingChange(desc1, desc2);
+ }
+ }
+ else if (sortColumn == 4)
+ {
+ result = compareMissingChanges(desc1, desc2);
+
+ if (result == 0)
+ {
+ result = compareBackendIDs(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareDns(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareEntries(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareSync(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareAgeOfOldestMissingChange(desc1, desc2);
+ }
+ }
+ else if (sortColumn == 5)
+ {
+ result = compareAgeOfOldestMissingChange(desc1, desc2);
+
+ if (result == 0)
+ {
+ result = compareBackendIDs(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareDns(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareEntries(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareSync(desc1, desc2);
+ }
+
+ if (result == 0)
+ {
+ result = compareMissingChanges(desc1, desc2);
}
}
@@ -180,7 +296,7 @@
*/
public int getColumnCount()
{
- return 3;
+ return 6;
}
/**
@@ -197,18 +313,34 @@
public Object getValueAt(int row, int col)
{
Object v;
- DatabaseDescriptor desc = dataArray.get(row);
+ BaseDNDescriptor desc = dataArray.get(row);
if (col == 0)
{
- v = desc.getBackendID();
+ v = desc.getDn();
}
else if (col == 1)
{
- v = desc.getBaseDn();
+ v = desc.getDatabase().getBackendID();
+ }
+ else if (col == 2)
+ {
+ v = getValueForEntries(desc);
+ }
+ else if (col == 3)
+ {
+ v = getStringForSyncState(desc);
+ }
+ else if (col == 4)
+ {
+ v = getValueForMissingChanges(desc);
+ }
+ else if (col == 5)
+ {
+ v = getValueForOldestMissingChange(desc);
}
else
{
- v = new Integer(desc.getEntries());
+ throw new IllegalArgumentException("Invalid col number: "+col);
}
return v;
}
@@ -257,6 +389,174 @@
this.sortColumn = sortColumn;
}
+ /*
+ * Several comparison methods to be able to sort the table model.
+ */
+ private int compareBackendIDs(BaseDNDescriptor desc1, BaseDNDescriptor desc2)
+ {
+ return desc1.getDatabase().getBackendID().compareTo(
+ desc2.getDatabase().getBackendID());
+ }
+
+ private int compareEntries(BaseDNDescriptor desc1, BaseDNDescriptor desc2)
+ {
+ int n1 = desc1.getDatabase().getEntries();
+ int n2 = desc2.getDatabase().getEntries();
+ return compareIntegers(n1, n2);
+ }
+
+ private int compareIntegers(int n1, int n2)
+ {
+ if (n1 == n2)
+ {
+ return 0;
+ }
+ if (n1 > n2)
+ {
+ return 1;
+ }
+ return -1;
+ }
+
+ private int compareDns(BaseDNDescriptor desc1, BaseDNDescriptor desc2)
+ {
+ return desc1.getDn().compareTo(desc2.getDn());
+ }
+
+ private int compareSync(BaseDNDescriptor desc1, BaseDNDescriptor desc2)
+ {
+ return (String.valueOf(desc1.getType()).compareTo(
+ String.valueOf(desc2.getType())));
+ }
+
+ private int compareMissingChanges(BaseDNDescriptor desc1,
+ BaseDNDescriptor desc2)
+ {
+ return compareIntegers(desc1.getMissingChanges(),
+ desc2.getMissingChanges());
+ }
+
+ private int compareAgeOfOldestMissingChange(BaseDNDescriptor desc1,
+ BaseDNDescriptor desc2)
+ {
+ return compareIntegers(desc1.getAgeOfOldestMissingChange(),
+ desc2.getAgeOfOldestMissingChange());
+ }
+
+ /**
+ * Returns the Object describing the number of entries of a given Base DN.
+ * The Object will be an Integer unless the database of the Base DN contains
+ * several Base DNs. In this case we return a String.
+ * @param rep the Base DN object to handle.
+ * @return the Object describing the number of entries of a given Base DN.
+ */
+ private Object getValueForEntries(BaseDNDescriptor rep)
+ {
+ Object v;
+ int nEntries = rep.getDatabase().getEntries();
+ if ((rep.getDatabase().getBaseDns().size() > 1) &&
+ (nEntries >= 0))
+ {
+ String[] args = {
+ String.valueOf(nEntries),
+ rep.getDatabase().getBackendID()
+ };
+ v = getMsg("number-entries-multiple-suffixes-in-db", args);
+ }
+ else
+ {
+ v = new Integer(nEntries);
+ }
+ return v;
+ }
+
+ /**
+ * Returns the Object describing the number of missing changes of a given Base
+ * DN. The Object will be a String unless the base DN is
+ * synchronized and we could not find a valid value (in this case we return
+ * an Integer with the invalid value).
+ * @param rep the Base DN object to handle.
+ * @return the Object describing the number of missing changes of
+ * a given Base DN.
+ */
+ private Object getValueForMissingChanges(BaseDNDescriptor rep)
+ {
+ Object v;
+ if (rep.getType() == BaseDNDescriptor.Type.SYNCHRONIZED)
+ {
+ v = new Integer(rep.getMissingChanges());
+ }
+ else
+ {
+ v = getMsg("not-applicable-label");
+ }
+ return v;
+ }
+
+ /**
+ * Returns the Object describing the age of oldest missing change of
+ * a given Base DN. The Object will be a String unless the base DN is
+ * synchronized and we could not find a valid value (in this case we return
+ * an Integer with the invalid value).
+ * @param rep the Base DN object to handle.
+ * @return the Object describing the age of oldest missing change of
+ * a given Base DN.
+ */
+ private Object getValueForOldestMissingChange(BaseDNDescriptor rep)
+ {
+ Object v;
+ if (rep.getType() == BaseDNDescriptor.Type.SYNCHRONIZED)
+ {
+ int age = rep.getAgeOfOldestMissingChange();
+ if (age >= 0)
+ {
+ int remainingSeconds = age % 60;
+ int minutes = age / 60;
+ int remainingMinutes = minutes % 60;
+ int hours = minutes / 60;
+
+ String sMinutes = (remainingMinutes>=10)?
+ String.valueOf(remainingMinutes) : "0"+remainingMinutes;
+
+ String sSeconds = (remainingSeconds>=10)?
+ String.valueOf(remainingSeconds) : "0"+remainingSeconds;
+
+ String sHours = (hours>=10)?String.valueOf(hours):"0"+hours;
+
+ v = sHours+":"+sMinutes+":"+sSeconds;
+ }
+ else
+ {
+ v = new Integer(age);
+ }
+ }
+ else
+ {
+ v = getMsg("not-applicable-label");
+ }
+ return v;
+ }
+
+ /**
+ * Returns the localized String describing the synchronization state of
+ * a given Base DN.
+ * @param rep the Base DN object to handle.
+ * @return the localized String describing the synchronization state of
+ * a given Base DN.
+ */
+ private String getStringForSyncState(BaseDNDescriptor rep)
+ {
+ String s;
+ if (rep.getType() == BaseDNDescriptor.Type.SYNCHRONIZED)
+ {
+ s = getMsg("suffix-synchronized-label");
+ }
+ else
+ {
+ s = getMsg("suffix-not-synchronized-label");
+ }
+ return s;
+ }
/**
* The following three methods are just commodity methods to get localized
@@ -267,6 +567,11 @@
return getI18n().getMsg(key);
}
+ private String getMsg(String key, String[] args)
+ {
+ return getI18n().getMsg(key, args);
+ }
+
private ResourceProvider getI18n()
{
return ResourceProvider.getInstance();
--
Gitblit v1.10.0