package com.idega.user.presentation;
import java.text.Collator;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import javax.ejb.FinderException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.user.data.Status;
import com.idega.user.data.StatusHome;
/**
* @author gimmi
*/
public class UserStatusDropdown extends DropdownMenu{
public static final String IW_BUNDLE_IDENTIFIER = "com.idega.user";
public static final String NO_STATUS_KEY = "default_key";
public static final String DEFAULT_INPUT_NAME = "ic_user_status";
// if you change this variable: default value is NOT localized yet
public static final String NO_STATUS_VALUE = "";
private Collection statuses;
private IWResourceBundle iwrb;
public UserStatusDropdown(){
this(DEFAULT_INPUT_NAME);
}
public UserStatusDropdown(String name) {
super(name);
}
public void init(IWContext iwc) {
try {
this.iwrb = getResourceBundle(iwc);
StatusHome sHome = (StatusHome) IDOLookup.getHome(Status.class);
this.statuses = sHome.findAll();
} catch (IDOLookupException e) {
e.printStackTrace(System.err);
} catch (FinderException e) {
e.printStackTrace(System.err);
}
}
public void main(IWContext iwc) throws Exception{
init(iwc);
if (this.statuses != null) {
// first add the default value
addMenuElement(NO_STATUS_KEY, NO_STATUS_VALUE);
SortedMap stringPrimaryKeyMap = getSortedStatuses(this.statuses, iwc);
Iterator iter = stringPrimaryKeyMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
addMenuElement( (String) entry.getValue(), (String) entry.getKey());
}
}
super.main(iwc);
}
public String getBundleIdentifier(){
return IW_BUNDLE_IDENTIFIER;
}
private SortedMap getSortedStatuses(Collection statuses, IWContext iwc) {
// get collator
Locale locale = iwc.getIWMainApplication().getSettings().getDefaultLocale();
Collator collator = Collator.getInstance(locale);
// create sorted map
SortedMap stringPrimaryKeyMap = new TreeMap(collator);
Status status;
Iterator iterator = statuses.iterator();
// fill the sorted map
while (iterator.hasNext()) {
status = (Status) iterator.next();
String primaryKey = status.getPrimaryKey().toString();
String key = status.getStatusKey();
String string = this.iwrb.getLocalizedString(key, key);
// use the localized string as key because the map is ordered by the keys not by the values
stringPrimaryKeyMap.put(string, primaryKey);
}
return stringPrimaryKeyMap;
}
}