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

org.nakedobjects.metamodel.facets.FacetUtil Maven / Gradle / Ivy

The newest version!
package org.nakedobjects.metamodel.facets;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import org.nakedobjects.metamodel.commons.filters.Filter;


public final class FacetUtil {

    private FacetUtil() {}

    /**
     * Attaches the {@link Facet} to its {@link Facet#getFacetHolder() facet holder}.
     * 
     * @return true if a non-null facet was added, false otherwise.
     */
    public static boolean addFacet(final Facet facet) {
        if (facet == null) {
            return false;
        }
        facet.getFacetHolder().addFacet(facet);
        return true;
    }

    public static boolean addFacet(final MultiTypedFacet facet) {
        if (facet == null) {
            return false;
        }
        facet.getFacetHolder().addFacet(facet);
        return true;
    }

    /**
     * Attaches each {@link Facet} to its {@link Facet#getFacetHolder() facet holder}.
     * 
     * @return true if any facets were added, false otherwise.
     */
    public static boolean addFacets(final Facet[] facets) {
        boolean addedFacets = false;
        for (int i = 0; i < facets.length; i++) {
            addedFacets = addFacet(facets[i]) | addedFacets;
        }
        return addedFacets;
    }

    /**
     * Attaches each {@link Facet} to its {@link Facet#getFacetHolder() facet holder}.
     * 
     * @return true if any facets were added, false otherwise.
     */
    public static boolean addFacets(final List facetList) {
        boolean addedFacets = false;
        for (final Facet facet : facetList) {
            addedFacets = addFacet(facet) | addedFacets;
        }
        return addedFacets;
    }

    /**
     * Bit nasty, for use only by {@link FacetHolder}s that index their {@link Facet}s in a Map.
     * 
     * @param facetsByClass
     * @return
     */
    @SuppressWarnings("unchecked")
    public static Class[] getFacetTypes(final Map, Facet> facetsByClass) {
        return facetsByClass.keySet().toArray(new Class[0]);
    }

    /**
     * Bit nasty, for use only by {@link FacetHolder}s that index their {@link Facet}s in a Map.
     * 
     * @param facetsByClass
     * @return
     */
    public static Facet[] getFacets(final Map, Facet> facetsByClass, final Filter filter) {
        final List filteredFacets = new ArrayList();
        final List allFacets = new ArrayList(facetsByClass.values());
        for (int i = 0; i < allFacets.size(); i++) {
            final Facet facet = allFacets.get(i);
            if (filter.accept(facet)) {
                filteredFacets.add(facet);
            }
        }
        return filteredFacets.toArray(new Facet[] {});
    }

    public static Facet[] getFacets(final Facet facet, final Filter filter) {
        if (filter.accept(facet)) {
            return new Facet[] { facet };
        } else {
            return new Facet[] {};
        }
    }

    public static void removeFacet(final Map, Facet> facetsByClass, final Facet facet) {
        removeFacet(facetsByClass, facet.facetType());
    }

    public static void removeFacet(final Map, Facet> facetsByClass, final Class facetType) {
        final Facet facet = facetsByClass.get(facetType);
        if (facet == null) {
            return;
        }
        facetsByClass.remove(facetType);
        facet.setFacetHolder(null);
    }

    public static void addFacet(final Map, Facet> facetsByClass, final Facet facet) {
        facetsByClass.put(facet.facetType(), facet);
    }

    public static Facet[] toArray(final List facetList) {
        if (facetList == null) {
            return new Facet[0];
        } else {
            return facetList.toArray(new Facet[] {});
        }
    }

    public static Hashtable, Facet> getFacetsByType(final FacetHolder nos) {
        final Hashtable, Facet> facetByType = new Hashtable, Facet>();
        final Class[] facetsFor = nos.getFacetTypes();
        for (int i = 0; i < facetsFor.length; i++) {
            final Class facetType = facetsFor[i];
            final Facet facet = nos.getFacet(facetType);
            facetByType.put(facetType, facet);
        }
        return facetByType;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy