eu.ggnet.dwoss.receipt.unit.UnitModel.java Source code

Java tutorial

Introduction

Here is the source code for eu.ggnet.dwoss.receipt.unit.UnitModel.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.unit;

import eu.ggnet.dwoss.rules.ReceiptOperation;
import eu.ggnet.dwoss.rules.TradeName;
import eu.ggnet.dwoss.rules.Warranty;

import java.util.*;

import javax.swing.Action;
import javax.validation.constraints.NotNull;

import org.apache.commons.lang3.StringUtils;

import eu.ggnet.dwoss.receipt.unit.chain.ChainLink;
import eu.ggnet.dwoss.uniqueunit.entity.Product;
import eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit;

import lombok.*;

/**
 * The Unit Model.
 * Warning: This is not the complete model, because it was design afterwards.
 * Most of the Model Information is in the view.
 * <p/>
 * @author oliver.guenther
 */
public class UnitModel {

    /**
     * A survey merging a message with a status.
     */
    public static class Survey {

        @Getter
        private String message = "";

        @Getter
        private ValidationStatus status = ValidationStatus.OK;

        public void setStatus(ValidationStatus status, String message) {
            this.status = status;
            this.message = message;
        }

        public void validating(String msg) {
            setStatus(ValidationStatus.VALIDATING, msg);
        }

        void ok(String msg) {
            setStatus(ValidationStatus.OK, msg);
        }

        void warn(String msg) {
            setStatus(ValidationStatus.WARNING, msg);
        }

        void error(String msg) {
            setStatus(ValidationStatus.ERROR, msg);
        }

        public boolean isOk() {
            return status == ValidationStatus.OK;
        }

        public boolean isOkOrWarn() {
            return status == ValidationStatus.OK || status == ValidationStatus.WARNING;
        }

        public boolean isValidating() {
            return status == ValidationStatus.VALIDATING;
        }

        public boolean isError() {
            return status == ValidationStatus.ERROR;
        }

        public boolean isWarning() {
            return status == ValidationStatus.WARNING;
        }
    }

    @Data
    public static class MetaUnit {

        private final MetaValue<String> refurbishId = new MetaValue<>();

        private final MetaValue<String> serial = new MetaValue<>();

        private final MetaValue<String> partNo = new MetaValue<>();

        private final MetaValue<Date> mfgDate = new MetaValue<>();

        private Date warrentyTill;

        private boolean warrentyTillSetted = false;

        /**
         * Load Values refurbishId, serial, partNo and mfgDate from a UniqueUnit.
         * <p/>
         * @param uu the uniqueUnit as source.
         */
        public void loadFrom(UniqueUnit uu) {
            if (uu == null)
                return;
            refurbishId.setValue(uu.getRefurbishId());
            refurbishId.getSurvey().setStatus(ValidationStatus.OK, "");
            serial.setValue(uu.getSerial());
            serial.getSurvey().setStatus(ValidationStatus.OK, "");
            if (uu.getProduct() != null) {
                partNo.setValue(uu.getProduct().getPartNo());
            }
            mfgDate.setValue(uu.getMfgDate());
            if (uu.getWarranty() == Warranty.WARRANTY_TILL_DATE)
                warrentyTillSetted = true;
            warrentyTill = uu.getWarrentyValid();
        }

        /**
         * Updating the values refurbishId, serial and mfgDate of the supplied UniqueUnit.
         * <p/>
         * @param uu the uniqueUnit as target.
         */
        public void loadTo(UniqueUnit uu) {
            if (uu == null)
                return;
            uu.setIdentifier(UniqueUnit.Identifier.REFURBISHED_ID, refurbishId.getValue());
            uu.setIdentifier(UniqueUnit.Identifier.SERIAL, serial.getValue());
            uu.setMfgDate(mfgDate.getValue());
            uu.setWarrentyValid(warrentyTill);
        }

        /**
         * Returns true if all of the meta values of the meta unit are ok or warn, else false.
         * <p/>
         * @return true if all of the meta values of the meta unit are ok or warn, else false.
         */
        public boolean isOkOrWarn() {
            return ((warrentyTillSetted) ? warrentyTill != null : true) && refurbishId.getSurvey().isOkOrWarn()
                    && serial.getSurvey().isOkOrWarn() && partNo.getSurvey().isOkOrWarn()
                    && mfgDate.getSurvey().isOkOrWarn();
        }
    }

    @Data
    public static class MetaValue<T> {

        private T value;

        private List<ChainLink<T>> chain;

        private final Survey survey = new Survey();

        public boolean isSet() {
            if (value == null)
                return false;
            if (value instanceof String)
                return !StringUtils.isBlank(((String) value));
            return true;
        }
    }

    private Set<Action> actions = new HashSet<>();

    @NotNull(message = "contractor not set")
    @Getter
    @Setter
    private TradeName contractor;

    //@Getter
    @Setter
    private ReceiptOperation operation;

    public ReceiptOperation getOperation() {
        return operation;
    }

    @Getter
    @Setter
    private String operationComment;

    @Setter
    @Getter
    private Product product;

    @Getter
    @Setter
    private String productSpecDescription;

    @Getter
    private final MetaUnit metaUnit = new MetaUnit();

    /**
     * Represents the mode of support (validation, auto update of values) in the ui.
     * <p/>
     */
    @Getter
    @Setter
    private TradeName mode;

    @Getter
    @Setter
    private boolean editMode;

    public Set<Action> getActions() {
        return Collections.unmodifiableSet(actions);
    }

    public void addAction(Action action) {
        actions.add(action);
    }

}