| /****************************************************************************** |
| * Copyright (c) 2002, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| ****************************************************************************/ |
| |
| package org.eclipse.gmf.runtime.common.core.service; |
| |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.eclipse.gmf.runtime.common.core.internal.CommonCoreDebugOptions; |
| import org.eclipse.gmf.runtime.common.core.internal.CommonCorePlugin; |
| import org.eclipse.gmf.runtime.common.core.util.EnumeratedType; |
| import org.eclipse.gmf.runtime.common.core.util.Trace; |
| |
| /** |
| * An enumeration of service provider priorities. |
| * <P> |
| * Each service provider has a <code>ProviderPriority</code> that is declared |
| * in its extension descriptor. It is the |
| * {@link org.eclipse.gmf.runtime.common.core.service.ExecutionStrategy} that |
| * determines how service provider priorities are used to select a provider to |
| * service each client request. For example, if the |
| * {@link org.eclipse.gmf.runtime.common.core.service.ExecutionStrategy#FIRST} |
| * is used, the provider with the highest priority will give an answer to the |
| * request. |
| * |
| * @see org.eclipse.gmf.runtime.common.core.service |
| * |
| * @author khussey |
| * @canBeSeenBy %partners |
| */ |
| public class ProviderPriority extends EnumeratedType { |
| |
| private static final long serialVersionUID = 1L; |
| |
| /** |
| * An internal unique identifier for provider priorities. |
| */ |
| private static int nextOrdinal = 0; |
| |
| /** |
| * The lowest provider priority. |
| */ |
| public static final ProviderPriority LOWEST = new ProviderPriority("Lowest"); //$NON-NLS-1$ |
| |
| /** |
| * The second-lowest provider priority. |
| */ |
| public static final ProviderPriority LOW = new ProviderPriority("Low"); //$NON-NLS-1$ |
| |
| /** |
| * The middle provider priority. |
| */ |
| public static final ProviderPriority MEDIUM = new ProviderPriority("Medium"); //$NON-NLS-1$ |
| |
| /** |
| * The second-highest provider priority. |
| */ |
| public static final ProviderPriority HIGH = new ProviderPriority("High"); //$NON-NLS-1$ |
| |
| /** |
| * The highest provider priority. |
| */ |
| public static final ProviderPriority HIGHEST = new ProviderPriority("Highest"); //$NON-NLS-1$ |
| |
| /** |
| * The list of values for this enumerated type. |
| */ |
| private static final ProviderPriority[] VALUES = |
| { LOWEST, LOW, MEDIUM, HIGH, HIGHEST }; |
| |
| /** |
| * Retrieves the provider priority with the specified name. |
| * |
| * @param name The name of the provider priority to be retrieved. |
| * @return The provider priority with the specified name. |
| * @exception IllegalArgumentException If a provider priority with the |
| * specified name does not exist. |
| */ |
| public static ProviderPriority parse(String name) { |
| for (int i = 0; i < VALUES.length; i++) { |
| if (VALUES[i].getName().equals(name)) { |
| return VALUES[i]; |
| } |
| } |
| |
| IllegalArgumentException iae = new IllegalArgumentException(name); |
| Trace.throwing(CommonCorePlugin.getDefault(), CommonCoreDebugOptions.EXCEPTIONS_THROWING, ProviderPriority.class, "parse", iae); //$NON-NLS-1$ |
| throw iae; |
| } |
| |
| /** |
| * Constructs a new provider priority with the specified name. |
| * |
| * @param name The name of the new provider priority. |
| */ |
| private ProviderPriority(String name) { |
| super(name, nextOrdinal++); |
| } |
| |
| /** |
| * Constructs a new provider priority with the specified name and ordinal. |
| * |
| * @param name The name of the new provider priority. |
| * @param ordinal The ordinal for the new provider priority . |
| */ |
| protected ProviderPriority(String name, int ordinal) { |
| super(name, ordinal); |
| } |
| |
| /** |
| * Retrieves the list of constants for this enumerated type. |
| * |
| * @return The list of constants for this enumerated type. |
| */ |
| protected List getValues() { |
| return Collections.unmodifiableList(Arrays.asList(VALUES)); |
| } |
| |
| /** |
| * Compares this provider priority with the specified object for order. |
| * Returns a negative integer, zero, or a positive integer as this provider |
| * priority is less than, equal to, or greater than the specified object. |
| * |
| * @param object The object to be compared. |
| * @return A negative integer, zero, or a positive integer as this |
| * provider priority is less than, equal to, or greater than the |
| * specified object. |
| * @exception ClassCastException If the specified object's type |
| * prevents it from being compared to |
| * this provider priority. |
| */ |
| public int compareTo(Object object) { |
| List values = getValues(); |
| return values.indexOf(this) - values.indexOf(object); |
| } |
| |
| } |