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