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;
00032 
00033 import java.lang.reflect.Method;
00034 import java.util.Arrays;
00035 import java.util.Iterator;
00036 
00037 import org.objectweb.fractal.api.Component;
00038 import org.objectweb.fractal.api.Interface;
00039 import org.objectweb.fractal.api.NoSuchInterfaceException;
00040 import org.objectweb.fractal.api.type.ComponentType;
00041 import org.objectweb.fractal.api.type.InterfaceType;
00042 import org.objectweb.proactive.core.component.type.ProActiveInterfaceType;
00043 import org.objectweb.proactive.core.component.type.ProActiveTypeFactory;
00044 
00051 public class Utils {
00052 
00057     public static String pertainsToACollectionInterface(String clientItfName,
00058         Component owner) {
00059         InterfaceType[] itfTypes = (((ComponentType) owner.getFcType()).getFcInterfaceTypes());
00060         for (int i = 0; i < itfTypes.length; i++) {
00061             if (itfTypes[i].isFcCollectionItf()) {
00062                 if (clientItfName.startsWith(itfTypes[i].getFcItfName())) {
00063                     return itfTypes[i].getFcItfName();
00064                 }
00065             }
00066         }
00067         return null;
00068     }
00069 
00070     public static InterfaceType getItfType(String itfName, Component owner) throws NoSuchInterfaceException {
00071         InterfaceType[] itfTypes = (((ComponentType) owner.getFcType()).getFcInterfaceTypes());
00072         for (int i = 0; i < itfTypes.length; i++) {
00073             if (itfTypes[i].isFcCollectionItf()) {
00074                 if (itfName.startsWith(itfTypes[i].getFcItfName()) &&
00075                         !itfName.equals(itfTypes[i].getFcItfName())) {
00076                     return itfTypes[i];
00077                 }
00078             } else {
00079                 if (itfName.equals(itfTypes[i].getFcItfName())) {
00080                     return itfTypes[i];
00081                 }
00082             }
00083         }
00084         return null;
00085     }
00086 
00087     public static boolean hasSingleCardinality(String itfName, Component owner) {
00088         Iterator it = Arrays.asList(owner.getFcInterfaces()).iterator();
00089         while (it.hasNext()) {
00090             ProActiveInterfaceType itfType = ((ProActiveInterfaceType) ((Interface) it.next()).getFcItfType());
00091             if (itfType.getFcItfName().equals(itfName) &&
00092                     itfType.isFcSingletonItf()) {
00093                 return true;
00094             }
00095         }
00096         return false;
00097     }
00098 
00099     public static boolean isMulticastItf(String itfName, Component owner) {
00100         try {
00101             return ProActiveTypeFactory.MULTICAST_CARDINALITY.equals(getCardinality(
00102                     itfName, owner));
00103         } catch (NoSuchInterfaceException e) {
00104             return false;
00105         }
00106     }
00107 
00108     public static boolean isGathercastItf(Interface itf) {
00109         if (!(itf instanceof ProActiveInterface)) {
00110             return false;
00111         }
00112         return ((ProActiveInterfaceType) itf.getFcItfType()).isFcGathercastItf();
00113     }
00114 
00115     public static boolean isSingletonItf(String itfName, Component owner) {
00116         try {
00117             return ProActiveTypeFactory.SINGLETON_CARDINALITY.equals(getCardinality(
00118                     itfName, owner));
00119         } catch (NoSuchInterfaceException e) {
00120             return false;
00121         }
00122     }
00123 
00124     public static String getCardinality(String itfName, Component owner)
00125         throws NoSuchInterfaceException {
00126         InterfaceType[] itfTypes = ((ComponentType) owner.getFcType()).getFcInterfaceTypes();
00127 
00128         for (InterfaceType type : itfTypes) {
00129             if (type.getFcItfName().equals(itfName)) {
00130                 return ((ProActiveInterfaceType) type).getFcCardinality();
00131             }
00132         }
00133         throw new NoSuchInterfaceException(itfName);
00134     }
00135 
00136     public static String getMethodSignatureWithoutReturnTypeAndModifiers(
00137         Method m) {
00138         String result = m.toString();
00139         result = result.substring(result.indexOf(m.getName()));
00140         return result;
00141     }
00142 
00143 }