XRecordChooser.java :  » ERP-CRM-Financial » Evaristo-4.0 » com » m16e » tools » gui » Java Open Source

Java Open Source » ERP CRM Financial » Evaristo 4.0 
Evaristo 4.0 » com » m16e » tools » gui » XRecordChooser.java
/*
 * XRecordChooser.java
 *
 */

package com.m16e.tools.gui;

import com.m16e.tools.Tuple;
import com.m16e.tools.datamodels.ComboData;
import com.m16e.tools.datamodels.QueryData;
import com.m16e.tools.datamodels.XgmTableDataModel;
import com.m16e.tools.datamodels.XgmTableModel;
import com.m16e.tools.db.DbBundle;
import com.m16e.tools.db.DbField;
import com.m16e.tools.db.DbTableInterface;
import com.m16e.tools.i18n.LocaleBundle;
import com.m16e.tools.i18n.MpBundle;
import com.m16e.tools.xgm.XgmAction;
import com.m16e.tools.xgm.XgmComponent;
import com.m16e.tools.xgm.XgmContainer;
import com.m16e.tools.xgm.XgmException;
import com.m16e.tools.xgm.XgmFactory;
import com.m16e.tools.xgm.XgmRootContainer;
import com.m16e.tools.xgm.XgmTable;
import com.m16e.tools.xml.XmlTreeNode;
import com.m16e.tools.xml.XmlTreeNodeable;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.sql.SQLException;
import javax.swing.AbstractAction;
import javax.swing.InputMap;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import org.apache.log4j.Logger;

///////////////////////////////////////////////////////////////
public class XRecordChooser 
extends XgmRootContainer
{
  public static final String DIALOGS_DIR = "dialogs";
  String layoutFile = null;
  String tableCompName = null;
  
  DbTableInterface dbTab = null;
  XgmTable xgmTable = null;

  private static Logger logger = Logger.getLogger( XRecordChooser.class );

  ///////////////////////////////////////////////////////////////
  public XRecordChooser( DbTableInterface table )
  throws SQLException
  {
    dbTab = table;
    layoutFile = dbTab.getTabLayoutFilename();
    tableCompName = XgmContainer.PREFIX_TABLE + dbTab.getTableName();
  }
  
  ///////////////////////////////////////////////////////////////
  public void setLayoutFile( String layoutFile )
  {
    this.layoutFile = layoutFile;
  }
  
  ///////////////////////////////////////////////////////////////
  public void init() 
  throws XgmException
  {
    try
    {
//      String layout = dbTab.getTabLayoutFilename();

      String text =
        XgmFactory.getInstance().readLayout( layoutFile );
      XmlTreeNode xtnDialog = new XmlTreeNode();
      xtnDialog.fromXml( text );
      xtnDialog.setAttribute( TYPE, XgmContainer.ContainerType.TYPE_PANEL.getName() );
      java.util.List<XmlTreeNodeable> lstChildren = xtnDialog.getChildren();
      XmlTreeNodeable xtn = xtnDialog.getChildren().get( 0 );
      for( ; lstChildren.size() > 1; )
        lstChildren.remove( 1 );
      setLayout( layoutFile, xtnDialog, true );
      xgmTable = (XgmTable) getComponentByName( tableCompName );
    }
    catch( Exception e )
    {
      String msg = e.getLocalizedMessage();
      logger.warn( msg, e );
      throw new XgmException( XgmException.GUI_ERROR, msg );
    }
  }
  
  ///////////////////////////////////////////////////////////////
  public XgmTable getTable() { return xgmTable; }
  
  ///////////////////////////////////////////////////////////////
  public Tuple getRecord()
  {
    xgmTable.getXgmTableDataModel().requery();
    JOptionPane jop = new JOptionPane( getSwingComponent() );
    jop.setOptionType( JOptionPane.OK_CANCEL_OPTION );
    //jop.setWantsInput( true );
    jop.setSelectionValues( null );
    jop.setInitialSelectionValue( getSwingComponent() );
    String tableName = DbBundle.getInstance().getBundleMessage( dbTab.getTableName() );
    JDialog jd = 
      jop.createDialog( 
        getSwingComponent(), 
        LocaleBundle.getInstance().getBundleMessage( 
          LocaleBundle.MSG_LIST_OF, tableName ) );
    AbstractAction aa = new AbstractAction()
    {
      public void actionPerformed( ActionEvent e )
      {
        processHelp();
      }
    };
    InputMap wim =
      jop.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW );
    String actionName = "process-xrecordchosser-F3"; 
    wim.put( KeyStroke.getKeyStroke( KeyEvent.VK_F3, 0 ), actionName );
    jop.getActionMap().put( actionName, aa );
    
    //processHelp();
    
    //jd.setSize( 600, 400 );
    jd.setResizable( true );
    jop.selectInitialValue();
    jd.setVisible( true );
    jd.dispose();
    Object val = jop.getValue();
    if( val instanceof Integer )
    {
      int op = ((Integer) val).intValue();
      if( op != JOptionPane.OK_OPTION )
        return null;
    }
    else
      return null;
    XmlTreeNodeable result = null;
    Tuple record = null;
    try
    {
      result = getXtnValueForResult();
      dbTab.setData( result );
      record = dbTab.getTuple();
    }
    catch( Exception e )
    {
      String msg = e.getLocalizedMessage();
      logger.warn( msg, e );
      JOptionPane.showMessageDialog( getSwingComponent(), msg );
    }
    return record;
  }

  ///////////////////////////////////////////////////////////////
  public static void registerAction( XgmComponent xc, XgmAction action )
  {
    Component comp = xc.getSwingComponent();
    if( comp instanceof JComponent )
    {
      JComponent jComp = (JComponent) comp;
      InputMap wim =
        jComp.getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW );
      wim.put( action.getKeyStroke(), action.getActionName() );
      jComp.getActionMap().put(
        action.getActionName(), 
        action );
    }
  }
  
  ///////////////////////////////////////////////////////////////
  void requery( QueryData where )
  {
    XgmTableDataModel xtdm = xgmTable.getXgmTableDataModel(); 
    xtdm.setWhereClause( where );
    xtdm.requery();
  }
  
  ///////////////////////////////////////////////////////////////
  static MpBundle localeBundle = LocaleBundle.getInstance();
  
  static final String[] STRING_OPS =
  {
    localeBundle.getBundleMessage( LocaleBundle.MSG_OP_STARTS_WITH ),
    localeBundle.getBundleMessage( LocaleBundle.MSG_OP_CONTAINS ),
    localeBundle.getBundleMessage( LocaleBundle.MSG_OP_ENDS_WITH )
  };
    
  static final String[] OBJ_OPS =
  {
    localeBundle.getBundleMessage( LocaleBundle.MSG_OP_EQUAL ),
    localeBundle.getBundleMessage( LocaleBundle.MSG_OP_GREATER_THEN ),
    localeBundle.getBundleMessage( LocaleBundle.MSG_OP_LESSER_THEN )
  };
    
  ///////////////////////////////////////////////////////////////
  void processHelp()
  {
    QueryData where = null;
    XgmTableModel xtm = null;
    if( xgmTable != null )
    {
      xtm = xgmTable.getXgmTableModel();
      where = xtm.getXgmTableDataModel().getWhereClause();
    }
    try
    {
      JPanel jpMain = new JPanel( new BorderLayout() );
      JCheckBox jcbSearch = new JCheckBox( "Limpar pesquisa anterior" );
      jpMain.add( jcbSearch, BorderLayout.NORTH );
      
      JPanel jpChoose = new JPanel( new GridLayout( 0, 3 ) );
      JLabel jlFld = new JLabel( "Campo:" );
      jpChoose.add( jlFld );
      jpChoose.add( new JLabel() );
      
      final JComboBox jcbOp = new JComboBox();
      JComboBox jcbFld = new JComboBox( dbTab.getDbTable().getTitlesForCombo() );
      jcbFld.addItemListener(
        new ItemListener() 
        {
          public void itemStateChanged(ItemEvent e) 
          {
            ComboData cd = (ComboData) e.getItemSelectable().getSelectedObjects()[0];
            switch( dbTab.getDbTable().getField( cd.getCode() ).getDbFieldType() )
            {
              case CHAR:
              case VARCHAR:
                jcbOp.removeAllItems();
                for( String item : STRING_OPS )
                  jcbOp.addItem( item );
                break;
              default:
                jcbOp.removeAllItems();
                for( String item : OBJ_OPS )
                  jcbOp.addItem( item );
                break;
            }
          }
        }
        );
      jpChoose.add( jcbFld );
      JLabel jlVal = new JLabel( "Valor:" );
      jpChoose.add( jlVal );
      jpChoose.add( jcbOp );
      
      JTextField jtfVal = new JTextField( 40 );
      jpChoose.add( jtfVal );
      jpMain.add( jpChoose, BorderLayout.CENTER );
      
      JOptionPane jop = new JOptionPane( jpMain );
      jop.setOptionType( JOptionPane.OK_CANCEL_OPTION );
      JDialog jd = jop.createDialog( getSwingComponent(), "Pesquisa" );
      jd.setResizable( true );
      jop.selectInitialValue();
      jd.setVisible( true );
      jd.setModal( true );
      jd.dispose();
      Object val = jop.getValue();
      if( val instanceof Integer )
      {
        int op = ((Integer) val).intValue();
        if( op == JOptionPane.OK_OPTION )
        {
          DbField dbf = dbTab.getField( jcbFld.getSelectedIndex() );
          where = new QueryData( dbf.getFieldName() );
          where.addArg( jtfVal.getText() );
        }
        requery( where );
      }
      
    }
    catch( Exception e1 )
    {
      String msg = e1.getLocalizedMessage();
      logger.warn( msg, e1 );
      JOptionPane.showMessageDialog( null, msg );
    }
  }

  ///////////////////////////////////////////////////////////////
  // interface KeyListener: END
  ///////////////////////////////////////////////////////////////
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.