eu.ggnet.dwoss.receipt.shipment.ShipmentUpdateStage.java Source code

Java tutorial

Introduction

Here is the source code for eu.ggnet.dwoss.receipt.shipment.ShipmentUpdateStage.java

Source

/* 
 * Copyright (C) 2014 GG-Net GmbH - Oliver Gnther
 *
 * 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 eu.ggnet.dwoss.receipt.shipment;

import java.util.*;

import org.apache.commons.lang3.StringUtils;

import eu.ggnet.saft.core.Client;

import eu.ggnet.dwoss.mandator.MandatorSupporter;
import eu.ggnet.dwoss.rules.TradeName;

import eu.ggnet.dwoss.stock.entity.Shipment;

import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.geometry.HPos;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;

import lombok.Getter;

import static eu.ggnet.dwoss.stock.entity.Shipment.Status.OPENED;
import static java.lang.Double.MAX_VALUE;

/**
 * Stage for creating/eediting Shipments.
 * <p>
 * @author pascal.perau
 */
public class ShipmentUpdateStage extends Stage {

    private Shipment shipment;

    @Getter
    private boolean isOk = false;

    private ComboBox<TradeName> ownerBox;

    private ComboBox<TradeName> manufacturerBox;

    private ComboBox<Shipment.Status> statusBox;

    private TextField idField;

    private TextField shipIdField;

    private Label errorLabel = new Label("ShipmentID, Besitzer, Hersteller und Status setzen.");

    private Button okButton = new Button("OK");

    private Button cancelButton = new Button("Abbrechen");

    public ShipmentUpdateStage() {
        this.shipment = new Shipment();
        init(shipment);
    }

    public ShipmentUpdateStage(Shipment shipment) {
        this.shipment = shipment;
        init(shipment);
    }

    private boolean isValid() {
        isOk = (shipment.getContractor() != null && !StringUtils.isBlank(shipment.getShipmentId())
                && shipment.getStatus() != null && shipment.getDefaultManufacturer() != null);
        if (!isOk) {
            errorLabel.setTextFill(Color.web("#600000"));
        }
        return isOk;
    }

    private void init(Shipment s) {

        okButton.setOnAction((ActionEvent event) -> {
            shipment = getShipment();
            if (isValid())
                close();
        });

        cancelButton.setOnAction((ActionEvent event) -> {
            close();
        });

        idField = new TextField(Long.toString(s.getId()));
        idField.setDisable(true);
        shipIdField = new TextField(s.getShipmentId());

        Callback<ListView<TradeName>, ListCell<TradeName>> cb = new Callback<ListView<TradeName>, ListCell<TradeName>>() {
            @Override
            public ListCell<TradeName> call(ListView<TradeName> param) {
                return new ListCell<TradeName>() {
                    @Override
                    protected void updateItem(TradeName item, boolean empty) {
                        super.updateItem(item, empty);
                        if (item == null || empty)
                            setText("Hersteller whlen...");
                        else
                            setText(item.getName());
                    }
                };
            }
        };

        Set<TradeName> contractors = Client.lookup(MandatorSupporter.class).loadContractors().all();
        ownerBox = new ComboBox<>(FXCollections.observableArrayList(contractors));
        ownerBox.setMaxWidth(MAX_VALUE);
        ownerBox.setCellFactory(cb);
        ownerBox.getSelectionModel().selectedItemProperty().addListener(
                (ObservableValue<? extends TradeName> observable, TradeName oldValue, TradeName newValue) -> {
                    if (newValue == null)
                        return;
                    shipment.setContractor(newValue);
                    manufacturerBox.getSelectionModel().select(newValue.getManufacturer());
                });

        ObservableList<TradeName> manufacturers = FXCollections.observableArrayList(TradeName.getManufacturers());
        manufacturerBox = new ComboBox<>(manufacturers);
        manufacturerBox.setMaxWidth(MAX_VALUE);
        manufacturerBox.setCellFactory(cb);
        SingleSelectionModel<TradeName> sm = ownerBox.getSelectionModel();
        if (s.getContractor() == null)
            sm.selectFirst();
        else
            sm.select(s.getContractor());
        if (shipment.getDefaultManufacturer() != null)
            manufacturerBox.getSelectionModel().select(shipment.getDefaultManufacturer());

        statusBox = new ComboBox<>(FXCollections.observableArrayList(Shipment.Status.values()));
        statusBox.setMaxWidth(MAX_VALUE);
        statusBox.getSelectionModel().select(s.getStatus() == null ? OPENED : s.getStatus());

        GridPane grid = new GridPane();
        grid.addRow(1, new Label("ID:"), idField);
        grid.addRow(2, new Label("Shipment ID:"), shipIdField);
        grid.addRow(3, new Label("Besitzer:"), ownerBox);
        grid.addRow(4, new Label("Hersteller:"), manufacturerBox);
        grid.addRow(5, new Label("Status"), statusBox);
        grid.setMaxWidth(MAX_VALUE);
        grid.vgapProperty().set(2.);
        grid.getColumnConstraints().add(0,
                new ColumnConstraints(100, 100, Double.MAX_VALUE, Priority.SOMETIMES, HPos.LEFT, false));
        grid.getColumnConstraints().add(1,
                new ColumnConstraints(100, 150, Double.MAX_VALUE, Priority.ALWAYS, HPos.LEFT, true));

        HBox hButtonBox = new HBox(okButton, cancelButton);
        hButtonBox.alignmentProperty().set(Pos.TOP_RIGHT);

        errorLabel.setWrapText(true);
        BorderPane rootPane = new BorderPane(grid, errorLabel, null, hButtonBox, null);

        this.setTitle(s.getId() > 0 ? "Shipment bearbeiten" : "Shipment anlegen");
        this.setScene(new Scene(rootPane));
        this.setResizable(false);
    }

    public Shipment getShipment() {
        shipment.setDate(new Date());
        shipment.setContractor(ownerBox.getValue());
        shipment.setDefaultManufacturer(manufacturerBox.getValue());
        shipment.setShipmentId(shipIdField.getText());
        shipment.setStatus(statusBox.getValue());
        return shipment;
    }
}