package org.sigmah.client.ui.presenter.orgunit; /* * #%L * Sigmah * %% * Copyright (C) 2010 - 2016 URD * %% * 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 org.sigmah.client.i18n.I18N; import org.sigmah.client.inject.Injector; import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; import org.sigmah.client.page.RequestParameter; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget.LoadingMode; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget.RefreshMode; import org.sigmah.client.ui.view.orgunit.OrgUnitDashboardView; import org.sigmah.client.ui.widget.HasTreeGrid; import org.sigmah.client.ui.widget.HasTreeGrid.TreeGridEventHandler; import org.sigmah.shared.dto.orgunit.OrgUnitDTO; import com.google.inject.ImplementedBy; import com.google.inject.Inject; import com.google.inject.Singleton; /** * OrgUnit Dashboard Presenter. * * @author Mehdi Benabdeslam (mehdi.benabdeslam@netapsys.fr) */ @Singleton public class OrgUnitDashboardPresenter extends AbstractOrgUnitPresenter<OrgUnitDashboardPresenter.View> { /** * Presenter's view interface. */ @ImplementedBy(OrgUnitDashboardView.class) public static interface View extends AbstractOrgUnitPresenter.View { /** * Returns the OrgUnit Tree * * @return the OrgUnit Tree */ HasTreeGrid<OrgUnitDTO> getOrgUnitsTreeGrid(); /** * Sets the org units panel header title. * * @param title * The new title. */ void setOrgUnitsPanelTitle(String title); /** * get Project List Widget * * @return ProjectsListWidget */ ProjectsListWidget getProjectsList(); } @Inject public OrgUnitDashboardPresenter(View view, Injector injector) { super(view, injector); } /** * {@inheritDoc} */ @Override public Page getPage() { return Page.ORGUNIT_DASHBOARD; } /** * {@inheritDoc} */ @Override public void onBind() { // Org units tree grid events handler. view.getOrgUnitsTreeGrid().setTreeGridEventHandler(new TreeGridEventHandler<OrgUnitDTO>() { @Override public void onRowClickEvent(final OrgUnitDTO rowElement) { eventBus.navigateRequest(Page.ORGUNIT_DASHBOARD.requestWith(RequestParameter.ID, rowElement.getId())); } }); // Projects widget initialization. view.getProjectsList().init(RefreshMode.ALWAYS, LoadingMode.ONE_TIME); } /** * {@inheritDoc} */ @Override public void onPageRequest(PageRequest request) { // Loads orgunit. loadOrgUnits(getOrgUnit()); // Reloads projects. view.getProjectsList().refresh(false, true, getOrgUnit().getId()); } /** * Retrieves OrgUnits and populates tree grid store. * * @param orgUnit * The current {@link OrgUnitDTO}. */ private void loadOrgUnits(final OrgUnitDTO orgUnit) { view.setOrgUnitsPanelTitle(I18N.CONSTANTS.orgunitTree() + " - " + orgUnit.getName() + " (" + orgUnit.getFullName() + ")"); if (!orgUnit.getChildrenOrgUnits().isEmpty()) { view.getOrgUnitsTreeGrid().getStore().removeAll(); for (final OrgUnitDTO childOrgUnit : orgUnit.getChildrenOrgUnits()) { view.getOrgUnitsTreeGrid().getStore().add(childOrgUnit, true); } view.getOrgUnitsTreeGrid().getTreeGrid().setExpanded(view.getOrgUnitsTreeGrid().getStore().getRootItems().get(0), true, false); } else { view.setOrgUnitsPanelTitle(I18N.CONSTANTS.orgunitTree() + " - " + orgUnit.getName() + " (" + orgUnit.getFullName() + ")"); view.getOrgUnitsTreeGrid().getStore().removeAll(); } } }