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;
}
}