/* * Scriptographer * * This file is part of Scriptographer, a Scripting Plugin for Adobe Illustrator * http://scriptographer.org/ * * Copyright (c) 2002-2010, Juerg Lehni * http://scratchdisk.com/ * * All rights reserved. See LICENSE file for details. * * File created on Apr 13, 2008. */ package com.scratchdisk.util; import java.util.EnumSet; import java.util.HashMap; /** * @author lehni * */ public class IntegerEnumUtils { protected IntegerEnumUtils() { } private static HashMap<Class, Lookup> lookups = new HashMap<Class, Lookup>(); @SuppressWarnings("unchecked") private static <E extends IntegerEnum> Lookup<E> getLookup(Class<E> cls) { Lookup<E> lookup = lookups.get(cls); // Create lookup information grouped by class and name / value: if (lookup == null) { lookup = new Lookup<E>(cls); lookups.put(cls, lookup); } return lookup; } public static <E extends IntegerEnum> E get(Class<E> cls, Integer value) { return getLookup(cls).get(value); } private static class Lookup<E extends IntegerEnum> { HashMap<Integer, E> lookup = new HashMap<Integer, E>(); Lookup(Class<E> cls) { for (E value : cls.getEnumConstants()) lookup.put(value.value(), value); } E get(Integer value) { return lookup.get(value); } } /** * @param set */ public static int getFlags(EnumSet<? extends IntegerEnum> set) { int flags = 0; if (set != null) for (Enum e : set) flags |= ((IntegerEnum) e).value(); return flags; } public static <E extends Enum<E>> EnumSet<E> getSet(Class<E> cls, int flags) { EnumSet<E> set = EnumSet.noneOf(cls); for (E e : cls.getEnumConstants()) if ((((IntegerEnum) e).value() & flags) != 0) set.add(e); return set; } }