package com.iambookmaster.client.common; import java.util.ArrayList; import com.google.gwt.user.client.ui.ListBox; import com.iambookmaster.client.beans.AbstractParameter; import com.iambookmaster.client.model.Model; import com.iambookmaster.client.model.ParameterListener; public class SimpleAbstractParameterListBox<T> extends ListBox implements ParameterListener{ private static final String EMPTY=""; private Model model; private T selected; private boolean addEmpty; @SuppressWarnings("unchecked") private AbstractParameterFilter filter; @SuppressWarnings("unchecked") private Class clazz; @SuppressWarnings("unchecked") public SimpleAbstractParameterListBox(Class clazz,Model model) { this(clazz,model,false,null); } @SuppressWarnings("unchecked") public SimpleAbstractParameterListBox(Class clazz,Model model, boolean addEmpty) { this(clazz,model,addEmpty,null); } @SuppressWarnings("unchecked") public SimpleAbstractParameterListBox(Class clazz,Model model, boolean addEmpty,AbstractParameterFilter filter) { this.model = model; this.clazz = clazz; this.addEmpty =addEmpty; this.filter = filter; model.addParamaterListener(this); refreshData(); } private void refreshData() { ArrayList<AbstractParameter> objects = model.getParameters(); clear(); if (addEmpty) { addItem(EMPTY); setSelectedIndex(0); } for (AbstractParameter abstractParameter : objects) { if (filter==null || filter.match(abstractParameter)) { addParameterToList(abstractParameter); } } } @SuppressWarnings("unchecked") private void addParameterToList(AbstractParameter abstractParameter) { if (clazz.equals(abstractParameter.getClass())) { if (filter==null || filter.match(abstractParameter)) { for (int i = 0; i < getItemCount(); i++) { if (abstractParameter.getId().equals(getValue(i))) { //already in the list return; } } addItem(abstractParameter.getName(), abstractParameter.getId()); if (selected==null) { if (addEmpty==false) { selected = (T)abstractParameter; setSelectedIndex(getItemCount()-1); } } else if (selected == abstractParameter) { setSelectedIndex(getItemCount()-1); } } } } public void refreshAll() { refreshData(); } @SuppressWarnings("unchecked") public T getSelectedParameter() { int idx = getSelectedIndex(); if (idx==0 && getItemCount()==0) { return null; } ArrayList<AbstractParameter> objects = model.getParameters(); String id = getValue(idx); if (addEmpty && getSelectedIndex()==0) { return null; } for (int i = 0; i < objects.size(); i++) { AbstractParameter object = objects.get(i); if (object.getId().equals(id)) { return (T)object; } } return null; } public void setSelectedParameter(T param) { if (param==null) { setSelectedIndex(0); return; } AbstractParameter selectedParameter = (AbstractParameter)param; if (selectedParameter.getId().equals(getValue(getSelectedIndex()))) { //the same return; } for (int i = 0; i < getItemCount(); i++) { if (selectedParameter.getId().equals(getValue(i))) { setSelectedIndex(i); break; } } } protected void onDetach() { super.onDetach(); model.removeParamaterListener(this); } public void addNewParameter(AbstractParameter parameter) { addParameterToList(parameter); } public void remove(AbstractParameter parameter) { for (int i = 0; i < getItemCount(); i++) { if (parameter.getId().equals(getValue(i))) { //remove it removeItem(i); if (selected==parameter) { selected = null; } break; } } } public void select(AbstractParameter parameter) { } public void update(AbstractParameter parameter) { for (int i = 0; i < getItemCount(); i++) { if (parameter.getId().equals(getValue(i))) { //update id setItemText(i, parameter.getName()); break; } } } public void showInfo(AbstractParameter parameter) { } }