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.representative;
00032 
00033 import org.objectweb.fractal.api.type.ComponentType;
00034 import org.objectweb.proactive.core.body.proxy.BodyProxy;
00035 import org.objectweb.proactive.core.component.ComponentParameters;
00036 import org.objectweb.proactive.core.component.Constants;
00037 import org.objectweb.proactive.core.component.controller.ComponentParametersController;
00038 import org.objectweb.proactive.core.component.request.ComponentRequest;
00039 import org.objectweb.proactive.core.mop.MethodCall;
00040 import org.objectweb.proactive.core.mop.Proxy;
00041 
00042 
00049 public class ProActiveComponentRepresentativeFactory {
00050     private static ProActiveComponentRepresentativeFactory INSTANCE = null;
00051 
00052     private ProActiveComponentRepresentativeFactory() {
00053     }
00054 
00059     public static ProActiveComponentRepresentativeFactory instance() {
00060         if (INSTANCE == null) {
00061             return (INSTANCE = new ProActiveComponentRepresentativeFactory());
00062         } else {
00063             return INSTANCE;
00064         }
00065     }
00066 
00077     public ProActiveComponentRepresentative createComponentRepresentative(
00078         ComponentType componentType, String hierarchicalType, Proxy proxy,
00079         String controllerConfigFileLocation) {
00080         ProActiveComponentRepresentative representative = new ProActiveComponentRepresentativeImpl(componentType,
00081                 hierarchicalType, controllerConfigFileLocation);
00082         representative.setProxy(proxy);
00083         return representative;
00084     }
00085 
00093     public ProActiveComponentRepresentative createComponentRepresentative(
00094         Proxy proxy) throws Throwable {
00095         ((BodyProxy) proxy).getBody().getRemoteAdapter().setImmediateService("getComponentParameters",
00096             new Class[] {  });
00097         ComponentParameters componentParameters = (ComponentParameters) proxy.reify((MethodCall) MethodCall.getComponentMethodCall(
00098                     ComponentParametersController.class.getDeclaredMethod(
00099                         "getComponentParameters", new Class[] {  }),
00100                     new Object[] {  }, null, 
00101                     Constants.COMPONENT_PARAMETERS_CONTROLLER, null,
00102                     ComponentRequest.STRICT_FIFO_PRIORITY));
00103         ((BodyProxy) proxy).getBody().getRemoteAdapter().removeImmediateService("getComponentParameters",
00104             new Class[] {  });
00105         return ProActiveComponentRepresentativeFactory.instance()
00106                                                       .createComponentRepresentative(componentParameters.getComponentType(),
00107             componentParameters.getHierarchicalType(), proxy,
00108             componentParameters.getControllerDescription()
00109                                .getControllersConfigFileLocation());
00110     }
00111 }