1 17 18 package org.sape.carbon.core.config.interceptor; 19 20 import java.lang.reflect.InvocationHandler ; 21 import java.lang.reflect.Proxy ; 22 import java.util.ArrayList ; 23 import java.util.Arrays ; 24 import java.util.List ; 25 26 import org.sape.carbon.core.component.ComponentConfiguration; 27 import org.sape.carbon.core.component.FunctionalInterface; 28 import org.sape.carbon.core.component.proxy.ComponentProxyInvocationHandler; 29 import org.sape.carbon.core.component.proxy.Decorator; 30 import org.sape.carbon.core.component.proxy.DecoratorFactory; 31 import org.sape.carbon.core.component.proxy.Interceptor; 32 import org.sape.carbon.core.config.Config; 33 import org.sape.carbon.core.config.Configuration; 34 import org.sape.carbon.core.config.InvalidConfigurationException; 35 36 47 public class ConfigurationInterceptorFactory implements DecoratorFactory { 48 49 65 public Decorator getInstance( 66 FunctionalInterface functionalImplementation, 67 ComponentConfiguration componentConfiguration, 68 ComponentProxyInvocationHandler proxyInvocationHandler, 69 Configuration decoratorConfiguration) { 70 71 try { 72 ConfigurationInterceptorConfiguration config; 73 if (decoratorConfiguration == null) { 74 config = (ConfigurationInterceptorConfiguration) 75 Config.getInstance().createConfiguration( 76 ConfigurationInterceptorConfiguration.class); 77 } else { 78 config = (ConfigurationInterceptorConfiguration) 79 decoratorConfiguration; 80 } 81 82 ConfigurationInterceptor configurationInterceptor = 83 new DefaultConfigurationInterceptor( 84 componentConfiguration, 85 proxyInvocationHandler, 86 config); 87 88 List interfaces = new ArrayList (); 89 90 interfaces.addAll( 91 Arrays.asList( 92 ((Decorator) configurationInterceptor) 93 .getExposedInterfaces())); 94 95 interfaces.add(Interceptor.class); 98 99 Decorator decoratorProxy = 100 (Decorator) Proxy.newProxyInstance( 101 this.getClass().getClassLoader(), 102 (Class []) interfaces.toArray(new Class [interfaces.size()]), 103 (InvocationHandler ) configurationInterceptor); 104 105 return decoratorProxy; 106 } catch (ClassCastException cce) { 107 throw new InvalidConfigurationException( 108 this.getClass(), 109 decoratorConfiguration.getConfigurationName(), 110 "ConfigurationInterface", 111 "Configuration must be of type " 112 + ConfigurationInterceptorConfiguration.class.getName(), 113 cce); 114 } 115 116 } 117 } 118 | Popular Tags |