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 }