Package de.iritgo.aktera.address.gui

Source Code of de.iritgo.aktera.address.gui.AddressQueryPane

/**
* This file is part of the Iritgo/Aktera Framework.
*
* Copyright (C) 2005-2011 Iritgo Technologies.
* Copyright (C) 2003-2005 BueroByte GbR.
*
* Iritgo licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package de.iritgo.aktera.address.gui;


import de.iritgo.aktario.core.Engine;
import de.iritgo.aktario.core.gui.GUIPane;
import de.iritgo.aktario.core.gui.IBusyButton;
import de.iritgo.aktario.core.gui.IComboBoxIdItem;
import de.iritgo.aktario.core.gui.ITableColumn;
import de.iritgo.aktario.core.gui.SwingGUIPane;
import de.iritgo.aktario.core.iobject.IObject;
import de.iritgo.aktario.core.logger.Log;
import de.iritgo.aktario.core.resource.ResourceService;
import de.iritgo.aktera.address.AddressClientManager;
import de.iritgo.aktera.address.wsclient.Address;
import de.iritgo.aktera.address.wsclient.AddressClientService;
import de.iritgo.aktera.address.wsclient.AddressStore;
import de.iritgo.simplelife.math.IntRange;
import de.iritgo.simplelife.string.StringTools;
import org.swixml.SwingEngine;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.LinkedList;
import java.util.List;


@SuppressWarnings("serial")
public class AddressQueryPane extends SwingGUIPane
{
  private class AddressTableModel extends AbstractTableModel
  {
    public int getColumnCount()
    {
      return columns.size();
    }

    public int getRowCount()
    {
      return addresses.size();
    }

    @Override
    public String getColumnName(int column)
    {
      return columns.get(column).getTitle().get();
    }

    public Object getValueAt(int row, int column)
    {
      Address address = addresses.get(row);

      switch (column)
      {
        case 0:
          return address.getId();

        case 1:
          return address.getLastName();

        case 2:
          return address.getFirstName();

        case 3:
          return address.getCompany();

        default:
          return "";
      }
    }

    @Override
    public void setValueAt(Object value, int row, int column)
    {
    }
  }

  private class AddressTableCellRenderer extends DefaultTableCellRenderer
  {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int rowIndex, int colIndex)
    {
      super.getTableCellRendererComponent(table, value, isSelected, hasFocus, rowIndex, colIndex);

      switch (colIndex)
      {
        default:
          setIcon(columns.get(colIndex).getCellIcon());
          setText(value.toString());

          break;
      }

      return this;
    }

    @Override
    public void validate()
    {
    }

    @Override
    public void revalidate()
    {
    }

    @Override
    protected void firePropertyChange(String propertyName, Object oldValue, Object newValue)
    {
    }

    @Override
    public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue)
    {
    }
  }

  private class AddressTableMouseListener extends MouseAdapter
  {
    @Override
    public void mouseClicked(MouseEvent e)
    {
      int col = addressTable.columnAtPoint(e.getPoint());
      int row = addressTable.getSelectedRow();

      if ((col < 0) || (row < 0))
      {
        return;
      }

      col = addressTable.getColumnModel().getColumn(col).getModelIndex();

      String addressId = (String) addressTable.getValueAt(addressTable.getSelectedRow(), 0);
      Address address = null;

      for (Address searchAddress : addresses)
      {
        if (searchAddress.getId().equals(addressId))
        {
          address = searchAddress;
        }
      }

      if (e.getClickCount() == 2)
      {
        AddressViewDialog dialog = new AddressViewDialog();

        dialog.show(address.getStoreId(), address.getId());
      }
      else
      {
        columns.get(col).onCellClicked(address, addressTable, e);
      }
    }
  }

  private List<ITableColumn> columns;

  public JComboBox addressStore;

  public JTextField searchText;

  public JTable addressTable;

  private List<Address> addresses = new LinkedList();

  public IBusyButton search;

  public Action doSearch = new AbstractAction()
  {
    public void actionPerformed(ActionEvent e)
    {
      if (IComboBoxIdItem.getSelectedId(addressStore) != null)
      {
        new Thread()
        {
          public void run()
          {
            search(IComboBoxIdItem.getSelectedId(addressStore).toString(), searchText.getText());
          }
        }.start();
      }
    }
  };

  public AddressQueryPane()
  {
    super("AddressQueryGuiPane");
  }

  @Override
  public void initGUI()
  {
    try
    {
      final ResourceService resources = Engine.instance().getResourceService();
      SwingEngine swingEngine = new SwingEngine(this);

      AddressClientManager acm = (AddressClientManager) Engine.instance().getManager(AddressClientManager.ID);

      columns = acm.getAddressTableColumns();

      JPanel panel = (JPanel) swingEngine.render(getClass().getResource("/swixml/AddressQueryPane.xml"));

      content.add(panel, createConstraints(0, 0, 1, 1, GridBagConstraints.BOTH, 100, 100, null));

      search.idle();

      AddressTableCellRenderer renderer = new AddressTableCellRenderer();
      AddressTableModel model = new AddressTableModel();

      addressTable.setModel(model);
      addressTable.getColumnModel().getColumn(0).setMinWidth(0);
      addressTable.getColumnModel().getColumn(0).setMaxWidth(0);

      for (int i = 1; i < model.getColumnCount(); ++i)
      {
        addressTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
      }

      addressTable.addMouseListener(new AddressTableMouseListener());

      for (int i : new IntRange(0, columns.size() - 1))
      {
        ITableColumn c = columns.get(i);

        if (StringTools.isTrimEmpty(c.getTitle().get()))
        {
          if (c.getCellIcon() != null)
          {
            addressTable.getColumnModel().getColumn(i).setMinWidth(c.getCellIcon().getIconWidth() + 4);
            addressTable.getColumnModel().getColumn(i).setMaxWidth(c.getCellIcon().getIconWidth() + 4);
          }
          else
          {
            addressTable.getColumnModel().getColumn(i).setMinWidth(4);
            addressTable.getColumnModel().getColumn(i).setMaxWidth(4);
          }
        }
      }

      TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>();

      addressTable.setRowSorter(sorter);
      sorter.setModel(model);

      addressStore.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          search(IComboBoxIdItem.getSelectedId(addressStore).toString(), searchText.getText());
        }
      });

      searchText.grabFocus();

      new Thread()
      {
        @Override
        public void run()
        {
          search.busy();

          AddressClientService acs = (AddressClientService) Engine.instance().getManager(
                  AddressClientService.ID);

          for (final AddressStore ads : acs.listAddressStores())
          {
            SwingUtilities.invokeLater(new Runnable()
            {
              public void run()
              {
                addressStore.addItem(new IComboBoxIdItem(ads.getName(), resources
                        .getStringWithoutException(ads.getTitle())));
              }
            });
          }

          final String defaultAddressStoreId = acs.getDefaultAddressStoreName();

          SwingUtilities.invokeLater(new Runnable()
          {
            public void run()
            {
              IComboBoxIdItem.selectItemWithId(addressStore, defaultAddressStoreId);
            }
          });
          search(defaultAddressStoreId, "");
          search.idle();
        }
      }.start();
    }
    catch (Exception x)
    {
      Log.logError("plugin", "AddressQueryPane.initGUI", x.toString());
    }
  }

  private void search(String addressStoreName, String searchText)
  {
    search.busy();
    AddressClientService acs = (AddressClientService) Engine.instance().getManager(AddressClientService.ID);
    addresses = acs.listAddresses(addressStoreName, searchText, 0, 100);
    SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        ((AddressTableModel) addressTable.getModel()).fireTableDataChanged();
      }
    });
    search.idle();
  }

  @Override
  public void loadFromObject(IObject iObject)
  {
  }

  @Override
  public void storeToObject(IObject iObject)
  {
  }

  @Override
  public GUIPane cloneGUIPane()
  {
    return new AddressQueryPane();
  }
}
TOP

Related Classes of de.iritgo.aktera.address.gui.AddressQueryPane

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.