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.
SIPRP/trunk/SIPRPSoft/src/siprp/higiene/gestao/equipamentos/GerirEquipamentosPanel.java

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();
}
}