Package no.ugland.utransprod.gui

Source Code of no.ugland.utransprod.gui.UpdateOrderLineView

package no.ugland.utransprod.gui;

import java.awt.Font;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeMap;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import no.ugland.utransprod.gui.handlers.ConstructionArticleAttributeViewHandler;
import no.ugland.utransprod.gui.model.IArticleAttributeModel;
import no.ugland.utransprod.gui.model.OrderModel;
import no.ugland.utransprod.model.IArticleAttribute;
import no.ugland.utransprod.model.OrderLine;
import no.ugland.utransprod.model.OrderLineAttribute;
import no.ugland.utransprod.model.validators.OrderLineAttributesValidator;
import no.ugland.utransprod.util.IconFeedbackPanel;
import no.ugland.utransprod.util.Util;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import com.jgoodies.binding.adapter.BasicComponentFactory;
import com.jgoodies.binding.adapter.ComboBoxAdapter;
import com.jgoodies.binding.beans.BeanAdapter;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
import com.jgoodies.validation.ValidationResult;
import com.jgoodies.validation.ValidationResultModel;
import com.jgoodies.validation.Validator;
import com.jgoodies.validation.util.DefaultValidationResultModel;
import com.jgoodies.validation.view.ValidationComponentUtils;

/**
* Klasse som h�ndterer oppdatering av ordrelinje
* @author atle.brekka
*/
public class UpdateOrderLineView {
    private Map<Head, Set<OrderLineAttribute>> orderLineAttributes;
    private List<OrderLineAttribute> allAttributes=new ArrayList<OrderLineAttribute>();
    private JButton buttonOk;

    private JLabel labelHeading;

    private ConstructionArticleAttributeViewHandler viewHandler;

    private Collection<OrderLine> orderLines;

    Map<Head, Map<String, JComponent>> components;
    final ValidationResultModel validationResultModel = new DefaultValidationResultModel();

    /**
     * @param someOrderLines
     * @param handler
     * @param heading
     */
    public UpdateOrderLineView(final Collection<OrderLine> someOrderLines,
            final ConstructionArticleAttributeViewHandler handler, final String heading) {
        this.orderLines = someOrderLines;
        viewHandler = handler;
        labelHeading = new JLabel(heading);
    }

    /**
     * Henter ut alle attributte
     * @param orderLines1
     * @param aParentName
     * @return sortert Map med attributte
     */
    private SortedMap<Head, Set<OrderLineAttribute>> getAttributes(
            final Collection<OrderLine> orderLines1, final String aParentName) {
        String parentName = aParentName;
        TreeMap<Head, Set<OrderLineAttribute>> map = new TreeMap<Head, Set<OrderLineAttribute>>();
        if (parentName != null && parentName.length() != 0) {
            parentName = parentName + " - ";
        }
        if (orderLines1 != null && orderLines1.size() != 0) {
            for (OrderLine line : orderLines1) {

                addOrderLineAttributesToMap(parentName, map, line);
            }
        }
        return map;
    }

    private void addOrderLineAttributesToMap(
            final String parentName, final TreeMap<Head, Set<OrderLineAttribute>> map, final OrderLine line) {
        SortedSet<OrderLineAttribute> orderedAttributes;
        map.putAll(getAttributes(line.getOrderLines(), parentName + line.toString()));
        if (line.getOrderLineAttributes() != null) {
            orderedAttributes = OrderModel.getOrderedOrderLineAttributes(line.getOrderLineAttributes());
            Head head = new Head(parentName + line.toString(), line);
            map.put(head, orderedAttributes);
        }
    }

    /**
     * Initierer vinduskomponenter
     * @param window
     */
    private void initComponents(final WindowInterface window) {
        buttonOk = viewHandler.getButtonOk(window,validationResultModel);

        DecimalFormat decimalFormat = new DecimalFormat();
        decimalFormat.setDecimalSeparatorAlwaysShown(false);
        decimalFormat.setParseIntegerOnly(true);
        if (orderLines != null && orderLines.size() != 0) {
            Font font = labelHeading.getFont();
            font = font.deriveFont(Font.BOLD);
            labelHeading.setFont(font);
            orderLineAttributes = getAttributes(orderLines, "");
           
           

            Set<Head> headings = orderLineAttributes.keySet();
            Set<OrderLineAttribute> attributes;
            components = new LinkedHashMap<Head, Map<String, JComponent>>();
            Map<String, JComponent> comps;

            BeanAdapter beanAdapterAtt;
            for (Head head : headings) {
                attributes = orderLineAttributes.get(head);
                allAttributes.addAll(attributes);
                JComponent component;
                if (attributes != null && attributes.size() != 0) {
                    comps = new LinkedHashMap<String, JComponent>();

                    if (!head.getNameString().equalsIgnoreCase("Garasjetype")) {
                        beanAdapterAtt = new BeanAdapter(new IArticleAttributeModel(attributes.iterator()
                                .next()));

                        component = BasicComponentFactory.createFormattedTextField(beanAdapterAtt
                                .getValueModel(IArticleAttributeModel.PROPERTY_NUMBER_OF_ITEMS_LONG),
                                decimalFormat);
                        component.setName("TextFieldAntall");
                        comps.put("Antall", component);
                    }

                    AttributeChangeListener attributeChangeListener = new AttributeChangeListener();
                    for (IArticleAttribute att : attributes) {
                        beanAdapterAtt = new BeanAdapter(new IArticleAttributeModel(att));
                        beanAdapterAtt.addBeanPropertyChangeListener(attributeChangeListener);

                        if (att.isYesNo()) {
                            component = BasicComponentFactory.createCheckBox(beanAdapterAtt
                                    .getValueModel(IArticleAttributeModel.PROPERTY_ATTRIBUTE_VALUE_BOOL), "");
                            component.setName("CheckBox" + att.getAttributeName());
                            comps.put(att.getAttributeName(), component);
                        } else if (att.getChoices() != null && att.getChoices().size() != 0) {
                            component = new JComboBox(new ComboBoxAdapter(att.getChoices(), beanAdapterAtt
                                    .getValueModel(IArticleAttributeModel.PROPERTY_ATTRIBUTE_VALUE)));
                            component.setName("ComboBox" + att.getAttributeName());
                            comps.put(att.getAttributeName(), component);
                        } else {
                            component = createTextField(att, beanAdapterAtt);
                            component.setName("TextField" + att.getAttributeName());
                            comps.put(att.getAttributeName(), component);
                        }
                        ValidationComponentUtils.setMandatory(component, true);
                        ValidationComponentUtils.setMessageKey(component,
                                "Attributt."+att.getAttributeName());
                    }
                    String nameString = head.getNameString();
                    Object object =components.get(nameString);;
                    if(object!=null){
                      nameString+=1;
                    }
                    components.put(head, comps);
                }
            }

        }
    }

    private JComponent createTextField(IArticleAttribute att, BeanAdapter beanAdapterAtt) {
        AttributeDataType dataType = att.getAttributeDataType() != null ? AttributeDataType
                .valueOf(StringUtils.upperCase(att.getAttributeDataType())) : AttributeDataType.TEKST;
        return dataType.createTexField(beanAdapterAtt
                .getValueModel(IArticleAttributeModel.PROPERTY_ATTRIBUTE_VALUE));
        /*
         * return BasicComponentFactory .createTextField(beanAdapterAtt
         * .getValueModel(IArticleAttributeModel. PROPERTY_ATTRIBUTE_VALUE));
         */
    }

    /**
     * Bygger panel
     * @param window
     * @return panel
     */
    public final JComponent buildPanel(final WindowInterface window) {
        window.setName("UpdateOrderLineView");
        initComponents(window);
        FormLayout layout = new FormLayout("10dlu,310dlu:grow,10dlu",
                "10dlu,p,3dlu,min(400dlu;p),3dlu,p,3dlu");
        PanelBuilder builder = new PanelBuilder(layout);
        CellConstraints cc = new CellConstraints();
        builder.add(labelHeading, cc.xy(2, 2));
        builder.add(new JScrollPane(buildAttributePanel(window)), cc.xy(2, 4));
        builder.add(ButtonBarFactory.buildCenteredBar(buttonOk), cc.xyw(2, 6, 2));
        //return builder.getPanel();
        return new IconFeedbackPanel(validationResultModel, builder.getPanel());
    }

    /**
     * Bygger panel for visning av attributter
     * @param window
     * @return panel
     */
    private JComponent buildAttributePanel(final WindowInterface window) {
        FormLayout layout = new FormLayout("10dlu,p:grow,10dlu", "");
        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
        builder.setLeadingColumnOffset(1);
        builder.appendRow(new RowSpec("top:10dlu"));
        builder.nextLine();

        if (components != null) {
            Set<Head> heads = components.keySet();

            for (Head head : heads) {
                builder.append(buildComponentPanel(head));
                builder.nextLine();
            }
        }

        builder.appendRow(new RowSpec("top:5dlu"));
        return builder.getPanel();
    }

    /**
     * Bygger koponentpanel
     * @param label
     * @return panel
     */
    private JPanel buildComponentPanel(final Head head) {
        FormLayout layout = new FormLayout("10dlu,p,3dlu,max(90;p),5dlu,p,3dlu,p,10dlu", "");
        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
        // DefaultFormBuilder builder = new DefaultFormBuilder(layout,new
        // FormDebugPanel());
        builder.setBorder(BorderFactory.createBevelBorder(1));

        Map<String, JComponent> comps;
        Set<String> attLabels;
        builder.setLeadingColumnOffset(1);
        builder.appendRow(new RowSpec("top:5dlu"));
        builder.nextLine();
        JLabel aLabel = new JLabel(head.getNameString());
        builder.append(aLabel, 8);
        builder.nextLine();
        comps = components.get(head);
        if (comps != null) {
            attLabels = comps.keySet();

            for (String attLabel : attLabels) {
                builder.append(attLabel, comps.get(attLabel));
                if (attLabel.equalsIgnoreCase("Antall")) {
                    builder.nextLine();
                }
            }
        }
        builder.appendRow(new RowSpec("top:5dlu"));
        builder.nextLine();

        return builder.getPanel();
    }

    /**
     * Oppdaterer feilrapporttering
     */
    @SuppressWarnings("cast")
    void updateValidationResult() {
        Validator validator = new OrderLineAttributesValidator(allAttributes);
        if (validator != null) {
            ValidationResult result = validator.validate();
            validationResultModel.setResult(result);
        }
    }

    /**
     * Klasse som h�ndterer feilrapportering
     * @author atle.brekka
     */
    final class ValidationUpdateHandler implements PropertyChangeListener {

        /**
         * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
         */
        public void propertyChange(final PropertyChangeEvent evt) {
            updateValidationResult();
        }

    }

    /**
     * Klasse som holder navn og ordrelinje for visning
     * @author atle.brekka
     */
    private class Head implements Comparable<Head> {
        private String nameString;

        private OrderLine orderLine;

        /**
         * @param name
         * @param line
         */
        public Head(final String name, final OrderLine line) {
            nameString = name;
            orderLine = line;

        }
        public void setNameString(String aNameString){
          nameString=aNameString;
        }

        /**
         * @return navn
         */
        public String getNameString() {
            return nameString;
        }

        /**
         * @return ordrelinje
         */
        public OrderLine getOrderLine() {
            return orderLine;
        }

        /**
         * @see java.lang.Object#equals(java.lang.Object)
         */
        @Override
        public boolean equals(final Object other) {
            if (!(other instanceof Head)) {
                return false;
            }
            Head castOther = (Head) other;
            return new EqualsBuilder().append(nameString, castOther.nameString).append(orderLine,
                    castOther.orderLine).append(orderLine.getDialogOrder(),
                    castOther.orderLine.getDialogOrder()).isEquals();
        }

        /**
         * @see java.lang.Object#hashCode()
         */
        @Override
        public int hashCode() {
            return new HashCodeBuilder().append(nameString).append(orderLine).append(
                    orderLine.getDialogOrder()).toHashCode();
        }

        /**
         * @param other
         * @return -1,0 eller 1
         * @see java.lang.Comparable#compareTo(java.lang.Object)
         */
        public int compareTo(final Head other) {
            Integer order1 = Util.nullToInteger1000(orderLine.getDialogOrder());
            Integer order2 = Util.nullToInteger1000(other.orderLine.getDialogOrder());
            int returnValue;

            if (orderLine.getDialogOrder() == null && other.orderLine.getDialogOrder() == null) {
                returnValue = new CompareToBuilder().append(nameString, other.nameString).toComparison();
            } else {
                returnValue = new CompareToBuilder().append(order1, order2).toComparison();
            }

            if (returnValue == 0 && !equals(other)) {
                returnValue = new CompareToBuilder().append(nameString, other.nameString).toComparison();
            }

            return returnValue;
        }

    }

    /**
     * H�ndterer endringer av attributter
     * @author atle.brekka
     */
    class AttributeChangeListener implements PropertyChangeListener {

        /**
         * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
         */
        public void propertyChange(final PropertyChangeEvent event) {
            IArticleAttribute attribute = ((IArticleAttributeModel) event.getSource()).getObject();
            OrderLine orderLine = attribute.getOrderLine();
            if (orderLine != null) {
                orderLine.setHasArticle(null);
                orderLine.setAttributeInfo(null);
                orderLine.removeAllOrderLineAttributeInfo();
                orderLine.setIsDefault(null);

                updateIfTakstein(attribute);
            }
            updateValidationResult();
        }

        private void updateIfTakstein(final IArticleAttribute attribute) {
            if (attribute.getAttributeName().equalsIgnoreCase("Taksteintype")) {
                Map<String, JComponent> comps = components.get("Takstein");
                JCheckBox checkBox = null;
                if (comps != null) {
                    checkBox = (JCheckBox) comps.get("Sendes fra GG");
                }
                if (attribute.getAttributeValue().toLowerCase().indexOf("skarpnes") >= 0
                        || attribute.getAttributeValue().toLowerCase().indexOf("shingel") >= 0) {
                    if (checkBox != null) {
                        checkBox.setSelected(true);
                    }
                } else {
                    if (checkBox != null) {
                        checkBox.setSelected(false);
                    }
                }
            }
        }

    }
   
}
TOP

Related Classes of no.ugland.utransprod.gui.UpdateOrderLineView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.