/** * */ package org.eclipse.papyrus.infra.core.services; import java.util.Collections; import java.util.List; /** * Descriptor of a service. This descriptor describe a service. * * @author cedirc dumoulin * */ public class ServiceDescriptor { /** * Possible kind for service types. * */ public enum ServiceTypeKind { service, serviceFactory, pojo }; /** Classname of the service. USed to start the service */ private String serviceClassname; /** Kind of start for this service */ private ServiceStartKind serviceStartKind; /** Kind of service */ private ServiceTypeKind serviceTypeKind = ServiceTypeKind.service; /** * Service priority. If two service are registered under the same key, only * the one with the higher priority is started. */ private int priority; /** * Key used to register the service. */ private String key; /** * Id of the bundle owning the .class that is referenced by * serviceClassname. Requested when instanciating the class. */ private String classBundleID; /** * If set to true, the service is anonymous : it is not registered and can't * be retrieved with getService(). */ private boolean isAnonymous = false; /** * List of keys of Services required by this service. */ private List<String> requiredServices = Collections.emptyList(); /** * Empty list. */ private static List<String> EMPTY_LIST_STRING = Collections.emptyList(); /** * Constructor. * * @param key * @param serviceClassname * @param serviceStartKind * @param priority * @param requiredServices */ public ServiceDescriptor(String key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, List<String> requiredServices) { this.key = key; this.serviceClassname = serviceClassname; this.serviceStartKind = serviceStartKind; this.priority = priority; this.requiredServices = requiredServices; } /** * Constructor. * * @param key * A class used as key. The classname is used as key. * @param serviceClassname * @param serviceStartKind * @param priority * @param requiredServices */ public ServiceDescriptor(Class<?> key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, List<String> requiredServices) { this(key.getName(), serviceClassname, serviceStartKind, priority, requiredServices); } /** * Constructor. * * @param key * A class used as key. The classname is used as key. * @param serviceClassname * @param serviceStartKind * @param priority * @param isAnonymous * @param requiredServices */ public ServiceDescriptor(String key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, boolean isAnonymous, List<String> requiredServices) { this.key = key; this.serviceClassname = serviceClassname; this.serviceStartKind = serviceStartKind; this.priority = priority; this.isAnonymous = isAnonymous; this.requiredServices = requiredServices; } /** * Constructor. * * @param key * A class used as key. The classname is used as key. * @param serviceClassname * @param serviceStartKind * @param priority * @param isAnonymous * @param requiredServices */ public ServiceDescriptor(Class<?> key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, boolean isAnonymous, List<String> requiredServices) { this(key.getName(), serviceClassname, serviceStartKind, priority, isAnonymous, requiredServices); } /** * Constructor. * * @param key * @param serviceClassname * @param serviceStartKind * @param priority */ public ServiceDescriptor(String key, String serviceClassname, ServiceStartKind serviceStartKind, int priority) { this(key, serviceClassname, serviceStartKind, priority, EMPTY_LIST_STRING); } /** * Constructor. * * @param key * A class used as key. The classname is used as key. * @param serviceClassname * @param serviceStartKind * @param priority */ public ServiceDescriptor(Class<?> key, String serviceClassname, ServiceStartKind serviceStartKind, int priority) { this(key.getName(), serviceClassname, serviceStartKind, priority, EMPTY_LIST_STRING); } /** * Constructor. * * @param serviceClassname * @param serviceStartKind * @param priority * @param requiredServices */ public ServiceDescriptor(String serviceClassname, ServiceStartKind serviceStartKind, int priority, List<String> requiredServices) { this(serviceClassname, serviceClassname, serviceStartKind, priority, requiredServices); } /** * Constructor. * * @param serviceClassname * @param serviceStartKind * @param priority */ public ServiceDescriptor(String serviceClassname, ServiceStartKind serviceStartKind, int priority, boolean isAnonymous) { this(serviceClassname, serviceClassname, serviceStartKind, priority, isAnonymous, EMPTY_LIST_STRING); } /** * Constructor. * * @param serviceClassname * @param serviceStartKind * @param priority */ public ServiceDescriptor(String serviceClassname, ServiceStartKind serviceStartKind, int priority) { this(serviceClassname, serviceClassname, serviceStartKind, priority, EMPTY_LIST_STRING); } /** * @return the serviceStartKind */ public ServiceStartKind getServiceStartKind() { return serviceStartKind; } /** * Return true if StartKind is 'always'. * * @return */ public boolean isStartAtStartup() { return serviceStartKind == ServiceStartKind.STARTUP; } /** * @return the priority */ public int getPriority() { return priority; } /** * @return the key */ public String getKey() { return key; } /** * @return the serviceClassname */ public String getServiceClassname() { return serviceClassname; } /** * @return the classBundleID */ public String getClassBundleID() { return classBundleID; } /** * @param classBundleId * the classBundleID to set */ public void setClassBundleID(String classBundleId) { classBundleID = classBundleId; } /** * Get the keys of all the required services * * @return the requiredServices */ public List<String> getRequiredServiceKeys() { return requiredServices; } /** * @param requiredServices * the requiredServices to set */ public void setRequiredServiceKeys(List<String> requiredServices) { this.requiredServices = requiredServices; } /** * @see java.lang.Object#toString() * @return * */ @Override public String toString() { return "ServiceDescriptor [key=" + key + ", serviceClassname=" + serviceClassname + ", serviceStartKind=" + serviceStartKind + ", priority=" + priority + "]"; } /** * @return the isAnonymous */ public boolean isAnonymous() { return isAnonymous; } /** * @param isAnonymous * the isAnonymous to set */ public void setAnonymous(boolean isAnonymous) { this.isAnonymous = isAnonymous; } /** * @return the serviceTypeKind */ public ServiceTypeKind getServiceTypeKind() { return serviceTypeKind; } /** * @param serviceTypeKind * the serviceTypeKind to set */ public void setServiceTypeKind(ServiceTypeKind serviceTypeKind) { this.serviceTypeKind = serviceTypeKind; } }