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.
333 lines
9.0 KiB
333 lines
9.0 KiB
package siprp.higiene.gestao.equipamentos;
|
|
|
|
import static com.evolute.utils.strings.UnicodeLatin1Map.atilde;
|
|
import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil;
|
|
import info.clearthought.layout.TableLayout;
|
|
import info.clearthought.layout.TableLayoutConstraints;
|
|
|
|
import java.awt.Dimension;
|
|
import java.awt.GridLayout;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.util.Date;
|
|
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JOptionPane;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.JTextField;
|
|
import javax.swing.event.CaretEvent;
|
|
import javax.swing.event.CaretListener;
|
|
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.LeafTree;
|
|
import leaf.ui.LeafUIConstants;
|
|
import siprp.database.cayenne.objects.HsEquipamento;
|
|
import siprp.logic.HigieneSegurancaLogic;
|
|
|
|
import com.evolute.adt.TreeTools;
|
|
|
|
public class GerirEquipamentosPanel extends JPanel implements CaretListener, LeafUIConstants
|
|
{
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
private LeafIconButton buttonSaveRequesito = LeafIconButton.createButton( ICON_NAME_SAVE );
|
|
|
|
private LeafIconButton buttonRevertRequesito = LeafIconButton.createButton( ICON_NAME_REVERT );
|
|
|
|
private final JPanel panelButtons = new JPanel();
|
|
|
|
private final JPanel panelTree = new JPanel();
|
|
|
|
private final JPanel panelData = new JPanel();
|
|
|
|
private final JTextField textTipo = new JTextField(20);
|
|
|
|
private final JTextField textMarca = new JTextField(20);
|
|
|
|
private final JTextField textModelo = new JTextField(20);
|
|
|
|
private final LeafButton buttonCriar = LeafIconButton.createDefaultNewButton();
|
|
|
|
private final LeafButton buttonRemover = LeafIconButton.createDefaultRemoveButton();
|
|
|
|
private final DefaultMutableTreeNode root = new DefaultMutableTreeNode();
|
|
|
|
private final DefaultTreeModel model = new DefaultTreeModel( root );
|
|
|
|
private final LeafTree tree = new LeafTree( model );
|
|
|
|
private final JScrollPane scroll = new JScrollPane( tree );
|
|
|
|
public GerirEquipamentosPanel()
|
|
{
|
|
startupComponents();
|
|
startupLayout();
|
|
placeComponents();
|
|
setupListeners();
|
|
refresh();
|
|
}
|
|
|
|
private void setupListeners()
|
|
{
|
|
buttonCriar.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
criar();
|
|
}
|
|
} );
|
|
buttonRemover.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
remover();
|
|
}
|
|
} );
|
|
buttonSaveRequesito.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
save();
|
|
}
|
|
} );
|
|
buttonRevertRequesito.addActionListener( new ActionListener()
|
|
{
|
|
@Override
|
|
public void actionPerformed( ActionEvent e )
|
|
{
|
|
revert();
|
|
}
|
|
} );
|
|
tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener()
|
|
{
|
|
@Override
|
|
public void valueChanged( TreeSelectionEvent e )
|
|
{
|
|
TreePath path = e.getNewLeadSelectionPath();
|
|
if( path != null )
|
|
{
|
|
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
|
|
Object obj = node.getUserObject();
|
|
if( obj instanceof HsEquipamento )
|
|
{
|
|
textTipo.setText( ((HsEquipamento)obj).getTipo() );
|
|
textMarca.setText( ((HsEquipamento)obj).getMarca() );
|
|
textModelo.setText( ((HsEquipamento)obj).getModelo());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
textTipo.setText( "" );
|
|
textMarca.setText( "" );
|
|
textModelo.setText( "" );
|
|
}
|
|
setEnabled();
|
|
}
|
|
} );
|
|
textTipo.addCaretListener( this );
|
|
textMarca.addCaretListener( this );
|
|
textModelo.addCaretListener( this );
|
|
}
|
|
|
|
private void criar()
|
|
{
|
|
try
|
|
{
|
|
String tipo = JOptionPane.showInputDialog( this, "Tipo", "Criar novo equipamento", JOptionPane.QUESTION_MESSAGE );
|
|
if( tipo != null )
|
|
{
|
|
HsEquipamento equipamento = new HsEquipamento();
|
|
equipamento.setTipo( tipo );
|
|
equipamento.save();
|
|
refresh();
|
|
}
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private void remover()
|
|
{
|
|
try
|
|
{
|
|
HsEquipamento equipamento = getSelected();
|
|
if( equipamento != null && confirmDelete() )
|
|
{
|
|
equipamento.setDeletedDate( new Date() );
|
|
equipamento.save();
|
|
refresh();
|
|
}
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private boolean confirmDelete()
|
|
{
|
|
return JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(
|
|
null, "Tem a certeza que deseja remover o equipamento seleccionado?",
|
|
"Confirmar remo" + ccedil + atilde + "o",
|
|
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null );
|
|
}
|
|
|
|
private void save()
|
|
{
|
|
try
|
|
{
|
|
HsEquipamento equipamento = getSelected();
|
|
if( equipamento != null )
|
|
{
|
|
equipamento.setTipo( textTipo.getText() );
|
|
equipamento.setMarca( textMarca.getText() );
|
|
equipamento.setModelo( textModelo.getText() );
|
|
equipamento.save();
|
|
refresh();
|
|
}
|
|
}
|
|
catch( Exception e )
|
|
{
|
|
LeafDialog.error( e );
|
|
}
|
|
}
|
|
|
|
private void revert()
|
|
{
|
|
HsEquipamento equipamento = getSelected();
|
|
if( equipamento != null )
|
|
{
|
|
textTipo.setText( equipamento.getTipo() );
|
|
textMarca.setText( equipamento.getMarca() );
|
|
textModelo.setText( equipamento.getModelo() );
|
|
}
|
|
}
|
|
|
|
private HsEquipamento getSelected()
|
|
{
|
|
Object object = getSelectedObject();
|
|
return object == null ? null : ((object instanceof HsEquipamento) ? (HsEquipamento) 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()
|
|
{
|
|
panelTree.setPreferredSize( new Dimension( 400, 400 ) );
|
|
tree.setRootVisible( false );
|
|
tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
|
|
}
|
|
|
|
private void setEnabled()
|
|
{
|
|
HsEquipamento equipamento = getSelected();
|
|
buttonRemover.setEnabled( equipamento != null );
|
|
textTipo.setEnabled( equipamento != null );
|
|
textMarca.setEnabled( equipamento != null );
|
|
textModelo.setEnabled( equipamento != null );
|
|
buttonSaveRequesito.setEnabled( false );
|
|
buttonRevertRequesito.setEnabled( false );
|
|
if( equipamento != null )
|
|
{
|
|
boolean changed = !textTipo.getText().equals( equipamento.getTipo() );
|
|
changed |= !textMarca.getText().equals( equipamento.getMarca() == null ? "" : equipamento.getMarca() );
|
|
changed |= !textModelo.getText().equals( equipamento.getModelo() == null ? "" : equipamento.getModelo() );
|
|
buttonSaveRequesito.setEnabled( changed );
|
|
buttonRevertRequesito.setEnabled( changed );
|
|
}
|
|
}
|
|
|
|
private void startupLayout()
|
|
{
|
|
TableLayout layout = new TableLayout( new double[] {
|
|
TableLayout.MINIMUM, TableLayout.PREFERRED, TableLayout.FILL
|
|
}, new double[] {
|
|
TableLayout.MINIMUM, TableLayout.FILL
|
|
} );
|
|
layout.setHGap( 5 );
|
|
layout.setVGap( 5 );
|
|
setLayout( layout );
|
|
|
|
layout = new TableLayout( new double[] {
|
|
TableLayout.MINIMUM, TableLayout.MINIMUM
|
|
}, new double[] {
|
|
TableLayout.MINIMUM
|
|
} );
|
|
layout.setHGap( 5 );
|
|
layout.setVGap( 5 );
|
|
panelButtons.setLayout( layout );
|
|
|
|
layout = new TableLayout( new double[] {
|
|
TableLayout.MINIMUM, TableLayout.FILL,TableLayout.MINIMUM,TableLayout.MINIMUM
|
|
}, new double[] {
|
|
TableLayout.MINIMUM,TableLayout.MINIMUM,TableLayout.MINIMUM, TableLayout.MINIMUM
|
|
} );
|
|
layout.setHGap( 5 );
|
|
layout.setVGap( 5 );
|
|
panelData.setLayout( layout );
|
|
|
|
panelTree.setLayout( new GridLayout( 1,1 ) );
|
|
}
|
|
|
|
private void placeComponents()
|
|
{
|
|
panelButtons.add( buttonCriar, new TableLayoutConstraints( 0, 0 ) );
|
|
panelButtons.add( buttonRemover, new TableLayoutConstraints( 1, 0 ) );
|
|
|
|
panelTree.add( scroll, new TableLayoutConstraints( 0, 0 ) );
|
|
|
|
panelData.add( buttonSaveRequesito, new TableLayoutConstraints( 2, 0 ) );
|
|
panelData.add( buttonRevertRequesito, new TableLayoutConstraints( 3, 0 ) );
|
|
panelData.add( new JLabel("Tipo"), new TableLayoutConstraints( 0, 1 ) );
|
|
panelData.add( textTipo, new TableLayoutConstraints( 1, 1, 3, 1 ) );
|
|
panelData.add( new JLabel("Marca"), new TableLayoutConstraints( 0, 2 ) );
|
|
panelData.add( textMarca, new TableLayoutConstraints( 1, 2, 3, 2 ) );
|
|
panelData.add( new JLabel("Modelo"), new TableLayoutConstraints( 0, 3 ) );
|
|
panelData.add( textModelo, new TableLayoutConstraints( 1, 3, 3, 3 ) );
|
|
|
|
add( panelButtons, new TableLayoutConstraints( 0, 0 ) );
|
|
add( panelTree, new TableLayoutConstraints( 0, 1, 1, 1 ) );
|
|
add( panelData, new TableLayoutConstraints( 2, 1 ) );
|
|
}
|
|
|
|
private void refresh()
|
|
{
|
|
root.removeAllChildren();
|
|
TreeTools.merge( root, HigieneSegurancaLogic.getEquipamentosTree() );
|
|
TreeTools.refreshTree( tree, root, false );
|
|
setEnabled();
|
|
}
|
|
|
|
@Override
|
|
public void caretUpdate( CaretEvent e )
|
|
{
|
|
setEnabled();
|
|
}
|
|
|
|
}
|