package siprp.higiene.relatorio; import info.clearthought.layout.TableLayout; import info.clearthought.layout.TableLayoutConstraints; import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JOptionPane; 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.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import leaf.ui.LeafTree; import shst.data.outer.HsRelatorioAreaData; import shst.data.outer.HsRelatorioData; import shst.data.outer.HsRelatorioPostoData; import shst.data.outer.HsRelatorioPostoRiscoData; import shst.logic.HigieneSegurancaLogic; import shst.logic.node.PostoRelatorioNode; import com.evolute.utils.error.ErrorLogger; import com.evolute.utils.images.ImageIconLoader; import com.evolute.utils.ui.trees.TreeTools; public class VerAreasRelatorioPanel extends JPanel { private static final long serialVersionUID = 1L; public static final String SELECTION_CHANGED = "SELECTION_CHANGED"; private final JButton buttonEdit = new JButton( "Editar Nome", ImageIconLoader.loadImageIconSilent( "siprp/higiene/relatorio/edit.png" ) ); private final DefaultMutableTreeNode root = new DefaultMutableTreeNode(); private final DefaultTreeModel model = new DefaultTreeModel( root ); public final LeafTree tree = new LeafTree( model ); private final JScrollPane scroll = new JScrollPane( tree ); private HsRelatorioData relatorio = null; private DefaultMutableTreeNode selectedNode = null; public VerAreasRelatorioPanel() { startupComponents(); setupLayout(); placeComponents(); startupListeners(); } private void startupComponents() { buttonEdit.setEnabled( false ); tree.setRootVisible( false ); tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); tree.setCellRenderer(new DefaultTreeCellRenderer() { private static final long serialVersionUID = 1L; @Override public Component getTreeCellRendererComponent( JTree pTree, Object pValue, boolean pIsSelected, boolean pIsExpanded, boolean pIsLeaf, int pRow, boolean pHasFocus ) { super.getTreeCellRendererComponent( pTree, pValue, pIsSelected, pIsExpanded, pIsLeaf, pRow, pHasFocus ); boolean highlight= false; Color highColor = null; Color lowColor = null; if( pValue instanceof PostoRelatorioNode ) { Object userObject = ((PostoRelatorioNode)pValue).getUserObject(); if( userObject instanceof HsRelatorioPostoData ) { HsRelatorioPostoData posto = (HsRelatorioPostoData) userObject; boolean allOk = true; for( HsRelatorioPostoRiscoData rel : posto.fromHsRelatorioPostoRisco_posto_id() ) { if( rel.toRisco_id().getDeleted_date() == null ) { allOk &= HigieneSegurancaLogic.isRelatorioRiscoPreenchido( rel ); } } highColor = RelatorioHigieneSegurancaWindow.COLOR_RISCO_OK_SEL; lowColor = RelatorioHigieneSegurancaWindow.COLOR_RISCO_OK; highlight = allOk; } } if( highlight ) { setOpaque( true ); setBackground( pIsSelected ? highColor : lowColor ); } else { setOpaque( false ); } return this; } } ); TreeTools.registerTreeKeepExpandState( tree ); } private void setupLayout() { TableLayout layout = new TableLayout( new double[]{ TableLayout.MINIMUM, TableLayout.FILL }, new double[]{ TableLayout.MINIMUM, TableLayout.FILL } ); layout.setHGap( 5 ); layout.setVGap( 5 ); setLayout( layout ); } private void placeComponents() { add( buttonEdit, new TableLayoutConstraints( 0, 0 ) ); add( scroll, new TableLayoutConstraints( 0, 1, 1, 1 ) ); } private void startupListeners() { tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener(){ @Override public void valueChanged( TreeSelectionEvent e ) { TreePath path = tree.getSelectionPath(); Object object = path == null ? null : path.getLastPathComponent(); HsRelatorioPostoData posto = object == null ? null : ( (object instanceof PostoRelatorioNode) ? (HsRelatorioPostoData) ((PostoRelatorioNode) object).getUserObject() : null); selectedNode = (object instanceof DefaultMutableTreeNode) ? (DefaultMutableTreeNode) object : null; buttonEdit.setEnabled( selectedNode != null ); firePropertyChange( SELECTION_CHANGED, null, posto ); } } ); buttonEdit.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Object object = selectedNode == null ? null : selectedNode.getUserObject(); if( object != null ) { String title = "Editar nome"; String result = (String) JOptionPane.showInputDialog( VerAreasRelatorioPanel.this, "", title, JOptionPane.QUESTION_MESSAGE, null, null, object.toString() ); if( result != null && ! result.trim().isEmpty() ) { try { if( object instanceof HsRelatorioAreaData ) { ( ( HsRelatorioAreaData ) object ).setDescription( result ); ( ( HsRelatorioAreaData ) object ).save(); refresh(); } else if( object instanceof HsRelatorioPostoData ) { ( ( HsRelatorioPostoData ) object ).setDescription( result ); ( ( HsRelatorioPostoData ) object ).save(); refresh(); } } catch( Exception ex ) { ErrorLogger.logException( ex ); } } } } } ); } public void refresh() { root.removeAllChildren(); if( relatorio != null ) { TreeTools.merge( root, HigieneSegurancaLogic.getAreasRelatorioTree( relatorio ) ); } TreeTools.refreshTree( tree, root, false ); } public void setRelatorio( HsRelatorioData relatorio ) { this.relatorio = relatorio; refresh(); } }