KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ejbca > ui > web > admin > services > ServiceTypeManager


1 /*************************************************************************
2  * *
3  * EJBCA: The OpenSource Certificate Authority *
4  * *
5  * This software is free software; you can redistribute it and/or *
6  * modify it under the terms of the GNU Lesser General Public *
7  * License as published by the Free Software Foundation; either *
8  * version 2.1 of the License, or any later version. *
9  * *
10  * See terms of license at gnu.org. *
11  * *
12  *************************************************************************/

13 package org.ejbca.ui.web.admin.services;
14
15 import java.io.ByteArrayInputStream JavaDoc;
16 import java.io.ByteArrayOutputStream JavaDoc;
17 import java.io.IOException JavaDoc;
18 import java.io.ObjectInputStream JavaDoc;
19 import java.io.ObjectOutputStream JavaDoc;
20 import java.util.ArrayList JavaDoc;
21 import java.util.Collection JavaDoc;
22 import java.util.HashMap JavaDoc;
23
24 import org.apache.log4j.Logger;
25 import org.ejbca.ui.web.admin.services.servicetypes.CRLUpdateWorkerType;
26 import org.ejbca.ui.web.admin.services.servicetypes.CertificateExpirationNotifierWorkerType;
27 import org.ejbca.ui.web.admin.services.servicetypes.CustomActionType;
28 import org.ejbca.ui.web.admin.services.servicetypes.CustomIntervalType;
29 import org.ejbca.ui.web.admin.services.servicetypes.CustomWorkerType;
30 import org.ejbca.ui.web.admin.services.servicetypes.MailActionType;
31 import org.ejbca.ui.web.admin.services.servicetypes.NoActionType;
32 import org.ejbca.ui.web.admin.services.servicetypes.PeriodicalIntervalType;
33 import org.ejbca.ui.web.admin.services.servicetypes.ServiceType;
34 import org.ejbca.ui.web.admin.services.servicetypes.WorkerType;
35
36 /**
37  * Central class managing available services types. New workers, actions, intervals
38  * should be registered in the class in order to proved GUI to it.
39  *
40  * To this there is also a need for a JSFSubView page with it's managed beans.
41  *
42  * @author Philip Vendil 2006 sep 29
43  *
44  * @version $Id: ServiceTypeManager.java,v 1.3.4.1 2007/03/09 17:27:52 anatom Exp $
45  */

46 public class ServiceTypeManager implements java.io.Serializable JavaDoc {
47     
48     /**
49      * Determines if a de-serialized file is compatible with this class.
50      *
51      * Maintainers must change this value if and only if the new version
52      * of this class is not compatible with old versions. See Sun docs
53      * for <a HREF=http://java.sun.com/products/jdk/1.1/docs/guide
54      * /serialization/spec/version.doc.html> details. </a>
55      *
56      */

57     private static final long serialVersionUID = -7328709803784066077L;
58
59     private static Logger log = Logger.getLogger(ServiceTypeManager.class);
60     
61     // static variables common for the application
62
private static HashMap JavaDoc availableTypesByName = new HashMap JavaDoc();
63     private static HashMap JavaDoc availableTypesByClassPath = new HashMap JavaDoc();
64     private static ArrayList JavaDoc workerTypes = new ArrayList JavaDoc();
65     
66
67     private HashMap JavaDoc localAvailableTypesByName;
68     private HashMap JavaDoc localAvailableTypesByClassPath;
69     private ArrayList JavaDoc localWorkerTypes;
70     
71     static{
72         ServiceTypeManager.registerServiceType(new CustomIntervalType());
73         ServiceTypeManager.registerServiceType(new PeriodicalIntervalType());
74         ServiceTypeManager.registerServiceType(new CustomActionType());
75         ServiceTypeManager.registerServiceType(new NoActionType());
76         ServiceTypeManager.registerServiceType(new MailActionType());
77         ServiceTypeManager.registerServiceType(new CustomWorkerType());
78         ServiceTypeManager.registerServiceType(new CRLUpdateWorkerType());
79         ServiceTypeManager.registerServiceType(new CertificateExpirationNotifierWorkerType());
80     }
81     
82
83
84     public ServiceTypeManager(){
85         // Create a deep clone of the static global data.
86
try{
87           ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc();
88           ObjectOutputStream JavaDoc oos = new ObjectOutputStream JavaDoc(baos);
89           oos.writeObject(availableTypesByName);
90           oos.writeObject(availableTypesByClassPath);
91           oos.writeObject(workerTypes);
92           ByteArrayInputStream JavaDoc bais = new ByteArrayInputStream JavaDoc(baos.toByteArray());
93           ObjectInputStream JavaDoc ois = new ObjectInputStream JavaDoc(bais);
94           localAvailableTypesByName = (HashMap JavaDoc) ois.readObject();
95           localAvailableTypesByClassPath = (HashMap JavaDoc) ois.readObject();
96           localWorkerTypes = (ArrayList JavaDoc) ois.readObject();
97         }catch(IOException JavaDoc e){
98             log.error(e);
99         } catch (ClassNotFoundException JavaDoc e) {
100             log.error(e);
101         }
102
103         
104     }
105     
106     /**
107      * Method that registers a service type in system.
108      * Should mainly be called from the static block in this class.
109      * @param serviceType
110      */

111     public static void registerServiceType(ServiceType serviceType){
112         availableTypesByName.put(serviceType.getName(), serviceType);
113         if(!serviceType.isCustom()){
114             availableTypesByClassPath.put(serviceType.getClassPath(), serviceType);
115         }
116         if(serviceType instanceof WorkerType){
117             workerTypes.add(serviceType);
118         }
119         
120     }
121     
122     
123     /**
124      * Returns the service type with the given name.
125      */

126     public ServiceType getServiceTypeByName(String JavaDoc name){
127         return (ServiceType) localAvailableTypesByName.get(name);
128     }
129     
130     /**
131      * Returns the service type with the classpath or
132      * null if the classpath should have a custom page.
133      */

134     public ServiceType getServiceTypeByClassPath(String JavaDoc classPath){
135         return (ServiceType) localAvailableTypesByClassPath.get(classPath);
136     }
137     
138     /**
139      * @return returns all available workers in the GUI
140      */

141     public Collection JavaDoc getAvailableWorkerTypes(){
142         return localWorkerTypes;
143     }
144     
145     
146     
147     
148 }
149
150
Popular Tags