From e885a89b76edca8268da49319fdb6d233f8ea056 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 05 Dec 2014 10:15:30 +0000
Subject: [PATCH] Code cleanup
---
opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java | 314 ++++++++++++++++++---------------------------------
1 files changed, 113 insertions(+), 201 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java b/opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java
index da33479..d9e37b8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/DITCacheMap.java
@@ -24,7 +24,6 @@
* Copyright 2010 Sun Microsystems, Inc.
* Portions Copyright 2011-2014 ForgeRock AS
*/
-
package org.opends.server.api;
import java.util.AbstractMap;
@@ -35,53 +34,48 @@
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
+
import org.opends.server.types.DN;
-
/**
- * The DITCacheMap class implements custom Map for structural
- * storage of arbitrary objects in Directory Information Tree
- * (DIT) like structure.
+ * The DITCacheMap class implements custom Map for structural storage of
+ * arbitrary objects in Directory Information Tree (DIT) like structure.
+ * <p>
+ * This Map intended usage is for caching various server objects which can be
+ * subject to subtree operations like retrieval or removal of all objects under
+ * a specific DN. While using a regular Map it would require the entire Map
+ * iteration to achieve, this Map implementation maintains such internal
+ * structure that subtree operations are more efficient and do not require
+ * iterations over the entire map, instead additional subtree operations methods
+ * are provided by this Map to do just that.
+ * <p>
+ * API wise it behaves exactly like a regular Map implementation except for
+ * providing additional subtree methods. All required linkage and structuring is
+ * performed within this Map implementation itself and not exposed via the API
+ * in any way. For example, putting these key/value pairs:
*
- * This Map intended usage is for caching various server
- * objects which can be subject to subtree operations
- * like retrieval or removal of all objects under a
- * specific DN. While using a regular Map it would
- * require the entire Map iteration to achieve, this Map
- * implementation maintains such internal structure that
- * subtree operations are more efficient and do not
- * require iterations over the entire map, instead
- * additional subtree operations methods are provided by
- * this Map to do just that.
- *
- * API wise it behaves exactly like a regular Map
- * implementation except for providing additional
- * subtree methods. All required linkage and
- * structuring is performed within this Map
- * implementation itself and not exposed via the
- * API in any way. For example, putting these
- * key/value pairs
- *
+ * <pre>
* cn=Object1,ou=Objects,dc=example,dc=com : object1
* cn=Object2,ou=Objects,dc=example,dc=com : object2
* cn=Object3,ou=Objects,dc=example,dc=com : object3
+ * </pre>
*
- * then invoking a subtree method on this Map with
- * any of these keys
+ * then invoking a subtree method on this Map with any of these keys:
*
+ * <pre>
* ou=Objects,dc=example,dc=com
* dc=example,dc=com
* dc=com
+ * </pre>
*
- * would bring all three objects previously stored in
- * this map into subtree operation scope. Standard
- * Map API methods can only work with the objects
+ * would bring all three objects previously stored in this map into subtree
+ * operation scope. Standard Map API methods can only work with the objects
* previously stored in this map explicitly.
+ * <p>
+ * Note that this Map implementation is not synchronized.
*
- * Note that this Map implementation is not
- * synchronized.
- *
- * @param <T> arbitrary object type.
+ * @param <T>
+ * arbitrary object type.
*/
public final class DITCacheMap<T> extends AbstractMap<DN,T>
{
@@ -92,47 +86,44 @@
*/
private static final class Node<T>
{
- // Node DN.
+ /** Node DN. */
DN dn;
- // Storage object or null if this node exist
- // only to support the DIT like structuring.
+ /**
+ * Storage object or null if this node exist
+ * only to support the DIT like structuring.
+ */
T element;
- // Parent.
+ /** Parent. */
Node<T> parent;
- // First child.
+ /** First child. */
Node<T> child;
- // Next sibling.
+ /** Next sibling. */
Node<T> next;
- // Previous sibling.
+ /** Previous sibling. */
Node<T> previous;
-
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public String toString()
{
- if (element == null)
+ if (element != null)
{
- return "glue";
+ return "node(" + element + ")";
}
else
{
- return "node(" + String.valueOf(element) + ")";
+ return "glue";
}
}
}
- // Map size reflecting only nodes
- // containing non empty elements.
- private int size = 0;
+ /** Map size reflecting only nodes containing non empty elements. */
+ private int size;
- // Backing Map implementation.
+ /** Backing Map implementation. */
private Map<DN,Node<T>> ditCacheMap;
- /**
- * Default constructor.
- */
+ /** Default constructor. */
public DITCacheMap()
{
ditCacheMap = new HashMap<DN,Node<T>>();
@@ -149,47 +140,34 @@
this.putAll(m);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public int size()
{
return size;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public boolean isEmpty()
{
return ditCacheMap.isEmpty();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public boolean containsKey(Object key)
{
- if (get((DN) key) != null)
- {
- return true;
- }
- return false;
+ return get(key) != null;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public boolean containsValue(Object value)
{
for (Node<T> node : ditCacheMap.values())
{
- if ((node.element != null) &&
- node.element.equals(value))
+ if (node.element != null && node.element.equals(value))
{
return true;
}
@@ -197,18 +175,12 @@
return false;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public T get(Object key)
{
- Node<T> node = ditCacheMap.get((DN)key);
- if (node != null)
- {
- return node.element;
- }
- return null;
+ Node<T> node = ditCacheMap.get(key);
+ return node != null ? node.element : null;
}
/**
@@ -223,9 +195,7 @@
return new DITSubtreeSet(key);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public T put(DN key, T value)
{
@@ -292,9 +262,7 @@
return null;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public T remove(Object key)
{
@@ -360,8 +328,7 @@
if (parentNode.child != node)
{
- // The parent references another sibling and does not need
- // fixing.
+ // The parent references another sibling and does not need fixing.
break;
}
@@ -398,8 +365,7 @@
* @param key subtree DN.
* @param values collection for removed objects subordinate
* to subtree DN or <code>null</code>.
- * @return <code>true</code> on success or
- * <code>false</code> otherwise.
+ * @return <code>true</code> on success or <code>false</code> otherwise.
*/
public boolean removeSubtree(DN key, Collection<? super T> values)
{
@@ -413,22 +379,18 @@
adjustSizeAndCollectElements(node, values);
return true;
}
- else
- {
- return false;
- }
+ return false;
}
/**
- * Iterate through detached subtree counting and collecting any
- * elements.
+ * Iterate through detached subtree counting and collecting any elements.
*
* @param node
* The node to be collected.
* @param values
- * Collection in which to put elemenets.
+ * Collection in which to put elements.
*/
private void adjustSizeAndCollectElements(final Node<T> node,
Collection<? super T> values)
@@ -464,9 +426,7 @@
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public void putAll(Map<? extends DN, ? extends T> m)
{
@@ -476,9 +436,7 @@
}
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
public void clear()
{
@@ -486,22 +444,17 @@
size = 0;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public Set<Entry<DN, T>> entrySet()
{
return new DITCacheEntrySet();
}
- /**
- * EntrySet class implementation for the DITCacheMap.
- */
+ /** EntrySet class implementation for the DITCacheMap. */
private class DITCacheEntrySet extends AbstractSet<Entry<DN, T>>
{
- /**
- * Iterator class implementation for the DITCacheEntrySet.
- */
+ /** Iterator class implementation for the DITCacheEntrySet. */
private class EntryIterator implements Iterator<Entry<DN, T>>
{
private Iterator<Entry<DN, Node<T>>> ditCacheMapIterator;
@@ -509,9 +462,7 @@
private Entry<DN, Node<T>> nextEntry;
private boolean hasNext;
- /**
- * Default constructor.
- */
+ /** Default constructor. */
public EntryIterator()
{
ditCacheMapIterator = ditCacheMap.entrySet().iterator();
@@ -520,9 +471,8 @@
hasNext = false;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public boolean hasNext()
{
if (hasNext)
@@ -533,7 +483,7 @@
{
Entry<DN, Node<T>> entry = ditCacheMapIterator.next();
Node<T> node = entry.getValue();
- if ((node != null) && (node.element != null))
+ if (node != null && node.element != null)
{
nextEntry = entry;
hasNext = true;
@@ -544,9 +494,8 @@
return false;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public Entry<DN, T> next()
{
if (nextEntry != null)
@@ -561,7 +510,7 @@
{
Entry<DN, Node<T>> entry = ditCacheMapIterator.next();
Node<T> node = entry.getValue();
- if ((node != null) && (node.element != null))
+ if (node != null && node.element != null)
{
currentEntry = entry;
hasNext = false;
@@ -571,9 +520,8 @@
throw new NoSuchElementException();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public void remove()
{
if (currentEntry != null)
@@ -592,11 +540,9 @@
while (hasNext())
{
Entry<DN, T> newIteratorEntry = next();
- if ((oldIteratorEntry != null) &&
- oldIteratorEntry.getKey().equals(
- newIteratorEntry.getKey()) &&
- oldIteratorEntry.getValue().element.equals(
- newIteratorEntry.getValue()))
+ if (oldIteratorEntry != null
+ && oldIteratorEntry.getKey().equals(newIteratorEntry.getKey())
+ && oldIteratorEntry.getValue().element.equals(newIteratorEntry.getValue()))
{
nextEntry = currentEntry;
hasNext = true;
@@ -613,26 +559,22 @@
}
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public int size()
{
return DITCacheMap.this.size();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public Iterator<Entry<DN, T>> iterator()
{
return new EntryIterator();
}
}
- /**
- * Map.Entry class implementation for the DITCacheMap.
- */
+ /** Map.Entry class implementation for the DITCacheMap. */
private class DITCacheMapEntry implements Map.Entry<DN, T>
{
private DN key;
@@ -650,25 +592,22 @@
this.value = value;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public DN getKey()
{
return key;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public T getValue()
{
return value;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public T setValue(T value)
{
Node<T> node = ditCacheMap.get(key);
@@ -679,12 +618,10 @@
}
}
- /**
- * SubtreeSet class implementation.
- */
+ /** SubtreeSet class implementation. */
private class DITSubtreeSet extends AbstractSet<T>
{
- // Set key.
+ /** Set key. */
private DN key;
/**
@@ -697,23 +634,19 @@
this.key = key;
}
- /**
- * Iterator class implementation for SubtreeSet.
- */
+ /** Iterator class implementation for SubtreeSet. */
private class SubtreeSetIterator implements Iterator<T>
{
- // Iterator key.
+ /** Iterator key. */
private DN key;
- // Iterator root node.
+ /** Iterator root node. */
private Node<T> rootNode;
- // Iterator current node.
+ /** Iterator current node. */
private Node<T> node;
- /**
- * Default constructor.
- */
+ /** Default constructor. */
public SubtreeSetIterator()
{
this.key = DITSubtreeSet.this.key;
@@ -733,19 +666,15 @@
node = rootNode;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public boolean hasNext()
{
if (rootNode != null)
{
- if (node == rootNode)
+ if (node == rootNode && rootNode.element != null)
{
- if (rootNode.element != null)
- {
- return true;
- }
+ return true;
}
while (node != null)
{
@@ -759,8 +688,7 @@
}
else
{
- while ((node.next == null) &&
- (node.parent != rootNode))
+ while (node.next == null && node.parent != rootNode)
{
node = node.parent;
}
@@ -771,9 +699,8 @@
return false;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public T next()
{
T element = null;
@@ -790,22 +717,14 @@
}
while (node != null)
{
- if (node.element != null)
- {
- element = node.element;
- }
- else
- {
- element = null;
- }
+ element = node.element;
if (node.child != null)
{
node = node.child;
}
else
{
- while ((node.next == null) &&
- (node.parent != rootNode))
+ while (node.next == null && node.parent != rootNode)
{
node = node.parent;
}
@@ -820,26 +739,23 @@
throw new NoSuchElementException();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public void remove()
{
throw new UnsupportedOperationException();
}
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public Iterator<T> iterator()
{
return new SubtreeSetIterator();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
+ @Override
public int size()
{
int size = 0;
@@ -855,12 +771,8 @@
}
}
-
-
-
/**
- * Returns the size of the internal map. Used for testing purposes
- * only.
+ * Returns the size of the internal map. Used for testing purposes only.
*
* @return The size of the internal map.
*/
--
Gitblit v1.10.0