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 2006-2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.api;
028
029
030
031 import java.util.List;
032
033 import org.opends.messages.Message;
034 import org.opends.server.admin.std.server.
035 AccountStatusNotificationHandlerCfg;
036 import org.opends.server.config.ConfigException;
037 import org.opends.server.types.AccountStatusNotification;
038 import org.opends.server.types.InitializationException;
039
040
041
042 /**
043 * This class defines the set of methods that must be implemented for
044 * an account status notification handler. This handler will be
045 * invoked whenever certain types of events occur that could change
046 * the status of a user account. The account status notification
047 * handler may be used to notify the user and/or administrators of the
048 * change.
049 *
050 * @param <T> The type of configuration handled by this notification
051 * handler.
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
059 AccountStatusNotificationHandler
060 <T extends AccountStatusNotificationHandlerCfg>
061 {
062 /**
063 * Initializes this account status notification handler based on the
064 * information in the provided configuration entry.
065 *
066 * @param configuration The configuration entry that contains the
067 * information to use to initialize this
068 * account status notification handler.
069 *
070 * @throws ConfigException If the provided entry does not contain
071 * a valid configuration for this account
072 * status notification handler.
073 *
074 * @throws InitializationException If a problem occurs during
075 * initialization that is not
076 * related to the server
077 * configuration.
078 */
079 public abstract void initializeStatusNotificationHandler(
080 T configuration)
081 throws ConfigException, InitializationException;
082
083
084
085 /**
086 * Indicates whether the provided configuration is acceptable for
087 * this account status notification handler. It should be possible
088 * to call this method on an uninitialized account status
089 * notification handler instance in order to determine whether the
090 * handler would be able to use the provided configuration.
091 * <BR><BR>
092 * Note that implementations which use a subclass of the provided
093 * configuration class will likely need to cast the configuration
094 * to the appropriate subclass type.
095 *
096 * @param configuration The account status notification
097 * handler configuration for which to
098 * make the determination.
099 * @param unacceptableReasons A list that may be used to hold the
100 * reasons that the provided
101 * configuration is not acceptable.
102 *
103 * @return {@code true} if the provided configuration is acceptable
104 * for this account status notification handler, or
105 * {@code false} if not.
106 */
107 public boolean isConfigurationAcceptable(
108 AccountStatusNotificationHandlerCfg
109 configuration,
110 List<Message> unacceptableReasons)
111 {
112 // This default implementation does not perform any special
113 // validation. It should be overridden by account status
114 // notification implementations that wish to perform more detailed
115 // validation.
116 return true;
117 }
118
119
120
121 /**
122 * Performs any finalization that may be necessary when this status
123 * notification handler is taken out of service.
124 */
125 public void finalizeStatusNotificationHandler()
126 {
127 // No action is required by default.
128 }
129
130
131
132 /**
133 * Performs any processing that may be necessary in conjunction with
134 * the provided account status notification.
135 *
136 * @param notification The account status notification to be
137 * processed.
138 */
139 public abstract void handleStatusNotification(
140 AccountStatusNotification notification);
141 }
142