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.controller;
00032 
00033 import java.io.Serializable;
00034 
00035 import org.objectweb.fractal.api.Component;
00036 import org.objectweb.fractal.api.factory.InstantiationException;
00037 import org.objectweb.fractal.api.type.TypeFactory;
00038 import org.objectweb.proactive.core.ProActiveRuntimeException;
00039 import org.objectweb.proactive.core.component.Constants;
00040 import org.objectweb.proactive.core.component.type.ProActiveTypeFactoryImpl;
00041 
00042 
00048 public class ProActiveSuperControllerImpl extends AbstractProActiveController
00049     implements Serializable, ProActiveSuperController {
00050     public ProActiveSuperControllerImpl(Component owner) {
00051         super(owner);
00052     }
00053 
00054     protected void setControllerItfType() {
00055         try {
00056             setItfType(ProActiveTypeFactoryImpl.instance()
00057                                                .createFcItfType(Constants.SUPER_CONTROLLER,
00058                     ProActiveSuperController.class.getName(),
00059                     TypeFactory.SERVER, TypeFactory.MANDATORY,
00060                     TypeFactory.SINGLE));
00061         } catch (InstantiationException e) {
00062             throw new ProActiveRuntimeException("cannot create controller " +
00063                 this.getClass().getName());
00064         }
00065     }
00066 
00067     
00068     public Component[] fcParents;
00069 
00070     public Component[] getFcSuperComponents() {
00071         if (fcParents == null) {
00072             return new Component[0];
00073         } else {
00074             return fcParents;
00075         }
00076     }
00077 
00078     public void addParent(final Component parent) {
00079         int length = (fcParents == null) ? 1 : (fcParents.length + 1);
00080         Component[] parents = new Component[length];
00081         if (fcParents != null) {
00082             System.arraycopy(fcParents, 0, parents, 1, fcParents.length);
00083         }
00084         parents[0] = parent;
00085         fcParents = parents;
00086     }
00087 
00088     public void removeParent(final Component parent) {
00089         int length = fcParents.length - 1;
00090         if (length == 0) {
00091             fcParents = null;
00092         } else {
00093             Component[] parents = new Component[length];
00094             int i = 0;
00095             for (int j = 0; j < fcParents.length; ++j) {
00096                 if (!fcParents[j].equals(parent)) {
00097                     parents[i++] = fcParents[j];
00098                 }
00099             }
00100             fcParents = parents;
00101         }
00102     }
00103 }