diff options
Diffstat (limited to 'awt/javax/imageio/spi/ServiceRegistry.java')
| -rw-r--r-- | awt/javax/imageio/spi/ServiceRegistry.java | 552 | 
1 files changed, 0 insertions, 552 deletions
| diff --git a/awt/javax/imageio/spi/ServiceRegistry.java b/awt/javax/imageio/spi/ServiceRegistry.java deleted file mode 100644 index 79b02a36644d..000000000000 --- a/awt/javax/imageio/spi/ServiceRegistry.java +++ /dev/null @@ -1,552 +0,0 @@ -/* - *  Licensed to the Apache Software Foundation (ASF) under one or more - *  contributor license agreements.  See the NOTICE file distributed with - *  this work for additional information regarding copyright ownership. - *  The ASF licenses this file to You under the Apache License, Version 2.0 - *  (the "License"); you may not use this file except in compliance with - *  the License.  You may obtain a copy of the License at - * - *     http://www.apache.org/licenses/LICENSE-2.0 - * - *  Unless required by applicable law or agreed to in writing, software - *  distributed under the License is distributed on an "AS IS" BASIS, - *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - *  See the License for the specific language governing permissions and - *  limitations under the License. - */ -/** - * @author Rustem V. Rafikov - * @version $Revision: 1.3 $ - */ - -package javax.imageio.spi; - -import java.util.*; -import java.util.Map.Entry; - -/** - * The ServiceRegistry class provides ability to register, deregister, look up - * and obtain service provider instances (SPIs). A service means a set of - * interfaces and classes, and a service provider is an implementation of a - * service. Service providers can be associated with one or more categories. - * Each category is defined by a class or interface. Only a single instance of a - * each class is allowed to be registered as a category. - *  - * @since Android 1.0 - */ -public class ServiceRegistry { - -    /** -     * The categories. -     */ -    CategoriesMap categories = new CategoriesMap(this); - -    /** -     * Instantiates a new ServiceRegistry with the specified categories. -     *  -     * @param categoriesIterator -     *            an Iterator of Class objects for defining of categories. -     */ -    public ServiceRegistry(Iterator<Class<?>> categoriesIterator) { -        if (null == categoriesIterator) { -            throw new IllegalArgumentException("categories iterator should not be NULL"); -        } -        while (categoriesIterator.hasNext()) { -            Class<?> c = categoriesIterator.next(); -            categories.addCategory(c); -        } -    } - -    /** -     * Looks up and instantiates the available providers of this service using -     * the specified class loader. -     *  -     * @param providerClass -     *            the Class object of the provider to be looked up. -     * @param loader -     *            the class loader to be used. -     * @return the iterator of providers objects for this service. -     */ -    public static <T> Iterator<T> lookupProviders(Class<T> providerClass, ClassLoader loader) { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Looks up and instantiates the available providers of this service using -     * the context class loader. -     *  -     * @param providerClass -     *            the Class object of the provider to be looked up. -     * @return the iterator of providers objects for this service. -     */ -    public static <T> Iterator<T> lookupProviders(Class<T> providerClass) { -        return lookupProviders(providerClass, Thread.currentThread().getContextClassLoader()); -    } - -    /** -     * Registers the specified service provider object in the specified -     * categories. -     *  -     * @param provider -     *            the specified provider to be registered. -     * @param category -     *            the category. -     * @return true, if no provider of the same class is registered in this -     *         category, false otherwise. -     */ -    public <T> boolean registerServiceProvider(T provider, Class<T> category) { -        return categories.addProvider(provider, category); -    } - -    /** -     * Registers a list of service providers. -     *  -     * @param providers -     *            the list of service providers. -     */ -    public void registerServiceProviders(Iterator<?> providers) { -        for (Iterator<?> iterator = providers; iterator.hasNext();) { -            categories.addProvider(iterator.next(), null); -        } -    } - -    /** -     * Registers the specified service provider object in all categories. -     *  -     * @param provider -     *            the service provider. -     */ -    public void registerServiceProvider(Object provider) { -        categories.addProvider(provider, null); -    } - -    /** -     * Deregisters the specifies service provider from the specified category. -     *  -     * @param provider -     *            the service provider to be deregistered. -     * @param category -     *            the specified category. -     * @return true, if the provider was already registered in the specified -     *         category, false otherwise. -     */ -    public <T> boolean deregisterServiceProvider(T provider, Class<T> category) { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Deregisters the specified service provider from all categories. -     *  -     * @param provider -     *            the specified service provider. -     */ -    public void deregisterServiceProvider(Object provider) { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Gets an Iterator of registered service providers in the specified -     * category which satisfy the specified Filter. The useOrdering parameter -     * indicates whether the iterator will return all of the server provider -     * objects in a set order. -     *  -     * @param category -     *            the specified category. -     * @param filter -     *            the specified filter. -     * @param useOrdering -     *            the flag indicating that providers are ordered in the returned -     *            Iterator. -     * @return the iterator of registered service providers. -     */ -    @SuppressWarnings("unchecked") -    public <T> Iterator<T> getServiceProviders(Class<T> category, Filter filter, boolean useOrdering) { -        return new FilteredIterator<T>(filter, (Iterator<T>)categories.getProviders(category, -                useOrdering)); -    } - -    /** -     * Gets an Iterator of all registered service providers in the specified -     * category. The useOrdering parameter indicates whether the iterator will -     * return all of the server provider objects in a set order. -     *  -     * @param category -     *            the specified category. -     * @param useOrdering -     *            the flag indicating that providers are ordered in the returned -     *            Iterator. -     * @return the Iterator of service providers. -     */ -    @SuppressWarnings("unchecked") -    public <T> Iterator<T> getServiceProviders(Class<T> category, boolean useOrdering) { -        return (Iterator<T>)categories.getProviders(category, useOrdering); -    } - -    /** -     * Gets the registered service provider object that has the specified class -     * type. -     *  -     * @param providerClass -     *            the specified provider class. -     * @return the service provider object. -     */ -    public <T> T getServiceProviderByClass(Class<T> providerClass) { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Sets an ordering between two service provider objects within the -     * specified category. -     *  -     * @param category -     *            the specified category. -     * @param firstProvider -     *            the first provider. -     * @param secondProvider -     *            the second provider. -     * @return true, if a previously unset order was set. -     */ -    public <T> boolean setOrdering(Class<T> category, T firstProvider, T secondProvider) { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Unsets an ordering between two service provider objects within the -     * specified category. -     *  -     * @param category -     *            the specified category. -     * @param firstProvider -     *            the first provider. -     * @param secondProvider -     *            the second provider. -     * @return true, if a previously unset order was removed. -     */ -    public <T> boolean unsetOrdering(Class<T> category, T firstProvider, T secondProvider) { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Deregisters all providers from the specified category. -     *  -     * @param category -     *            the specified category. -     */ -    public void deregisterAll(Class<?> category) { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Deregister all providers from all categories. -     */ -    public void deregisterAll() { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Finalizes this object. -     *  -     * @throws Throwable -     *             if an error occurs during finalization. -     */ -    @Override -    public void finalize() throws Throwable { -        // TODO uncomment when deregisterAll is implemented -        // deregisterAll(); -    } - -    /** -     * Checks whether the specified provider has been already registered. -     *  -     * @param provider -     *            the provider to be checked. -     * @return true, if the specified provider has been already registered, -     *         false otherwise. -     */ -    public boolean contains(Object provider) { -        throw new UnsupportedOperationException("Not supported yet"); -    } - -    /** -     * Gets an iterator of Class objects representing the current categories. -     *  -     * @return the Iterator of Class objects. -     */ -    public Iterator<Class<?>> getCategories() { -        return categories.list(); -    } - -    /** -     * The ServiceRegistry.Filter interface is used by -     * ServiceRegistry.getServiceProviders to filter providers according to the -     * specified criterion. -     *  -     * @since Android 1.0 -     */ -    public static interface Filter { - -        /** -         * Returns true if the specified provider satisfies the criterion of -         * this Filter. -         *  -         * @param provider -         *            the provider. -         * @return true, if the specified provider satisfies the criterion of -         *         this Filter, false otherwise. -         */ -        boolean filter(Object provider); -    } - -    /** -     * The Class CategoriesMap. -     */ -    private static class CategoriesMap { - -        /** -         * The categories. -         */ -        Map<Class<?>, ProvidersMap> categories = new HashMap<Class<?>, ProvidersMap>(); - -        /** -         * The registry. -         */ -        ServiceRegistry registry; - -        /** -         * Instantiates a new categories map. -         *  -         * @param registry -         *            the registry. -         */ -        public CategoriesMap(ServiceRegistry registry) { -            this.registry = registry; -        } - -        // -- TODO: useOrdering -        /** -         * Gets the providers. -         *  -         * @param category -         *            the category. -         * @param useOrdering -         *            the use ordering. -         * @return the providers. -         */ -        Iterator<?> getProviders(Class<?> category, boolean useOrdering) { -            ProvidersMap providers = categories.get(category); -            if (null == providers) { -                throw new IllegalArgumentException("Unknown category: " + category); -            } -            return providers.getProviders(useOrdering); -        } - -        /** -         * List. -         *  -         * @return the iterator< class<?>>. -         */ -        Iterator<Class<?>> list() { -            return categories.keySet().iterator(); -        } - -        /** -         * Adds the category. -         *  -         * @param category -         *            the category. -         */ -        void addCategory(Class<?> category) { -            categories.put(category, new ProvidersMap()); -        } - -        /** -         * Adds a provider to the category. If <code>category</code> is -         * <code>null</code> then the provider will be added to all categories -         * which the provider is assignable from. -         *  -         * @param provider -         *            provider to add. -         * @param category -         *            category to add provider to. -         * @return true, if there were such provider in some category. -         */ -        boolean addProvider(Object provider, Class<?> category) { -            if (provider == null) { -                throw new IllegalArgumentException("provider should be != NULL"); -            } - -            boolean rt; -            if (category == null) { -                rt = findAndAdd(provider); -            } else { -                rt = addToNamed(provider, category); -            } - -            if (provider instanceof RegisterableService) { -                ((RegisterableService)provider).onRegistration(registry, category); -            } - -            return rt; -        } - -        /** -         * Adds the to named. -         *  -         * @param provider -         *            the provider. -         * @param category -         *            the category. -         * @return true, if successful. -         */ -        private boolean addToNamed(Object provider, Class<?> category) { -            Object obj = categories.get(category); - -            if (null == obj) { -                throw new IllegalArgumentException("Unknown category: " + category); -            } - -            return ((ProvidersMap)obj).addProvider(provider); -        } - -        /** -         * Find and add. -         *  -         * @param provider -         *            the provider. -         * @return true, if successful. -         */ -        private boolean findAndAdd(Object provider) { -            boolean rt = false; -            for (Entry<Class<?>, ProvidersMap> e : categories.entrySet()) { -                if (e.getKey().isAssignableFrom(provider.getClass())) { -                    rt |= e.getValue().addProvider(provider); -                } -            } -            return rt; -        } -    } - -    /** -     * The Class ProvidersMap. -     */ -    private static class ProvidersMap { -        // -- TODO: providers ordering support - -        /** -         * The providers. -         */ -        Map<Class<?>, Object> providers = new HashMap<Class<?>, Object>(); - -        /** -         * Adds the provider. -         *  -         * @param provider -         *            the provider. -         * @return true, if successful. -         */ -        boolean addProvider(Object provider) { -            return providers.put(provider.getClass(), provider) != null; -        } - -        /** -         * Gets the provider classes. -         *  -         * @return the provider classes. -         */ -        Iterator<Class<?>> getProviderClasses() { -            return providers.keySet().iterator(); -        } - -        // -- TODO ordering -        /** -         * Gets the providers. -         *  -         * @param userOrdering -         *            the user ordering. -         * @return the providers. -         */ -        Iterator<?> getProviders(boolean userOrdering) { -            return providers.values().iterator(); -        } -    } - -    /** -     * The Class FilteredIterator. -     */ -    private static class FilteredIterator<E> implements Iterator<E> { - -        /** -         * The filter. -         */ -        private Filter filter; - -        /** -         * The backend. -         */ -        private Iterator<E> backend; - -        /** -         * The next obj. -         */ -        private E nextObj; - -        /** -         * Instantiates a new filtered iterator. -         *  -         * @param filter -         *            the filter. -         * @param backend -         *            the backend. -         */ -        public FilteredIterator(Filter filter, Iterator<E> backend) { -            this.filter = filter; -            this.backend = backend; -            findNext(); -        } - -        /** -         * Next. -         *  -         * @return the e. -         */ -        public E next() { -            if (nextObj == null) { -                throw new NoSuchElementException(); -            } -            E tmp = nextObj; -            findNext(); -            return tmp; -        } - -        /** -         * Checks for next. -         *  -         * @return true, if successful. -         */ -        public boolean hasNext() { -            return nextObj != null; -        } - -        /** -         * Removes the. -         */ -        public void remove() { -            throw new UnsupportedOperationException(); -        } - -        /** -         * Sets nextObj to a next provider matching the criterion given by the -         * filter. -         */ -        private void findNext() { -            nextObj = null; -            while (backend.hasNext()) { -                E o = backend.next(); -                if (filter.filter(o)) { -                    nextObj = o; -                    return; -                } -            } -        } -    } -} | 
