/* * 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.MarcacoesProcessoData; /** * * @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 DefaultMutableTreeNode rootNode; protected JTree mainTree; protected ProcessoDataProvider provider; protected IDObject trabalhador; protected final HashMap PROCESSOS_POR_ID = new HashMap(); private final Vector PROCESSO_LISTENERS = new Vector(); /** 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" ) ); mainTree = new JTree( rootNode ); mainTree.addTreeSelectionListener( this ); mainScroll.setViewportView( mainTree ); setLayout( new GridLayout( 1, 1 ) ); add( mainScroll ); } public void setTrabalhador( IDObject trabalhador ) { this.trabalhador = trabalhador; rootNode.removeAllChildren(); PROCESSOS_POR_ID.clear(); rootNode.setUserObject( trabalhador ); DefaultMutableTreeNode nodes[] = loadProcessos( trabalhador.getID() ); rootNode.add( new DefaultMutableTreeNode( new MappableObject( 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++ ) { MarcacoesProcessoData processo = provider.getProcessoByID( ids[ n ] ); Date dataInicio = ( Date ) processo.get( MarcacoesProcessoData.DATA_INICIO ); Date dataFim = ( Date ) processo.get( MarcacoesProcessoData.DATA_FIM ); String codigoEstado = ( String ) processo.get( MarcacoesProcessoData.ESTADO ); String estado = provider.getDescricaoEstadoProcessoByCodigo( codigoEstado ); String desc = D_F.format( dataInicio ); if( dataFim != null ) { desc += " - " + D_F.format( dataFim ); } desc += ": " + estado; IDObject processoObject = new MappableObject( ids[ n ], desc ); nodes[ n ] = new DefaultMutableTreeNode( processoObject ); 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) { } public MarcacoesProcessoData getProcessoEscolhido() { TreePath path = mainTree.getSelectionPath(); MarcacoesProcessoData 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 MarcacoesProcessoData(); PROCESSOS_POR_ID.put( escolhido.getID(), processo ); } } } return processo; } public void addProcessoListener( ProcessoListener listener ) { PROCESSO_LISTENERS.add( listener ); } }