You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SIPRP/trunk/siprp/ficha/ExamePanel.java

385 lines
13 KiB

/*
* ExamePanel.java
*
* Created on 29 de Março de 2004, 11:57
*/
package siprp.ficha;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import com.evolute.utils.data.*;
import com.evolute.utils.dataui.*;
import com.evolute.utils.metadb.*;
import com.evolute.utils.ui.*;
import com.evolute.utils.ui.button.*;
import com.evolute.utils.ui.panel.*;
import siprp.*;
/**
*
* @author fpalma
*/
public class ExamePanel extends JPanel
implements ChangeListener, ControllableComponent
{
private JCalendarPanel dataExamePanel;
private BetterButtonGroup tipoGroup;
private JRadioButton admissaoRadio;
private JRadioButton periodicoRadio;
private JRadioButton ocasionalRadio;
private JRadioButton outroRadio;
private RadioButtonFixedPanel ocasionalPanel;
private JTextField especificarText;
private JCalendarPanel proximoExamePanel;
private RadioButtonFixedPanel resultadoPanel;
private JTextField outrasFuncoesTexts[];
private JTextArea recomendacoesText;
private FichaDataProvider provider;
private ComponentsHashtable components;
/** Creates a new instance of ExamePanel */
public ExamePanel()
throws Exception
{
provider = (FichaDataProvider)FichaDataProvider.getProvider();
setupComponents();
setupComponentsHashtable();
}
private void setupComponents()
{
setBorder( BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
"Exame M\u00e9dico" ) );
JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();
JPanel dataExameOuterPanel = new JPanel();
JLabel dataExameLabel = new JLabel( "Data do Exame" );
dataExamePanel = new JCalendarPanel( null );
JPanel tipoPanel = new JPanel();
tipoPanel.setBorder( BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(), "Tipo" ) );
tipoGroup = new BetterButtonGroup( false );
admissaoRadio = new JRadioButton( "Admiss\u00e3o" );
tipoGroup.add( admissaoRadio );
periodicoRadio = new JRadioButton( "Peri\u00f3dico" );
tipoGroup.add( periodicoRadio );
ocasionalRadio = new JRadioButton( "Ocasional" );
tipoGroup.add( ocasionalRadio );
ocasionalRadio.addChangeListener( this );
outroRadio = new JRadioButton( "Outro" );
tipoGroup.add( outroRadio );
outroRadio.addChangeListener( this );
ocasionalPanel = new RadioButtonFixedPanel(
new IDObject[]{ new MappableObject( new Integer( 1 ), "Ap\u00f3s doen\u00e7a" ),
new MappableObject( new Integer( 2 ), "Ap\u00f3s acidente" ),
new MappableObject( new Integer( 3 ), "A pedido do trabalhador" ),
new MappableObject( new Integer( 4 ), "A pedido do servi\u00e7o" ),
new MappableObject( new Integer( 5 ), "Por mudan\u00e7a de fun\u00e7\u00e3o" ),
new MappableObject( new Integer( 6 ), "Por altera\u00e7\u00e3o das condi\u00e7\u00f5es de trabalho" ) },
false );
ocasionalPanel.setEnabled( false );
especificarText = new JTextField();
especificarText.setEnabled( false );
JPanel proximoExameOuterPanel = new JPanel();
JLabel proximoExameLabel = new JLabel( "Pr\u00f3ximo Exame" );
proximoExamePanel = new JCalendarPanel( null );
JPanel resultadoOuterPanel = new JPanel();
resultadoOuterPanel.setBorder( BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(), "Resultado" ) );
resultadoPanel = new RadioButtonFixedPanel(
new IDObject[]{ new MappableObject( new Integer( 1 ), "Apto" ),
new MappableObject( new Integer( 2 ), "Apto condicionalmente" ),
new MappableObject( new Integer( 3 ), "Inapto temporariamente" ),
new MappableObject( new Integer( 4 ), "Inapto definitivamente" ) },
false );
JLabel outrasFuncoesLabel = new JLabel( "Outras fun\u00e7\u00f5es que pode desempenhar", JLabel.CENTER );
JPanel outrasFuncoesPanel = new JPanel();
JLabel outrasFuncoesLabels[] = new JLabel[ 4 ];
outrasFuncoesTexts = new JTextField[ 4 ];
for( int n = 0; n < 4; n++ )
{
outrasFuncoesLabels[ n ] = new JLabel( "" + ( n + 1 ) );
outrasFuncoesTexts[ n ] = new JTextField();
}
JScrollPane recomendacoesScp = new JScrollPane();
recomendacoesScp.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
recomendacoesScp.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
recomendacoesText = new JTextArea();
recomendacoesText.setLineWrap( true );
recomendacoesText.setWrapStyleWord( true );
recomendacoesScp.setViewportView( recomendacoesText );
recomendacoesScp.setBorder( BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
"Outras recomenda\u00e7\u00f5es" ) );
setLayout( new GridLayout( 1, 2 ) );
add( leftPanel );
add( rightPanel );
leftPanel.setLayout( new BorderLayout() );
dataExameOuterPanel.setLayout( new BorderLayout() );
dataExameOuterPanel.add( dataExameLabel, BorderLayout.WEST );
dataExameOuterPanel.add( dataExamePanel, BorderLayout.CENTER );
leftPanel.add( dataExameOuterPanel, BorderLayout.NORTH );
leftPanel.add( tipoPanel, BorderLayout.CENTER );
proximoExameOuterPanel.setLayout( new BorderLayout() );
proximoExameOuterPanel.add( proximoExameLabel, BorderLayout.WEST );
proximoExameOuterPanel.add( proximoExamePanel, BorderLayout.CENTER );
leftPanel.add( proximoExameOuterPanel, BorderLayout.SOUTH );
GridBagLayout gridbag = new GridBagLayout();
tipoPanel.setLayout( gridbag );
GridBagConstraints constraints = new GridBagConstraints();
constraints.insets = new Insets( 0, 1, 0, 1 );
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weighty = 0;
constraints.gridheight = 1;
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( admissaoRadio, constraints );
tipoPanel.add( admissaoRadio );
gridbag.setConstraints( periodicoRadio, constraints );
tipoPanel.add( periodicoRadio );
gridbag.setConstraints( ocasionalRadio, constraints );
tipoPanel.add( ocasionalRadio );
constraints.weightx = 0.1;
constraints.gridwidth = 1;
JPanel pad = new JPanel();
gridbag.setConstraints( pad, constraints );
tipoPanel.add( pad );
constraints.weightx = 0.9;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( ocasionalPanel, constraints );
tipoPanel.add( ocasionalPanel );
constraints.weightx = 0;
constraints.gridwidth = 1;
gridbag.setConstraints( outroRadio, constraints );
tipoPanel.add( outroRadio );
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( especificarText, constraints );
tipoPanel.add( especificarText );
gridbag = new GridBagLayout();
rightPanel.setLayout( gridbag );
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 1;
constraints.weighty = 0;
gridbag.setConstraints( resultadoOuterPanel, constraints );
rightPanel.add( resultadoOuterPanel );
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
//constraints.gridheight = GridBagConstraints.REMAINDER;
constraints.weighty = 1;
// JPanel recomendacoesOuterPanel = new JPanel();
// recomendacoesOuterPanel.setLayout( new GridLayout( 1, 1 ) );
// recomendacoesOuterPanel.add( recomendacoesScp );
gridbag.setConstraints( recomendacoesScp, constraints );
rightPanel.add( recomendacoesScp );
gridbag = new GridBagLayout();
resultadoOuterPanel.setLayout( gridbag );
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.gridheight = 1;
constraints.weighty = 0;
gridbag.setConstraints( resultadoPanel, constraints );
resultadoOuterPanel.add( resultadoPanel );
gridbag.setConstraints( outrasFuncoesLabel, constraints );
resultadoOuterPanel.add( outrasFuncoesLabel );
gridbag.setConstraints( outrasFuncoesPanel, constraints );
resultadoOuterPanel.add( outrasFuncoesPanel );
for( int n = 0; n < outrasFuncoesTexts.length; n++ )
{
constraints.weightx = 0.1;
constraints.gridwidth = 1;
pad = new JPanel();
gridbag.setConstraints( pad, constraints );
resultadoOuterPanel.add( pad );
constraints.weightx = 0;
gridbag.setConstraints( outrasFuncoesLabels[ n ], constraints );
resultadoOuterPanel.add( outrasFuncoesLabels[ n ] );
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints( outrasFuncoesTexts[ n ], constraints );
resultadoOuterPanel.add( outrasFuncoesTexts[ n ] );
}
}
private void setupComponentsHashtable()
{
components = new ComponentsHashtable();
components.putComponent( provider.T_EXAMES + "." + provider.DATA, dataExamePanel );
components.putDummy( provider.T_EXAMES + "." + provider.TIPO );
components.putComponent( provider.T_EXAMES + "." + provider.OCASIONAL, ocasionalPanel );
components.putComponent( provider.T_EXAMES + "." + provider.OUTRO_TIPO, especificarText );
components.putComponent( provider.T_EXAMES + "." + provider.PROXIMO_EXAME, proximoExamePanel );
components.putComponent( provider.T_EXAMES + "." + provider.RESULTADO, resultadoPanel );
components.putComponent( provider.T_EXAMES + "." + provider.OUTRA_FUNCAO_1, outrasFuncoesTexts[ 0 ] );
components.putComponent( provider.T_EXAMES + "." + provider.OUTRA_FUNCAO_2, outrasFuncoesTexts[ 1 ] );
components.putComponent( provider.T_EXAMES + "." + provider.OUTRA_FUNCAO_3, outrasFuncoesTexts[ 2 ] );
components.putComponent( provider.T_EXAMES + "." + provider.OUTRA_FUNCAO_4, outrasFuncoesTexts[ 3 ] );
components.putComponent( provider.T_EXAMES + "." + provider.OUTRAS_RECOMENDACOES, recomendacoesText );
components.putDummy( provider.T_EXAMES + "." + provider.TRABALHADOR_ID );
components.putDummy( provider.T_EXAMES + "." + provider.MEDICO_ID );
}
public void stateChanged( ChangeEvent e )
{
if( e.getSource().equals( ocasionalRadio ) )
{
ocasionalPanel.setEnabled( ocasionalRadio.isSelected() && ocasionalRadio.isEnabled() ) ;
}
else if( e.getSource().equals( outroRadio ) )
{
especificarText.setEnabled( outroRadio.isSelected() && outroRadio.isEnabled() ) ;
}
}
public void fill( Object value )
{
clear();
// Integer trabID = (Integer) value;
// if( trabID == null )
// {
// return;
// }
// try
// {
// Integer id = provider.getLastExameIDForTrabalhador( trabID );
// if( id == null )
// {
// return;
// }
// MetaObject exame = provider.load( provider.EXAMES, new DBKey( id ) );
// byte pdf[] = (byte []) exame.getProperty( provider.PDF );
// if( pdf != null )
// {
// FileOutputStream fos = new FileOutputStream( "C:\\teste.pdf" );
// fos.write( pdf );
// fos.close();
// }
// }
// catch( Exception ex )
// {
// ex.printStackTrace();
// return;
// }
}
public Object save()
{
StringBuffer msg = new StringBuffer();
boolean hasMsg = false;
boolean hasData = false;
MetaObject exame;
if( dataExamePanel.getDate().after( new Date() ) )
{
throw new ValuesException( "N\u00E3o \u00E9 poss\u00EDvel gravar exames com datas futuras." );
}
try
{
exame = provider.createObject( provider.EXAMES );
DBField fields[] = provider.EXAMES.getInsertFields();
String exameFields[] = new String[ fields.length ];
for( int i = 0; i < exameFields.length; ++i )
{
exameFields[ i ] = fields[ i ].FULL_NAME;
}
Hashtable hash = new Hashtable();
ComponentController.save( exameFields, hash, components );
Enumeration enum = hash.keys();
while( enum.hasMoreElements() )
{
String name = ( String )enum.nextElement();
exame.setProperty( name, hash.get( name ) );
}
int tipo = 0;
if( admissaoRadio.isSelected() )
{
tipo = 1;
}
else if( periodicoRadio.isSelected() )
{
tipo = 2;
}
else if( ocasionalRadio.isSelected() )
{
tipo = 3;
}
else if( outroRadio.isSelected() )
{
tipo = 4;
}
exame.setProperty( provider.TIPO, new Integer( tipo ) );
if( tipo != 3 )
{
exame.setProperty( provider.EXAMES.getFieldByName( provider.OCASIONAL ).FULL_NAME, null );
}
if( tipo != 4 )
{
exame.setProperty( provider.EXAMES.getFieldByName( provider.OUTRO_TIPO ).FULL_NAME, "" );
}
}
catch( Exception ex )
{
ex.printStackTrace();
return null;
}
if( hasMsg )
{
throw new ValuesException( msg.toString() );
}
return exame;
}
public void clear()
{
String names[] = (String[])components.keySet().toArray( new String[0] );
ComponentController.clear( names, components );
tipoGroup.setIntSelected( 0 );
dataExamePanel.setDate( new Date() );
}
public void setEnabled( boolean enable )
{
String names[] = (String[])components.keySet().toArray( new String[0] );
ComponentController.setEnabled( names, enable, components );
admissaoRadio.setEnabled( enable );
periodicoRadio.setEnabled( enable );
ocasionalRadio.setEnabled( enable );
outroRadio.setEnabled( enable );
ocasionalPanel.setEnabled( ocasionalRadio.isSelected() && ocasionalRadio.isEnabled() ) ;
especificarText.setEnabled( outroRadio.isSelected() && outroRadio.isEnabled() );
}
}