mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

kenneth_suter
17.23.2007 5fa20ea2d54d21a781d07995e27113b4c3bbc953
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);
  }
}