package siprp.higiene.gestao.postos; import info.clearthought.layout.TableLayout; import info.clearthought.layout.TableLayoutConstraints; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeSelectionModel; import leaf.ui.LeafButton; import siprp.database.cayenne.objects.Estabelecimentos; import siprp.database.cayenne.objects.HsArea; import siprp.database.cayenne.objects.HsPosto; import siprp.database.cayenne.objects.HsPostoEstabelecimento; public class AdicionarAreasPanel extends JPanel { private static final long serialVersionUID = 1L; private final LeafButton buttonAdicionar = new LeafButton("Adicionar"); private final LeafButton buttonRemover = new LeafButton("Remover"); 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 Estabelecimentos estabelecimento = null; public AdicionarAreasPanel() { startupComponents(); setupLayout(); placeComponents(); startupListeners(); } private void startupComponents() { buttonAdicionar.setEnabled( false ); buttonRemover.setEnabled( false ); tree.setRootVisible( false ); tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); } private void setupLayout() { TableLayout layout = new TableLayout( new double[]{ TableLayout.FILL }, new double[]{ TableLayout.MINIMUM, TableLayout.FILL } ); layout.setHGap( 5 ); layout.setVGap( 5 ); setLayout( layout ); } private void placeComponents() { JPanel panel = new JPanel(); TableLayout layout = new TableLayout( new double[]{ TableLayout.MINIMUM, TableLayout.FILL, TableLayout.MINIMUM }, new double[]{ TableLayout.MINIMUM } ); layout.setHGap( 5 ); layout.setVGap( 5 ); panel.setLayout( layout ); panel.add( buttonAdicionar, new TableLayoutConstraints( 0, 0 ) ); panel.add( buttonRemover, new TableLayoutConstraints( 2, 0 ) ); add( panel, new TableLayoutConstraints( 0, 0 ) ); add( scroll, new TableLayoutConstraints( 0, 1 ) ); } private void startupListeners() { } private void setEnabled() { buttonAdicionar.setEnabled( estabelecimento != null ); buttonRemover.setEnabled( tree.getSelectionCount() > 0 ); } public void refresh() { root.removeAllChildren(); if( estabelecimento != null ) { for( HsPostoEstabelecimento rel : estabelecimento.getHsPostoEstabelecimentoArray() ) { addPosto( rel.getToHsPosto() ); } } setEnabled(); ((DefaultTreeModel) tree.getModel()).nodeStructureChanged( root ); for( int i = 0; i < tree.getRowCount(); ++i) { tree.expandPath( tree.getPathForRow( i ) ); } } private void addPosto( HsPosto posto ) { if( posto != null ) { HsArea area = posto.getToHsArea(); AreaNode areaNode = getAreaNodeWith( area ); if( areaNode == null ) { areaNode = new AreaNode( area ); root.add( areaNode ); } areaNode.add( new PostoNode( posto ) ); } } private AreaNode getAreaNodeWith( HsArea area ) { AreaNode result = null; if( area != null ) { for( int i = 0; i < root.getChildCount(); ++i ) { if( area.equals( ( (AreaNode) root.getChildAt( i )).getUserObject() ) ) { result = (AreaNode) root.getChildAt( i ); } } } return result; } public void setEstabelecimento( Estabelecimentos estabelecimento ) { this.estabelecimento = estabelecimento; refresh(); } }