Package no.ugland.utransprod.gui.handlers

Source Code of no.ugland.utransprod.gui.handlers.ColliListViewHandler$EditColliAction

package no.ugland.utransprod.gui.handlers;

import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

import no.ugland.utransprod.ProTransException;
import no.ugland.utransprod.gui.ColliView;
import no.ugland.utransprod.gui.Login;
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.model.ColliListener;
import no.ugland.utransprod.gui.model.ColliModel;
import no.ugland.utransprod.gui.model.Packable;
import no.ugland.utransprod.gui.model.Transportable;
import no.ugland.utransprod.model.Colli;
import no.ugland.utransprod.model.Order;
import no.ugland.utransprod.model.OrderLine;
import no.ugland.utransprod.model.OrderLineAttribute;
import no.ugland.utransprod.service.Manager;
import no.ugland.utransprod.service.ManagerRepository;
import no.ugland.utransprod.service.OrderLineManager;
import no.ugland.utransprod.service.OverviewManager;
import no.ugland.utransprod.service.enums.LazyLoadEnum;
import no.ugland.utransprod.service.enums.LazyLoadOrderLineEnum;
import no.ugland.utransprod.util.ModelUtil;
import no.ugland.utransprod.util.UserUtil;
import no.ugland.utransprod.util.Util;

import org.hibernate.Hibernate;

import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;

public class ColliListViewHandler implements ColliListener, Updateable,
    ColliViewHandlerProvider {
  Map<Colli, ColliViewHandler> colliViewHandlers = new Hashtable<Colli, ColliViewHandler>();
  private ManagerRepository managerRepository;
  private Login login;
  Map<Colli, ColliViewHandler> selectedColliViewHandlers = new Hashtable<Colli, ColliViewHandler>();
  private JButton buttonRemoveColli;
  private JButton buttonEditColli;
  private JButton buttonAddColli;
  boolean refreshing = false;
  Map<String, String> colliSetup;
  private List<ListDataListener> colliListListeners = new ArrayList<ListDataListener>();
  List<ColliListener> colliListeners = new ArrayList<ColliListener>();

  private List<Colli> colliList;
  private Packable packable;

  @Inject
  public ColliListViewHandler(Login aLogin,
      ManagerRepository aManagerRepository,
      @Assisted Map<String, String> aColliSetup) {
    login = aLogin;
    managerRepository = aManagerRepository;
    this.colliSetup = aColliSetup;
    colliList = new ArrayList<Colli>();

  }

  public void addListDataListener(ListDataListener listener) {
    colliListListeners.add(listener);
  }

  public void addColliListener(ColliListener listener) {
    colliListeners.add(listener);
  }

  @SuppressWarnings("unchecked")
  public List<Colli> getColliList() {
    // return (List<Colli>)
    // presentationModelPackable.getValue(AbstractOrderModel.PROPERTY_COLLI_LIST);
    return colliList;
  }

//  public Comparator<? super Colli> getColliComparator() {
//    return new ColliComparator();
//  }

  /*public class ColliComparator implements Comparator<Colli> {

    public int compare(Colli colli1, Colli colli2) {
      return new CompareToBuilder().append(colli1.getColliName(),
          colli2.getColliName()).toComparison();
    }

  }*/

  public ColliView getColliView(Colli colli, WindowInterface window) {
    ColliViewHandler colliViewHandler = colliViewHandlers.get(colli);

    if (colliViewHandler == null) {
      colliViewHandler = new ColliViewHandler("Kolli", colli,
      // (Packable) presentationModelPackable.getBean(),
          packable, login, managerRepository,window);
      colliViewHandlers.put(colli, colliViewHandler);
      colliViewHandler.addColliSelectionListener(this);
      addColliListener(colliViewHandler);
    } else {
      colliViewHandler.initColli(colli);
    }
    ColliView colliView = new ColliView(colliViewHandler);
    return colliView;
  }

  public void colliSelectionChange(boolean selection, ColliModel colliModel) {
    if (hasWriteAccess()) {
      if (selection) {
        selectedColliViewHandlers.put(colliModel.getObject(),
            colliViewHandlers.get(colliModel.getObject()));
      } else {
        selectedColliViewHandlers.remove(colliModel.getObject());
      }

      if (selectedColliViewHandlers.size() != 0) {
        buttonRemoveColli.setEnabled(true);
        buttonEditColli.setEnabled(true);
      } else {
        buttonRemoveColli.setEnabled(false);
        buttonEditColli.setEnabled(false);
      }
    }

  }

  public void orderLineRemoved(WindowInterface window) {
    fireOrderLineRemoved(window);

  }

  private void fireOrderLineRemoved(WindowInterface window) {
    for (ColliListener listener : colliListeners) {
      listener.orderLineRemoved(window);
    }
  }

  public boolean hasWriteAccess() {
    return UserUtil.hasWriteAccess(login.getUserType(), "Garasjepakke");
  }

  public JButton getButtonAddColli(WindowInterface window) {
    buttonAddColli = new NewButton("kolli", this, window);
    return buttonAddColli;
  }

  public boolean doDelete(WindowInterface window) {
    boolean returnValue = true;
    Set<Colli> collies = selectedColliViewHandlers.keySet();
    ColliViewHandler handler;

    for (Colli colli : collies) {
      handler = selectedColliViewHandlers.get(colli);
      if (handler != null) {
        returnValue = handler.doDelete(window);
        if (returnValue) {
          handler = colliViewHandlers.remove(colli);
          colliList.remove(colli);
          packable.removeColli(colli);
        }
      }
    }
    selectedColliViewHandlers.clear();
   
    fireColliRemoved();
    fireListChanged();
    return returnValue;
  }

  @SuppressWarnings("unchecked")
  public void doNew(WindowInterface window) {
    // AbstractOrderModel abstractOrderModel = (AbstractOrderModel)
    // presentationModelPackable.getBean();

    Colli newColli = new Colli(null, packable.getOrder(),// abstractOrderModel.getOrderModelOrder(),
        null, null, null, null,
        // abstractOrderModel.getOrderModelPostShipment(),
        packable.getPostShipment(), null, null);
    ColliViewHandler colliViewHandler = new ColliViewHandler("Kolli",
        newColli,
        // abstractOrderModel,
        packable, login, managerRepository,window);
    colliViewHandler.openEditView(null, false, window);
    // abstractOrderModel.addColli(newColli);
    packable.addColli(newColli);
    colliList.add(newColli);
    fireListChanged();

  }

  public void doRefresh(WindowInterface window) {
    try {
      refreshing = true;

      // presentationModelPackable.setBean(new OrderModel(new
      // Order(),false, false, false, null, null));

      selectedColliViewHandlers.clear();
      buttonAddColli.setEnabled(false);
      buttonRemoveColli.setEnabled(false);
      buttonEditColli.setEnabled(false);

      checkCollies(window);
    } catch (ProTransException e) {
      e.printStackTrace();
      Util.showErrorDialog(window, "Feil", e.getMessage());
    }

  }

  public void doSave(WindowInterface window) {
  }

  private void fireColliRemoved() {
    for (ListDataListener listener : colliListListeners) {
      listener.intervalRemoved(new ListDataEvent(this, -1, -1, -1));
    }
    buttonEditColli.setEnabled(false);
    buttonRemoveColli.setEnabled(false);
  }

  private void fireListChanged() {
    for (ListDataListener listener : colliListListeners) {
      listener.contentsChanged(new ListDataEvent(this, -1, -1, -1));
    }
  }
 
  @SuppressWarnings("unchecked")
  public void checkCollies(WindowInterface window) throws ProTransException {
    if (!refreshing) {
      OverviewManager overviewManager = (OverviewManager) ModelUtil
          .getBean(packable.getManagerName());
      if (!defaultColliesGenerated()) {
        packable.setDefaultColliesGenerated(1);
        overviewManager.saveObject(packable);
        List<Colli> collies = packable.getColliList();
        List<OrderLine> orderLines = packable.getOrderLineList();
        Colli tmpColli;

        tmpColli = new Colli(null,
            packable.getOrder(), null, null, null, null,
            packable.getPostShipment(), null, null);
        if (collies == null) {
          collies = new ArrayList<Colli>();

        }
        // sjekk om kollier Takstol,Gavl,Gulvspon,Garasjepakke er med
        // for
        // ordre,
        // sjekk mot artikler

        Set<String> colliNames = colliSetup.keySet();
        if (colliNames != null) {
          for (String colliName : colliNames) {
            tmpColli.setColliName(colliName);
            if (!collies.contains(tmpColli)) {
              if(!Hibernate.isInitialized(packable.getCollies())){
                initializePackable(packable);
              }
              if (shouldHaveColli(orderLines, colliSetup
                  .get(colliName),
                  packable.getTransportable())) {
                Colli newColli = new Colli(null, tmpColli
                    .getOrder(), tmpColli.getColliName(),
                    null, null, null, tmpColli
                        .getPostShipment(), null, null);
                packable.addColli(newColli);

                if (colliName.equalsIgnoreCase("Takstein")) {
                  checkTakstein(orderLines, newColli, window);
                }
                managerRepository.getColliManager().saveColli(
                    newColli);
              }
            }
          }
        }
       
        overviewManager.saveObject(packable);
        setPackable(packable, null);
      }
    }
  }

  private void initializePackable(Packable packable) {
    Manager manager =(Manager)ModelUtil.getBean(packable.getManagerName());
    manager.lazyLoad(packable, new LazyLoadEnum[][]{{LazyLoadEnum.COLLIES,LazyLoadEnum.NONE},{LazyLoadEnum.ORDER_LINES,LazyLoadEnum.NONE},{LazyLoadEnum.ORDER_COMMENTS,LazyLoadEnum.NONE}});
   
  }

  @SuppressWarnings("unchecked")
  private boolean defaultColliesGenerated() {
    return Util
    // .convertNumberToBoolean(((AbstractOrderModel)
    // presentationModelPackable
        .convertNumberToBoolean(packable.getDefaultColliesGenerated());
  }

  private boolean shouldHaveColli(List<OrderLine> orderLines,
      String articleName, Transportable transportable) {
    OrderLineManager orderLineManager = (OrderLineManager) ModelUtil
        .getBean("orderLineManager");
    if (orderLines != null) {
      for (OrderLine orderLine : orderLines) {
        if (orderLine.getHasArticle() == null) {
          orderLineManager
              .lazyLoad(
                  orderLine,
                  new LazyLoadOrderLineEnum[] { LazyLoadOrderLineEnum.ORDER_LINE_ATTRIBUTE });
        }
        if (orderLine.getArticleName().equalsIgnoreCase(articleName)
            && orderLine.hasArticle()
            && orderLine.belongTo(transportable)) {
          return true;
        }
      }
    }
    return false;
  }

  private void checkTakstein(List<OrderLine> orderLines, Colli colli,
      WindowInterface window) {

    if (orderLines != null) {
      for (OrderLine orderLine : orderLines) {
        managerRepository
            .getOrderLineManager()
            .lazyLoad(
                orderLine,
                new LazyLoadOrderLineEnum[] { LazyLoadOrderLineEnum.ORDER_LINE_ATTRIBUTE });
        if (orderLine.getArticleName().equalsIgnoreCase("Takstein")) {
          Set<OrderLineAttribute> attributes = orderLine
              .getOrderLineAttributes();
          if (attributes != null) {
            for (OrderLineAttribute attribute : attributes) {
              if (attribute.getAttributeName().equalsIgnoreCase(
                  "Sendes fra GG")
                  && (attribute.getAttributeValue() == null || attribute
                      .getAttributeValue()
                      .equalsIgnoreCase("Nei"))) {
                ColliViewHandler colliViewHandler = colliViewHandlers
                    .get(colli);
                try {
                  if (colliViewHandler != null) {
                    colliViewHandler.addOrderLine(
                        orderLine, 0);
                  } else {
                    colliViewHandler = new ColliViewHandler(
                        "Kolli", colli,
                        // (Packable)
                        // presentationModelPackable.getBean(),
                        packable, login,
                        managerRepository,window);
                    colliViewHandler.addOrderLine(
                        orderLine, 0);
                    colliViewHandlers.put(colli,
                        colliViewHandler);
                    colliViewHandler
                        .addColliSelectionListener(this);
                    addColliListener(colliViewHandler);
                  }
                } catch (ProTransException e) {
                  Util.showErrorDialog(window, "Feil", e
                      .getMessage());
                  e.printStackTrace();
                }
              }
            }
          }
        }
      }
    }
  }

  public JButton getButtonEditColli(WindowInterface window) {
    buttonEditColli = new JButton(new EditColliAction(window));
    buttonEditColli.setEnabled(false);
    return buttonEditColli;
  }

  private final class EditColliAction extends AbstractAction {
    private static final long serialVersionUID = 1L;

    private WindowInterface window;

    /**
     * @param aWindow
     */
    public EditColliAction(WindowInterface aWindow) {
      super("Editer kolli...");
      window = aWindow;
    }

    /**
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public void actionPerformed(ActionEvent arg0) {

      if (selectedColliViewHandlers.size() != 1) {
        Util.showErrorDialog(window, "Feil",
            "Det kan bare velges en kolli for editering");
      } else {
        Colli colli = selectedColliViewHandlers.keySet().iterator()
            .next();
        ColliViewHandler handler = selectedColliViewHandlers
            .remove(colli);
        handler.openEditView(colli, false, window);
        handler.setColliSelected(false);
        colliViewHandlers.put(colli, handler);
        selectedColliViewHandlers.clear();
        handler.updateColliModel();
      }

    }
  }

  public JButton getButtonRemoveColli(WindowInterface window) {
    buttonRemoveColli = new DeleteButton("kolli", this, window);
    buttonRemoveColli.setEnabled(false);
    return buttonRemoveColli;
  }

  /*
   * public void setPresentationModel( PresentationModel presentationModel) {
   * presentationModelPackable=presentationModel;
   *
   * }
   */

  public ColliViewHandler getColliViewHandler(Colli colli) {
    return colliViewHandlers.get(colli);
  }

  public void setPackable(Packable aPackable, List<Colli> collies) {
    packable = aPackable;
    colliList.clear();
    if (collies != null) {
      colliList.addAll(collies);
    } else {
      colliList.addAll(packable.getColliList());
    }
    //Collections.sort(colliList);
  }

  public void refreshCollies() {
    fireRefreshCollies();
   
  }

  private void fireRefreshCollies() {
    for(ColliListener listener:colliListeners){
      listener.refreshCollies();
    }
   
  }
}
TOP

Related Classes of no.ugland.utransprod.gui.handlers.ColliListViewHandler$EditColliAction

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.