package org.marketcetera.util.misc; import java.util.HashMap; import java.util.Vector; /** * A meta-information holder for a {@link UCPFilter}. * * @author tlerios@marketcetera.com * @since 0.6.0 * @version $Id: UCPFilterInfo.java 16154 2012-07-14 16:34:05Z colin $ */ /* $License$ */ @ClassVersion("$Id: UCPFilterInfo.java 16154 2012-07-14 16:34:05Z colin $") public class UCPFilterInfo { // CLASS DATA. private static final HashMap<UCPFilter,UCPFilterInfo> mMap= new HashMap<UCPFilter,UCPFilterInfo>(); // INSTANCE DATA. private int[] mUCPs; // CONSTRUCTOR. /** * Creates a new meta-information holder for the given filter. * * @param filter The filter. */ private UCPFilterInfo (UCPFilter filter) { Vector<Integer> ucps=new Vector<Integer>(); for (int ucp=Character.MIN_CODE_POINT; ucp<=Character.MAX_CODE_POINT;ucp++) { if (filter.isAcceptable(ucp)) { ucps.add(ucp); } } mUCPs=CollectionUtils.toArray(ucps); } // CLASS METHODS. /** * Returns the meta-information holder for the given filter. * * @param filter The filter. * * @return The holder. */ public static UCPFilterInfo getInfo (UCPFilter filter) { synchronized (mMap) { UCPFilterInfo info=mMap.get(filter); if (info!=null) { return info; } info=new UCPFilterInfo(filter); mMap.put(filter,info); return info; } } // INSTANCE METHODS. /** * Returns the code points acceptable to the receiver's associated * filter, in ascending numerical order. * * @return The code points. */ public int[] getUCPs() { return mUCPs; } }