From 58612d6e94fb33672d29350f25ca45e4004c1751 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 04 Aug 2011 16:16:48 +0000
Subject: [PATCH] Fix OPENDJ-252. Control Panel fails with a Null Pointer Exception with JDK7. Thanks to jvergara who provided a quick fix to OpenDS.
---
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNDescriptor.java | 25 +++++++++---
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java | 10 ++--
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java | 10 ++--
opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java | 43 +++++++++++++--------
4 files changed, 55 insertions(+), 33 deletions(-)
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
index 8ffc94d..54ce99f 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BackendDescriptor.java
@@ -22,13 +22,14 @@
* CDDL HEADER END
*
*
- * Copyright 2008 Sun Microsystems, Inc.
+ * Copyright 2008-2011 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.datamodel;
-import java.util.Collections;
+import java.util.Set;
import java.util.SortedSet;
+import java.util.TreeSet;
import org.opends.admin.ads.ADSContext;
@@ -38,15 +39,15 @@
*/
public class BackendDescriptor
{
- private String backendID;
+ private final String backendID;
private SortedSet<BaseDNDescriptor> baseDns;
private SortedSet<IndexDescriptor> indexes;
private SortedSet<VLVIndexDescriptor> vlvIndexes;
private int entries;
- private boolean isConfigBackend;
- private boolean isEnabled;
+ private final boolean isConfigBackend;
+ private final boolean isEnabled;
private CustomSearchResult monitoringEntry;
- private Type type;
+ private final Type type;
private int hashCode;
/**
@@ -95,20 +96,17 @@
* @param type the type of the backend.
*/
public BackendDescriptor(String backendID,
- SortedSet<BaseDNDescriptor> baseDns,
- SortedSet<IndexDescriptor> indexes,
- SortedSet<VLVIndexDescriptor> vlvIndexes,
+ Set<BaseDNDescriptor> baseDns,
+ Set<IndexDescriptor> indexes,
+ Set<VLVIndexDescriptor> vlvIndexes,
int entries, boolean isEnabled, Type type)
{
this.backendID = backendID;
- this.baseDns = Collections.unmodifiableSortedSet(baseDns);
- this.indexes = Collections.unmodifiableSortedSet(indexes);
- this.vlvIndexes = Collections.unmodifiableSortedSet(vlvIndexes);
this.entries = entries;
isConfigBackend = isConfigBackend(backendID);
this.type = type;
this.isEnabled = isEnabled;
- updateBaseDnsAndIndexes();
+ updateBaseDnsAndIndexes(baseDns, indexes, vlvIndexes);
recalculateHashCode();
}
@@ -162,6 +160,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public boolean equals(Object v)
{
boolean equals = false;
@@ -221,6 +220,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public int hashCode()
{
return hashCode;
@@ -252,23 +252,32 @@
/**
* Updates the base DNs and indexes contained in this backend so that they
- * have a reference to this backend.
+ * have a reference to this backend. It also initialize the members of this
+ * class with the base DNs and indexes.
+ * @param baseDns the base DNs associated with the Backend.
+ * @param indexes the indexes defined in the backend.
+ * @param vlvIndexes the VLV indexes defined in the backend.
*
*/
- private void updateBaseDnsAndIndexes()
+ private void updateBaseDnsAndIndexes(Set<BaseDNDescriptor> baseDns,
+ Set<IndexDescriptor> indexes,
+ Set<VLVIndexDescriptor> vlvIndexes)
{
for (BaseDNDescriptor baseDN : baseDns)
{
baseDN.setBackend(this);
}
- for (AbstractIndexDescriptor index : indexes)
+ this.baseDns = new TreeSet<BaseDNDescriptor>(baseDns);
+ for (IndexDescriptor index : indexes)
{
index.setBackend(this);
}
- for (AbstractIndexDescriptor index : vlvIndexes)
+ this.indexes = new TreeSet<IndexDescriptor>(indexes);
+ for (VLVIndexDescriptor index : vlvIndexes)
{
index.setBackend(this);
}
+ this.vlvIndexes = new TreeSet<VLVIndexDescriptor>(vlvIndexes);
}
/**
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNDescriptor.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNDescriptor.java
index 47ed803c..4bdd0e4 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNDescriptor.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNDescriptor.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008-2010 Sun Microsystems, Inc.
+ * Copyright 2008-2011 Sun Microsystems, Inc.
* Portions Copyright 2011 ForgeRock AS
*/
@@ -58,7 +58,7 @@
private BackendDescriptor backend;
private long ageOfOldestMissingChange;
private Type type;
- private DN baseDn;
+ private final DN baseDn;
private int replicaID = -1;
private int hashCode;
@@ -100,6 +100,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public boolean equals(Object v)
{
boolean equals = false;
@@ -112,9 +113,16 @@
getDn().equals(desc.getDn()) &&
(getAgeOfOldestMissingChange() == desc.getAgeOfOldestMissingChange()) &&
(getMissingChanges() == desc.getMissingChanges()) &&
- getBackend().getBackendID().equals(
- desc.getBackend().getBackendID()) &&
(getEntries() == desc.getEntries());
+ if (equals)
+ {
+ if ((getBackend() != null) && (desc.getBackend() != null))
+ {
+ // Only compare the backend IDs. In this context is enough
+ equals = getBackend().getBackendID().equals(
+ desc.getBackend().getBackendID());
+ }
+ }
}
}
else
@@ -127,6 +135,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public int hashCode()
{
return hashCode;
@@ -145,8 +154,12 @@
}
if (returnValue == 0)
{
- returnValue = getBackend().getBackendID().compareTo(
- desc.getBackend().getBackendID());
+ if ((getBackend() != null) && (desc.getBackend() != null))
+ {
+ // Only compare the backend IDs. In this context is enough
+ returnValue = getBackend().getBackendID().compareTo(
+ desc.getBackend().getBackendID());
+ }
}
if (returnValue == 0)
{
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
index 9bde4e1..0b64817 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromDirContext.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008-2010 Sun Microsystems, Inc.
+ * Copyright 2008-2011 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.util;
@@ -310,7 +310,7 @@
try
{
BackendCfgClient backend = root.getBackend(backendNames[i]);
- SortedSet<BaseDNDescriptor> baseDNs = new TreeSet<BaseDNDescriptor>();
+ Set<BaseDNDescriptor> baseDNs = new HashSet<BaseDNDescriptor>();
for (DN dn : backend.getBaseDN())
{
BaseDNDescriptor baseDN =
@@ -318,9 +318,9 @@
null, -1, -1, -1);
baseDNs.add(baseDN);
}
- SortedSet<IndexDescriptor> indexes = new TreeSet<IndexDescriptor>();
- SortedSet<VLVIndexDescriptor> vlvIndexes =
- new TreeSet<VLVIndexDescriptor>();
+ Set<IndexDescriptor> indexes = new HashSet<IndexDescriptor>();
+ Set<VLVIndexDescriptor> vlvIndexes =
+ new HashSet<VLVIndexDescriptor>();
BackendDescriptor.Type type;
if (backend instanceof LocalDBBackendCfgClient)
{
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java
index c6f0963..c71a78f 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/controlpanel/util/ConfigFromFile.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Copyright 2008-2010 Sun Microsystems, Inc.
+ * Copyright 2008-2011 Sun Microsystems, Inc.
*/
package org.opends.guitools.controlpanel.util;
@@ -165,7 +165,7 @@
try
{
BackendCfg backend = root.getBackend(backendNames[i]);
- SortedSet<BaseDNDescriptor> baseDNs = new TreeSet<BaseDNDescriptor>();
+ Set<BaseDNDescriptor> baseDNs = new HashSet<BaseDNDescriptor>();
for (DN dn : backend.getBaseDN())
{
BaseDNDescriptor baseDN =
@@ -173,9 +173,9 @@
null, -1, -1, -1);
baseDNs.add(baseDN);
}
- SortedSet<IndexDescriptor> indexes = new TreeSet<IndexDescriptor>();
- SortedSet<VLVIndexDescriptor> vlvIndexes =
- new TreeSet<VLVIndexDescriptor>();
+ Set<IndexDescriptor> indexes = new HashSet<IndexDescriptor>();
+ Set<VLVIndexDescriptor> vlvIndexes =
+ new HashSet<VLVIndexDescriptor>();
BackendDescriptor.Type type;
if (backend instanceof LocalDBBackendCfg)
{
--
Gitblit v1.10.0