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.

466 lines
11 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 static com.evolute.utils.strings.UnicodeLatin1Map.eacute;
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.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
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.LeafTree;
import leaf.ui.LeafUIConstants;
import shst.data.outer.EmpresasData;
import shst.data.outer.HsAreaData;
import shst.data.outer.HsPostoData;
import shst.logic.node.AreaNode;
import shst.logic.node.PostoNode;
import com.evolute.utils.ui.trees.TreeTools;
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 JCheckBox checkGenerico = new JCheckBox( "Gen"+eacute+"rico" );
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 EmpresasData 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.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 ) );
panelButtons.add( checkGenerico, new TableLayoutConstraints(2,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 )
{
setSelected();
}
} );
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();
}
} );
checkGenerico.addItemListener( new ItemListener()
{
@Override
public void itemStateChanged( ItemEvent e )
{
HsPostoData posto = getSelectedPosto();
if( posto != null )
{
posto.setIs_principal( checkGenerico.isSelected() );
try
{
posto.save();
} catch( Exception e1 )
{
e1.printStackTrace();
}
}
}
} );
}
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 )
{
HsAreaData area = new HsAreaData();
area.setToEmpresa_id( empresa );
area.setDescription( areaString );
area.save();
refresh();
}
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private void editarArea()
{
try
{
HsAreaData 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()
{
HsAreaData area = getSelectedArea();
if( area != null )
{
List< HsPostoData > listPostos = area.fromHsPosto_area_id();
if ( listPostos != null && listPostos.size() > 0 )
{
JOptionPane.showMessageDialog( this, "Tem de remover todos os postos primeiro.", "Erro", JOptionPane.ERROR_MESSAGE );
}
else if ( LeafDialog.confirmDelete( false, false, aacute + "rea") )
{
try
{
area.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) );
area.save();
// area.delete();
refresh();
}
catch ( Exception e )
{
LeafDialog.error( e );
}
}
}
}
private void criarPosto()
{
try
{
HsAreaData 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 )
{
HsPostoData posto = new HsPostoData();
posto.setToArea_id( area );
posto.setDescription( postoString );
posto.save();
refresh();
}
refresh();
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private void editarPosto()
{
try
{
HsPostoData 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
{
HsPostoData posto = getSelectedPosto();
if( posto != null && LeafDialog.confirmDelete( true, false, "posto" ) )
{
posto.setDeleted_date( new java.sql.Timestamp( new Date().getTime() ) );
posto.save();
refresh();
}
} catch( Exception e )
{
LeafDialog.error( e );
}
}
private HsAreaData getSelectedArea()
{
HsAreaData result = null;
TreePath path = tree.getSelectionPath();
if( path != null )
{
Object leaf = path.getLastPathComponent();
if( leaf != null )
{
if( leaf instanceof AreaNode )
{
result = (HsAreaData) ((AreaNode) leaf).getUserObject();
}
else if( leaf instanceof PostoNode )
{
result = (HsAreaData) ((HsPostoData) ((PostoNode) leaf).getUserObject()).toArea_id();
}
}
}
return result;
}
private HsPostoData getSelectedPosto()
{
HsPostoData result = null;
TreePath path = tree.getSelectionPath();
if( path != null )
{
Object leaf = path.getLastPathComponent();
if( leaf != null && (leaf instanceof PostoNode) )
{
result = (HsPostoData) ((PostoNode) leaf).getUserObject();
}
}
return result;
}
private void setSelected()
{
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 );
checkGenerico.setEnabled( postoSelected );
boolean generico = false;
if( postoSelected && node != null)
{
HsPostoData posto = (HsPostoData) ((PostoNode) node).getUserObject();
generico = posto != null && (posto.getIs_principal() ==null ? false : posto.getIs_principal() );
}
checkGenerico.setSelected(generico);
}
public void refresh()
{
root.removeAllChildren();
if( empresa != null )
{
List<HsAreaData> areas = empresa.fromHsArea_empresa_id();
Collections.sort( areas );
for( HsAreaData area : areas )
{
addArea( area );
}
}
setSelected();
TreeTools.refreshTree( tree, root, false );
}
private void addArea( HsAreaData area )
{
if( area != null )
{
AreaNode areaNode = new AreaNode( area );
for( HsPostoData posto : area.fromHsPosto_area_id() )
{
addPosto( posto, areaNode );
}
root.add( areaNode );
}
}
private void addPosto( HsPostoData posto, AreaNode areaNode )
{
if( posto != null && posto.getDeleted_date() == null )
{
PostoNode postoNode = new PostoNode( posto );
areaNode.add( postoNode );
}
}
public void setEmpresa( EmpresasData empresa )
{
this.empresa = empresa;
refresh();
}
}