/******************************************************************************* * * Copyright (c) 2010-2011 Sonatype, Inc. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * * * *******************************************************************************/ package org.hudsonci.utils.plugin.ui; import java.io.Serializable; /** * Helper to allow rendering of a more friendly display name for an enum. * * @author <a href="mailto:jason@planet57.com">Jason Dillon</a> * @since 2.1.0 */ public class RenderableEnum<E extends Enum<E>> implements Comparable<E>, Serializable { private final E value; public RenderableEnum(final E value) { assert value != null; this.value = value; } // These are all getXXX so that jelly can reference them with an explicit method call. // ie. ${enum.name} -> getName(), otherwise its gotta be ${enum.name()}. public String getDisplayName() { // TODO: Allow lookup of human/i18n name, look up resource bundle for enum type, then key off enum name return value.name(); } public String getName() { return value.name(); } public int getOrdinal() { return value.ordinal(); } @Override public boolean equals(final Object obj) { return value.equals(obj); } @Override public int hashCode() { return value.hashCode(); } public int compareTo(final E obj) { return value.compareTo(obj); } @SuppressWarnings({"unchecked" }) public static RenderableEnum[] forEnum(final Class<? extends Enum> source) { assert source != null; Enum[] values = source.getEnumConstants(); RenderableEnum[] target = new RenderableEnum[values.length]; for (int i = 0; i < values.length; i++) { target[i] = new RenderableEnum(values[i]); } return target; } }