package nl.tudelft.bw4t.client.gui.menu; import java.util.Collection; import java.util.LinkedList; import java.util.List; import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; public class ComboEntityModel extends AbstractListModel<String> implements ComboBoxModel<String> { private static final long serialVersionUID = 344469588673323347L; private final EntityComboModelProvider gui; private List<String> entities = new LinkedList<>(); private static final String[] DEFAULT_OPTIONS = new String[] { "all" }; private String selection = DEFAULT_OPTIONS[0]; public ComboEntityModel(EntityComboModelProvider clientGUI) { this.gui = clientGUI; } @Override public String getElementAt(int listIndex) { int defaultOptionsSize = DEFAULT_OPTIONS.length; /** If the element is a default option, then return that option: */ if (listIndex < defaultOptionsSize) { return DEFAULT_OPTIONS[listIndex]; } filterEntityList(); /** Else return the agent in the dropdown menu list: */ int entityIndex = listIndexToAgentIndex(listIndex); if (entityIndex >= 0) { return getEntities().get(entityIndex); } return null; } /** * Gets the agent index in the environment's agent list from the supplied agent index in the list. * * @param listIndex * The index of the agent in the list. * @return The agent index, -1 if the agent was not in the list. */ private int listIndexToAgentIndex(int listIndex) { listIndex -= DEFAULT_OPTIONS.length; /** A default option, which can't be translated to an agent id: */ if (listIndex < 0 || listIndex >= getEntities().size()) { return -1; } return listIndex; } @Override public int getSize() { filterEntityList(); return getEntities().size() + DEFAULT_OPTIONS.length; } @Override public Object getSelectedItem() { return selection; } @Override public void setSelectedItem(Object arg0) { selection = (String) arg0; } /** * load the list of entities from the server and filter it. */ private void filterEntityList() { Collection<String> ents = gui.getEntities(); if(ents != null){ this.entities.clear(); this.entities.addAll(ents); } } private List<String> getEntities() { return entities; } }