1 /***
2 * JFoxSOAF, Service-Oriented Application Framework
3 *
4 * Copyright (C) www.huihoo.org
5 *
6 * Distributable under GNU LGPL For more information, please visit:
7 * http://www.huihoo.org/jfox/jfoxsoaf
8 */
9
10 package org.huihoo.jfox.soaf.container;
11
12 import java.io.IOException;
13 import java.io.InputStream;
14 import java.io.InputStreamReader;
15 import java.util.ArrayList;
16 import java.util.Collection;
17 import java.util.Iterator;
18 import java.util.LinkedList;
19
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.huihoo.jfox.soaf.exception.ServiceConfigurationException;
23 import org.huihoo.jfox.soaf.schema.config.Configuration;
24 import org.huihoo.jfox.soaf.schema.config.ConfigurationEntry;
25 import org.huihoo.jfox.soaf.schema.config.Interceptor;
26 import org.huihoo.jfox.soaf.schema.service.Service;
27 import org.huihoo.jfox.soaf.schema.service.ServiceEntry;
28 import org.huihoo.jfox.soaf.util.resource.ResourceHelper;
29
30 /***
31 * <p>
32 * Service Configration load proxy.
33 * </p>
34 *
35 * @author <a href="mailto:founder_chen@yahoo.com.cn">Peter Cheng </a>
36 * @version $Revision: 1.7 $ $Date: 2004/10/28 05:11:43 $
37 * @version Revision: 1.0
38 */
39
40 public class ServiceLoadProxy {
41
42 private boolean serviceLoaded = false;
43
44 private Collection serviceSchemaColl = new LinkedList();
45
46 private Collection interceptorColl = new ArrayList();
47
48 private Collection serviceEntryColl = new ArrayList();
49
50 private InterceptorManager interceptorManager = new InterceptorManagerImpl();
51
52 private final Log logger = LogFactory.getLog(getClass());
53
54 /***
55 * Default Constructor.
56 */
57 public ServiceLoadProxy() {
58 super();
59 }
60
61 /***
62 * Load all configuration service.
63 * @param service
64 */
65 public void loadConfig(Configuration config)
66 throws Throwable {
67 if (!serviceLoaded) {
68 processConfig(config);
69 loadService(serviceSchemaColl);
70 interceptorManager.processInterceptor(interceptorColl,
71 serviceEntryColl);
72 this.serviceLoaded = true;
73 }
74 }
75
76 /***
77 * Load service schema.
78 * @param serviceSchemaColl
79 *
80 * @throws ServiceConfigurationException
81 */
82 private void loadService(Collection serviceSchemaColl) throws ServiceConfigurationException {
83 InputStream is = null;
84 InputStreamReader isr = null;
85 Iterator iter = serviceSchemaColl.iterator();
86 Service service;
87 try {
88 while (iter.hasNext()) {
89 is = ResourceHelper.getResourceAsStream((String) iter.next());
90 isr = new InputStreamReader(is);
91 service = Service.unmarshal(isr);
92 processService(service);
93 }
94 } catch (Exception e) {
95 throw new ServiceConfigurationException(e);
96 } finally {
97 if (is != null) {
98 try {
99 is.close();
100 } catch (IOException e1) {
101 e1.printStackTrace();
102 }
103
104 }
105
106 if (isr != null) {
107 try {
108 isr.close();
109 } catch (IOException e1) {
110 e1.printStackTrace();
111 }
112 }
113
114 }
115
116 }
117
118 /***
119 * Add service to service entry collection.
120 *
121 * @param service
122 */
123 private void processService(Service service) {
124 ServiceEntry[] serviceEntry = service.getServiceEntry();
125 for (int i = 0; i < serviceEntry.length; i++) {
126 serviceEntryColl.add(serviceEntry[i]);
127 }
128 }
129
130 /***
131 * Is service loaded?
132 *
133 * @return boolean
134 */
135 public boolean isServiceLoaded() {
136 return this.serviceLoaded;
137 }
138
139 /***
140 * Add service schema and interceptor to collection.
141 *
142 * @param config
143 */
144 private void processConfig(Configuration config) {
145 ConfigurationEntry[] configEntry = config.getServiceConfiguration()
146 .getConfigurationEntry();
147 Interceptor[] interceptor = config.getSystemInterceptor()
148 .getInterceptor();
149 for (int i = 0; i < configEntry.length; i++) {
150 logger.info("Load service schema : " + configEntry[i].getValue());
151 serviceSchemaColl.add(configEntry[i].getValue());
152 }
153
154 for (int i = 0; i < interceptor.length; i++) {
155 interceptorColl.add(interceptor[i].getValue());
156 }
157 }
158 }