forked from Coded/SIPRP
				
			
			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.
		
		
		
		
		
			
		
			
				
					
					
						
							257 lines
						
					
					
						
							7.8 KiB
						
					
					
				
			
		
		
	
	
							257 lines
						
					
					
						
							7.8 KiB
						
					
					
				/*
 | 
						|
 * EstruturaProcessoPanel.java
 | 
						|
 *
 | 
						|
 * Created on March 20, 2007, 12:07 PM
 | 
						|
 *
 | 
						|
 * To change this template, choose Tools | Template Manager
 | 
						|
 * and open the template in the editor.
 | 
						|
 */
 | 
						|
 | 
						|
package siprp.medicina.processo.estrutura;
 | 
						|
 | 
						|
import com.evolute.utils.data.IDObject;
 | 
						|
import com.evolute.utils.data.MappableObject;
 | 
						|
import com.evolute.utils.ui.DialogException;
 | 
						|
import java.awt.*;
 | 
						|
import java.text.DateFormat;
 | 
						|
import java.util.Date;
 | 
						|
import java.util.HashMap;
 | 
						|
import java.util.Locale;
 | 
						|
import java.util.Vector;
 | 
						|
import javax.swing.*;
 | 
						|
import javax.swing.event.TreeSelectionEvent;
 | 
						|
import javax.swing.event.TreeSelectionListener;
 | 
						|
import javax.swing.tree.DefaultMutableTreeNode;
 | 
						|
import javax.swing.tree.TreePath;
 | 
						|
import siprp.medicina.processo.*;
 | 
						|
import siprp.medicina.processo.data.TrabalhadoresProcessoData;
 | 
						|
 | 
						|
/**
 | 
						|
 *
 | 
						|
 * @author fpalma
 | 
						|
 */
 | 
						|
public class EstruturaProcessoPanel extends JPanel
 | 
						|
		implements TreeSelectionListener
 | 
						|
{
 | 
						|
	protected static final DateFormat D_F = DateFormat.getDateInstance( DateFormat.SHORT, new Locale( "pt", "PT" ) );
 | 
						|
	
 | 
						|
	protected JScrollPane mainScroll;
 | 
						|
	protected TrabalhadorMutableTreeNode rootNode;
 | 
						|
	protected JTree mainTree;
 | 
						|
	
 | 
						|
	protected ProcessoDataProvider provider;
 | 
						|
	
 | 
						|
	protected IDObject trabalhador;
 | 
						|
	protected final HashMap<Integer, TrabalhadoresProcessoData> PROCESSOS_POR_ID = 
 | 
						|
			new HashMap<Integer,TrabalhadoresProcessoData>();
 | 
						|
	
 | 
						|
	private final Vector<ProcessoListener> PROCESSO_LISTENERS = new Vector<ProcessoListener>();
 | 
						|
	
 | 
						|
	/** Creates a new instance of EstruturaProcessoPanel */
 | 
						|
	public EstruturaProcessoPanel()
 | 
						|
		throws Exception
 | 
						|
	{
 | 
						|
		provider = ProcessoDataProvider.getProvider();
 | 
						|
		setupComponents();
 | 
						|
		setTrabalhador( new MappableObject( new Integer( 12 ), "Alexandre de Matos Monge" ) );
 | 
						|
	}
 | 
						|
	
 | 
						|
	private void setupComponents()
 | 
						|
	{
 | 
						|
		mainScroll = new JScrollPane();
 | 
						|
		mainScroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED );
 | 
						|
		mainScroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
 | 
						|
//		rootNode = new DefaultMutableTreeNode( new MappableObject( new Integer( 12 ), "Frederico Palma" ) );
 | 
						|
		rootNode = new TrabalhadorMutableTreeNode( new Integer( 12 ), "Frederico Palma" );
 | 
						|
		mainTree = new JTree( rootNode );
 | 
						|
		mainTree.addTreeSelectionListener( this );
 | 
						|
		mainTree.setCellRenderer( new EstruturaProcessoRenderer() );
 | 
						|
		mainScroll.setViewportView( mainTree );
 | 
						|
		setLayout( new GridLayout( 1, 1 ) );
 | 
						|
		add( mainScroll );
 | 
						|
		
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void setTrabalhador( IDObject trabalhador )
 | 
						|
	{
 | 
						|
		clear();
 | 
						|
		if( trabalhador == null )
 | 
						|
		{
 | 
						|
			return;
 | 
						|
		}
 | 
						|
		this.trabalhador = trabalhador;
 | 
						|
//		rootNode.removeAllChildren();
 | 
						|
//		PROCESSOS_POR_ID.clear();
 | 
						|
		rootNode.setID( trabalhador.getID() );
 | 
						|
		rootNode.setDescricao( trabalhador.toString() );
 | 
						|
		DefaultMutableTreeNode nodes[] = 
 | 
						|
				loadProcessos( trabalhador.getID() );
 | 
						|
		rootNode.add( new ProcessoMutableTreeNode( new Integer( -1 ), "Novo Processo..." ) );
 | 
						|
		for( int n = 0; n < nodes.length; n++ )
 | 
						|
		{
 | 
						|
			rootNode.add( nodes[ n ] );
 | 
						|
		}
 | 
						|
		int count = mainTree.getRowCount();
 | 
						|
		for( int n = count - 1; n >= 0; n-- )
 | 
						|
		{
 | 
						|
			mainTree.expandRow( n );
 | 
						|
		}
 | 
						|
		
 | 
						|
		repaint();
 | 
						|
	}
 | 
						|
	
 | 
						|
	protected DefaultMutableTreeNode[] loadProcessos( Integer trabalhadorID )
 | 
						|
	{
 | 
						|
		try
 | 
						|
		{
 | 
						|
			Integer ids[] = provider.getIDsProcessosByTrabalhador( trabalhadorID );
 | 
						|
			DefaultMutableTreeNode nodes[] = new DefaultMutableTreeNode[ ids.length ];
 | 
						|
			for( int n = 0; n < ids.length; n++ )
 | 
						|
			{
 | 
						|
				TrabalhadoresProcessoData processo = provider.getProcessoByID( ids[ n ] );
 | 
						|
				Date dataInicio = ( Date ) processo.get( TrabalhadoresProcessoData.DATA_INICIO );
 | 
						|
				Date dataFim = ( Date ) processo.get( TrabalhadoresProcessoData.DATA_FIM );
 | 
						|
				String codigoEstado = ( String ) processo.get( TrabalhadoresProcessoData.ESTADO );
 | 
						|
				String estado = provider.getDescricaoEstadoProcessoByCodigo( codigoEstado );
 | 
						|
				String desc = D_F.format( dataInicio );
 | 
						|
				if( dataFim != null )
 | 
						|
				{
 | 
						|
					desc += " - " + D_F.format( dataFim );
 | 
						|
				}
 | 
						|
				desc += ": " + estado;
 | 
						|
				nodes[ n ] = new ProcessoMutableTreeNode( ids[ n ], desc );
 | 
						|
				PROCESSOS_POR_ID.put( ids[ n ], processo );
 | 
						|
			}
 | 
						|
			return nodes;
 | 
						|
		}
 | 
						|
		catch( Exception ex )
 | 
						|
		{
 | 
						|
			DialogException.showExceptionMessage( ex, "Erro a carregar dados", true );
 | 
						|
			return new DefaultMutableTreeNode[ 0 ];
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void valueChanged( TreeSelectionEvent e )
 | 
						|
	{
 | 
						|
		Object components[] = e.getPath().getPath();
 | 
						|
		int tipo = ProcessoEvent.ACCAO_ESCOLHER_PROCESSO;
 | 
						|
		if( components == null || components.length == 0 || 
 | 
						|
			components[ components.length - 1 ] instanceof TrabalhadorMutableTreeNode ||
 | 
						|
			components[ components.length - 1 ] instanceof ProcessoMutableTreeNode )
 | 
						|
		{
 | 
						|
			tipo = ProcessoEvent.ACCAO_ESCOLHER_PROCESSO;
 | 
						|
		}
 | 
						|
		else if( components[ components.length - 1 ] instanceof ConsultaMutableTreeNode )
 | 
						|
		{
 | 
						|
			tipo = ProcessoEvent.ACCAO_ESCOLHER_CONSULTA;
 | 
						|
		}
 | 
						|
		else if( components[ components.length - 1 ] instanceof ECDsMutableTreeNode )
 | 
						|
		{
 | 
						|
			tipo = ProcessoEvent.ACCAO_ESCOLHER_ECDS;
 | 
						|
		}
 | 
						|
		else if( components[ components.length - 1 ] instanceof FichaAptidaoMutableTreeNode )
 | 
						|
		{
 | 
						|
			tipo = ProcessoEvent.ACCAO_ESCOLHER_FA;
 | 
						|
		}
 | 
						|
		else if( components[ components.length - 1 ] instanceof DataMutableTreeNode )
 | 
						|
		{
 | 
						|
			tipo = ProcessoEvent.ACCAO_ESCOLHER_DATA;
 | 
						|
		}
 | 
						|
		else if( components[ components.length - 1 ] instanceof ObservacoesMutableTreeNode )
 | 
						|
		{
 | 
						|
			tipo = ProcessoEvent.ACCAO_ESCOLHER_OBSERVACOES;
 | 
						|
		}
 | 
						|
		else if( components[ components.length - 1 ] instanceof MailMutableTreeNode )
 | 
						|
		{
 | 
						|
			tipo = ProcessoEvent.ACCAO_ESCOLHER_MAIL;
 | 
						|
		}
 | 
						|
		HashMap<Integer,Integer> ids = new HashMap<Integer,Integer>();
 | 
						|
		for( int n = 0; components != null && n < components.length; n++ )
 | 
						|
		{
 | 
						|
			Integer id = ( ( EstruturaProcessoMutableTreeNode ) components[ n ] ).getID();
 | 
						|
			if(	components[ components.length - 1 ] instanceof ProcessoMutableTreeNode )
 | 
						|
			{
 | 
						|
				ids.put( ProcessoEvent.TIPO_PROCESSO, id );
 | 
						|
			}
 | 
						|
			else if( components[ components.length - 1 ] instanceof ConsultaMutableTreeNode )
 | 
						|
			{
 | 
						|
				ids.put( ProcessoEvent.TIPO_CONSULTA, id );
 | 
						|
			}
 | 
						|
			else if( components[ components.length - 1 ] instanceof ECDsMutableTreeNode )
 | 
						|
			{
 | 
						|
				ids.put( ProcessoEvent.TIPO_ECDS, id );
 | 
						|
			}
 | 
						|
			else if( components[ components.length - 1 ] instanceof FichaAptidaoMutableTreeNode )
 | 
						|
			{
 | 
						|
				ids.put( ProcessoEvent.TIPO_FICHA_APTIDAO, id );
 | 
						|
			}
 | 
						|
			else if( components[ components.length - 1 ] instanceof DataMutableTreeNode )
 | 
						|
			{
 | 
						|
				ids.put( ProcessoEvent.TIPO_DATA, id );
 | 
						|
			}
 | 
						|
			else if( components[ components.length - 1 ] instanceof ObservacoesMutableTreeNode )
 | 
						|
			{
 | 
						|
				ids.put( ProcessoEvent.TIPO_OBSERVACOES, id );
 | 
						|
			}
 | 
						|
			else if( components[ components.length - 1 ] instanceof MailMutableTreeNode )
 | 
						|
			{
 | 
						|
				ids.put( ProcessoEvent.TIPO_MAIL, id );
 | 
						|
			}
 | 
						|
		}
 | 
						|
		ProcessoEvent event = new ProcessoEvent( this, tipo, ids );
 | 
						|
		for( int n = 0; n < PROCESSO_LISTENERS.size(); n++ )
 | 
						|
		{
 | 
						|
			PROCESSO_LISTENERS.get( n ).processoStateChanged( event );
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	public TrabalhadoresProcessoData getProcessoEscolhido()
 | 
						|
	{
 | 
						|
		TreePath path = mainTree.getSelectionPath();
 | 
						|
		TrabalhadoresProcessoData processo = null;
 | 
						|
		if( path != null )
 | 
						|
		{
 | 
						|
			IDObject escolhido = ( IDObject )( ( DefaultMutableTreeNode ) path.getLastPathComponent() ).getUserObject();
 | 
						|
			if( escolhido != null )
 | 
						|
			{
 | 
						|
				processo = PROCESSOS_POR_ID.get( escolhido.getID() );
 | 
						|
				if( processo == null )
 | 
						|
				{
 | 
						|
					processo = new TrabalhadoresProcessoData();
 | 
						|
					PROCESSOS_POR_ID.put( escolhido.getID(), processo );
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		return processo;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void addProcessoListener( ProcessoListener listener )
 | 
						|
	{
 | 
						|
		PROCESSO_LISTENERS.add( listener );
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void removeProcessoListener( ProcessoListener listener )
 | 
						|
	{
 | 
						|
		PROCESSO_LISTENERS.remove( listener );
 | 
						|
	}
 | 
						|
	
 | 
						|
	public IDObject getTrabalhador()
 | 
						|
	{
 | 
						|
		return trabalhador;
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void reload()
 | 
						|
	{
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void clear()
 | 
						|
	{
 | 
						|
		this.trabalhador = null;
 | 
						|
		rootNode.removeAllChildren();
 | 
						|
		PROCESSOS_POR_ID.clear();
 | 
						|
		rootNode.setID( null );
 | 
						|
		rootNode.setDescricao( "" );
 | 
						|
	}
 | 
						|
}
 |