All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jakarta.faces.TypedCollections Maven / Gradle / Ivy

Go to download

Jakarta Faces defines an MVC framework for building user interfaces for web applications, including UI components, state management, event handing, input validation, page navigation, and support for internationalization and accessibility.

There is a newer version: 4.1.0
Show newest version
/*
 * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package jakarta.faces;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

class TypedCollections {

    /**
     * Dynamically check that the members of the collection are all instances of the given type (or null).
     */
    private static boolean checkCollectionMembers(Collection c, Class type) {
        for (Object element : c) {
            if (element != null && !type.isInstance(element)) {
                return false;
            }
        }
        return true;
    }

    /**
     * Dynamically check that the members of the collection are all instances of the given type (or null), and that the
     * collection itself is of the given collection type.
     *
     * @param  the collection's element type
     * @param c the collection to cast
     * @param type the class of the collection's element type.
     * @return the dynamically-type checked collection.
     * @throws java.lang.ClassCastException
     */
    static > TypedC dynamicallyCastCollection(Collection c, Class type, Class collectionType) {
        if (c == null) {
            return null;
        }

        if (!collectionType.isInstance(c)) {
            throw new ClassCastException(c.getClass().getName());
        }

        assert checkCollectionMembers(c, type) : "The collection contains members with a type other than " + type.getName();

        return collectionType.cast(c);
    }

    /**
     * Dynamically check that the members of the list are all instances of the given type (or null).
     *
     * @param  the list's element type
     * @param list the list to cast
     * @param type the class of the list's element type.
     * @return the dynamically-type checked list.
     * @throws java.lang.ClassCastException
     */
    @SuppressWarnings("unchecked")
    static  List dynamicallyCastList(List list, Class type) {
        return dynamicallyCastCollection(list, type, List.class);
    }

    /**
     * Dynamically check that the members of the set are all instances of the given type (or null).
     *
     * @param  the set's element type
     * @param set the set to cast
     * @param type the class of the set's element type.
     * @return the dynamically-type checked set.
     * @throws java.lang.ClassCastException
     */
    @SuppressWarnings("unchecked")
    static  Set dynamicallyCastSet(Set set, Class type) {
        return dynamicallyCastCollection(set, type, Set.class);
    }

    /**
     * Dynamically check that the keys and values in the map are all instances of the correct types (or null).
     *
     * @param  the map's key type
     * @param  the map's value type
     * @param map the map to cast
     * @param keyType the class of the map's key type.
     * @param valueType the class of the map's value type.
     * @return the dynamically-type checked map.
     * @throws java.lang.ClassCastException
     */
    @SuppressWarnings("unchecked")
    static  Map dynamicallyCastMap(Map map, Class keyType, Class valueType) {
        if (map == null) {
            return null;
        }
        assert checkCollectionMembers(map.keySet(), keyType) : "The map contains keys with a type other than " + keyType.getName();
        assert checkCollectionMembers(map.values(), valueType) : "The map contains values with a type other than " + valueType.getName();

        return (Map) map;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy