00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package org.objectweb.proactive.core.component.config;
00032
00033 import java.io.File;
00034 import java.io.IOException;
00035 import java.util.ArrayList;
00036 import java.util.HashMap;
00037 import java.util.List;
00038 import java.util.Map;
00039
00040 import org.apache.log4j.Logger;
00041 import org.objectweb.proactive.core.ProActiveException;
00042 import org.objectweb.proactive.core.util.log.Loggers;
00043 import org.objectweb.proactive.core.util.log.ProActiveLogger;
00044 import org.objectweb.proactive.core.xml.handler.AbstractUnmarshallerDecorator;
00045 import org.objectweb.proactive.core.xml.handler.CollectionUnmarshaller;
00046 import org.objectweb.proactive.core.xml.handler.SingleValueUnmarshaller;
00047 import org.objectweb.proactive.core.xml.handler.UnmarshallerHandler;
00048 import org.objectweb.proactive.core.xml.io.Attributes;
00049 import org.objectweb.proactive.core.xml.io.StreamReader;
00050 import org.xml.sax.InputSource;
00051 import org.xml.sax.SAXException;
00052
00053
00059 public class ComponentConfigurationHandler extends AbstractUnmarshallerDecorator
00060 implements ComponentConfigurationConstants {
00061 Map controllers = new HashMap();
00062 List inputInterceptors = new ArrayList();
00063 List outputInterceptors = new ArrayList();
00064 public static Logger logger = ProActiveLogger.getLogger(Loggers.COMPONENTS);
00065
00066
00067
00068
00069 public ComponentConfigurationHandler() {
00070
00071 addHandler(CONTROLLERS_ELEMENT, new ControllersHandler());
00072 }
00073
00074 public List getInputInterceptors() {
00075 return inputInterceptors;
00076 }
00077
00078 public List getOutputInterceptors() {
00079 return outputInterceptors;
00080 }
00081
00082 public Map getControllers() {
00083 return controllers;
00084 }
00085
00086 public static ComponentConfigurationHandler createComponentConfigurationHandler(
00087 String componentsConfigurationLocation)
00088 throws IOException, SAXException, ProActiveException {
00089 String url = null;
00090 try {
00091 InitialHandler initial_handler = new InitialHandler();
00092
00093 if (ComponentConfigurationHandler.class.getResource(
00094 componentsConfigurationLocation) != null) {
00095
00096 url = ComponentConfigurationHandler.class.getResource(componentsConfigurationLocation)
00097 .toString();
00098 } else {
00099
00100 url = new File(componentsConfigurationLocation).getAbsolutePath();
00101 }
00102 StreamReader stream_reader = new StreamReader(new InputSource(url),
00103 initial_handler);
00104 stream_reader.read();
00105 return (ComponentConfigurationHandler) initial_handler.getResultObject();
00106 } catch (SAXException se) {
00107 logger.fatal(
00108 "a problem occured while parsing the components descriptor \""+url+"\": " +
00109 se.getMessage());
00110 se.printStackTrace();
00111 throw se;
00112 }
00113 }
00114
00118 protected void notifyEndActiveHandler(String name,
00119 UnmarshallerHandler activeHandler) throws SAXException {
00120 }
00121
00125 public void startContextElement(String name, Attributes attributes)
00126 throws SAXException {
00127 }
00128
00129 public Object getResultObject() throws SAXException {
00130 return null;
00131 }
00132
00133
00134
00135
00136 private static class InitialHandler extends AbstractUnmarshallerDecorator {
00137 private ComponentConfigurationHandler componentConfigurationHandler;
00138
00139 private InitialHandler() {
00140 componentConfigurationHandler = new ComponentConfigurationHandler();
00141 this.addHandler(COMPONENT_CONFIGURATION_ELEMENT,
00142 componentConfigurationHandler);
00143 }
00144
00145 public Object getResultObject() throws org.xml.sax.SAXException {
00146 return componentConfigurationHandler;
00147 }
00148
00149 protected void notifyEndActiveHandler(String name,
00150 UnmarshallerHandler activeHandler) throws org.xml.sax.SAXException {
00151 }
00152
00153 public void startContextElement(String name, Attributes attributes)
00154 throws SAXException {
00155 }
00156 }
00157
00158
00159 private class ControllersHandler extends CollectionUnmarshaller {
00160 public ControllersHandler() {
00161 addHandler(ComponentConfigurationConstants.CONTROLLER_ELEMENT,
00162 new ControllerHandler());
00163 }
00164
00165 public void startContextElement(String name, Attributes attributes)
00166 throws SAXException {
00167 }
00168
00169
00170
00171
00172 protected void notifyEndActiveHandler(String name,
00173 UnmarshallerHandler activeHandler) throws SAXException {
00174 if (name.equals(ComponentConfigurationConstants.CONTROLLER_ELEMENT)) {
00175 activeHandler.getResultObject();
00176 }
00177 }
00178
00179
00180
00181
00182 public Object getResultObject() throws SAXException {
00183 return null;
00184 }
00185 }
00186
00187
00188 public class ControllerHandler extends AbstractUnmarshallerDecorator {
00189 String interfaceSignature = null;
00190 String implementationSignature = null;
00191 boolean inputInterception = false;
00192 boolean outputInterception = false;
00193
00194 public ControllerHandler() {
00195 UnmarshallerHandler singleValueHandler = new SingleValueUnmarshaller();
00196 addHandler(INTERFACE_ELEMENT, singleValueHandler);
00197 addHandler(IMPLEMENTATION_ELEMENT, singleValueHandler);
00198 }
00199
00200 public void startContextElement(String name, Attributes attributes)
00201 throws SAXException {
00202 if ("true".equals(attributes.getValue(INPUT_INTERCEPTOR_ATTRIBUTE))) {
00203 inputInterception = true;
00204 }
00205 if ("true".equals(attributes.getValue(OUTPUT_INTERCEPTOR_ATTRIBUTE))) {
00206 outputInterception = true;
00207 }
00208 }
00209
00210 protected void notifyEndActiveHandler(String name,
00211 UnmarshallerHandler activeHandler) throws SAXException {
00212 if (name.equals(INTERFACE_ELEMENT)) {
00213 interfaceSignature = (String) activeHandler.getResultObject();
00214 }
00215 if (name.equals(IMPLEMENTATION_ELEMENT)) {
00216 implementationSignature = (String) activeHandler.getResultObject();
00217 }
00218 }
00219
00220 public Object getResultObject() throws SAXException {
00221 controllers.put(interfaceSignature, implementationSignature);
00222 if (inputInterception) {
00223 inputInterceptors.add(implementationSignature);
00224 }
00225 if (outputInterception) {
00226 outputInterceptors.add(implementationSignature);
00227 }
00228 interfaceSignature = null;
00229 implementationSignature = null;
00230 inputInterception = false;
00231 outputInterception = false;
00232 return null;
00233 }
00234 }
00235 }