Package no.ugland.utransprod.gui.handlers

Source Code of no.ugland.utransprod.gui.handlers.ColliViewHandler$MenuItemListenerRemoveOrderLine

package no.ugland.utransprod.gui.handlers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.ListModel;
import javax.swing.SwingUtilities;

import no.ugland.utransprod.ProTransException;
import no.ugland.utransprod.gui.Login;
import no.ugland.utransprod.gui.WindowInterface;
import no.ugland.utransprod.gui.edit.AbstractEditView;
import no.ugland.utransprod.gui.edit.EditColliView;
import no.ugland.utransprod.gui.model.ColliListener;
import no.ugland.utransprod.gui.model.ColliModel;
import no.ugland.utransprod.gui.model.Packable;
import no.ugland.utransprod.model.Colli;
import no.ugland.utransprod.model.Order;
import no.ugland.utransprod.model.OrderLine;
import no.ugland.utransprod.model.PostShipment;
import no.ugland.utransprod.service.ColliManager;
import no.ugland.utransprod.service.ManagerRepository;
import no.ugland.utransprod.service.PostShipmentManager;
import no.ugland.utransprod.service.enums.LazyLoadEnum;
import no.ugland.utransprod.service.enums.LazyLoadOrderEnum;
import no.ugland.utransprod.service.enums.LazyLoadPostShipmentEnum;
import no.ugland.utransprod.util.ApplicationParamUtil;
import no.ugland.utransprod.util.ModelUtil;
import no.ugland.utransprod.util.UserUtil;
import no.ugland.utransprod.util.Util;

import org.jdesktop.swingx.JXTable;

import com.jgoodies.binding.PresentationModel;
import com.jgoodies.binding.adapter.AbstractTableAdapter;
import com.jgoodies.binding.adapter.BasicComponentFactory;
import com.jgoodies.binding.adapter.SingleListSelectionAdapter;
import com.jgoodies.binding.list.ArrayListModel;
import com.jgoodies.binding.list.SelectionInList;

/**
* Hjelpeklasse for editering av kollier
*
* @author atle.brekka
*/
public class ColliViewHandler extends
    AbstractViewHandlerShort<Colli, ColliModel> implements ColliListener {
  private static final long serialVersionUID = 1L;

  private PresentationModel presentationModel;

  private SelectionInList orderLineSelectionList;

  private ArrayListModel orderLineList;

  JCheckBox checkBoxSelection;

  List<ColliListener> colliListeners = new ArrayList<ColliListener>();

  private List<PropertyChangeListener> bufferingListeners = new ArrayList<PropertyChangeListener>();

  Packable packable;

  private ColliOrderLineTableModel tableModel;

  JPopupMenu popupMenuRemoveOrderLine;

  JMenuItem menuItemRemoveOrderLine;

  private ManagerRepository managerRepository;

  /**
   * @param aHeading
   * @param aColli
   * @param aPackable
   * @param currentWindow
   * @param userType
   */
  public ColliViewHandler(String aHeading, Colli aColli, Packable aPackable,
      Login login, ManagerRepository aManagerRepository,
      WindowInterface currentWindow) {
    super(aHeading, aManagerRepository.getColliManager(), true, login
        .getUserType(), true);
    managerRepository = aManagerRepository;
    packable = aPackable;

    initColli(aColli);

    popupMenuRemoveOrderLine = new JPopupMenu("Fjern artikkel");
    menuItemRemoveOrderLine = new JMenuItem("Fjern artikkel");
    menuItemRemoveOrderLine.setEnabled(hasWriteAccess());
    popupMenuRemoveOrderLine.add(menuItemRemoveOrderLine);
    menuItemRemoveOrderLine
        .addActionListener(new MenuItemListenerRemoveOrderLine(
            currentWindow));

  }

  /**
   * Initierer kolli
   *
   * @param aColli
   */
  @SuppressWarnings("unchecked")
  public void initColli(Colli aColli) {
    ((ColliManager) overviewManager).lazyLoad(aColli,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_LINES,
            LazyLoadEnum.NONE } });
    presentationModel = new PresentationModel(new ColliModel(aColli));
    orderLineList = new ArrayListModel((List<OrderLine>) presentationModel
        .getValue(ColliModel.PROPERTY_ORDER_LINES));
    orderLineSelectionList = new SelectionInList((ListModel) orderLineList);
    objectList.add(aColli);
  }

  @SuppressWarnings("unchecked")
  private void refreshOrderLineList() {
    orderLineList.clear();
    orderLineList.addAll((List<OrderLine>) presentationModel
        .getValue(ColliModel.PROPERTY_ORDER_LINES));

  }

  /**
   * Legger til lytter p� kolli
   *
   * @param listener
   */
  public void addColliSelectionListener(ColliListener listener) {
    colliListeners.add(listener);
  }

  /**
   * Lager label for navn
   *
   * @return label
   */
  public JLabel getLabelColliName() {
    return BasicComponentFactory.createLabel(presentationModel
        .getModel(ColliModel.PROPERTY_COLLI_NAME_AND_NUMBER));
  }

  /**
   * Lager tekstfelt for navn
   *
   * @param aPresentationModel
   * @return teksfelt
   */
  public JTextField getTextFieldColliName(PresentationModel aPresentationModel) {
    JTextField textField = BasicComponentFactory.createTextField(
        aPresentationModel
            .getBufferedModel(ColliModel.PROPERTY_COLLI_NAME),
        false);
    textField.setName("TextFieldColliName");
    return textField;
  }

  /**
   * Lager tabell for ordrelinjer
   *
   * @param window
   * @return tabell
   */
  @SuppressWarnings("unchecked")
  public JXTable getTableOrderLines(WindowInterface window) {

    table = new JXTable();
    tableModel = new ColliOrderLineTableModel(orderLineSelectionList,
        orderLineList);
    table.setModel(tableModel);
    table.setSelectionModel(new SingleListSelectionAdapter(
        orderLineSelectionList.getSelectionIndexHolder()));
    table.setColumnControlVisible(true);
    table.addMouseListener(new TableClickHandler());

    table.packAll();
    return table;
  }

  /**
   * Lager sjekkboks for selektering
   *
   * @return sjekkboks
   */
  public JCheckBox getCheckBoxSelection() {
    checkBoxSelection = new JCheckBox();
    checkBoxSelection.setEnabled(hasWriteAccess());
    return checkBoxSelection;
  }

  /**
   * Legger til ordrelinje
   *
   * @param orderLine
   * @param index
   * @throws ProTransException
   */
  public void addOrderLine(OrderLine orderLine, int index)
      throws ProTransException {
    Colli currentColli = ((ColliModel) presentationModel.getBean())
        .getObject();

    Set<OrderLine> orderLines = currentColli.getOrderLines();
    if (orderLines == null) {
      orderLines = new HashSet<OrderLine>();
    }
    orderLine.setColli(currentColli);

    orderLines.add(orderLine);
    currentColli.setOrderLines(orderLines);

    currentColli.setPackageDate(Util.getCurrentDate());
    ((ColliManager) overviewManager).saveColli(currentColli);
    managerRepository.getOrderLineManager().saveOrderLine(orderLine);

    Order order = currentColli.getOrder();

    if (order != null) {

      managerRepository.getOrderLineManager().lazyLoadOrder(
          order,
          new LazyLoadOrderEnum[] { LazyLoadOrderEnum.ORDER_LINES,
              LazyLoadOrderEnum.ORDER_LINE_ORDER_LINES });
      if (order.isDonePackage()) {
        order.setOrderComplete(Util.getCurrentDate());
        managerRepository.getOrderLineManager().saveOrder(order);
      }
    } else {
      PostShipment postShipment = currentColli.getPostShipment();

      if (postShipment != null) {
        PostShipmentManager postShipmentManager = (PostShipmentManager) ModelUtil
            .getBean("postShipmentManager");
        postShipmentManager
            .lazyLoad(
                postShipment,
                new LazyLoadPostShipmentEnum[] { LazyLoadPostShipmentEnum.ORDER_LINES });
        if (postShipment.isDonePackage()) {
          postShipment.setPostShipmentComplete(Util.getCurrentDate());
          postShipmentManager.savePostShipment(postShipment);
        }
      }

    }

    if (tableModel != null) {
      tableModel.insertRow(index, orderLine);
    }

    ((ColliManager) overviewManager).refreshObject(currentColli);
    ((ColliManager) overviewManager).lazyLoad(currentColli,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_LINES,
            LazyLoadEnum.NONE } });

  }

  /**
   * Tabellmodell for ordrelinjer i kolli
   *
   * @author atle.brekka
   */
  public class ColliOrderLineTableModel extends AbstractTableAdapter {

    private static final long serialVersionUID = 1L;

    private List<OrderLine> orderLineList1;

    /**
     * @param listModel
     * @param list
     */
    public ColliOrderLineTableModel(ListModel listModel,
        List<OrderLine> list) {
      super(listModel, new String[] { "Artikkel" });
      orderLineList1 = list;
    }

    /**
     * @see javax.swing.table.TableModel#getValueAt(int, int)
     */
    public Object getValueAt(int rowIndex, int columnIndex) {
      OrderLine orderLine = (OrderLine) getRow(rowIndex);
      switch (columnIndex) {
      case 0:
        return orderLine.getArticleName();

      default:
        throw new IllegalStateException("Unknown column");
      }
    }

    /**
     * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
     */
    @Override
    public Class<?> getColumnClass(int columnIndex) {
      switch (columnIndex) {
      case 0:
        return String.class;

      default:
        throw new IllegalStateException("Unknown column");
      }
    }

    /**
     * Legger til ordrelinje
     *
     * @param index
     * @param orderLine
     */
    public void insertRow(int index, OrderLine orderLine) {
      orderLineList1.add(index, orderLine);
      packable.setColliesDone(1);
      fireTableDataChanged();
    }

    /**
     * Legger til ordrelinje
     *
     * @param aOrderLine
     * @param index
     * @throws ProTransException
     */
    public void insertOrderLine(OrderLine aOrderLine, int index)
        throws ProTransException {
      addOrderLine(aOrderLine, index);
    }

  }

  /**
   * @param colli
   * @return feilmelding
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#checkDeleteObject(java.lang.Object)
   */
  @Override
  public CheckObject checkDeleteObject(Colli colli) {
    ((ColliManager) overviewManager).lazyLoad(colli,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_LINES,
            LazyLoadEnum.NONE } });
    if (colli.getOrderLines() != null && colli.getOrderLines().size() != 0) {
      return new CheckObject(
          "Kan ikke slette kolli som inneholder artikler", false);
    }
    return null;
  }

  /**
   * Initierer hendeleh�ndtering
   */
  public void initEventHandling() {
    objectSelectionList.setSelection(((ColliModel) presentationModel
        .getBean()).getObject());
    checkBoxSelection.addActionListener(new CollCheckBoxiActionListener(
        (ColliModel) presentationModel.getBean()));
    ((ColliModel) presentationModel.getBean()).addBufferChangeListener(
        new ColliBufferingListener(), presentationModel);
  }

  /**
   * H�mdterer valg av sjekkboks
   *
   * @author atle.brekka
   */
  private final class CollCheckBoxiActionListener implements ActionListener {
    private ColliModel currentColliModel;

    /**
     * @param colliModel
     */
    public CollCheckBoxiActionListener(ColliModel colliModel) {
      currentColliModel = colliModel;
    }

    /**
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public void actionPerformed(ActionEvent arg0) {
      for (ColliListener listener : colliListeners) {
        listener.colliSelectionChange(checkBoxSelection.isSelected(),
            currentColliModel);
      }

    }

  }

  /**
   * Lytter p� buffering
   *
   * @author atle.brekka
   */
  final class ColliBufferingListener implements PropertyChangeListener {

    /**
     * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
     */
    public void propertyChange(PropertyChangeEvent arg0) {
      fireBufferChange();

    }

  }

  /**
   * Forteller at objekt har bufferverdier
   */
  void fireBufferChange() {
    for (PropertyChangeListener listener : bufferingListeners) {
      listener.propertyChange(new PropertyChangeEvent(presentationModel
          .getBean(),
          String.valueOf(presentationModel.isBuffering()),
          presentationModel.getBean(), String
              .valueOf(presentationModel.isBuffering())));
    }
  }

  /**
   * Setter valgt kolli
   *
   * @param selected
   */
  public void setColliSelected(boolean selected) {
    checkBoxSelection.setSelected(selected);
  }

  /**
   * Lytter til meny for � fjerne ordrelinje
   *
   * @author atle.brekka
   */
  private class MenuItemListenerRemoveOrderLine implements ActionListener {
    private WindowInterface window;

    /**
     * @param aWindow
     */
    public MenuItemListenerRemoveOrderLine(WindowInterface aWindow) {
      window = aWindow;
    }

    /**
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public void actionPerformed(ActionEvent actionEvent) {
      if (actionEvent.getActionCommand().equalsIgnoreCase(
          menuItemRemoveOrderLine.getText())) {

        removeOrderLine(window);

      }
    }

  }

  /**
   * Fjerner ordrelinje
   *
   * @param window
   */
  void removeOrderLine(WindowInterface window) {
    int index = table.convertRowIndexToModel(orderLineSelectionList
        .getSelectionIndex());
    if (index != -1) {
      OrderLine orderLine = (OrderLine) orderLineSelectionList
          .getElementAt(index);

      if (ApplicationParamUtil.getNotPackageList().indexOf(
          orderLine.getArticleName()) < 0) {

        Colli currentColli = ((ColliModel) presentationModel.getBean())
            .getObject();
        ((ColliManager) overviewManager).lazyLoad(currentColli,
            new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_LINES,
                LazyLoadEnum.NONE } });
        Set<OrderLine> orderLines = currentColli.getOrderLines();
        if (orderLines == null) {
          orderLines = new HashSet<OrderLine>();
        }

        boolean success = orderLines.remove(orderLine);
        if (success) {
          orderLine.setColli(null);
          currentColli.setOrderLines(orderLines);

          if (orderLines.size() == 0) {
            currentColli.setPackageDate(null);
          }

          ((ColliManager) overviewManager).saveColli(currentColli);
          managerRepository.getOrderLineManager().saveOrderLine(
              orderLine);
          orderLineList.remove(orderLine);

          Order order = currentColli.getOrder();
          if (order != null) {
            managerRepository.getOrderLineManager().refreshOrder(
                order);
            order.setOrderComplete(null);
            try {

              managerRepository.getOrderLineManager().saveOrder(
                  order);
            } catch (ProTransException e) {
              Util
                  .showErrorDialog(window, "Feil", e
                      .getMessage());
              e.printStackTrace();
            }
          } else {
            PostShipment postShipment = currentColli
                .getPostShipment();
            if (postShipment != null) {
              PostShipmentManager postShipmentManager = (PostShipmentManager) ModelUtil
                  .getBean("postShipmentManager");
              postShipment.setPostShipmentComplete(null);
              postShipmentManager.savePostShipment(postShipment);
            }

          }
        }

        fireOrderLineRemoved(window);
      } else {
        Util.showMsgDialog(window.getComponent(),
            "Kan ikke fjerne artikkel",
            "Denne artikkelen kan ikke fjernes her!");
      }

    }
  }

  /**
   * Forteller at ordrelinje er fjernet
   *
   * @param window
   */
  private void fireOrderLineRemoved(WindowInterface window) {
    for (ColliListener listener : colliListeners) {
      listener.orderLineRemoved(window);
    }
  }

  /**
   * H�ndterer museklikk i tabell
   *
   * @author atle.brekka
   */
  final class TableClickHandler extends MouseAdapter {
    public TableClickHandler() {
    }

    /**
     * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseClicked(MouseEvent e) {

      if (SwingUtilities.isRightMouseButton(e)) {

        popupMenuRemoveOrderLine.show((JXTable) e.getSource(),
            e.getX(), e.getY());

      }

    }
  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#hasWriteAccess()
   */
  @Override
  public Boolean hasWriteAccess() {
    return UserUtil.hasWriteAccess(userType, "Garasjepakke");
  }

  /**
   * @param handler
   * @param object
   * @param searching
   * @return view
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#getEditView(no.ugland.utransprod.gui.handlers.AbstractViewHandler,
   *      java.lang.Object, boolean)
   */
  @Override
  protected AbstractEditView<ColliModel, Colli> getEditView(
      AbstractViewHandler<Colli, ColliModel> handler, Colli object,
      boolean searching) {
    return new EditColliView(false, (ColliModel) presentationModel
        .getBean(), this);
  }

  @Override
  public String getClassName() {
    return "Colli";
  }

  public JTextField getTextFieldNumberOfCollies(
      PresentationModel aPresentationModel) {
    JTextField textField = BasicComponentFactory
        .createTextField(
            aPresentationModel
                .getBufferedModel(ColliModel.PROPERTY_NUMBER_OF_COLLIES),
            false);
    textField.setName("TextFieldNumberOfCollies");
    return textField;
  }

  public void updateColliModel() {
    ((ColliModel) presentationModel.getBean())
        .firePropertyChanged(ColliModel.PROPERTY_COLLI_NAME_AND_NUMBER);

  }

  public void colliSelectionChange(boolean selection, ColliModel colliModel) {
  }

  public void orderLineRemoved(WindowInterface window) {
  }

  public void refreshCollies() {
    refreshColli();

  }

  private void refreshColli() {
    Colli currentColli = ((ColliModel) presentationModel.getBean())
        .getObject();
    managerRepository.getColliManager().refreshObject(currentColli);
    managerRepository.getColliManager().lazyLoad(
        currentColli,
        new LazyLoadEnum[][] { { LazyLoadEnum.ORDER_LINES,
            LazyLoadEnum.NONE } });
    presentationModel.setBean(new ColliModel(currentColli));
    refreshOrderLineList();
  }

}
TOP

Related Classes of no.ugland.utransprod.gui.handlers.ColliViewHandler$MenuItemListenerRemoveOrderLine

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.