/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package util;
import java.util.Arrays;
import java.util.Collections;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
/**
* Option support for enumerations.
*
* @author jonnymiller
*/
public class EnumOption implements Comparable<EnumOption> {
public String id;
public String name;
public EnumOption(Enum value) {
this(value, null);
}
/**
* Decorate an enum to provide i18n display string. By default, the resource key is the enum class name if
* namePrefix is not provided.
*
* @param value
* @param namePrefix
*/
public EnumOption(Enum value, String namePrefix) {
this.id = value.name();
name = getDisplayValue(id, StringUtils.defaultString(namePrefix, value.getClass().getSimpleName()));
}
public EnumOption(String value, String port) {
id = value;
name = port;
}
@Override
public int compareTo(EnumOption o) {
return name.compareTo(o.name);
}
@Override
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder();
builder.append(id);
return builder.toHashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof EnumOption)) {
return false;
}
EnumOption other = (EnumOption) obj;
EqualsBuilder builder = new EqualsBuilder();
builder.append(id, other.id);
return builder.isEquals();
}
public static EnumOption[] options(Enum[] values) {
return options(values, null);
}
public static EnumOption[] options(Enum[] values, boolean sorted) {
return options(values, null, sorted);
}
public static EnumOption[] options(Enum[] values, String namePrefix) {
EnumOption[] options = new EnumOption[values.length];
for (int i = 0; i < values.length; i++) {
options[i] = new EnumOption(values[i], namePrefix);
}
Collections.sort(Arrays.asList(options));
return options;
}
public static EnumOption[] options(Enum[] values, String namePrefix, boolean sorted) {
EnumOption[] options = new EnumOption[values.length];
for (int i = 0; i < values.length; i++) {
options[i] = new EnumOption(values[i], namePrefix);
}
if (sorted) {
Collections.sort(Arrays.asList(options));
}
return options;
}
public static EnumOption[] options(String[] values, String namePrefix, boolean sorted) {
EnumOption[] options = new EnumOption[values.length];
for (int i = 0; i < values.length; i++) {
options[i] = new EnumOption(values[i], namePrefix);
}
if (sorted) {
Collections.sort(Arrays.asList(options));
}
return options;
}
/**
* Get given enum's i18n display-able string.
*
* @param value
* the enumeration value
* @param namePrefix
* the prefix of the message key.
* @return the display value.
*/
private static String getDisplayValue(String value, String namePrefix) {
String key = namePrefix + "." + value;
String message = MessagesUtils.get(key);
if (key.equals(message)) {
message = value;
}
return message;
}
}