/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.dlect.ui; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import java.util.Collection; import java.util.Comparator; import java.util.TreeSet; import javax.annotation.Nonnull; import javax.swing.DefaultComboBoxModel; import org.dlect.provider.loader.ProviderDetail; /** * * @author lee */ public class ProviderModel extends DefaultComboBoxModel<String> { private static final long serialVersionUID = 1L; private static final Comparator<ProviderDetail> COMPARATOR = new Comparator<ProviderDetail>() { @Override public int compare(ProviderDetail o1, ProviderDetail o2) { return o1.getName().compareToIgnoreCase(o2.getName()); } }; private final ImmutableList<ProviderDetail> providers; public ProviderModel(Collection<ProviderDetail> loader) { TreeSet<ProviderDetail> ps = Sets.newTreeSet(COMPARATOR); ps.addAll(loader); providers = ImmutableList.copyOf(ps); } /** * The index in the list of this provider; or 0 if it does not exist. * * @param provider * * @return */ public int getProviderIndex(ProviderDetail provider) { int listIdx = providers.indexOf(provider); if (listIdx < 0) { return 0; } else { return listIdx + 1; } } @Override public int getSize() { return providers.size() + 1; } @Nonnull public Optional<ProviderDetail> getProviderAt(int idx) { if (idx >= 1 && idx < getSize()) { return Optional.of(providers.get(idx - 1)); } else { return Optional.absent(); } } @Override public String getElementAt(int index) { Optional<ProviderDetail> p = getProviderAt(index); if (p.isPresent()) { return p.get().getName(); } else { return firstOption(); } } private String firstOption() { return "Choose your university"; //TODO(Later) return I18N.getString("Choose_University"); } @Override public void removeAllElements() { } @Override public void addElement(String item) { } @Override public void removeElement(Object obj) { } @Override public void insertElementAt(String item, int index) { } @Override public void removeElementAt(int index) { } }