Package no.ugland.utransprod.gui.handlers

Source Code of no.ugland.utransprod.gui.handlers.AttributeViewHandler$ListComparator

package no.ugland.utransprod.gui.handlers;

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.Serializable;
import java.util.Comparator;
import java.util.Set;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableModel;

import no.ugland.utransprod.ProTransException;
import no.ugland.utransprod.gui.AttributeChoiceOverviewView;
import no.ugland.utransprod.gui.AttributeDataType;
import no.ugland.utransprod.gui.IconEnum;
import no.ugland.utransprod.gui.Login;
import no.ugland.utransprod.gui.WindowInterface;
import no.ugland.utransprod.gui.buttons.CancelButton;
import no.ugland.utransprod.gui.buttons.DeleteButton;
import no.ugland.utransprod.gui.buttons.NewButton;
import no.ugland.utransprod.gui.edit.AbstractEditView;
import no.ugland.utransprod.gui.edit.EditAttributeView;
import no.ugland.utransprod.gui.model.AttributeModel;
import no.ugland.utransprod.model.Attribute;
import no.ugland.utransprod.model.Order;
import no.ugland.utransprod.service.ManagerRepository;
import no.ugland.utransprod.service.OrderManager;
import no.ugland.utransprod.service.enums.LazyLoadOrderEnum;
import no.ugland.utransprod.util.ModelUtil;
import no.ugland.utransprod.util.Threadable;
import no.ugland.utransprod.util.UserUtil;
import no.ugland.utransprod.util.Util;

import org.jdesktop.swingx.JXList;
import org.jdesktop.swingx.JXTable;

import com.google.inject.Inject;
import com.jgoodies.binding.PresentationModel;
import com.jgoodies.binding.adapter.AbstractTableAdapter;
import com.jgoodies.binding.adapter.BasicComponentFactory;
import com.jgoodies.binding.adapter.ComboBoxAdapter;
import com.jgoodies.binding.list.SelectionInList;

/**
* Hjelpeklasse for visning og editering av attributter
*
* @author atle.brekka
*
*/
public class AttributeViewHandler extends
    AbstractViewHandler<Attribute, AttributeModel> {
  private static final long serialVersionUID = 1L;

  private NewButton buttonAdd;

  private DeleteButton buttonRemove;

  JButton buttonRemoveChoice;

  JXList listAttributes;
  AttributeChoiceOverviewView attributeChoiceOverviewView = AttributeChoiceOverviewView.UNKNOWN;

  private ManagerRepository managerRepository;
  private Login login;

  /**
   * @param userType
   */
  @Inject
  public AttributeViewHandler(Login aLogin,
      ManagerRepository aManagerRepository) {

    super("Attributter", aManagerRepository.getAttributeManager(), aLogin
        .getUserType(), true);
    managerRepository = aManagerRepository;
    login = aLogin;
  }

  /**
   * Lager tekstfelt for attributtnavn
   *
   * @param presentationModel
   * @return tekstfelt
   */
  public JTextField getTextFieldName(PresentationModel presentationModel) {
    JTextField textField = BasicComponentFactory
        .createTextField(presentationModel
            .getBufferedModel(AttributeModel.PROPERTY_NAME));
    textField.setEnabled(hasWriteAccess());
    textField.setName("TextFieldName");
    return textField;
  }

  public JTextField getTextFieldProdCatNo(PresentationModel presentationModel) {
    JTextField textField = BasicComponentFactory
        .createTextField(presentationModel
            .getBufferedModel(AttributeModel.PROPERTY_PROD_CAT_NO));
    textField.setEnabled(hasWriteAccess());
    textField.setName("TextFieldProdCatNo");
    return textField;
  }

  public JTextField getTextFieldProdCatNo2(PresentationModel presentationModel) {
    JTextField textField = BasicComponentFactory
        .createTextField(presentationModel
            .getBufferedModel(AttributeModel.PROPERTY_PROD_CAT_NO_2));
    textField.setEnabled(hasWriteAccess());
    textField.setName("TextFieldProdCatNo2");
    return textField;
  }

  public JXList getListAttributes(boolean singleSelection) {
    listAttributes = new JXList(
        getObjectSelectionList(new ListComparator()));
    listAttributes.setName("ListAttributes");

    listAttributes.addMouseListener(getListDoubleclickHandler(window));
    if (singleSelection) {
      listAttributes
          .setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }
    objectSelectionList.addPropertyChangeListener(
        SelectionInList.PROPERTYNAME_SELECTION_EMPTY,
        new EmptySelectionHandler());
    listAttributes.getSelectionModel().addListSelectionListener(
        new AttributeListListener());
    return listAttributes;
  }

  /**
   * Lager tekstfelt for beskrivelse
   *
   * @param presentationModel
   * @return tekstfelt
   */
  public JTextField getTextFieldDescription(
      PresentationModel presentationModel) {
    JTextField textField = BasicComponentFactory
        .createTextField(presentationModel
            .getBufferedModel(AttributeModel.PROPERTY_DESCRIPTION));
    textField.setName("TextFieldDescription");
    textField.setEnabled(hasWriteAccess());
    return textField;
  }

  /**
   * Lager komboboks for om attributt har boolskverdi eller ikke
   *
   * @param presentationModel
   * @return komboboks
   */
  public JCheckBox getCheckBoxYesNo(PresentationModel presentationModel) {
    JCheckBox checkBox = BasicComponentFactory.createCheckBox(
        presentationModel
            .getBufferedModel(AttributeModel.PROPERTY_YES_NO),
        "Ja/Nei");
    checkBox.setEnabled(hasWriteAccess());
    return checkBox;
  }

  /**
   * Lager sjekkboks for spesialt hensyn
   *
   * @param presentationModel
   * @return sjekkboks
   */
  public JCheckBox getCheckBoxSpecialConcern(
      PresentationModel presentationModel) {
    JCheckBox checkBox = BasicComponentFactory
        .createCheckBox(
            presentationModel
                .getBufferedModel(AttributeModel.PROPERTY_SPECIAL_CONCERN),
            "Spesielt hensyn");
    checkBox.setEnabled(hasWriteAccess());
    return checkBox;
  }

  public JComponent buildAttributeChoicePanel(
      PresentationModel presentationModel, WindowInterface window) {
    attributeChoiceOverviewView = new AttributeChoiceOverviewView(
        new AttributeChoiceViewHandler(login, managerRepository,
            (AttributeModel) presentationModel.getBean()));
    return attributeChoiceOverviewView.buildPanel(window);
  }

  /**
   * Henter handler for dobbeltklikk i liste oer attributter
   *
   * @param window
   * @return muselytter
   */
  public MouseListener getListDoubleclickHandler(WindowInterface window) {
    return new ListDoubleClickHandler(window);
  }

  /**
   * Henter ok-knapp
   *
   * @param aWindow
   * @return knapp
   */
  public JButton getOkButton(WindowInterface aWindow) {
    JButton buttonOk = new CancelButton(aWindow, this, false, "Ok",
        IconEnum.ICON_OK, null, true);
    buttonOk.setName("CancelAttribute");
    return buttonOk;
  }

  /**
   * Henter knapp for � legge til attributt
   *
   * @param aWindow
   * @return knapp
   */
  public JButton getAddAttributeButton(WindowInterface aWindow) {
    buttonAdd = new NewButton("attributt", this, aWindow);
    buttonAdd.setName("AddAttribute");
    buttonAdd.setEnabled(hasWriteAccess());
    return buttonAdd;
  }

  /**
   * Henter knapp for � fjerne attributt
   *
   * @param aWindow
   * @return knapp
   */
  public JButton getRemoveAttributeButton(WindowInterface aWindow) {
    buttonRemove = new DeleteButton("attributt", this, aWindow);
    buttonRemove.setName("RemoveAttribute");
    buttonRemove.setEnabled(hasWriteAccess());
    return buttonRemove;
  }

  /**
   * @param object
   * @return feilmelding
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#checkDeleteObject(java.lang.Object)
   */
  @Override
  public CheckObject checkDeleteObject(Attribute object) {
    return null;
  }

  /**
   * @param object
   * @param presentationModel
   * @param window
   * @return feilmelding
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#checkSaveObject(java.lang.Object,
   *      com.jgoodies.binding.PresentationModel,
   *      no.ugland.utransprod.gui.WindowInterface)
   */
  @Override
  public CheckObject checkSaveObject(AttributeModel object,
      PresentationModel presentationModel, WindowInterface window) {
    return null;
  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#getAddRemoveString()
   */
  @Override
  public String getAddRemoveString() {
    return "attributt";
  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#getClassName()
   */
  @Override
  public String getClassName() {
    return "Attribute";
  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#getNewObject()
   */
  @Override
  public Attribute getNewObject() {
    return new Attribute();
  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#getTableModel(no.ugland.utransprod.gui.WindowInterface)
   */
  @Override
  public TableModel getTableModel(WindowInterface window) {
    return new AttributeTableModel(objectSelectionList);
  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#getTableWidth()
   */
  @Override
  public String getTableWidth() {
    return "200dlu";
  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#getTitle()
   */
  @Override
  public String getTitle() {
    return "Attributter";
  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#getWindowSize()
   */
  @Override
  public Dimension getWindowSize() {
    return new Dimension(500, 300);
  }

  @Override
  void afterSaveObject(Attribute object, WindowInterface window) {
    enableChoices(!Util.convertNumberToBoolean(object.getYesNo()));
    if (window == null
        || !Util
            .showConfirmDialog(
                window.getComponent(),
                "Oppdatere order?",
                "Dersom spesielt hensyn er oppdatert b�r alle ordre oppdateres. �nsker du � gj�re det?")) {
      return;
    }

    Util.runInThreadWheel(window.getRootPane(), new UpdateOrderConcern(
        window), null);

  }

  /**
   * @see no.ugland.utransprod.gui.handlers.AbstractViewHandler#setColumnWidth(org.jdesktop.swingx.JXTable)
   */
  @Override
  public void setColumnWidth(JXTable table) {
  }

  /**
   * H�ndterer dobbeltklikk i liste over attributter
   *
   * @author atle.brekka
   *
   */
  final class ListDoubleClickHandler extends MouseAdapter {
    /**
     *
     */
    private WindowInterface window;

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

    /**
     * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
     */
    @Override
    public void mouseClicked(MouseEvent e) {
      if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2)

        window.dispose();

    }
  }

  /**
   * Tabellmodell for attributter
   *
   * @author atle.brekka
   *
   */
  public static final class AttributeTableModel extends AbstractTableAdapter {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    /**
     *
     */
    private static final String[] COLUMNS = { "Navn", "Beskrivelse",
        "Ja/Nei", "Spesielt hensyn" };

    /**
     * @param listModel
     */
    public AttributeTableModel(ListModel listModel) {
      super(listModel, COLUMNS);
    }

    /**
     * Henter verdi
     *
     * @param rowIndex
     * @param columnIndex
     * @return verdi
     */
    public Object getValueAt(int rowIndex, int columnIndex) {
      Attribute attribute = (Attribute) getRow(rowIndex);
      switch (columnIndex) {
      case 0:
        return attribute.getName();
      case 1:
        return attribute.getDescription();
      case 2:
        return Util.convertNumberToBoolean(attribute.getYesNo());
      case 3:
        return Util.convertNumberToBoolean(attribute
            .getSpecialConcern());
      default:
        throw new IllegalStateException("Unknown column");
      }

    }

    /**
     * @see javax.swing.table.AbstractTableModel#getColumnClass(int)
     */
    @Override
    public Class<?> getColumnClass(int columnIndex) {
      switch (columnIndex) {
      case 0:
      case 1:
        return String.class;
      case 2:
      case 3:
        return Boolean.class;
      default:
        throw new IllegalStateException("Unknown column");
      }
    }

  }

  /**
   * H�ndterer oppdtering av spesielt hensyn
   *
   * @author atle.brekka
   *
   */
  class UpdateOrderConcern implements Threadable {
    /**
     *
     */
    private WindowInterface window;

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

    /**
     * @see no.ugland.utransprod.util.Threadable#doWhenFinished(java.lang.Object)
     */
    public void doWhenFinished(Object object) {
    }

    /**
     * @see no.ugland.utransprod.util.Threadable#doWork(java.lang.Object[],
     *      javax.swing.JLabel)
     */
    public Object doWork(Object[] params, JLabel labelInfo) {
      labelInfo.setText("Oppdaterer ordre...");
      OrderManager orderManager = (OrderManager) ModelUtil
          .getBean("orderManager");
      Set<Order> orders = orderManager.findNotSent();
      int counter = 1;
      if (orders != null) {
        for (Order order : orders) {
          labelInfo.setText("Oppdaterer ordre..." + counter);
          orderManager.lazyLoadOrder(order, new LazyLoadOrderEnum[] {
              LazyLoadOrderEnum.ORDER_LINES,
              LazyLoadOrderEnum.ORDER_LINE_ORDER_LINES });
          order
              .setSpecialConcern(order
                  .getOrderLineSpecialConcerns());
          try {
            orderManager.saveOrder(order);
          } catch (ProTransException e) {
            Util.showErrorDialog(window, "Feil", e.getMessage());
            e.printStackTrace();
          }
          counter++;
        }
      }
      return null;
    }

    /**
     * @see no.ugland.utransprod.util.Threadable#enableComponents(boolean)
     */
    public void enableComponents(boolean enable) {
    }

  }

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

  /**
   * @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<AttributeModel, Attribute> getEditView(
      AbstractViewHandler<Attribute, AttributeModel> handler,
      Attribute object, boolean searching) {
    return new EditAttributeView(this, object, searching);
  }

  /**
   * Klasse for sammenlikning av attributter i liste (sortering)
   *
   * @author atle.brekka
   *
   */
  static class ListComparator implements Comparator<Attribute>, Serializable {

    /**
         *
         */
    private static final long serialVersionUID = 1L;

    /**
     * @param att1
     * @param att2
     * @return mindre enn, lik, st�rre enn
     * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
     */
    public int compare(Attribute att1, Attribute att2) {
      return att1.getName().compareTo(att2.getName());
    }

  }

  /**
   * Setter knapper enablet/disablet
   */
  void updateEnablement() {
    boolean hasSelction = objectSelectionList.hasSelection();
    if (hasSelction) {
      buttonEdit.setEnabled(true);
      buttonRemove.setEnabled(true);
    } else {
      buttonEdit.setEnabled(false);
      buttonRemove.setEnabled(false);
    }
  }

  /**
   * Klasse som oppdaterer knapper n�r det velges attributt
   *
   * @author atle.brekka
   *
   */
  class EmptySelectionHandler implements PropertyChangeListener {

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

    }

  }

  /**
   * Klasse som h�ndterer oppdatering av selsksjonsliste ved valg av
   * sttributt(er)
   *
   * @author atle.brekka
   *
   */
  class AttributeListListener implements ListSelectionListener {

    /**
     * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
     */
    public void valueChanged(ListSelectionEvent arg0) {
      updateSelection();

    }

  }

  /**
   * Oppdaterer seleksjonsliste
   */
  void updateSelection() {
    if (listAttributes.getSelectedIndices().length != 1) {
      objectSelectionList.clearSelection();
    } else {
      objectSelectionList.setSelection(listAttributes.getSelectedValue());
    }
  }

  @Override
  String getAddString() {
    return null;
  }

  public void enableChoices(boolean enable) {
    attributeChoiceOverviewView.enableComponents(enable);
  }

  public JComboBox getComboBoxDataType(PresentationModel presentationModel) {
    JComboBox comboBox = new JComboBox(
        new ComboBoxAdapter(
            AttributeDataType.getStringValues(),
            presentationModel
                .getBufferedModel(AttributeModel.PROPERTY_ATTRIBUTE_DATA_TYPE)));
    comboBox.setName("ComboBoxDataType");
    return comboBox;
  }

}
TOP

Related Classes of no.ugland.utransprod.gui.handlers.AttributeViewHandler$ListComparator

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.