/*
* This file is part of LibrePlan
*
* Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
* Desenvolvemento Tecnolóxico de Galicia
* Copyright (C) 2010-2011 Igalia, S.L.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.libreplan.web.reports;
import com.libreplan.java.zk.components.JasperreportComponent;
import net.sf.jasperreports.engine.JRDataSource;
import org.libreplan.business.labels.entities.Label;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.planner.entities.TaskStatusEnum;
import org.libreplan.business.resources.entities.Criterion;
import org.libreplan.web.common.Util;
import org.libreplan.web.common.components.bandboxsearch.BandboxSearch;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zkplus.spring.SpringUtil;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import static org.libreplan.web.I18nHelper._;
/**
* @author Diego Pino Garcia <dpino@igalia.com>
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public class WorkingArrangementsPerOrderController extends LibrePlanReportController {
private static final String REPORT_NAME = "workingArrangementsPerOrderReport";
private IWorkingArrangementsPerOrderModel workingArrangementsPerOrderModel;
private Listbox lbTaskStatus;
private Checkbox cbShowDependencies;
private BandboxSearch bdOrder;
private BandboxSearch bdLabels;
private Listbox lbLabels;
private BandboxSearch bdCriterions;
private Listbox lbCriterions;
public WorkingArrangementsPerOrderController(){
workingArrangementsPerOrderModel =
(IWorkingArrangementsPerOrderModel) SpringUtil.getBean("workingArrangementsPerOrderModel");
}
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
comp.setAttribute("controller", this, true);
setupTaskStatusListbox();
workingArrangementsPerOrderModel.init();
}
private void setupTaskStatusListbox() {
for (TaskStatusEnum status : getTasksStatus()) {
Listitem item = new Listitem();
item.setParent(lbTaskStatus);
item.setValue(status);
item.appendChild(new Listcell(_(status.toString())));
lbTaskStatus.appendChild(item);
if (status.equals(TaskStatusEnum.ALL)) {
item.setSelected(true);
}
}
}
public List<Order> getAllOrders() {
return workingArrangementsPerOrderModel.getOrders();
}
protected String getReportName() {
return REPORT_NAME;
}
protected JRDataSource getDataSource() {
return workingArrangementsPerOrderModel.getWorkingArrangementsPerOrderReportReport(
getSelectedOrder(),
getSelectedTaskStatus(),
showDependencies(),
getSelectedLabels(),
getSelectedCriterions());
}
private boolean showDependencies() {
return cbShowDependencies.isChecked();
}
private TaskStatusEnum getSelectedTaskStatus() {
final Listitem item = lbTaskStatus.getSelectedItem();
return (item != null) ? (TaskStatusEnum) item.getValue() : TaskStatusEnum.ALL;
}
private Order getSelectedOrder() {
return (Order) bdOrder.getSelectedElement();
}
protected Map<String, Object> getParameters() {
Map<String, Object> result = super.getParameters();
result.put("orderName", getSelectedOrder().getName());
result.put("criteria", getParameterCriterions());
result.put("labels", getParameterLabels());
// Task status
final TaskStatusEnum taskStatus = getSelectedTaskStatus();
result.put("taskStatus", _(taskStatus.toString()));
return result;
}
public void showReport(JasperreportComponent jasperreport){
if (getSelectedOrder() == null) {
throw new WrongValueException(bdOrder, _("Please, select a project"));
}
super.showReport(jasperreport);
}
private List<TaskStatusEnum> getTasksStatus() {
List<TaskStatusEnum> result = new ArrayList<>();
result.addAll(Arrays.asList(TaskStatusEnum.values()));
Collections.sort(result, new TaskStatusEnumComparator());
return result;
}
private static class TaskStatusEnumComparator implements Comparator<TaskStatusEnum> {
@Override
public int compare(TaskStatusEnum arg0, TaskStatusEnum arg1) {
return arg0.toString().compareTo(arg1.toString());
}
}
public List<Label> getAllLabels() {
return workingArrangementsPerOrderModel.getAllLabels();
}
public void onSelectLabel() {
Label label = (Label) bdLabels.getSelectedElement();
if (label == null) {
throw new WrongValueException(bdLabels, _("please, select a label"));
}
boolean result = workingArrangementsPerOrderModel.addSelectedLabel(label);
if (!result) {
throw new WrongValueException(bdLabels, _("Label has already been added."));
} else {
Util.reloadBindings(lbLabels);
}
bdLabels.clear();
}
public void onRemoveLabel(Label label) {
workingArrangementsPerOrderModel.removeSelectedLabel(label);
Util.reloadBindings(lbLabels);
}
public List<Label> getSelectedLabels() {
return workingArrangementsPerOrderModel.getSelectedLabels();
}
public List<Criterion> getSelectedCriterions() {
return workingArrangementsPerOrderModel.getSelectedCriterions();
}
public List<Criterion> getAllCriterions() {
return workingArrangementsPerOrderModel.getCriterions();
}
public void onSelectCriterion() {
Criterion criterion = (Criterion) bdCriterions.getSelectedElement();
if (criterion == null) {
throw new WrongValueException(bdCriterions, _("please, select a Criterion"));
}
boolean result = workingArrangementsPerOrderModel.addSelectedCriterion(criterion);
if (!result) {
throw new WrongValueException(bdCriterions, _("This Criterion has already been added."));
} else {
Util.reloadBindings(lbCriterions);
}
}
public void onRemoveCriterion(Criterion criterion) {
workingArrangementsPerOrderModel.removeSelectedCriterion(criterion);
Util.reloadBindings(lbCriterions);
}
private String getParameterCriterions() {
return workingArrangementsPerOrderModel.getSelectedCriteria();
}
private String getParameterLabels() {
return workingArrangementsPerOrderModel.getSelectedLabel();
}
}