1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * ident	"%Z%%M%	%I%	%E% SMI"
24  *
25  * Copyright (c) 2001 by Sun Microsystems, Inc.
26  * All rights reserved.
27  */
28 package com.sun.dhcpmgr.client;
29 
30 import java.awt.*;
31 import java.util.*;
32 import javax.swing.event.EventListenerList;
33 
34 /**
35  * This class provides a skeletal implementation of the data store module
36  * management interface to minimize the effort required to implement a
37  * data store management class.
38  */
39 public abstract class DSModule {
40 
41     /**
42      * Listeners registered with the DSModule.
43      */
44     private EventListenerList DSMListeners = new EventListenerList();
45 
46     /**
47      * Attribute that signifies whether or not the data store  has been
48      * configured well enough to allow the data store to be managed.
49      */
50     private boolean forwardEnabled = false;
51 
52     /**
53      * Returns the path that is used by the data store (i.e., the PATH value
54      * in the DHCP config file).
55      * @return the path that is used by the data store (i.e., the PATH value
56      * in the DHCP config file) or null if not set.
57      */
getPath()58     public abstract String getPath();
59 
60     /**
61      * Returns additional datastore specific information (i.e., the
62      * RESOURCE_CONFIG value in the DHCP config file).
63      * @return additional datastore specific information (i.e., the
64      * RESOURCE_CONFIG value in the DHCP config file) or null if not set.
65      */
getAdditionalInfo()66     public abstract String getAdditionalInfo();
67 
68     /**
69      * Returns the description that will be used by the DHCP configuration
70      * wizard when adding the data store to the list of data store radio
71      * buttons.
72      * @return the description that will be used by the DHCP configuration
73      * wizard when adding the data store to the list of data store radio
74      * buttons.
75      */
getDescription()76     public abstract String getDescription();
77 
78     /**
79      * Returns the component that will be used by the DHCP configuration
80      * wizard to manage obtaining the data store parameters.
81      * @return the component that will be used by the DHCP configuration
82      * wizard to manage obtaining the data store parameters.
83      */
getComponent()84     public abstract Component getComponent();
85 
86     /**
87      * Adds a listener to the DSModule listener list.
88      * @param l the listener.
89      */
addDSMListener(DSModuleListener l)90     public void addDSMListener(DSModuleListener l) {
91 	DSMListeners.add(DSModuleListener.class, l);
92     } // addDSMListener
93 
94     /**
95      * Removes a listener from the DSModule listener list.
96      * @param l the listener.
97      */
removeDSMListener(DSModuleListener l)98     public void removeDSMListener(DSModuleListener l) {
99 	DSMListeners.remove(DSModuleListener.class, l);
100     } // removeDSMListener
101 
102     /**
103      * Fires a DSModuleEvent to all DSModule listeners on the listener list.
104      * @param e the DSModuleEvent to be fired.
105      */
fireDSMEvent(DSModuleEvent e)106     private void fireDSMEvent(DSModuleEvent e) {
107 	// Guaranteed to return a non-null array
108 	Object[] listeners = DSMListeners.getListenerList();
109 
110 	// Process the listeners last to first, notifying
111 	// those that are interested in this event
112 	for (int i = listeners.length - 2; i >= 0; i -= 2) {
113 	    if (listeners[i] == DSModuleListener.class) {
114 		((DSModuleListener)listeners[i + 1]).stateChanged(e);
115 	    }
116 	}
117     } // fireDSMEvent
118 
119     /**
120      * Returns the modules readiness state (i.e., can the DHCP config wizard
121      * continue forward if the user wishes).
122      * @return the modules readiness state
123      */
getForwardEnabled()124     public final boolean getForwardEnabled() {
125 	return forwardEnabled;
126     } // getForwardEnabled
127 
128     /**
129      * Sets the forwardEnabled attribute and fires a DSModuleEvent to the DHCP
130      * configuration wizard to let it know that the module's state has changed.
131      * @param enable value to which forwardEnabled should be set.
132      */
setForwardEnabled(boolean enable)133     public final void setForwardEnabled(boolean enable) {
134 
135 	forwardEnabled = enable;
136 
137 	int state = DSModuleEvent.DATA_VALID;
138 	if (!enable) {
139 	    state = DSModuleEvent.DATA_INVALID;
140 	}
141 
142 	fireDSMEvent(new DSModuleEvent(this, state));
143     } // setForwardEnabled
144 
145 } // DSModule
146