/*
 * AvisosPanel.java
 *
 * Created on 21 de Maio de 2004, 13:06
 */

package siprp.clientes;

import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import java.util.*;

import com.evolute.utils.*;
import com.evolute.utils.dataui.*;
import com.evolute.utils.jdo.*;
import com.evolute.utils.ui.*;

import siprp.*;
import siprp.data.*;

/**
 *
 * @author  fpalma
 */
public class AvisosPanel extends JPanel
	implements ActionListener, ControllableComponent
{
	private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance( DateFormat.SHORT );
	private JDOProvider JDO;
	private FichaDataProvider provider;
	private SIPRPTracker tracker;
	
	private JPanel empresaPanel;
	private JPanel estabelecimentosPanel;
	private JPanel trabalhadoresPanel;
	
//	private AvisoData avisos[];
//	private AvisoData avisosEmpresa[];
//	private AvisoData avisosEstabelecimento[];
//	private AvisoData avisosTrabalhador[];
	
	private Object avisosEmpresa[][];
	private Object avisosEstabelecimento[][];
	private Object avisosTrabalhador[][];
	
	private boolean refreshed = false;
	
	private Hashtable buttonHash;
	private Hashtable buttonTypeHash;
	
	/** Creates a new instance of AvisosPanel */
	public AvisosPanel(/* AvisoData avisosEmpresa[], AvisoData avisosEstabelecimento[], AvisoData avisosTrabalhador[]*/ )
		throws Exception
	{
//		this.avisosEmpresa = new AvisoData[ 0 ];
//		this.avisosEstabelecimento = new AvisoData[ 0 ];
//		this.avisosTrabalhador = new AvisoData[ 0 ];
//		setupComponents();
		buttonHash = new Hashtable();
		buttonTypeHash = new Hashtable();
		JDO = (JDOProvider) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
//		System.out.println( "public AvisosPanel() JDO: " + JDO );
	}
	
	private void setupComponents()
	{
		empresaPanel = new JPanel();
		empresaPanel.setBorder( 
			BorderFactory.createTitledBorder( 
				BorderFactory.createLineBorder( new Color( 0.0f, 0.0f, 0.0f, 0.0f ), 1 ), "Empresas" ) );
		empresaPanel.setLayout( new GridLayout( avisosEmpresa.length, 1 ) );
		GridBagConstraints constraints = new GridBagConstraints();
		constraints.insets = new Insets( 1, 1, 1, 1 );
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.weighty = 0;
		for( int n = 0; n < avisosEmpresa.length; n++ )
		{
			JPanel pan = new JPanel();
			GridBagLayout gridbag = new GridBagLayout();
			pan.setBorder( BorderFactory.createLineBorder( Color.black, 1 ) );
//			EmpresaData empresa = (EmpresaData)avisosEmpresa[ n ].get( AvisoData.EMPRESA );
			pan.setLayout( gridbag );
			constraints.gridheight = GridBagConstraints.REMAINDER;
			constraints.gridx = 0;
			constraints.weightx = 0;
			constraints.gridwidth = 1;
			JButton tratarButton = new JButton( "Tratar" );
			gridbag.setConstraints( tratarButton, constraints );
			pan.add( tratarButton );
			//buttonHash.put( tratarButton, avisosEmpresa[ n ] );
//			buttonHash.put( tratarButton, new Integer( n ) );
//			buttonHash.put( tratarButton, avisosEmpresa[ n ].get( AvisoData.ID ) );
			buttonHash.put( tratarButton, avisosEmpresa[ n ][ 0 ] );
			buttonTypeHash.put( tratarButton, new Integer( AvisoConstants.TIPO_EMPRESA ) );
			tratarButton.addActionListener( this );
			
			constraints.gridx = 1;
			constraints.weightx = 1;
			constraints.gridheight = 1;
			constraints.gridwidth = GridBagConstraints.REMAINDER;
//			JLabel empresaLabel = new JLabel( "" + empresa.get( EmpresaData.DESIGNACAO_SOCIAL ) );
			JLabel empresaLabel = new JLabel( "" + avisosEmpresa[ n ][ 3 ]  );
			gridbag.setConstraints( empresaLabel, constraints );
			pan.add( empresaLabel );
			
			
			constraints.weightx = 1;
			constraints.gridwidth = GridBagConstraints.REMAINDER;
			//JLabel descricaoLabel = new JLabel( (String)avisosEmpresa[ n ].get( AvisoData.DESCRICAO ) );
			JLabel descricaoLabel = criarDescricao( avisosEmpresa[ n ] );
			gridbag.setConstraints( descricaoLabel, constraints );
			pan.add( descricaoLabel );
			
			empresaPanel.add( pan );
		}

		estabelecimentosPanel = new JPanel();
		estabelecimentosPanel.setBorder( 
			BorderFactory.createTitledBorder( 
				BorderFactory.createLineBorder( new Color( 0.0f, 0.0f, 0.0f, 0.0f ), 1 ), "Estabelecimentos" ) );
		estabelecimentosPanel.setLayout( new GridLayout( avisosEstabelecimento.length, 1 ) );

		for( int n = 0; n < avisosEstabelecimento.length; n++ )
		{
			Date dataAviso = ( Date ) avisosEstabelecimento[ n ][ 5 ];
			Date dataEvento = ( Date ) avisosEstabelecimento[ n ][ 1 ];
			Calendar calAviso = Calendar.getInstance();
			calAviso.setTime( dataAviso );
			Calendar calEvento = Calendar.getInstance();
			calEvento.setTime( dataEvento );
			boolean mesmoDia = 
					( calAviso.get( Calendar.YEAR ) == calEvento.get( Calendar.YEAR ) ) &&
					( calAviso.get( Calendar.MONTH ) == calEvento.get( Calendar.MONTH ) ) &&
					( calAviso.get( Calendar.DAY_OF_MONTH ) == calEvento.get( Calendar.DAY_OF_MONTH ) );
			JPanel pan = new JPanel();
			GridBagLayout gridbag = new GridBagLayout();
			pan.setBorder( BorderFactory.createLineBorder( Color.black, 1 ) );
//			EstabelecimentoData estabelecimento = (EstabelecimentoData)avisosEstabelecimento[ n ].get( AvisoData.ESTABELECIMENTO );
//			EmpresaData empresa = (EmpresaData)estabelecimento.get( EstabelecimentoData.EMPRESA );
			pan.setLayout( gridbag );
			constraints.gridheight = GridBagConstraints.REMAINDER;
			constraints.gridx = 0;
			constraints.weightx = 0;
			constraints.gridwidth = 1;
			JButton tratarButton = new JButton( mesmoDia ? "Confirmar" : "Marcar" );
			gridbag.setConstraints( tratarButton, constraints );
			pan.add( tratarButton );
			//buttonHash.put( tratarButton, avisosEstabelecimento[ n ] );
//			buttonHash.put( tratarButton, new Integer( n + avisosEmpresa.length ) );
//			buttonHash.put( tratarButton, avisosEstabelecimento[ n ].get( AvisoData.ID ) );
			buttonHash.put( tratarButton, avisosEstabelecimento[ n ][ 0 ] );
			buttonTypeHash.put( tratarButton, new Integer( AvisoConstants.TIPO_ESTABELECIMENTO ) );
			tratarButton.addActionListener( this );
			
			constraints.gridx = 1;
			constraints.weightx = 1;
			constraints.gridheight = 1;
			constraints.gridwidth = GridBagConstraints.REMAINDER;
//			JLabel empresaLabel = new JLabel( "" + empresa.get( EmpresaData.DESIGNACAO_SOCIAL ) );
			JLabel empresaLabel = new JLabel( "" + avisosEstabelecimento[ n ][ 3 ] );
			gridbag.setConstraints( empresaLabel, constraints );
			pan.add( empresaLabel );
			
//			JLabel estabelecimentoLabel = new JLabel( "" + estabelecimento.get( EstabelecimentoData.NOME ) );
			JLabel estabelecimentoLabel = new JLabel( "" + avisosEstabelecimento[ n ][ 4 ] );
			gridbag.setConstraints( estabelecimentoLabel, constraints );
			pan.add( estabelecimentoLabel );
			
			constraints.gridwidth = GridBagConstraints.REMAINDER;
			//JLabel descricaoLabel = new JLabel( (String)avisosEstabelecimento[ n ].get( AvisoData.DESCRICAO ) );
			JLabel descricaoLabel = criarDescricao( avisosEstabelecimento[ n ] );
			gridbag.setConstraints( descricaoLabel, constraints );
			pan.add( descricaoLabel );
			
			estabelecimentosPanel.add( pan );
		}

		trabalhadoresPanel = new JPanel();
		trabalhadoresPanel.setBorder( 
			BorderFactory.createTitledBorder( 
				BorderFactory.createLineBorder( new Color( 0.0f, 0.0f, 0.0f, 0.0f ), 1 ), "Trabalhadores" ) );
		trabalhadoresPanel.setLayout( new GridLayout( avisosTrabalhador.length, 1 ) );

		for( int n = 0; n < avisosTrabalhador.length; n++ )
		{
			Date dataAviso = ( Date ) avisosTrabalhador[ n ][ 6 ];
			Date dataEvento = ( Date ) avisosTrabalhador[ n ][ 1 ];
			Calendar calAviso = Calendar.getInstance();
			calAviso.setTime( dataAviso );
			Calendar calEvento = Calendar.getInstance();
			calEvento.setTime( dataEvento );
			boolean mesmoDia = 
					( calAviso.get( Calendar.YEAR ) == calEvento.get( Calendar.YEAR ) ) &&
					( calAviso.get( Calendar.MONTH ) == calEvento.get( Calendar.MONTH ) ) &&
					( calAviso.get( Calendar.DAY_OF_MONTH ) == calEvento.get( Calendar.DAY_OF_MONTH ) );
			JPanel pan = new JPanel();
			GridBagLayout gridbag = new GridBagLayout();
			pan.setBorder( BorderFactory.createLineBorder( Color.black, 1 ) );
//			TrabalhadorData trabalhador = (TrabalhadorData)avisosTrabalhador[ n ].get( AvisoData.TRABALHADOR );
//			EstabelecimentoData estabelecimento = (EstabelecimentoData)trabalhador.get( TrabalhadorData.ESTABELECIMENTO );
//			EmpresaData empresa = (EmpresaData)estabelecimento.get( EstabelecimentoData.EMPRESA );
			pan.setLayout( gridbag );
			constraints.gridheight = GridBagConstraints.REMAINDER;
			constraints.gridx = 0;
			constraints.weightx = 0;
			constraints.gridwidth = 1;
			JButton tratarButton = new JButton( mesmoDia ? "Confirmar" : "Marcar" );
			gridbag.setConstraints( tratarButton, constraints );
			pan.add( tratarButton );
			//buttonHash.put( tratarButton, avisosTrabalhador[ n ] );
//			buttonHash.put( tratarButton, new Integer( n + avisosEmpresa.length + avisosEstabelecimento.length ) );
//			buttonHash.put( tratarButton, avisosTrabalhador[ n ].get( AvisoData.ID ) );
			buttonHash.put( tratarButton, avisosTrabalhador[ n ][ 0 ] );
			buttonTypeHash.put( tratarButton, new Integer( AvisoConstants.TIPO_TRABALHADOR ) );
			tratarButton.addActionListener( this );

			constraints.gridx = 1;
			constraints.weightx = 1;
			constraints.gridheight = 1;
			constraints.gridwidth = GridBagConstraints.REMAINDER;
//			JLabel empresaLabel = new JLabel( "" + empresa.get( EmpresaData.DESIGNACAO_SOCIAL ) );
			JLabel empresaLabel = new JLabel( "" + avisosTrabalhador[ n ][ 3 ] );
			gridbag.setConstraints( empresaLabel, constraints );
			pan.add( empresaLabel );

//			JLabel estabelecimentoLabel = new JLabel( "" + estabelecimento.get( EstabelecimentoData.NOME ) );
			JLabel estabelecimentoLabel = new JLabel( "" + avisosTrabalhador[ n ][ 4 ] );
			gridbag.setConstraints( estabelecimentoLabel, constraints );
			pan.add( estabelecimentoLabel );

//			JLabel trabalhadorLabel = new JLabel( "" + trabalhador.get( TrabalhadorData.NOME ) );
			JLabel trabalhadorLabel = new JLabel( "" + avisosTrabalhador[ n ][ 5 ] );
			gridbag.setConstraints( trabalhadorLabel, constraints );
			pan.add( trabalhadorLabel );
			constraints.gridwidth = GridBagConstraints.REMAINDER;
			//JLabel descricaoLabel = new JLabel( (String)avisosTrabalhador[ n ].get( AvisoData.DESCRICAO ) );
			JLabel descricaoLabel = criarDescricao( avisosTrabalhador[ n ] );
			gridbag.setConstraints( descricaoLabel, constraints );
			pan.add( descricaoLabel );

			trabalhadoresPanel.add( pan );
		}

//		Vector v = new Vector( Arrays.asList( avisosEmpresa ) );
//		v.addAll( Arrays.asList( avisosTrabalhador ) );
//		v.addAll( Arrays.asList( avisosEstabelecimento ) );
//		avisos = (AvisoData []) v.toArray( new AvisoData[0] );
		
		JScrollPane scp = new JScrollPane();
		setLayout( new GridLayout( 1, 1 ) );
		add( scp );
		JPanel contentPanel = new JPanel();
		scp.setViewportView( contentPanel );
//		contentPanel.setLayout( new BoxLayout( contentPanel, BoxLayout.Y_AXIS ) );
//		contentPanel.setLayout( new FlowLayout() );
		GridBagLayout gridbag = new GridBagLayout();
		contentPanel.setLayout( gridbag );
		constraints = new GridBagConstraints();
		constraints.insets = new Insets( 1, 1, 1, 1 );
		constraints.fill = GridBagConstraints.BOTH;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.weightx = 1;
		constraints.gridheight = 1;
		constraints.weighty = 0;
		if( avisosEmpresa.length > 0 )
		{
			gridbag.setConstraints( empresaPanel, constraints );
			contentPanel.add( empresaPanel );
		}
		if( avisosTrabalhador.length > 0 )
		{
//			contentPanel.add( new JLabel( " " ) );
			gridbag.setConstraints( trabalhadoresPanel, constraints );
			contentPanel.add( trabalhadoresPanel );
		}
		if( avisosEstabelecimento.length > 0 )
		{
//			contentPanel.add( new JLabel( " " ) );
			gridbag.setConstraints( estabelecimentosPanel, constraints );
			contentPanel.add( estabelecimentosPanel );
		}
	}

	public void refresh()
	{
		if( refreshed )
		{
			return;
		}
		refreshed = true;
		try
		{
			provider = ( FichaDataProvider ) FichaDataProvider.getProvider();
//		Collection c = AvisoData.load( AvisoData.class, " estabelecimento_id == \"null\" ",
//				AvisoData.DATA_EVENTO + " ascending" );
			
//		Collection c = AvisoData.load( AvisoData.class, "(tipo == " + AvisoData.TIPO_EMPRESA+")",// + ") && ( data_aviso <= CURRENT_DATE )",
//				AvisoData.DATA_EVENTO + " ascending" );
//		Collection c = AvisoData.load( AvisoData.class, new Object[]{ /*new Integer( AvisoData.TIPO_EMPRESA ), */new Date() },
//												new String[]{ /*"tipo", */"data_aviso" },
//												new String[]{ "=="/*, "==" */},
//												new String[]{ AvisoData.DATA_EVENTO + " ascending" } );
			
//		if( c == null )
//		{
//			avisosEmpresa = new AvisoData[ 0 ];
//		}
//		else
//		{
//
//			avisosEmpresa = ( AvisoData[] )c.toArray( new AvisoData[ c.size() ] );
//		}
			
//		Integer ids[] = provider.getAvisosIDByTipoAndDate( new Integer( AvisoConstants.TIPO_EMPRESA ), new Date() );
//		avisosEmpresa = new AvisoData[ ids.length ];
//		if( JDO == null )
//		{
//			JDO = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
//		}
////		System.out.println( "JDO: " + JDO );
//		for( int n = 0; n < avisosEmpresa.length; n++ )
//		{
//			avisosEmpresa[ n ] = (AvisoData) JDO.load( AvisoData.class, ids[ n ] );
//		}
//		
////System.out.println( "EmpresaData " + avisosEmpresa.length );
////		c = AvisoData.load( AvisoData.class, " tipo == " + AvisoData.TIPO_ESTABELECIMENTO,// + ") && ( data_aviso <= new Date() )",
////				AvisoData.DATA_EVENTO + " ascending" );
////		c = AvisoData.load( AvisoData.class, "estabelecimento_id != \"null\" "
////			+ " && trabalhador_id == \"null\"", AvisoData.DATA_EVENTO + " ascending" );
////		if( c == null )
////		{
////			avisosEstabelecimento = new AvisoData[ 0 ];
////		}
////		else
////		{
////			avisosEstabelecimento = ( AvisoData[] )c.toArray( new AvisoData[ c.size() ] );
////		}
//
//		ids = provider.getAvisosIDByTipoAndDate( new Integer( AvisoConstants.TIPO_ESTABELECIMENTO ), new Date() );
//		avisosEstabelecimento = new AvisoData[ ids.length ];
//		for( int n = 0; n < avisosEstabelecimento.length; n++ )
//		{
//			avisosEstabelecimento[ n ] = (AvisoData) JDO.load( AvisoData.class, new Object[]{ids[ n ]}, new String[]{ "id" } );
//		}
////System.out.println( "EstabelecimentoData " + avisosEstabelecimento.length );
////		c = AvisoData.load( AvisoData.class, " tipo == " + AvisoData.TIPO_TRABALHADOR,// + ") && ( data_aviso <= new Date() )",
////				AvisoData.DATA_EVENTO + " ascending" );
////		c = AvisoData.load( AvisoData.class, "trabalhador_id != \"null\"", AvisoData.DATA_EVENTO + " ascending" );
////		if( c == null )
////		{
////			avisosTrabalhador = new AvisoData[ 0 ];
////		}
////		else
////		{
////			avisosTrabalhador = ( AvisoData[] )c.toArray( new AvisoData[ c.size() ] );
////		}
//		ids = provider.getAvisosIDByTipoAndDate( new Integer( AvisoConstants.TIPO_TRABALHADOR ), new Date() );
//
//		avisosTrabalhador = new AvisoData[ ids.length ];
//		for( int n = 0; n < avisosTrabalhador.length; n++ )
//		{
//			avisosTrabalhador[ n ] = (AvisoData) JDO.load( AvisoData.class, ids[ n ] );
//		}
//System.out.println( "trabalhador " + avisosTrabalhador.length );
			avisosEmpresa = provider.getAvisosEmpresaByDate( new Date() );
			avisosEstabelecimento = provider.getAvisosEstabelecimentoByDate( new Date() );
			avisosTrabalhador = provider.getAvisosTrabalhadorByDate( new Date() );
		}
		catch( Exception ex )
		{
			ex.printStackTrace();
		}
		setupComponents();
		setVisible( true );
		repaint();
	}
	
	private JLabel criarDescricao( Object aviso[] )
	{
		Date dataEvento = ( Date )aviso[ 1 ];
		
		String descricao = (String)aviso[ 2 ];
		Calendar cal = Calendar.getInstance();
		cal.setTime( dataEvento );
		cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
		cal.set( Calendar.MILLISECOND, 0 );
		dataEvento = cal.getTime();
		
		cal = Calendar.getInstance();
		cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
		cal.set( Calendar.MILLISECOND, 0 );
		Date hoje = cal.getTime();
		
		if( !hoje.after( dataEvento ) && !hoje.before( dataEvento ) )
		{
			descricao += " hoje";
		}
		else
		{
			descricao += " no dia " + DATE_FORMAT.format( dataEvento );
		}
		JLabel descricaoLabel = new JLabel( descricao );
		if( hoje.after( dataEvento ) )
		{
			descricaoLabel.setForeground( Color.red );
		}
		else if( hoje.equals( dataEvento ) )
		{
			descricaoLabel.setForeground( Color.green.darker() );
		}
		return descricaoLabel;
	}
	
//	private JLabel criarDescricao( AvisoData aviso )
//	{
//		Date dataEvento = ( Date )aviso.get( AvisoData.DATA_EVENTO );
//		
//		String descricao = (String)aviso.get( AvisoData.DESCRICAO );
//		String descricao2 = (String)aviso.get( AvisoData.DESCRICAO );
//		Calendar cal = Calendar.getInstance();
//		cal.setTime( dataEvento );
//		cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
//		cal.set( Calendar.MILLISECOND, 0 );
//		dataEvento = cal.getTime();
//		
//		cal = Calendar.getInstance();
//		cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
//		cal.set( Calendar.MILLISECOND, 0 );
//		Date hoje = cal.getTime();
//		
//		if( !hoje.after( dataEvento ) && !hoje.before( dataEvento ) )
//		{
//			descricao += " hoje";
//		}
//		else
//		{
//			descricao += " no dia " + DATE_FORMAT.format( dataEvento );
//		}
//		JLabel descricaoLabel = new JLabel( descricao );
//		if( hoje.after( dataEvento ) )
//		{
//			descricaoLabel.setForeground( Color.red );
//		}
//		else if( hoje.equals( dataEvento ) )
//		{
//			descricaoLabel.setForeground( Color.green.darker() );
//		}
//		return descricaoLabel;
//	}
	
	public void actionPerformed( ActionEvent e )
	{
		if( JDO == null )
		{
			JDO = ( JDOProvider ) Singleton.getInstance( Singleton.DEFAULT_JDO_PROVIDER );
		}
		Object source = e.getSource();
		if( source instanceof JButton )
		{
//			AvisoData aviso = (AvisoData) buttonHash.get( source );
			try
			{
				( (JButton) source ).setEnabled( false );
				Integer id = (Integer)buttonHash.get( source );
				if( id == null )
				{
					return;
				}
				buttonHash.remove( source );
				AvisoData aviso = (AvisoData) JDO.load( AvisoData.class, id );
				if( aviso == null )
				{
					JOptionPane.showMessageDialog( null, "Este aviso j\u00e1 foi tratado.", "J\u00e1 tratado",
						JOptionPane.WARNING_MESSAGE );
					return;
				}
				Hashtable dataHash = aviso.getHashData();
				Date dataEvento = (Date)dataHash.get( AvisoData.DATA_EVENTO );
				Calendar cal = Calendar.getInstance();
				cal.setTime( dataEvento );
				cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 0, 0, 0 );
				cal.set( Calendar.MILLISECOND, 0 );
				dataEvento = cal.getTime();

				cal = Calendar.getInstance();
				cal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DAY_OF_MONTH ), 10, 0, 0 );
				cal.set( Calendar.MILLISECOND, 0 );
				Date hoje = cal.getTime();
				if( hoje.before( dataEvento ) )
				{
					AvisoData novoAviso = new AvisoData();
					novoAviso.setHashData( dataHash );
					novoAviso.set( AvisoData.DATA_AVISO, dataEvento );
					novoAviso.save();
				}
				
				Integer tipo = (Integer) aviso.get( AvisoData.TIPO );
				TrabalhadorData trabalhador;
				EstabelecimentoData estabelecimento;
				EmpresaData empresa;
				
				switch( tipo.intValue() )
				{
					case AvisoConstants.TIPO_TRABALHADOR:
						trabalhador = (TrabalhadorData) aviso.get( AvisoData.TRABALHADOR );
						estabelecimento = (EstabelecimentoData) trabalhador.get( TrabalhadorData.ESTABELECIMENTO );
						empresa = (EmpresaData) estabelecimento.get( EstabelecimentoData.EMPRESA );
						aviso.delete();
						tracker.getMedicinaWindow().setVisible( true );
						tracker.getMedicinaWindow().setEmpresaAndEstabelecimentoAndTrabalhador( (Integer) empresa.get( EmpresaData.ID ),
																( Integer ) estabelecimento.get( EstabelecimentoData.ID ),
																( Integer ) trabalhador.get( TrabalhadorData.ID ) );
						break;
						
					case AvisoConstants.TIPO_ESTABELECIMENTO:
						estabelecimento = (EstabelecimentoData) aviso.get( AvisoData.ESTABELECIMENTO );
						empresa = (EmpresaData) estabelecimento.get( EstabelecimentoData.EMPRESA );
						aviso.delete();
						tracker.getHigieneWindow().setVisible( true );
						tracker.getHigieneWindow().setEmpresaAndEstabelecimento( (Integer) empresa.get( EmpresaData.ID ),
																( Integer ) estabelecimento.get( EstabelecimentoData.ID ) );
						break;
						
					case AvisoConstants.TIPO_EMPRESA:
						empresa = (EmpresaData) aviso.get( AvisoData.EMPRESA );
						aviso.delete();
						ClientesWindow clientesWindow = tracker.getClientesWindow();
						clientesWindow.setVisible( true );
						clientesWindow.setJDOObject( empresa );
						break;
				}
System.out.println( "delete aviso" );
//				aviso.set( AvisoData.TRABALHADOR, null );
//				aviso.set( AvisoData.ESTABELECIMENTO, null );
//				aviso.set( AvisoData.EMPRESA, null );
			}
			catch( Exception ex )
			{
				DialogException.showExceptionMessage( ex, "Erro a limpar o aviso", true );
			}
		}
	}
	
	public void clear()
	{
	}
	
	public void fill(Object value)
	{
	}
	
	public Object save()
	{
		return null;
	}
	
	public void setEnabled( boolean enable )
	{
		Set buttonSet = buttonHash.keySet();
		JButton buttons[] = (JButton[]) buttonSet.toArray( new JButton[0] );
		for( int n = 0;n < buttons.length; n++ )
		{
			buttons[ n ].setEnabled( enable );
		}
	}
	
	public void setEnabled( boolean enable, int type )
	{
		Set buttonSet = buttonHash.keySet();
		JButton buttons[] = (JButton[]) buttonSet.toArray( new JButton[0] );
		for( int n = 0;n < buttons.length; n++ )
		{
			Integer buttonType = ( Integer ) buttonTypeHash.get( buttons[ n ] );
			if( buttonType.intValue() == type )
			{
				buttons[ n ].setEnabled( enable );
			}
		}
	}
	
	public void setTracker( SIPRPTracker tracker )
	{
		this.tracker = tracker;
	}
}
