package org.activityinfo.ui.client.component.filter; /* * #%L * ActivityInfo Server * %% * Copyright (C) 2009 - 2013 UNICEF * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import com.extjs.gxt.ui.client.Style; import com.extjs.gxt.ui.client.data.*; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.CheckBoxListView; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.rpc.AsyncCallback; import org.activityinfo.i18n.shared.I18N; import org.activityinfo.legacy.client.Dispatcher; import org.activityinfo.legacy.shared.command.Filter; import org.activityinfo.legacy.shared.command.GetSchema; import org.activityinfo.legacy.shared.model.PartnerDTO; import org.activityinfo.legacy.shared.model.ProjectDTO; import org.activityinfo.legacy.shared.model.SchemaDTO; import org.activityinfo.legacy.shared.model.UserDatabaseDTO; import org.activityinfo.ui.client.style.legacy.icon.IconImageBundle; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class ProjectFilterPanel extends ContentPanel implements FilterPanel { private ListLoader<ModelData> loader; private ListStore<ModelData> store; private CheckBoxListView<ModelData> tree; private final Dispatcher service; public ProjectFilterPanel(Dispatcher service) { this.service = service; setHeadingText(I18N.CONSTANTS.filterByProject()); setIcon(IconImageBundle.ICONS.filter()); this.setLayout(new FitLayout()); this.setScrollMode(Style.Scroll.NONE); this.setHeadingText(I18N.CONSTANTS.filterByProject()); this.setIcon(IconImageBundle.ICONS.filter()); loader = new BaseListLoader(new ProjectDataProxy()); store = new ListStore<ModelData>(loader); store.setKeyProvider(new ModelKeyProvider<ModelData>() { @Override public String getKey(ModelData model) { if (model instanceof ProjectDTO) { return "" + ((ProjectDTO) model).getId(); } else { return ""; } } }); tree = new CheckBoxListView<ModelData>(); tree.setStore(store); add(tree); } private class ProjectDataProxy implements DataProxy<List<ModelData>> { private List<ProjectDTO> allPartners = null; @Override public void load(DataReader<List<ModelData>> listDataReader, Object o, final AsyncCallback<List<ModelData>> callback) { if (allPartners == null) { service.execute(new GetSchema(), new AsyncCallback<SchemaDTO>() { @Override public void onFailure(Throwable caught) { callback.onFailure(caught); } @Override public void onSuccess(SchemaDTO result) { List<UserDatabaseDTO> databases = result.getDatabases(); ArrayList<ProjectDTO> allProjects = new ArrayList<ProjectDTO>(); for (UserDatabaseDTO db : databases) { for (ProjectDTO p : db.getProjects()) { if (!allProjects.contains(p)) { allProjects.add(p); } } } Collections.sort(allProjects, new ProjectDTOComparator()); callback.onSuccess(new ArrayList<ModelData>(allProjects)); } }); } else { callback.onSuccess(new ArrayList<ModelData>(allPartners)); } } } private class ProjectDTOComparator implements Comparator { @Override public int compare(Object project1, Object project2) { String name1 = null, name2 = null; if (project1 instanceof PartnerDTO) { name1 = ((ProjectDTO) project1).getName(); } if (project2 instanceof PartnerDTO) { name2 = ((ProjectDTO) project2).getName(); } if (name1 == null) { name1 = ""; } if (name2 == null) { name2 = ""; } return name1.compareTo(name2); } } public List<ProjectDTO> getSelection() { List<ProjectDTO> list = new ArrayList<ProjectDTO>(); for (ModelData model : tree.getChecked()) { if (model instanceof ProjectDTO) { list.add((ProjectDTO) model); } } return list; } public List<Integer> getSelectedIds() { List<Integer> list = new ArrayList<Integer>(); for (ModelData model : tree.getChecked()) { if (model instanceof ProjectDTO) { list.add(((ProjectDTO) model).getId()); } } return list; } @Override public Filter getValue() { return null; } @Override public void setValue(Filter value) { // TODO Auto-generated method stub } @Override public void setValue(Filter value, boolean fireEvents) { // TODO Auto-generated method stub } @Override public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Filter> handler) { // TODO Auto-generated method stub return null; } @Override public void applyBaseFilter(Filter filter) { } }