001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Kernel/Sources/es/udc/mypersonalizer/kernel/model/metainfo/MetaServiceRegistrySingleton.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.metainfo;
042:
043: import java.util.Map;
044: import java.util.HashMap;
045: import java.util.Iterator;
046:
047: import es.udc.mypersonalizer.kernel.log.Log;
048: import es.udc.mypersonalizer.kernel.log.LogManager;
049: import es.udc.mypersonalizer.kernel.log.LogNamingConventions;
050: import es.udc.mypersonalizer.kernel.model.repository.interfaces.RepositoryAccessorFactory;
051: import es.udc.mypersonalizer.kernel.util.exceptions.InternalErrorException;
052: import es.udc.mypersonalizer.kernel.conventions.ServiceConventions;
053:
054: /**
055: * This class provides a way to recover the set of meta-services defined for
056: * the personalization framework. It's a Singleton pattern implementation,
057: * which allows the uniqueness of this information in the refered framework.
058: * The implementation uses an Accessor from the
059: * <code>RepositoryAccessorFactory</code> to get this meta-information. The
060: * set of MetaServices are constructed so you can retrieve them by a service
061: * identifier String, as well of all of them as an Iterator.
062: *
063: * @author Fernando Bellas
064: * @since 1.0
065: */
066: public final class MetaServiceRegistrySingleton {
067:
068: /** The mypersonalizer log name. */
069: private static final String MYPERSONALIZER_LOG_NAME = LogNamingConventions.MYPERSONALIZER;
070:
071: /**
072: * A set of (<code>String, MetaService</code>). The
073: * <code>String</code> represents the meta-service identifier.
074: */
075: private static Map metaServices = null;
076:
077: /** The singleton */
078: private static MetaServiceRegistrySingleton singleton = null;
079:
080: static {
081: try {
082:
083: singleton = new MetaServiceRegistrySingleton();
084: loadMetaServices();
085:
086: } catch (Exception e) {
087: Log mypersonalizerLog = LogManager
088: .getLog(MYPERSONALIZER_LOG_NAME);
089: mypersonalizerLog.write("Error initializing "
090: + "MetaServiceRegistrySingleton.", e,
091: MetaServiceRegistrySingleton.class);
092: }
093: }
094:
095: /** Disallows creating instances of this class. */
096: private MetaServiceRegistrySingleton() {
097: }
098:
099: /**
100: * Gets the singleton
101: *
102: * @return the singleton
103: */
104: public static MetaServiceRegistrySingleton getInstance() {
105: return singleton;
106: }
107:
108: /**
109: * Reloads services meta-information from the database.
110: */
111: public void reload() throws InternalErrorException {
112:
113: loadMetaServices();
114: }
115:
116: /**
117: * Returns all the meta-services defined for the personalization
118: * framework as an Iterator.
119: *
120: * @return all the meta-services defined for the personalization
121: * framework as an Iterator
122: */
123: public Iterator getAllMetaServices() {
124: return metaServices.values().iterator();
125: }
126:
127: /**
128: * Returns a meta-service for the provided identifier.
129: *
130: * @param serviceIdentifier the identifier of the requested meta-service
131: * @return the meta-service associated with the provided service
132: * identifier. Returns a <code>null</code> value if the
133: * meta-service does not exist
134: */
135: public MetaService getMetaService(String serviceIdentifier) {
136: return (MetaService) metaServices.get(serviceIdentifier);
137: }
138:
139: /**
140: * Returns the meta-service for the user registration information.
141: * @return the meta-service associated. with the user registration
142: * information. Returns a <code>null</code> value if the
143: * meta-service does not exist
144: */
145: public MetaService getUserRegistrationInformationMetaService() {
146: return (MetaService) metaServices
147: .get(ServiceConventions.USER_REGISTRATION_INFORMATION_SERVICE_IDENTIFIER);
148: }
149:
150: /**
151: * Returns the meta-service for the buttons state.
152: * @return the meta-service associated. with the buttons state.
153: * Returns a <code>null</code> value if the
154: * meta-service does not exist
155: */
156: public MetaService getServiceButtonsStateMetaService() {
157: return (MetaService) metaServices
158: .get(ServiceConventions.SERVICE_BUTTONS_STATE_SERVICE_IDENTIFIER);
159: }
160:
161: /**
162: * Returns the meta-service for the desktop layout.
163: * @return the meta-service associated. with the desktop layout.
164: * Returns a <code>null</code> value if the
165: * meta-service does not exist
166: */
167: public MetaService getDesktopLayoutMetaService() {
168: return (MetaService) metaServices
169: .get(ServiceConventions.DESKTOP_LAYOUT_SERVICE_IDENTIFIER);
170: }
171:
172: /**
173: * Returns the meta-service for the workspace layout.
174: * @return the meta-service associated. with the workspace layout.
175: * Returns a <code>null</code> value if the
176: * meta-service does not exist
177: */
178: public MetaService getWorkspaceLayoutMetaService() {
179: return (MetaService) metaServices
180: .get(ServiceConventions.WORKSPACE_LAYOUT_SERVICE_IDENTIFIER);
181: }
182:
183: /**
184: * Loads Meta-Information for caching from database.
185: * @throws Exception if a severe error occured.
186: */
187: private static void loadMetaServices()
188: throws InternalErrorException {
189:
190: metaServices = new HashMap();
191:
192: try {
193: Iterator it = RepositoryAccessorFactory.getInstance()
194: .createMetaServiceAccessor()
195: .findMetaServicesByPattern("%").iterator();
196:
197: while (it.hasNext()) {
198: MetaService metaService = (MetaService) it.next();
199:
200: metaServices.put(metaService.getServiceIdentifier(),
201: metaService);
202: }
203: } catch (Exception e) {
204: throw new InternalErrorException(e);
205: }
206: }
207:
208: }
|