/*
* RHQ Management Platform
* Copyright (C) 2010 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.coregui.client.components.form;
import java.util.EnumSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import com.smartgwt.client.types.MultipleAppearance;
import com.smartgwt.client.widgets.form.fields.SelectItem;
/**
* A convenience class for exposing an {@link Enum} as a multi-select form item.
*
* @author Joseph Marques
*/
public class EnumSelectItem extends SelectItem {
/**
* @param name name of the SelectItem
* @param title display name of the SelectItem (should be I18N)
* @param e the Enum class object
* @param valueMap EnumName->DisplayName map. Enums without a mapping with use .toString() for the display. For I18N
* this should be supplied. Can be null.
* @param valueIcons EnumName->Icon map. Enums without a mapping have no icon. Can be null.
*/
public EnumSelectItem(String name, String title, Class<? extends Enum<?>> e,
LinkedHashMap<String, String> valueMap, Map<String, String> valueIcons) {
super(name, title);
init(e, valueMap, valueIcons);
}
public void init(Class<? extends Enum<?>> e, LinkedHashMap<String, String> valueMap, Map<String, String> valueIcons) {
setMultiple(true);
setMultipleAppearance(MultipleAppearance.PICKLIST);
valueMap = getEnumValueMap(e, valueMap);
Set<String> keys = valueMap.keySet();
setValueMap(valueMap);
setValues(keys.toArray(new String[keys.size()])); // select them all by default
if (null != valueIcons) {
setValueIcons(valueIcons);
}
}
@SuppressWarnings("unchecked")
private LinkedHashMap<String, String> getEnumValueMap(Class<? extends Enum> e,
LinkedHashMap<String, String> valueMap) {
LinkedHashMap<String, String> map = (null != valueMap) ? valueMap : new LinkedHashMap<String, String>();
for (Object o : EnumSet.allOf(e)) {
Enum v = (Enum) o;
String name = v.name();
if (!map.containsKey(name)) {
map.put(name, v.toString());
}
}
return map;
}
}