001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Kernel/Sources/es/udc/mypersonalizer/kernel/model/editors/EditorFactory.java,v 1.1.1.1 2004/03/25 12:08:37 fbellas Exp $
003: * $Revision: 1.1.1.1 $
004: * $Date: 2004/03/25 12:08:37 $
005: *
006: * =============================================================================
007: *
008: * Copyright (c) 2003, The MyPersonalizer Development Group
009: * (http://www.tic.udc.es/~fbellas/mypersonalizer/index.html) at
010: * University Of A Coruna
011: * All rights reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions are met:
015: *
016: * - Redistributions of source code must retain the above copyright notice,
017: * this list of conditions and the following disclaimer.
018: *
019: * - Redistributions in binary form must reproduce the above copyright notice,
020: * this list of conditions and the following disclaimer in the documentation
021: * and/or other materials provided with the distribution.
022: *
023: * - Neither the name of the University Of A Coruna nor the names of its
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
028: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
029: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
030: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
031: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
032: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
033: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
034: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
035: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
036: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
037: * POSSIBILITY OF SUCH DAMAGE.
038: *
039: */
040:
041: package es.udc.mypersonalizer.kernel.model.editors;
042:
043: import es.udc.mypersonalizer.kernel.config.EditorFactoryConfig;
044: import es.udc.mypersonalizer.kernel.config.KernelConfig;
045: import es.udc.mypersonalizer.kernel.config.KernelConfigManager;
046: import es.udc.mypersonalizer.kernel.log.Log;
047: import es.udc.mypersonalizer.kernel.log.LogManager;
048: import es.udc.mypersonalizer.kernel.log.LogNamingConventions;
049: import es.udc.mypersonalizer.kernel.model.properties.Property;
050: import es.udc.mypersonalizer.kernel.util.exceptions.InternalErrorException;
051:
052: /**
053: * This class is a factory which is responsible for the creation of editors for
054: * some important entities in the system which are modelled as properties:
055: * <ul>
056: * <li>Desktop Layout</li>
057: * <li>Workspace Layout</li>
058: * <li>User Registration Information</li>
059: * <li>Service Buttons State</li>
060: * </ul>
061: * These entities are properties which are complex to work with directly,
062: * and thus the editor objects allow an easier handling by knowing the internals
063: * of these properties and hiding them to the rest of the layers in the system.
064: *
065: * This EditorFactory creates the editor objects according to the configuration
066: * parameters it extracts from an {@link EditorFactoryConfig} object.
067: *
068: * @author Daniel Fernandez
069: * @since 1.0
070: */
071: public class EditorFactory {
072:
073: /** The single instance of this class. */
074: private static EditorFactory instance = null;
075:
076: /** Class implementing the DesktopLayoutEditor. */
077: private Class desktopLayoutEditorClass = null;
078:
079: /** Class implementing the WorkspaceLayoutEditor. */
080: private Class workspaceLayoutEditorClass = null;
081:
082: /** Class implementing the UserRegistrationInformationEditor. */
083: private Class userRegistrationInformationEditorClass = null;
084:
085: /** Class implementing the ServiceButtonsStateEditor. */
086: private Class serviceButtonsStateEditorClass = null;
087:
088: /**
089: * Avoids the direct instatiation of this class. When it's called for the
090: * first time (the singleton instance), it reads its configuration and
091: * stores the classes which it will use to create new instances of the
092: * editors.
093: */
094: private EditorFactory() {
095:
096: try {
097: KernelConfig kernelConfig = KernelConfigManager.getConfig();
098:
099: EditorFactoryConfig editorFactoryConfig = kernelConfig
100: .getKernelModelConfig().getEditorFactoryConfig();
101:
102: String desktopLayoutEditorClassName = editorFactoryConfig
103: .getDesktopLayoutEditorClassName();
104: desktopLayoutEditorClass = Class
105: .forName(desktopLayoutEditorClassName);
106:
107: String workspaceLayoutEditorClassName = editorFactoryConfig
108: .getWorkspaceLayoutEditorClassName();
109: workspaceLayoutEditorClass = Class
110: .forName(workspaceLayoutEditorClassName);
111:
112: String userRegistrationInformationEditorClassName = editorFactoryConfig
113: .getUserRegistrationInformationEditorClassName();
114: userRegistrationInformationEditorClass = Class
115: .forName(userRegistrationInformationEditorClassName);
116:
117: String serviceButtonsStateEditorClassName = editorFactoryConfig
118: .getServiceButtonsStateEditorClassName();
119: serviceButtonsStateEditorClass = Class
120: .forName(serviceButtonsStateEditorClassName);
121:
122: } catch (Exception e) {
123:
124: Log mypersonalizerLog = LogManager
125: .getLog(LogNamingConventions.MYPERSONALIZER);
126: mypersonalizerLog.write(
127: "Could not initialize configuration for "
128: + "EditorFactory", e, EditorFactory.class);
129:
130: }
131:
132: }
133:
134: /**
135: * Returns the single instance of this factory.
136: *
137: * @return The single instance for this class.
138: */
139: public static EditorFactory getInstance() {
140: if (instance == null) {
141: instance = new EditorFactory();
142: }
143: return instance;
144: }
145:
146: /**
147: * Creates a new DesktopLayoutEditor by instantiating the correct class
148: * based on configuration parameters.
149: *
150: * @return The editor for the given property.
151: * @param property The property to be edited.
152: * @throws InternalErrorException if any fatal error happens.
153: */
154: public DesktopLayoutEditor createDesktopLayoutEditor(
155: Property property) throws InternalErrorException {
156: try {
157: DesktopLayoutEditor editor = (DesktopLayoutEditor) desktopLayoutEditorClass
158: .newInstance();
159: editor.setProperty(property);
160: return editor;
161: } catch (Exception e) {
162: throw new InternalErrorException(e);
163: }
164: }
165:
166: /**
167: * Creates a new WorkspaceLayoutEditor by instantiating the correct class
168: * based on configuration parameters.
169: *
170: * @return The editor for the given property.
171: * @param property The property to be edited.
172: * @throws InternalErrorException if any fatal error happens.
173: */
174: public WorkspaceLayoutEditor createWorkspaceLayoutEditor(
175: Property property) throws InternalErrorException {
176: try {
177: WorkspaceLayoutEditor editor = (WorkspaceLayoutEditor) workspaceLayoutEditorClass
178: .newInstance();
179: editor.setProperty(property);
180: return editor;
181: } catch (Exception e) {
182: throw new InternalErrorException(e);
183: }
184: }
185:
186: /**
187: * Creates a new UserRegistrationInformationEditor by instantiating the
188: * correct class based on configuration parameters.
189: *
190: * @return The editor for the given property.
191: * @param property The property to be edited.
192: * @throws InternalErrorException if any fatal error happens.
193: */
194: public UserRegistrationInformationEditor createUserRegistrationInformationEditor(
195: Property property) throws InternalErrorException {
196: try {
197: UserRegistrationInformationEditor editor = (UserRegistrationInformationEditor) userRegistrationInformationEditorClass
198: .newInstance();
199: editor.setProperty(property);
200: return editor;
201: } catch (Exception e) {
202: throw new InternalErrorException(e);
203: }
204: }
205:
206: /**
207: * Creates a new ServiceButtonsStateEditor by instantiating the correct
208: * class based on configuration parameters.
209: *
210: * @return The editor for the given property.
211: * @param property The property to be edited.
212: * @throws InternalErrorException if any fatal error happens.
213: */
214: public ServiceButtonsStateEditor createServiceButtonsStateEditor(
215: Property property) throws InternalErrorException {
216: try {
217: ServiceButtonsStateEditor editor = (ServiceButtonsStateEditor) serviceButtonsStateEditorClass
218: .newInstance();
219: editor.setProperty(property);
220: return editor;
221: } catch (Exception e) {
222: throw new InternalErrorException(e);
223: }
224: }
225:
226: }
|