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/postos/GerirAreasPanel.java

419 lines
9.9 KiB

package siprp.higiene.gestao.postos;
import static com.evolute.utils.strings.UnicodeLatin1Map.aacute;
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.Collections;
import java.util.Date;
import java.util.List;
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.TreeNode;
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.Empresas;
import siprp.database.cayenne.objects.HsArea;
import siprp.database.cayenne.objects.HsPosto;
import siprp.logic.node.AreaNode;
import siprp.logic.node.PostoNode;
public class GerirAreasPanel extends JPanel implements LeafUIConstants
{
private static final long serialVersionUID = 1L;
private final JPanel panelButtons = new JPanel();
private final JPanel panelTree = new JPanel();
public final LeafButton buttonAreaCriar = LeafIconButton.createDefaultNewButton();
public final LeafButton buttonAreaEditar = LeafIconButton.createDefaultEditButton();
public final LeafButton buttonAreaRemover = LeafIconButton.createDefaultRemoveButton();
public final LeafButton buttonPostoCriar = LeafIconButton.createDefaultNewButton();
public final LeafButton buttonPostoEditar = LeafIconButton.createDefaultEditButton();
public final LeafButton buttonPostoRemover = LeafIconButton.createDefaultRemoveButton();
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;
public GerirAreasPanel()
{
startupComponents();
startupLayout();
placeComponents();
setupListeners();
}
private void startupComponents()
{
panelButtons.setPreferredSize( new Dimension( 150, 0 ) );
panelTree.setPreferredSize( new Dimension( 300, 0 ) );
tree.setRootVisible( false );
tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
}
private void startupLayout()
{
TableLayout layout = new TableLayout( new double[] {
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, 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 );
}
private void placeComponents()
{
JPanel panel = new JPanel();
panel.setBorder( BorderFactory.createTitledBorder( "Area" ) );
panel.setLayout( new GridLayout( 1, 3 ) );
panel.add( buttonAreaCriar );
panel.add( buttonAreaEditar );
panel.add( buttonAreaRemover );
panelButtons.add( panel, new TableLayoutConstraints( 0, 0 ) );
panel = new JPanel();
panel.setBorder( BorderFactory.createTitledBorder( "Posto" ) );
panel.setLayout( new GridLayout( 1, 3 ) );
panel.add( buttonPostoCriar );
panel.add( buttonPostoEditar );
panel.add( buttonPostoRemover );
panelButtons.add( panel, new TableLayoutConstraints( 1, 0 ) );
panelTree.add( scroll, new TableLayoutConstraints( 0, 0 ) );
add( panelButtons, new TableLayoutConstraints( 0, 0 ) );
add( panelTree, new TableLayoutConstraints( 0, 1 ) );
}
private void setupListeners()
{
tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener()
{
@Override
public void valueChanged( TreeSelectionEvent e )
{
setEnabled();
}
} );
buttonAreaCriar.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
criarArea();
}
} );
buttonAreaEditar.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
editarArea();
}
} );
buttonAreaRemover.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
removerArea();
}
} );
buttonPostoCriar.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
criarPosto();
}
} );
buttonPostoEditar.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
editarPosto();
}
} );
buttonPostoRemover.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
removerPosto();
}
} );
}
private void criarArea()
{
try
{
if( empresa != null )
{
String areaString = JOptionPane.showInputDialog( this, "Descri" + ccedil + atilde + "o", "Criar nova " + aacute + "rea", JOptionPane.QUESTION_MESSAGE );
if( areaString != null )
{
HsArea area = new HsArea();
area.setToEmpresas( empresa );
area.setDescription( areaString );
area.save();
refresh();
}
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private void editarArea()
{
try
{
HsArea area = getSelectedArea();
if( area != null )
{
String areaString = JOptionPane.showInputDialog( this, "Descri" + ccedil + atilde + "o", area.getDescription() );
if( areaString != null )
{
area.setDescription( areaString );
area.save();
refresh();
}
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private void removerArea()
{
try
{
HsArea area = getSelectedArea();
if( area != null && LeafDialog.confirmDelete( false, false, aacute + "rea") )
{
area.delete();
refresh();
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private void criarPosto()
{
try
{
HsArea area = getSelectedArea();
if( area != null )
{
String postoString = JOptionPane.showInputDialog( this, "Descri" + ccedil + atilde + "o", "Criar novo posto de trabalho", JOptionPane.QUESTION_MESSAGE );
if( postoString != null )
{
HsPosto posto = new HsPosto();
posto.setToHsArea( area );
posto.setDescription( postoString );
posto.save();
refresh();
}
refresh();
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private void editarPosto()
{
try
{
HsPosto posto = getSelectedPosto();
if( posto != null )
{
String postoString = JOptionPane.showInputDialog( this, "Descri" + ccedil + atilde + "o", posto.getDescription() );
if( postoString != null )
{
posto.setDescription( postoString );
posto.save();
refresh();
}
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private void removerPosto()
{
try
{
HsPosto posto = getSelectedPosto();
if( posto != null && LeafDialog.confirmDelete( true, false, "posto" ) )
{
posto.setDeletedDate( new Date() );
posto.save();
refresh();
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private HsArea getSelectedArea()
{
HsArea result = null;
TreePath path = tree.getSelectionPath();
if( path != null )
{
Object leaf = path.getLastPathComponent();
if( leaf != null )
{
if( leaf instanceof AreaNode )
{
result = (HsArea) ((AreaNode) leaf).getUserObject();
}
else if( leaf instanceof PostoNode )
{
result = (HsArea) ((HsPosto) ((PostoNode) leaf).getUserObject()).getToHsArea();
}
}
}
return result;
}
private HsPosto getSelectedPosto()
{
HsPosto result = null;
TreePath path = tree.getSelectionPath();
if( path != null )
{
Object leaf = path.getLastPathComponent();
if( leaf != null && (leaf instanceof PostoNode) )
{
result = (HsPosto) ((PostoNode) leaf).getUserObject();
}
}
return result;
}
private void setEnabled()
{
TreePath path = tree.getSelectionPath();
TreeNode node = path == null ? null : (TreeNode) path.getLastPathComponent();
boolean areaSelected = node != null && (node instanceof AreaNode);
boolean postoSelected = node != null && (node instanceof PostoNode);
buttonPostoCriar.setEnabled( areaSelected || postoSelected );
buttonPostoEditar.setEnabled( postoSelected );
buttonPostoRemover.setEnabled( postoSelected );
buttonAreaRemover.setEnabled( areaSelected );
buttonAreaCriar.setEnabled( empresa != null );
buttonAreaEditar.setEnabled( areaSelected );
}
public void refresh()
{
root.removeAllChildren();
if( empresa != null )
{
List<HsArea> areas = empresa.getHsAreaArray();
Collections.sort( areas );
for( HsArea area : areas )
{
addArea( area );
}
}
setEnabled();
TreeTools.refreshTree( tree, root );
}
private void addArea( HsArea area )
{
if( area != null )
{
AreaNode areaNode = new AreaNode( area );
for( HsPosto posto : area.getHsPostoArray() )
{
addPosto( posto, areaNode );
}
root.add( areaNode );
}
}
private void addPosto( HsPosto posto, AreaNode areaNode )
{
if( posto != null && posto.getDeletedDate() == null )
{
PostoNode postoNode = new PostoNode( posto );
areaNode.add( postoNode );
}
}
public void setEmpresa( Empresas empresa )
{
this.empresa = empresa;
refresh();
}
}