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.body;
00032
00033 import java.util.HashMap;
00034 import java.util.Map;
00035
00036 import org.apache.log4j.Logger;
00037 import org.objectweb.fractal.api.NoSuchInterfaceException;
00038 import org.objectweb.fractal.api.control.LifeCycleController;
00039 import org.objectweb.fractal.util.Fractal;
00040 import org.objectweb.proactive.Active;
00041 import org.objectweb.proactive.core.body.MetaObjectFactory;
00042 import org.objectweb.proactive.core.body.ProActiveMetaObjectFactory;
00043 import org.objectweb.proactive.core.body.migration.MigratableBody;
00044 import org.objectweb.proactive.core.component.ComponentParameters;
00045 import org.objectweb.proactive.core.component.identity.ProActiveComponent;
00046 import org.objectweb.proactive.core.component.identity.ProActiveComponentImpl;
00047 import org.objectweb.proactive.core.component.request.Shortcut;
00048 import org.objectweb.proactive.core.mop.ConstructorCallExecutionFailedException;
00049 import org.objectweb.proactive.core.util.log.Loggers;
00050 import org.objectweb.proactive.core.util.log.ProActiveLogger;
00051
00052
00057 public class ComponentBodyImpl extends MigratableBody implements ComponentBody {
00058 private ProActiveComponent componentIdentity = null;
00059 private Map<String, Shortcut> shortcutsOnThis = null;
00060 private static Logger logger = ProActiveLogger.getLogger(Loggers.COMPONENTS);
00061
00062 private boolean insideFunctionalActivity = false;
00063
00064 public ComponentBodyImpl() {
00065 super();
00066 }
00067
00080 public ComponentBodyImpl(Object reifiedObject, String nodeURL,
00081 Active activity, MetaObjectFactory factory, String jobID)
00082 throws java.lang.reflect.InvocationTargetException,
00083 ConstructorCallExecutionFailedException {
00084 super(reifiedObject, nodeURL, factory, jobID);
00085
00086
00087
00088 Map factory_parameters = factory.getParameters();
00089 if ((null != factory_parameters)) {
00090 if (null != factory_parameters.get(
00091 ProActiveMetaObjectFactory.COMPONENT_PARAMETERS_KEY)) {
00092 if (factory_parameters.get(
00093 ProActiveMetaObjectFactory.COMPONENT_PARAMETERS_KEY) instanceof ComponentParameters) {
00094 if (logger.isDebugEnabled()) {
00095 logger.debug("creating metaobject component identity");
00096 }
00097 componentIdentity = factory.newComponentFactory()
00098 .newProActiveComponent(this);
00099
00100
00101
00102 } else {
00103 logger.error(
00104 "component parameters for the components factory are not of type ComponentParameters");
00105 }
00106 }
00107 }
00108 }
00109
00114 public ProActiveComponentImpl getProActiveComponentImpl() {
00115 return (ProActiveComponentImpl)componentIdentity;
00116 }
00117
00118
00119
00120
00130 public boolean isActive() {
00131 if (insideFunctionalActivity) {
00132 try {
00133 return LifeCycleController.STARTED.equals(Fractal.getLifeCycleController(
00134 getProActiveComponentImpl()).getFcState());
00135 } catch (NoSuchInterfaceException e) {
00136 logger.error(
00137 "could not find the life cycle controller of this component");
00138 return false;
00139 }
00140 } else {
00141 return super.isActive();
00142 }
00143 }
00144
00145
00146
00147
00148 public boolean isComponent() {
00149 return (getProActiveComponentImpl() != null);
00150 }
00151
00152
00153
00154
00155 public void finishedFunctionalActivity() {
00156 insideFunctionalActivity = false;
00157 }
00158
00159
00160
00161
00162 public void startingFunctionalActivity() {
00163 insideFunctionalActivity = true;
00164 }
00165
00166 public void keepShortcut(Shortcut shortcut) {
00167 if (shortcutsOnThis == null) {
00168 shortcutsOnThis = new HashMap<String, Shortcut>();
00169 }
00170 shortcutsOnThis.put(shortcut.getFcFunctionalInterfaceName(), shortcut);
00171 }
00172
00173
00174 }