/* * Copyright (C) 2016 Arthur Gregorio, AG.Software * * 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/>. */ package br.com.webbudget.application.controller.logbook; import br.com.webbudget.application.component.table.AbstractLazyModel; import br.com.webbudget.application.component.table.Page; import br.com.webbudget.application.component.table.PageRequest; import br.com.webbudget.application.controller.AbstractBean; import br.com.webbudget.domain.misc.ex.InternalServiceError; import br.com.webbudget.domain.model.entity.entries.CostCenter; import br.com.webbudget.domain.model.entity.logbook.Vehicle; import br.com.webbudget.domain.model.entity.logbook.VehicleType; import br.com.webbudget.domain.model.service.LogbookService; import br.com.webbudget.domain.model.service.MovementService; import java.util.List; import java.util.Map; import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; import lombok.Getter; import org.hibernate.exception.ConstraintViolationException; import org.primefaces.model.SortOrder; /** * Controller para a view de manutencao dos veiculos do diario de bordo * * @author Arthur Gregorio * * @version 1.0.0 * @since 2.3.0, 09/05/2016 */ @Named @ViewScoped public class VehicleBean extends AbstractBean { @Getter private Vehicle vehicle; @Getter private List<Vehicle> vehicles; @Getter private List<CostCenter> costCenters; @Inject private LogbookService logbookService; @Inject private MovementService movementService; @Getter private final AbstractLazyModel<Vehicle> vehiclesModel; /** * */ public VehicleBean() { this.vehiclesModel = new AbstractLazyModel<Vehicle>() { @Override public List<Vehicle> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) { final PageRequest pageRequest = new PageRequest(); pageRequest .setFirstResult(first) .withPageSize(pageSize) .sortingBy(sortField, "inclusion") .withDirection(sortOrder.name()); final Page<Vehicle> page = logbookService.listVehiclesLazily(null, pageRequest); this.setRowCount(page.getTotalPagesInt()); return page.getContent(); } }; } /** * */ public void initializeListing() { this.viewState = ViewState.LISTING; } /** * @param vehicleId */ public void initializeForm(long vehicleId) { this.costCenters = this.movementService.listCostCenters(false); if (vehicleId == 0) { this.viewState = ViewState.ADDING; this.vehicle = new Vehicle(); } else { this.viewState = ViewState.EDITING; this.vehicle = this.logbookService.findVehicleById(vehicleId); } } /** * @return */ public String changeToAdd() { return "formVehicle.xhtml?faces-redirect=true"; } /** * @return */ public String changeToListing() { return "listVehicles.xhtml?faces-redirect=true"; } /** * @param vehicleId * @return */ public String changeToEdit(long vehicleId) { return "formVehicle.xhtml?faces-redirect=true&vehicleId=" + vehicleId; } /** * @param vehicleId */ public void changeToDelete(long vehicleId) { this.vehicle = this.logbookService.findVehicleById(vehicleId); this.updateAndOpenDialog("deleteVehicleDialog", "dialogDeleteVehicle"); } /** * @return */ public String doCancel() { return "listVehicles.xhtml?faces-redirect=true"; } /** * */ public void doSave() { try { this.logbookService.saveVehicle(this.vehicle); this.vehicle = new Vehicle(); this.addInfo(true, "vehicle.saved"); } catch (InternalServiceError ex) { this.addError(true, ex.getMessage(), ex.getParameters()); } catch (Exception ex) { this.logger.error(ex.getMessage(), ex); this.addError(true, "error.undefined-error", ex.getMessage()); } } /** * */ public void doUpdate() { try { this.vehicle = this.logbookService.updateVehicle(this.vehicle); this.addInfo(true, "vehicle.updated"); } catch (InternalServiceError ex) { this.addError(true, ex.getMessage(), ex.getParameters()); } catch (Exception ex) { this.logger.error(ex.getMessage(), ex); this.addError(true, "error.undefined-error", ex.getMessage()); } } /** * */ public void doDelete() { try { this.logbookService.deleteVehicle(this.vehicle); this.addInfo(true, "vehicle.deleted"); } catch (InternalServiceError ex) { this.addError(true, ex.getMessage(), true, ex.getParameters()); } catch (Exception ex) { if (this.containsException(ConstraintViolationException.class, ex)) { this.addError(true, "error.vehicle.integrity-violation", this.vehicle.getIdentification()); } else { this.logger.error(ex.getMessage(), ex); this.addError(true, "error.undefined-error", ex.getMessage()); } } finally { this.closeDialog("dialogDeleteVehicle"); this.updateComponent("vehiclesList"); } } /** * @return os tipos de veiculo para selecao */ public VehicleType[] getVehicleTypes() { return VehicleType.values(); } }