package siprp.higiene.gestao.riscos; import info.clearthought.layout.TableLayout; import info.clearthought.layout.TableLayoutConstraints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Collections; import java.util.List; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import leaf.ui.LeafButton; import leaf.ui.LeafDialog; import leaf.ui.LeafIconButton; import leaf.ui.TreeInserterDialog; import leaf.ui.TreeTools; import siprp.database.cayenne.objects.BaseObject; import siprp.database.cayenne.objects.Empresas; import siprp.database.cayenne.objects.HsPosto; import siprp.database.cayenne.objects.HsPostoRisco; import siprp.database.cayenne.objects.HsRisco; import siprp.database.cayenne.objects.HsRiscoEmpresa; import siprp.logic.HigieneSegurancaLogic; import siprp.logic.node.NodeRisco; public class AdicionarRiscosPanel extends JPanel { private static final long serialVersionUID = 1L; public static final String SELECTION_CHANGED = "RISCOS_SELECTION_CHANGED"; private static final String ICON_NAME_SAVE = "siprp/higiene/gestao/add.png"; private static final String ICON_NAME_REVERT = "siprp/higiene/gestao/delete.png"; protected final LeafButton buttonAdicionar = LeafIconButton.createButton( ICON_NAME_SAVE ); protected final LeafButton buttonRemover = LeafIconButton.createButton( ICON_NAME_REVERT ); private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); private final DefaultTreeModel model = new DefaultTreeModel( root ); public final JTree tree = new JTree( model ); private final JScrollPane scroll = new JScrollPane( tree ); private Empresas empresa = null; private HsPosto posto = null; public AdicionarRiscosPanel() { startupComponents(); setupLayout(); placeComponents(); startupListeners(); } private void startupComponents() { buttonAdicionar.setEnabled( false ); buttonRemover.setEnabled( false ); tree.setRootVisible( false ); tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); } private void setupLayout() { TableLayout layout = new TableLayout( new double[] { TableLayout.FILL }, new double[] { TableLayout.MINIMUM, TableLayout.FILL } ); layout.setHGap( 5 ); layout.setVGap( 5 ); setLayout( layout ); } private void placeComponents() { JPanel panel = new JPanel(); TableLayout layout = new TableLayout( new double[] { TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL }, new double[] { TableLayout.MINIMUM } ); layout.setHGap( 5 ); layout.setVGap( 5 ); panel.setLayout( layout ); panel.add( buttonAdicionar, new TableLayoutConstraints( 0, 0 ) ); panel.add( buttonRemover, new TableLayoutConstraints( 1, 0 ) ); add( panel, new TableLayoutConstraints( 0, 0 ) ); add( scroll, new TableLayoutConstraints( 0, 1 ) ); } private void startupListeners() { buttonAdicionar.addActionListener( new ActionListener() { @Override public void actionPerformed( ActionEvent e ) { add(); } } ); buttonRemover.addActionListener( new ActionListener() { @Override public void actionPerformed( ActionEvent e ) { rem(); } } ); tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() { @Override public void valueChanged( TreeSelectionEvent e ) { setEnabled(); TreePath path = tree.getSelectionPath(); if( path != null ) { Object selection = path.getLastPathComponent(); firePropertyChange( SELECTION_CHANGED, null, selection ); } } } ); } private void add() { DefaultMutableTreeNode allRiscos = getAllRiscos(); TreeTools.removeAll( allRiscos, getRiscosTree() ); TreeInserterDialog dialog = new TreeInserterDialog( "Adicionar Riscos", allRiscos ); DefaultMutableTreeNode result = dialog.getResult(); if( result != null ) { addResult( result ); refresh(); } setEnabled(); } private DefaultMutableTreeNode getAllRiscos() { DefaultMutableTreeNode result = new DefaultMutableTreeNode(); if( posto == null ) { result = HigieneSegurancaLogic.getRiscosTree(); } else { result = HigieneSegurancaLogic.getRiscosTree( posto.getToHsArea().getToEmpresas() ); } return result; } private DefaultMutableTreeNode getRiscosTree() { DefaultMutableTreeNode result = new DefaultMutableTreeNode(); for( int i = 0; i < root.getChildCount(); ++i ) { DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) root.getChildAt( i ); BaseObject userObject = (BaseObject) childNode.getUserObject(); HsRisco risco = null; if( userObject instanceof HsRiscoEmpresa ) { risco = ((HsRiscoEmpresa) userObject).getToHsRisco(); } else if( userObject instanceof HsPostoRisco ) { risco = ((HsPostoRisco) userObject).getToHsRisco(); } if( risco != null ) { result.add( new NodeRisco( risco ) ); } } return result; } private void addResult( DefaultMutableTreeNode root ) { try { if( root != null ) { if( root instanceof NodeRisco ) { HsRisco risco = (HsRisco) root.getUserObject(); if( empresa != null ) { HsRiscoEmpresa rel = new HsRiscoEmpresa(); rel.setToEmpresa( empresa ); rel.setToHsRisco( risco ); rel.save(); } else if( posto != null ) { HsPostoRisco rel = new HsPostoRisco(); rel.setToHsPosto( posto ); rel.setToHsRisco( risco ); rel.save(); } } for( int i = 0; i < root.getChildCount(); ++i ) { DefaultMutableTreeNode child = (DefaultMutableTreeNode) root.getChildAt( i ); addResult( child ); } } } catch( Exception e ) { LeafDialog.error( e ); } } private void rem() { try { TreePath path = tree.getSelectionPath(); if( path != null ) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); Object obj = node.getUserObject(); if( obj != null && LeafDialog.confirmDelete( true, false, "risco" ) ) { ((BaseObject) obj).delete(); refresh(); } } } catch( Exception e ) { LeafDialog.error( e ); } } private void setEnabled() { if( empresa != null ) { buttonAdicionar.setEnabled( true ); } else if( posto != null ) { buttonAdicionar.setEnabled( true ); } else { buttonAdicionar.setEnabled( false ); } buttonRemover.setEnabled( tree.getSelectionCount() > 0 ); } public void refresh() { root.removeAllChildren(); if( empresa != null ) { List riscos = empresa.getHsRiscoEmpresaArray(); Collections.sort( riscos ); for( HsRiscoEmpresa rel : riscos ) { root.add( new DefaultMutableTreeNode( rel ) ); } } else if( posto != null ) { List riscos = posto.getHsPostoRiscoArray(); Collections.sort( riscos ); for( HsPostoRisco rel : riscos ) { root.add( new DefaultMutableTreeNode( rel ) ); } } setEnabled(); TreeTools.refreshTree( tree, root, false ); } public void setEmpresa( Empresas empresa ) { this.empresa = empresa; this.posto = null; refresh(); } public void setPosto( HsPosto posto ) { this.posto = posto; this.empresa = null; refresh(); } }