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.
545 lines
13 KiB
545 lines
13 KiB
package siprp.higiene.gestao.riscos;
|
|
|
|
import static com.evolute.utils.strings.UnicodeLatin1Map.*;
|
|
import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil;
|
|
import info.clearthought.layout.TableLayout;
|
|
import info.clearthought.layout.TableLayoutConstraints;
|
|
|
|
import java.awt.CardLayout;
|
|
import java.awt.Dimension;
|
|
import java.awt.GridLayout;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyChangeListener;
|
|
|
|
import javax.swing.BorderFactory;
|
|
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.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.LeafUIConstants;
|
|
import leaf.ui.TreeTools;
|
|
import siprp.database.cayenne.objects.HsMedida;
|
|
import siprp.database.cayenne.objects.HsRisco;
|
|
import siprp.database.cayenne.objects.HsRiscoMedida;
|
|
import siprp.database.cayenne.objects.HsRiscoTema;
|
|
import siprp.logic.HigieneSegurancaLogic;
|
|
|
|
public class GerirRiscosPanel extends JPanel implements LeafUIConstants
|
|
{
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
private static final String PANEL_TEMA = "PANEL_TEMA";
|
|
|
|
private static final String PANEL_RISCO = "PANEL_RISCO";
|
|
|
|
private static final String PANEL_MEDIDA = "PANEL_MEDIDA";
|
|
|
|
private final JPanel panelButtons = new JPanel();
|
|
|
|
private final JPanel panelTree = new JPanel();
|
|
|
|
private final JPanel panelData = new JPanel();
|
|
|
|
private final JPanel panelDataTema = new JPanel();
|
|
|
|
private final JPanel panelDataRisco = new JPanel();
|
|
|
|
private final GerirMedidaPanel panelDataMedida = new GerirMedidaPanel();
|
|
|
|
private final LeafButton buttonTemaCriar = LeafIconButton.createDefaultNewButton();
|
|
|
|
private final LeafButton buttonTemaEditar = LeafIconButton.createDefaultEditButton();
|
|
|
|
private final LeafButton buttonTemaRemover = LeafIconButton.createDefaultRemoveButton();
|
|
|
|
private final LeafButton buttonRiscoCriar = LeafIconButton.createDefaultNewButton();
|
|
|
|
private final LeafButton buttonRiscoEditar = LeafIconButton.createDefaultEditButton();
|
|
|
|
private final LeafButton buttonRiscoRemover = LeafIconButton.createDefaultRemoveButton();
|
|
|
|
private final LeafButton buttonMedidaCriar = LeafIconButton.createDefaultNewButton();
|
|
|
|
private final LeafButton buttonMedidaRemover = LeafIconButton.createDefaultRemoveButton();
|
|
|
|
private final DefaultMutableTreeNode root = new DefaultMutableTreeNode();
|
|
|
|
private final DefaultTreeModel model = new DefaultTreeModel( root );
|
|
|
|
private final JTree tree = new JTree( model );
|
|
|
|
private final JScrollPane scroll = new JScrollPane( tree );
|
|
|
|
private final CardLayout cardLayout = new CardLayout();
|
|
|
|
public GerirRiscosPanel()
|
|
{
|
|
startupComponents();
|
|
startupLayout();
|
|
placeComponents();
|
|
setupListeners();
|
|
refresh();
|
|
}
|
|
|
|
private void setupListeners()
|
|
{
|
|
buttonTemaCriar.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
criarTema();
|
|
}
|
|
} );
|
|
buttonTemaEditar.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
editarTema();
|
|
}
|
|
} );
|
|
buttonTemaRemover.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
removerTema();
|
|
}
|
|
} );
|
|
buttonRiscoCriar.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
criarRisco();
|
|
}
|
|
} );
|
|
buttonRiscoEditar.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
editarRisco();
|
|
}
|
|
} );
|
|
buttonRiscoRemover.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
removerRisco();
|
|
}
|
|
} );
|
|
buttonMedidaCriar.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
criarMedida();
|
|
}
|
|
} );
|
|
buttonMedidaRemover.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
removerMedida();
|
|
}
|
|
} );
|
|
tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener()
|
|
{
|
|
@Override
|
|
public void valueChanged( TreeSelectionEvent e )
|
|
{
|
|
setEnabled();
|
|
selectCard();
|
|
}
|
|
} );
|
|
panelDataMedida.addPropertyChangeListener( GerirMedidaPanel.MEDIDA_CHANGED, new PropertyChangeListener()
|
|
{
|
|
@Override
|
|
public void propertyChange( PropertyChangeEvent evt )
|
|
{
|
|
if( evt.getNewValue() != null )
|
|
{
|
|
refresh();
|
|
}
|
|
}
|
|
} );
|
|
}
|
|
|
|
private void criarTema()
|
|
{
|
|
try
|
|
{
|
|
String temaString = JOptionPane.showInputDialog( this, "Criar tema", "Descri" + ccedil + atilde + "o", JOptionPane.QUESTION_MESSAGE );
|
|
if( temaString != null )
|
|
{
|
|
HsRiscoTema tema = new HsRiscoTema();
|
|
tema.setDescription( temaString );
|
|
tema.save();
|
|
refresh();
|
|
}
|
|
} catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private void editarTema()
|
|
{
|
|
try
|
|
{
|
|
HsRiscoTema tema = getSelectedTema();
|
|
if( tema != null )
|
|
{
|
|
String temaString = JOptionPane.showInputDialog( this, "Editar tema", tema.getDescription() );
|
|
if( temaString != null )
|
|
{
|
|
tema.setDescription( temaString );
|
|
tema.save();
|
|
refresh();
|
|
}
|
|
}
|
|
} catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private void removerTema()
|
|
{
|
|
try
|
|
{
|
|
HsRiscoTema tema = getSelectedTema();
|
|
if( tema != null && LeafDialog.confirmDelete( true, false, "tema" ) )
|
|
{
|
|
tema.delete();
|
|
refresh();
|
|
}
|
|
} catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private void criarRisco()
|
|
{
|
|
try
|
|
{
|
|
HsRiscoTema tema = getSelectedTema();
|
|
if( tema == null )
|
|
{
|
|
HsRisco risco = getSelectedRisco();
|
|
if( risco != null )
|
|
{
|
|
tema = risco.getToHsRiscoTema();
|
|
}
|
|
else
|
|
{
|
|
HsRiscoMedida medida = getSelectedMedida();
|
|
if( medida != null )
|
|
{
|
|
tema = medida.getToHsRisco().getToHsRiscoTema();
|
|
}
|
|
}
|
|
}
|
|
if( tema != null )
|
|
{
|
|
String riscoString = JOptionPane.showInputDialog( this, "Criar risco", "Descri" + ccedil + atilde + "o", JOptionPane.QUESTION_MESSAGE );
|
|
if( riscoString != null )
|
|
{
|
|
HsRisco risco = new HsRisco();
|
|
risco.setDescription( riscoString );
|
|
risco.setToHsRiscoTema( tema );
|
|
tema.save();
|
|
refresh();
|
|
}
|
|
}
|
|
} catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private void editarRisco()
|
|
{
|
|
try
|
|
{
|
|
HsRisco risco = getSelectedRisco();
|
|
if( risco != null )
|
|
{
|
|
String riscoString = JOptionPane.showInputDialog( this, "Editar risco", risco.getDescription() );
|
|
if( riscoString != null )
|
|
{
|
|
risco.setDescription( riscoString );
|
|
risco.save();
|
|
refresh();
|
|
}
|
|
}
|
|
} catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private void removerRisco()
|
|
{
|
|
try
|
|
{
|
|
HsRisco risco = getSelectedRisco();
|
|
if( risco != null && LeafDialog.confirmDelete( true, false, "risco" ) && removerRiscoOK( risco ) )
|
|
{
|
|
risco.delete();
|
|
refresh();
|
|
}
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private boolean removerRiscoOK( HsRisco risco )
|
|
{
|
|
boolean result = true;
|
|
if( risco.getHsRiscoEmpresaArray().size() > 0 )
|
|
{
|
|
if( JOptionPane.NO_OPTION == JOptionPane.showConfirmDialog( this, "Este risco est" + aacute + " associado a uma ou mais empresas, \n tem a certeza que o deseja remover?", "Aviso", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE ) )
|
|
{
|
|
result = false;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private void criarMedida()
|
|
{
|
|
try
|
|
{
|
|
HsRisco risco = getSelectedRisco();
|
|
if( risco == null )
|
|
{
|
|
HsRiscoMedida medida = getSelectedMedida();
|
|
if( medida != null )
|
|
{
|
|
risco = medida.getToHsRisco();
|
|
}
|
|
}
|
|
if( risco != null )
|
|
{
|
|
HsMedida medida = new HsMedida();
|
|
medida.setDescription( "" );
|
|
medida.setRequesitosLegais( "" );
|
|
medida.save();
|
|
HsRiscoMedida rel = new HsRiscoMedida();
|
|
rel.setToHsRisco( risco );
|
|
rel.setToHsMedida( medida );
|
|
rel.save();
|
|
refresh();
|
|
}
|
|
} catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private void removerMedida()
|
|
{
|
|
try
|
|
{
|
|
HsRiscoMedida medida = getSelectedMedida();
|
|
if( medida != null && LeafDialog.confirmDelete( true, false, "requisisto" ) )
|
|
{
|
|
medida.delete();
|
|
refresh();
|
|
}
|
|
} catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private HsRiscoTema getSelectedTema()
|
|
{
|
|
Object object = getSelectedObject();
|
|
return object == null ? null : ((object instanceof HsRiscoTema) ? (HsRiscoTema) object : null);
|
|
}
|
|
|
|
private HsRisco getSelectedRisco()
|
|
{
|
|
Object object = getSelectedObject();
|
|
return object == null ? null : ((object instanceof HsRisco) ? (HsRisco) object : null);
|
|
}
|
|
|
|
private HsRiscoMedida getSelectedMedida()
|
|
{
|
|
Object object = getSelectedObject();
|
|
return object == null ? null : ((object instanceof HsRiscoMedida) ? (HsRiscoMedida) object : null);
|
|
}
|
|
|
|
private Object getSelectedObject()
|
|
{
|
|
DefaultMutableTreeNode node = getSelectedNode();
|
|
return node == null ? null : node.getUserObject();
|
|
}
|
|
|
|
private DefaultMutableTreeNode getSelectedNode()
|
|
{
|
|
TreePath path = tree.getSelectionPath();
|
|
return path == null ? null : (DefaultMutableTreeNode) path.getLastPathComponent();
|
|
}
|
|
|
|
private void startupComponents()
|
|
{
|
|
panelButtons.setPreferredSize( new Dimension( 150, 0 ) );
|
|
panelTree.setPreferredSize( new Dimension( 400, 0 ) );
|
|
tree.setRootVisible( false );
|
|
tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
|
|
}
|
|
|
|
private void setEnabled()
|
|
{
|
|
HsRiscoTema tema = getSelectedTema();
|
|
HsRisco risco = getSelectedRisco();
|
|
HsRiscoMedida medida = getSelectedMedida();
|
|
buttonMedidaCriar.setEnabled( risco != null || medida != null );
|
|
buttonRiscoCriar.setEnabled( tema != null || risco != null || medida != null );
|
|
|
|
buttonTemaEditar.setEnabled( tema != null );
|
|
buttonRiscoEditar.setEnabled( risco != null );
|
|
|
|
buttonMedidaRemover.setEnabled( medida != null );
|
|
buttonRiscoRemover.setEnabled( risco != null );
|
|
buttonTemaRemover.setEnabled( tema != null );
|
|
}
|
|
|
|
private void startupLayout()
|
|
{
|
|
TableLayout layout = new TableLayout( new double[] {
|
|
TableLayout.PREFERRED, TableLayout.FILL
|
|
}, new double[] {
|
|
TableLayout.MINIMUM, TableLayout.FILL
|
|
} );
|
|
layout.setHGap( 5 );
|
|
layout.setVGap( 5 );
|
|
setLayout( layout );
|
|
|
|
layout = new TableLayout( new double[] {
|
|
TableLayout.FILL, TableLayout.FILL, TableLayout.FILL, TableLayout.FILL
|
|
}, new double[] {
|
|
TableLayout.MINIMUM
|
|
} );
|
|
layout.setHGap( 5 );
|
|
layout.setVGap( 5 );
|
|
panelButtons.setLayout( layout );
|
|
|
|
layout = new TableLayout( new double[] {
|
|
TableLayout.FILL
|
|
}, new double[] {
|
|
TableLayout.FILL
|
|
} );
|
|
layout.setHGap( 5 );
|
|
layout.setVGap( 5 );
|
|
panelTree.setLayout( layout );
|
|
|
|
layout = new TableLayout( new double[] {
|
|
TableLayout.FILL
|
|
}, new double[] {
|
|
TableLayout.FILL
|
|
} );
|
|
layout.setHGap( 5 );
|
|
layout.setVGap( 5 );
|
|
panelDataTema.setLayout( layout );
|
|
|
|
layout = new TableLayout( new double[] {
|
|
TableLayout.FILL
|
|
}, new double[] {
|
|
TableLayout.FILL
|
|
} );
|
|
layout.setHGap( 5 );
|
|
layout.setVGap( 5 );
|
|
panelDataRisco.setLayout( layout );
|
|
|
|
panelData.setLayout( cardLayout );
|
|
}
|
|
|
|
private void placeComponents()
|
|
{
|
|
JPanel panel = new JPanel();
|
|
panel.setBorder( BorderFactory.createTitledBorder( "Tema" ) );
|
|
panel.setLayout( new GridLayout( 1, 3 ) );
|
|
panel.add( buttonTemaCriar );
|
|
panel.add( buttonTemaEditar );
|
|
panel.add( buttonTemaRemover );
|
|
panelButtons.add( panel, new TableLayoutConstraints( 0, 0 ) );
|
|
panel = new JPanel();
|
|
panel.setBorder( BorderFactory.createTitledBorder( "Risco" ) );
|
|
panel.setLayout( new GridLayout( 1, 3 ) );
|
|
panel.add( buttonRiscoCriar );
|
|
panel.add( buttonRiscoEditar );
|
|
panel.add( buttonRiscoRemover );
|
|
panelButtons.add( panel, new TableLayoutConstraints( 1, 0 ) );
|
|
panel = new JPanel();
|
|
panel.setBorder( BorderFactory.createTitledBorder( "Requisito" ) );
|
|
panel.setLayout( new GridLayout( 1, 3 ) );
|
|
panel.add( buttonMedidaCriar );
|
|
panel.add( buttonMedidaRemover );
|
|
panel.add( new JPanel() );
|
|
panelButtons.add( panel, new TableLayoutConstraints( 2, 0 ) );
|
|
|
|
panelTree.add( scroll, new TableLayoutConstraints( 0, 0 ) );
|
|
|
|
panelData.add( panelDataTema, PANEL_TEMA );
|
|
panelData.add( panelDataRisco, PANEL_RISCO );
|
|
panelData.add( panelDataMedida, PANEL_MEDIDA );
|
|
|
|
add( panelButtons, new TableLayoutConstraints( 0, 0 ) );
|
|
add( panelTree, new TableLayoutConstraints( 0, 1 ) );
|
|
add( panelData, new TableLayoutConstraints( 1, 1 ) );
|
|
}
|
|
|
|
private void selectCard()
|
|
{
|
|
HsRiscoTema tema = getSelectedTema();
|
|
HsRisco risco = getSelectedRisco();
|
|
HsRiscoMedida medida = getSelectedMedida();
|
|
if( tema != null )
|
|
{
|
|
cardLayout.show( panelData, PANEL_TEMA );
|
|
}
|
|
else if( risco != null )
|
|
{
|
|
cardLayout.show( panelData, PANEL_RISCO );
|
|
}
|
|
else if( medida != null )
|
|
{
|
|
cardLayout.show( panelData, PANEL_MEDIDA );
|
|
panelDataMedida.setMedida( medida.getToHsMedida() );
|
|
}
|
|
}
|
|
|
|
private void refresh()
|
|
{
|
|
root.removeAllChildren();
|
|
TreeTools.merge( root, HigieneSegurancaLogic.getRiscosTree() );
|
|
TreeTools.refreshTree( tree, root, false );
|
|
setEnabled();
|
|
}
|
|
|
|
}
|