Package no.ugland.utransprod.gui.handlers

Source Code of no.ugland.utransprod.gui.handlers.TransportWeekViewHandler

package no.ugland.utransprod.gui.handlers;

import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JTable;
import javax.swing.ListModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import javax.swing.table.TableModel;

import no.ugland.utransprod.gui.JDialogAdapter;
import no.ugland.utransprod.gui.Login;
import no.ugland.utransprod.gui.ProTransMain;
import no.ugland.utransprod.gui.ProductAreaGroupProvider;
import no.ugland.utransprod.gui.TransportListView;
import no.ugland.utransprod.gui.TransportView;
import no.ugland.utransprod.gui.UBColumnControlPopup;
import no.ugland.utransprod.gui.Updateable;
import no.ugland.utransprod.gui.WindowInterface;
import no.ugland.utransprod.gui.buttons.DeleteButton;
import no.ugland.utransprod.gui.buttons.NewButton;
import no.ugland.utransprod.gui.edit.EditTransportView;
import no.ugland.utransprod.gui.model.TransportModel;
import no.ugland.utransprod.gui.model.TransportSelectionListener;
import no.ugland.utransprod.gui.model.Transportable;
import no.ugland.utransprod.model.ProductAreaGroup;
import no.ugland.utransprod.model.Transport;
import no.ugland.utransprod.service.ManagerRepository;
import no.ugland.utransprod.service.VismaFileCreator;
import no.ugland.utransprod.service.enums.LazyLoadEnum;
import no.ugland.utransprod.util.PrefsUtil;
import no.ugland.utransprod.util.TransportComparator;
import no.ugland.utransprod.util.UserUtil;
import no.ugland.utransprod.util.Util;
import no.ugland.utransprod.util.YearWeek;

import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.decorator.HighlighterFactory;

import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.jgoodies.binding.adapter.SingleListSelectionAdapter;
import com.jgoodies.binding.list.ArrayListModel;
import com.jgoodies.binding.list.SelectionInList;

/**
* Hjelpeklasse forvisning av transporter for en gitt uke
*
* @author atle.brekka
*/
public class TransportWeekViewHandler implements Updateable,
    TransportSelectionListener, ProductAreaGroupProvider {

  private final ArrayListModel transportList;

  private final SelectionInList transportSelectionList;

  private TransportViewHandler transportViewHandler;

  private JButton buttonRemoveTransport;

  private JButton buttonEditTransport;

  Map<Transport, TransportViewHandler> transportViewHandlers = new Hashtable<Transport, TransportViewHandler>();

  Map<Transport, TransportViewHandler> selectedTransportViewHandlers = new Hashtable<Transport, TransportViewHandler>();

  Map<Transport, TransportViewHandler> changedTransportViewHandlers = new Hashtable<Transport, TransportViewHandler>();

  private List<ListDataListener> transportListListeners = new ArrayList<ListDataListener>();

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

  private YearWeek routeDate;

  private List<TransportView> transportViews = new ArrayList<TransportView>();
  private final ArrayListModel transportableList;
  private final SelectionInList transportableSelectionList;
  private boolean listView = false;
  private TransportListView transportListView;
  private JXTable tableOrdersList;

  private Login login;
  private ManagerRepository managerRepository;

  private DeviationViewHandlerFactory deviationViewHandlerFactory;

  private OrderViewHandlerFactory orderViewHandlerFactory;
  private ShowTakstolInfoActionFactory showTakstolInfoActionFactory;

  private VismaFileCreator vismaFileCreator;

  @Inject
  public TransportWeekViewHandler(final Login aLogin,
      final ManagerRepository aManagerRepository,
      TransportViewHandler aTransportViewHandler,
      OrderViewHandlerFactory aOrderViewHandlerFactory,
      final DeviationViewHandlerFactory aDeviationViewHandlerFactory,
      ShowTakstolInfoActionFactory aShowTakstolInfoActionFactory,
      @Assisted YearWeek aRouteDate,
      final VismaFileCreator vismaFileCreator) {
    this.vismaFileCreator = vismaFileCreator;
    showTakstolInfoActionFactory = aShowTakstolInfoActionFactory;
    deviationViewHandlerFactory = aDeviationViewHandlerFactory;
    orderViewHandlerFactory = aOrderViewHandlerFactory;
    login = aLogin;
    managerRepository = aManagerRepository;

    transportableList = new ArrayListModel();
    transportableSelectionList = new SelectionInList(
        (ListModel) transportableList);
    transportViewHandler = aTransportViewHandler;
    transportList = new ArrayListModel();
    routeDate = aRouteDate;

    transportSelectionList = new SelectionInList((ListModel) transportList);

  }

  /**
   * Legger til lytter
   *
   * @param listener
   */
  public void addListDataListener(ListDataListener listener) {
    transportListListeners.add(listener);
  }

  /**
   * Fyrer hendelse om at transport er fjernet
   */
  private void fireTransportRemoved() {
    for (ListDataListener listener : transportListListeners) {
      listener.intervalRemoved(new ListDataEvent(this, -1, -1, -1));
    }
    buttonEditTransport.setEnabled(false);
    buttonRemoveTransport.setEnabled(false);
  }

  /**
   * Legger til lytter for transportendringer
   *
   * @param listener
   */
  public void addTransportChangeListener(PropertyChangeListener listener) {
    transportChangeListeners.add(listener);
  }

  /**
   * Fyrer hendelse om at transport er endret
   *
   * @param buffering
   */
  void fireTransportChange(boolean buffering) {
    for (PropertyChangeListener listener : transportChangeListeners) {
      listener.propertyChange(new PropertyChangeEvent(this, null, null,
          buffering));
    }
  }

  /**
   * Fyrer hendelse om at transport er lagt til
   */
  private void fireTransportAdded() {
    for (ListDataListener listener : transportListListeners) {
      listener.intervalAdded(new ListDataEvent(this, -1, -1, -1));
    }
    buttonEditTransport.setEnabled(false);
    buttonRemoveTransport.setEnabled(false);
  }

  /**
   * Henter liste med transportruter.
   *
   * @param routeDate1
   * @param productAreaGroup
   * @return transportruter
   */
  public final SelectionInList getTransportSelectionList(
      final YearWeek routeDate1, final ProductAreaGroup productAreaGroup) {
    transportList.clear();

    List<Transport> transports = managerRepository.getTransportManager()
        .findByYearAndWeekAndProductAreaGroup(routeDate1.getYear(),
            routeDate1.getWeek(), productAreaGroup);
    Collections.sort(transports, new TransportComparator());
    transportList.addAll(transports);
    return transportSelectionList;
  }

  /**
   * Henter liste med transportruter.
   *
   * @param routeDate1
   * @param productAreaGroup
   * @return transportruter
   */
  @SuppressWarnings("unchecked")
  public final List<Transport> getTransportList(final YearWeek routeDate1,
      final ProductAreaGroup productAreaGroup) {
    getTransportSelectionList(routeDate1, productAreaGroup);
    return transportList;
  }

  /**
   * Henter transportliste
   *
   * @return transportliste
   */
  public ArrayListModel getTransportList() {
    return transportList;
  }

  /**
   * Henter liste med transporter som ikke er sendt
   *
   * @return transportliste
   */
  @SuppressWarnings("unchecked")
  public List<Transport> getTransportNotSentList() {
    List<Transport> transportNotSentList = new ArrayList<Transport>();
    List<Transport> transports = transportList;
    for (Transport transport : transports) {
      if (transport.getSent() == null) {
        transportNotSentList.add(transport);
      }
    }
    return transportNotSentList;
  }

  /**
   * Henter knapp for � legge til transport
   *
   * @param window
   * @return knapp
   */
  public JButton getButtonAddTransport(WindowInterface window) {
    JButton button = new NewButton("transport", this, window);
    button.setEnabled(hasWriteAccess());
    return button;
  }

  /**
   * Lager knapp for � fjerne transport
   *
   * @param window
   * @return knapp
   */
  public JButton getButtonRemoveTransport(WindowInterface window) {
    buttonRemoveTransport = new DeleteButton("transport", this, window);
    buttonRemoveTransport.setEnabled(false);
    buttonRemoveTransport.setName("ButtonRemoveTransport");
    return buttonRemoveTransport;
  }

  /**
   * Lager knapp for � editere transport
   *
   * @param window
   * @return knapp
   */
  public JButton getButtonEditTransport(WindowInterface window) {
    buttonEditTransport = new JButton(new EditTransportAction(window));
    buttonEditTransport.setEnabled(false);
    return buttonEditTransport;
  }

  /**
   * @see no.ugland.utransprod.gui.Updateable#doDelete(no.ugland.utransprod.gui.WindowInterface)
   */
  public boolean doDelete(WindowInterface window) {
    boolean returnValue = true;
    Set<Transport> transports = selectedTransportViewHandlers.keySet();
    TransportViewHandler handler;

    for (Transport transport : transports) {
      handler = selectedTransportViewHandlers.get(transport);
      returnValue = handler.doDelete(window);
      if (returnValue) {
        transportViewHandlers.remove(transport);
        transportList.remove(transport);
      }
    }
    fireTransportRemoved();
    return returnValue;
  }

  /**
   * �pner vindu for editering av transport
   *
   * @param transport
   */
  void openEditView(Transport transport) {
    EditTransportView transportView = new EditTransportView(
        transportViewHandler, transport, false);
    WindowInterface dialog = new JDialogAdapter(new JDialog(
        ProTransMain.PRO_TRANS_MAIN, "Transport", true));
    dialog.setName("EditTransportView");
    dialog.add(transportView.buildPanel(dialog));
    dialog.pack();
    Util.locateOnScreenCenter(dialog);
    dialog.setVisible(true);

    if (transport.getTransportYear() != null
        && transport.getTransportYear().equals(routeDate.getYear())
        && transport.getTransportWeek() != null
        && transport.getTransportWeek().equals(routeDate.getWeek())) {
      fireTransportAdded();
    }

  }

  /**
   * @see no.ugland.utransprod.gui.Updateable#doNew(no.ugland.utransprod.gui.WindowInterface)
   */
  public void doNew(WindowInterface window) {
    openEditView(new Transport());
  }

  /**
   * @see no.ugland.utransprod.gui.Updateable#doRefresh(no.ugland.utransprod.gui.WindowInterface)
   */
  public void doRefresh(WindowInterface window) {

  }

  /**
   * @see no.ugland.utransprod.gui.Updateable#doSave(no.ugland.utransprod.gui.WindowInterface)
   */
  public void doSave(WindowInterface window) {

  }

  /**
   * Lager transportvindu
   *
   * @param transport
   * @return transportvindu
   */
  public TransportView getTransportView(Transport transport) {
    TransportViewHandler transportViewHandlerTmp = new TransportViewHandler(
        orderViewHandlerFactory, login, managerRepository,
        deviationViewHandlerFactory, showTakstolInfoActionFactory,
        vismaFileCreator);

    transportViewHandlerTmp.addBufferingListener(new BufferingListener());
    transportViewHandlerTmp.addSentListener(new SentListener());

    TransportViewHandler oldHandler = transportViewHandlers.get(transport);

    if (oldHandler != null) {
      oldHandler.removeTransportSelectionListener(this);
    }

    transportViewHandlers.put(transport, transportViewHandlerTmp);
    transportViewHandlerTmp.addTransportSelectionListener(this);
    TransportView transportView = new TransportView(
        transportViewHandlerTmp, transport);
    transportViews.add(transportView);
    return transportView;
  }

  public TransportListView getTransportListView() {
    transportListView = transportListView == null ? new TransportListView(
        this) : transportListView;
    return transportListView;
  }

  /**
   * @see no.ugland.utransprod.gui.model.TransportSelectionListener#transportSelectionChange(boolean,
   *      no.ugland.utransprod.gui.model.TransportModel)
   */
  public void transportSelectionChange(boolean selection,
      TransportModel transportModel) {
    if (selection) {
      selectedTransportViewHandlers.put(transportModel.getObject(),
          transportViewHandlers.get(transportModel.getObject()));
    } else {
      selectedTransportViewHandlers.remove(transportModel.getObject());
    }

    if (selectedTransportViewHandlers.size() != 0) {
      buttonRemoveTransport.setEnabled(true);
      buttonEditTransport.setEnabled(true);
    } else {
      buttonRemoveTransport.setEnabled(false);
      buttonEditTransport.setEnabled(false);
    }

  }

  /**
   * Editere transport
   *
   * @author atle.brekka
   */
  private final class EditTransportAction extends AbstractAction {
    private static final long serialVersionUID = 1L;

    private WindowInterface window;

    public EditTransportAction(WindowInterface aWindow) {
      super("Editer transport...");
      window = aWindow;
    }

    /**
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public void actionPerformed(ActionEvent arg0) {
      if (selectedTransportViewHandlers.size() != 1) {
        Util.showErrorDialog(window, "Feil",
            "Det kan bare velges en transport for editering");
      } else {
        Transport transport = selectedTransportViewHandlers.keySet()
            .iterator().next();
        openEditView(transport);
        selectedTransportViewHandlers.clear();
      }

    }
  }

  /**
   * Sjekker om det finnes endringer
   *
   * @return true dersom endringer
   */
  public boolean hasChanges() {
    if (changedTransportViewHandlers.size() != 0) {
      return true;
    }
    return false;
  }

  /**
   * Tar bort endringer
   */
  public void resetChanges() {
    changedTransportViewHandlers.clear();
  }

  /**
   * Lagrer endringer
   *
   * @param window
   */
  public void saveChanges(WindowInterface window) {
    Set<Transport> transports = changedTransportViewHandlers.keySet();
    TransportViewHandler aTransportViewHandler;
    for (Transport transport : transports) {
      aTransportViewHandler = transportViewHandlers.get(transport);
      aTransportViewHandler.saveTransportModel(window, transport
          .getSent());
    }
    changedTransportViewHandlers.clear();
  }

  /**
   * Lytter p� bufferendringer
   *
   * @author atle.brekka
   */
  class BufferingListener implements PropertyChangeListener {

    /**
     * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
     */
    public void propertyChange(PropertyChangeEvent event) {
      Transport changedTransport = ((TransportModel) event.getSource())
          .getObject();
      if (event.getNewValue() != null && (Boolean) event.getNewValue()) {
        changedTransportViewHandlers.put(changedTransport,
            transportViewHandlers.get(changedTransport));
        fireTransportChange(true);
      } else {
        changedTransportViewHandlers.remove(changedTransport);
        fireTransportChange(false);
      }

    }

  }

  /**
   * H�ndterer sending
   *
   * @author atle.brekka
   */
  class SentListener implements PropertyChangeListener {

    /**
     * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
     */
    public void propertyChange(PropertyChangeEvent event) {
      fireTransportChange((Boolean) event.getNewValue());

    }

  }

  /**
   * Setter selektert ordre
   *
   * @param transport
   * @param order
   */
  public void setSelectedTransportable(Transport transport,
      Transportable transportable) {
    TransportViewHandler handler = transportViewHandlers.get(transport);

    if (handler != null) {
      handler.setSelectedTransportable(transportable);
    }
  }

  /**
   * Henter hjelpeklasse for gitt transport
   *
   * @param transport
   * @return hjelpeklasse for transport
   */
  public TransportViewHandler getTransportViewHandler(Transport transport) {
    return transportViewHandlers.get(transport);
  }

  /**
   * Henter alle hjelpeklasser for transporter i liste
   *
   * @return hjelpeklasser for transport
   */
  public Map<Transport, TransportViewHandler> getTransportViewHandlers() {
    return transportViewHandlers;
  }

  /**
   * Rensker
   */
  public void clear() {
    transportViewHandlers.clear();

    selectedTransportViewHandlers.clear();

    changedTransportViewHandlers.clear();
  }

  /**
   * Sjekker om bruker har skriverettigheter
   *
   * @return true derom bruker har skriverettigheter
   */
  public boolean hasWriteAccess() {
    return UserUtil.hasWriteAccess(login.getUserType(), "Transport");
  }

  /**
   * Setter eller fjerner filter for alle transporter
   *
   * @param sentFilter
   * @param productAreaGroup
   */
  public void setFilterSent(boolean sentFilter,
      ProductAreaGroup productAreaGroup) {
    PrefsUtil.setInvisibleColumns(productAreaGroup
        .getProductAreaGroupName(), TableEnum.TABLETRANSPORTORDERSLIST
        .getTableName(), tableOrdersList);
    Collection<TransportViewHandler> viewhandlers = transportViewHandlers
        .values();

    if (viewhandlers != null) {
      for (TransportViewHandler handler : viewhandlers) {
        handler.handleFilter(sentFilter, productAreaGroup);
      }
    }
  }

  public void saveUserInvisibleColumns(ProductAreaGroup productAreaGroup) {
    if (listView) {
      PrefsUtil
          .putUserInvisibleColumns(tableOrdersList, productAreaGroup);
    } else {
      if (transportList != null && transportList.size() != 0) {
        transportViewHandlers.get(transportList.get(0))
            .saveUserInvisibleColumns(productAreaGroup);
      }
    }
  }

  public void cleanUp() {
  }

  public JXTable getTableOrders(ProductAreaGroup productAreaGroup) {
    updateTransportableList();
    tableOrdersList = new JXTable();
    TableModel transportOrderTableModel = new TransportOrderTableModel(
        transportableSelectionList, transportableList, Util
            .getGavlChecker(), Util
            .getTakstolChecker(managerRepository), Util
            .getSteinChecker(), Util.getGulvsponChecker(),
        TransportOrderTableModel.TransportColumn.ForExcel.TABLE);
    tableOrdersList.setModel(transportOrderTableModel);
    tableOrdersList.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    tableOrdersList.setSelectionModel(new SingleListSelectionAdapter(
        transportableSelectionList.getSelectionIndexHolder()));
    tableOrdersList.setColumnControlVisible(true);
    tableOrdersList.setColumnControl(new UBColumnControlPopup(
        tableOrdersList, this));
    tableOrdersList.setRowHeight(40);
    tableOrdersList.setShowGrid(true);
    tableOrdersList.setShowVerticalLines(true);

    TransportOrderTableModel.TransportColumn[] columns = TransportOrderTableModel.TransportColumn
        .values();

    for (int i = 0; i < columns.length; i++) {
      if (columns[i].getForExcel().isEqual(
          TransportOrderTableModel.TransportColumn.ForExcel.TABLE)) {
        columns[i].setCellRenderer(tableOrdersList);
        columns[i].setPrefferedWidth(tableOrdersList);
      }
    }

    tableOrdersList.addHighlighter(HighlighterFactory
        .createAlternateStriping());
    tableOrdersList.addHighlighter(TransportViewHandler
        .getStartedPackingHighlighter(tableOrdersList, "Klar"));
    tableOrdersList.addHighlighter(TransportViewHandler
        .getReadyHighlighter(tableOrdersList, "Komplett"));
    tableOrdersList.addHighlighter(TransportViewHandler
        .getNotSentHighlighter(tableOrdersList, "Ikke sendt"));
    tableOrdersList.setShowGrid(true);
    tableOrdersList.setName(TableEnum.TABLETRANSPORTORDERSLIST
        .getTableName());
    PrefsUtil.setInvisibleColumns(productAreaGroup
        .getProductAreaGroupName(), tableOrdersList.getName(),
        tableOrdersList);

    return tableOrdersList;

  }

  @SuppressWarnings("unchecked")
  private void updateTransportableList() {
    transportableList.clear();
    Iterator<Transport> transportIt = transportList.iterator();

    while (transportIt.hasNext()) {
      Transport transport = transportIt.next();
      managerRepository.getTransportManager()
          .lazyLoad(
              transport,
              new LazyLoadEnum[][] {
                  { LazyLoadEnum.ORDERS, LazyLoadEnum.NONE },
                  { LazyLoadEnum.POST_SHIPMENTS,
                      LazyLoadEnum.NONE }, });
      transportableList.addAll(transport.getTransportables());
    }

  }

  public String getProductAreaGroupName() {
    return null;
  }

  public void setUseListView(boolean usingListView) {
    listView = usingListView;
  }

  public boolean useListView() {
    return listView;
  }

  public int getNumberOfOrders() {
    return transportList.size();
  }

  public boolean getUseListView() {
    return listView;
  }
}
TOP

Related Classes of no.ugland.utransprod.gui.handlers.TransportWeekViewHandler

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.