package org.opennms.features.gwt.graph.resource.list.client.presenter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.opennms.features.gwt.graph.resource.list.client.view.DefaultResourceListView; import org.opennms.features.gwt.graph.resource.list.client.view.ResourceListItem; import com.google.gwt.core.client.JsArray; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.dom.client.HasKeyPressHandlers; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.user.client.Window.Location; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; public class DefaultResourceListPresenter implements Presenter, DefaultResourceListView.Presenter<ResourceListItem> { public interface SearchPopupDisplay { HasClickHandlers getSearchConfirmBtn(); HasClickHandlers getCancelBtn(); HasKeyPressHandlers getTextBox(); Widget asWidget(); String getSearchText(); void setHeightOffset(int offset); void showSearchPopup(); void hideSearchPopup(); void setTargetWidget(Widget target); } private DefaultResourceListView<ResourceListItem> m_view; private SearchPopupDisplay m_searchPopup; private List<ResourceListItem> m_dataList; private String m_baseUrl; public DefaultResourceListPresenter(DefaultResourceListView<ResourceListItem> view, SearchPopupDisplay searchPopup, JsArray<ResourceListItem> dataList, String baseUrl) { setView(view); getView().setPresenter(this); initializeSearchPopup(searchPopup); m_dataList = convertJsArrayToList(dataList); getView().setDataList(m_dataList); setBaseUrl(baseUrl); } private List<ResourceListItem> convertJsArrayToList(JsArray<ResourceListItem> resourceList) { List<ResourceListItem> data = new ArrayList<ResourceListItem>(); for(int i = 0; i < resourceList.length(); i++) { data.add(resourceList.get(i)); } Collections.sort(data, new Comparator<ResourceListItem>() { @Override public int compare(ResourceListItem o1, ResourceListItem o2) { return o1.getValue().toLowerCase().compareTo(o2.getValue().toLowerCase()); } }); return data; } private void initializeSearchPopup(SearchPopupDisplay searchPopupView) { m_searchPopup = searchPopupView; m_searchPopup.setTargetWidget(getView().asWidget()); m_searchPopup.getSearchConfirmBtn().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { m_searchPopup.hideSearchPopup(); getView().setDataList(filterList(m_searchPopup.getSearchText())); } }); m_searchPopup.getCancelBtn().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { m_searchPopup.hideSearchPopup(); } }); m_searchPopup.getTextBox().addKeyPressHandler(new KeyPressHandler() { @Override public void onKeyPress(KeyPressEvent event) { if(event.getCharCode() == KeyCodes.KEY_ENTER) { m_searchPopup.hideSearchPopup(); getView().setDataList(filterList(m_searchPopup.getSearchText())); } } }); } private List<ResourceListItem> filterList(String searchText) { List<ResourceListItem> list = new ArrayList<ResourceListItem>(); for(ResourceListItem item : m_dataList) { if(item.getValue().toLowerCase().contains(searchText.toLowerCase())) { list.add(item); } } return list; } @Override public void go(HasWidgets container) { container.clear(); container.add(getView().asWidget()); } @Override public void onResourceItemSelected() { StringBuilder url = new StringBuilder(getBaseUrl()); url.append("graph/chooseresource.htm"); url.append("?reports=all"); url.append("&parentResourceId=" + getView().getSelectedResource().getId()); Location.assign(url.toString()); } @Override public void onSearchButtonClicked() { m_searchPopup.showSearchPopup(); } public void setView(DefaultResourceListView<ResourceListItem> view) { m_view = view; } public DefaultResourceListView<ResourceListItem> getView() { return m_view; } public void setBaseUrl(String baseUrl) { m_baseUrl = baseUrl; } public String getBaseUrl() { return m_baseUrl; } }