From 5fa20ea2d54d21a781d07995e27113b4c3bbc953 Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Fri, 17 Aug 2007 19:23:08 +0000
Subject: [PATCH] New tests for messaging plumbing to replace old ones:

---
 opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java |   53 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java b/opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java
index eb5e7ac..0a2306b 100644
--- a/opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java
+++ b/opends/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java
@@ -29,6 +29,11 @@
 
 import java.util.Map;
 import java.util.HashMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Collections;
+import java.util.List;
+import java.util.LinkedList;
 import java.io.InputStream;
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
@@ -36,17 +41,27 @@
 import java.lang.reflect.Field;
 
 /**
- * Serves as a registry for messages providing access to
- * descriptors by ID.
+ * Serves as a registry for messages providing access to message descriptors
+ * by ID and class in which they are defined.  Classes containing message
+ * descriptors are stored in the text file "descriptors.reg" which is
+ * generated during the OpenDS build process.
  */
 public class MessageDescriptorRegistry {
 
   private static final String REGISTRY_FILE = "descriptors.reg";
 
+  private static final Set<Class> REGISTERED_MESSAGE_CLASSES =
+                  new HashSet<Class>();
+
   private static final Map<Integer, MessageDescriptor>
           ID_TO_DESCRIPTORS =
                   new HashMap<Integer,MessageDescriptor>();
 
+  private static final Map<Class, List<MessageDescriptor>>
+          CLASS_TO_DESCRIPTORS =
+                  new HashMap<Class,List<MessageDescriptor>>();
+
+
   static {
     InputStream is = MessageDescriptor.class
             .getResourceAsStream(REGISTRY_FILE);
@@ -59,12 +74,16 @@
         Class descClass;
         try {
           descClass = Class.forName(descClassName);
+          List<MessageDescriptor> mdList = new LinkedList<MessageDescriptor>();
+          CLASS_TO_DESCRIPTORS.put(descClass,  mdList);
+          REGISTERED_MESSAGE_CLASSES.add(descClass);
           Field[] fa = descClass.getFields();
           if (fa != null) {
             for (Field f : fa) {
-              Class<?> c = f.getDeclaringClass();
-              if (c.isAssignableFrom(MessageDescriptor.class)) {
+              Class<?> c = f.getType();
+              if (MessageDescriptor.class.isAssignableFrom(c)) {
                 MessageDescriptor md = (MessageDescriptor)f.get(null);
+                mdList.add(md);
                 int id = md.getId();
                 if (id != MessageDescriptor.NULL_ID) {
                   ID_TO_DESCRIPTORS.put(id, md);
@@ -88,6 +107,7 @@
 
   /**
    * Returns a message descriptor given its unique OpenDS system-wide ID.
+   *
    * @param id integer value of the message to retreive
    * @return MessageDescriptor having the ID of <code>id</code>
    */
@@ -95,4 +115,29 @@
     return ID_TO_DESCRIPTORS.get(id);
   }
 
+  /**
+   * Given a registered class containing message descriptors, returns a
+   * list of all message descriptors defined by that class.
+   *
+   * @param mdClass registered class containing message descriptors
+   * @return unmodifiable list of message descriptors declared in
+   *         <code>mdClass</code>
+   */
+
+  public static List<MessageDescriptor> getMessageDescriptorsForClass(
+          Class mdClass)
+  {
+    return Collections.unmodifiableList(CLASS_TO_DESCRIPTORS.get(mdClass));
+  }
+
+  /**
+   * Returns a set of classes registered as having message descriptor
+   * declarations.
+   *
+   * @return list of classes
+   */
+  public static Set<Class> getRegisteredClasses() {
+    return Collections.unmodifiableSet(REGISTERED_MESSAGE_CLASSES);
+  }
+
 }

--
Gitblit v1.10.0