001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.api;
028 import org.opends.messages.Message;
029
030
031
032 import java.util.HashSet;
033 import java.util.HashMap;
034 import java.util.List;
035
036 import org.opends.server.admin.std.server.ErrorLogPublisherCfg;
037 import org.opends.server.config.ConfigException;
038
039
040 import org.opends.server.types.InitializationException;
041 import org.opends.server.types.DN;
042 import org.opends.messages.Severity;
043 import org.opends.messages.Category;
044
045
046 /**
047 * This class defines the set of methods and structures that must be
048 * implemented for a Directory Server error log publisher.
049 *
050 * @param <T> The type of error log publisher configuration handled
051 * by this log publisher implementation.
052 */
053 @org.opends.server.types.PublicAPI(
054 stability=org.opends.server.types.StabilityLevel.VOLATILE,
055 mayInstantiate=false,
056 mayExtend=true,
057 mayInvoke=false)
058 public abstract class ErrorLogPublisher
059 <T extends ErrorLogPublisherCfg>
060 {
061 /**
062 * The hash map that will be used to define specific log severities
063 * for the various categories.
064 */
065 protected HashMap<Category,HashSet<Severity>>
066 definedSeverities =
067 new HashMap<Category, HashSet<Severity>>();
068
069
070
071 /**
072 * The set of default log severities that will be used if no custom
073 * severities have been defined for the associated category.
074 */
075 protected HashSet<Severity>
076 defaultSeverities = new HashSet<Severity>();
077
078
079
080 /**
081 * Initializes this access publisher provider based on the
082 * information in the provided debug publisher configuration.
083 *
084 * @param config The error publisher configuration that contains
085 * the information to use to initialize this error
086 * publisher.
087 *
088 * @throws ConfigException If an unrecoverable problem arises in
089 * the process of performing the
090 * initialization as a result of the
091 * server configuration.
092 *
093 * @throws InitializationException If a problem occurs during
094 * initialization that is not
095 * related to the server
096 * configuration.
097 */
098 public abstract void initializeErrorLogPublisher(T config)
099 throws ConfigException, InitializationException;
100
101
102
103 /**
104 * Indicates whether the provided configuration is acceptable for
105 * this error log publisher. It should be possible to call this
106 * method on an uninitialized error log publisher instance in
107 * order to determine whether the error log publisher would be able
108 * to use the provided configuration.
109 * <BR><BR>
110 * Note that implementations which use a subclass of the provided
111 * configuration class will likely need to cast the configuration
112 * to the appropriate subclass type.
113 *
114 * @param configuration The error log publisher
115 * configuration for which to make the
116 * determination.
117 * @param unacceptableReasons A list that may be used to hold the
118 * reasons that the provided
119 * configuration is not acceptable.
120 *
121 * @return {@code true} if the provided configuration is acceptable
122 * for this error log publisher, or {@code false} if not.
123 */
124 public boolean isConfigurationAcceptable(
125 ErrorLogPublisherCfg configuration,
126 List<Message> unacceptableReasons)
127 {
128 // This default implementation does not perform any special
129 // validation. It should be overridden by error log publisher
130 // implementations that wish to perform more detailed validation.
131 return true;
132 }
133
134
135
136 /**
137 * Close this publisher.
138 */
139 public abstract void close();
140
141
142
143 /**
144 * Writes a message to the error log using the provided information.
145 * The message's category and severity information will be used to
146 * determine whether to actually log this message.
147 *
148 * @param message The message to be logged.
149 */
150 public abstract void logError(Message message);
151
152 /**
153 * Gets the DN of the configuration entry for this error log
154 * publisher.
155 *
156 * @return The configuration entry DN.
157 */
158 public abstract DN getDN();
159
160 }
161