forked from Coded/SIPRP
git-svn-id: https://svn.coded.pt/svn/SIPRP@754 bb69d46d-e84e-40c8-a05a-06db0d633741
parent
fae6aae398
commit
434d616dd4
@ -0,0 +1,400 @@
|
||||
package siprp.higiene.legislacoes;
|
||||
|
||||
import static com.evolute.utils.strings.UnicodeLatin1Map.atilde;
|
||||
import static com.evolute.utils.strings.UnicodeLatin1Map.ccedil;
|
||||
import static com.evolute.utils.strings.UnicodeLatin1Map.otilde;
|
||||
import info.clearthought.layout.TableLayout;
|
||||
import info.clearthought.layout.TableLayoutConstraints;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JTree;
|
||||
import javax.swing.SwingUtilities;
|
||||
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 siprp.database.cayenne.objects.Legislacao;
|
||||
import siprp.database.cayenne.providers.PlanoActuacaoDAO;
|
||||
|
||||
import com.evolute.utils.tracker.TrackableWindow;
|
||||
|
||||
public class GestaoLegislacoesWindow extends JFrame implements TrackableWindow
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public static final String TITLE = "Gest" + atilde + "o de Legisla" + ccedil + otilde + "es";
|
||||
|
||||
private static final Dimension SIZE = new Dimension( 800, 400 );
|
||||
|
||||
private DefaultMutableTreeNode root = new DefaultMutableTreeNode( "" );
|
||||
|
||||
private final DefaultTreeModel model = new DefaultTreeModel( root );
|
||||
|
||||
private final JTree tree = new JTree( model );
|
||||
|
||||
private final JScrollPane scroll = new JScrollPane( tree );
|
||||
|
||||
private final JButton buttonCriar = new JButton("Criar");
|
||||
|
||||
private final JButton buttonRemover = new JButton("Remover");
|
||||
|
||||
private final JButton buttonGuardar = new JButton("Guardar");
|
||||
|
||||
private final JButton buttonCancelar = new JButton("Cancelar");
|
||||
|
||||
private final JTextArea text = new JTextArea();
|
||||
|
||||
private final JPanel panelTree = new JPanel();
|
||||
|
||||
private final JPanel panelText = new JPanel();
|
||||
|
||||
private final PlanoActuacaoDAO provider = new PlanoActuacaoDAO();
|
||||
|
||||
private Legislacao newLegislacao = null;
|
||||
|
||||
public static void main( String[] args )
|
||||
{
|
||||
GestaoLegislacoesWindow window = new GestaoLegislacoesWindow();
|
||||
window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
|
||||
window.setVisible( true );
|
||||
}
|
||||
|
||||
public GestaoLegislacoesWindow()
|
||||
{
|
||||
this.setTitle( TITLE );
|
||||
this.setSize( SIZE );
|
||||
startupComponents();
|
||||
startupLayout();
|
||||
startupListeners();
|
||||
placeComponents();
|
||||
refresh();
|
||||
}
|
||||
|
||||
private void startupComponents()
|
||||
{
|
||||
panelText.setBorder( BorderFactory.createEtchedBorder() );
|
||||
buttonRemover.setEnabled( false );
|
||||
buttonGuardar.setEnabled( false );
|
||||
buttonCancelar.setEnabled( false );
|
||||
text.setEnabled( false );
|
||||
tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
|
||||
tree.setRootVisible( false );
|
||||
}
|
||||
|
||||
private void startupLayout()
|
||||
{
|
||||
startupPanelTextLayout();
|
||||
startupPanelTreeLayout();
|
||||
this.getContentPane().setLayout( new GridLayout(1,0,5,5) );
|
||||
}
|
||||
|
||||
private void startupPanelTextLayout()
|
||||
{
|
||||
TableLayout layout = new TableLayout(
|
||||
new double[]{ TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL },
|
||||
new double[]{ TableLayout.FILL, TableLayout.MINIMUM }
|
||||
);
|
||||
layout.setHGap( 5 );
|
||||
layout.setVGap( 5 );
|
||||
panelText.setLayout( layout );
|
||||
}
|
||||
|
||||
private void startupPanelTreeLayout()
|
||||
{
|
||||
TableLayout layout = new TableLayout(
|
||||
new double[]{ TableLayout.MINIMUM, TableLayout.MINIMUM, TableLayout.FILL },
|
||||
new double[]{ TableLayout.FILL, TableLayout.MINIMUM }
|
||||
);
|
||||
layout.setHGap( 5 );
|
||||
layout.setVGap( 5 );
|
||||
panelTree.setLayout( layout );
|
||||
}
|
||||
|
||||
private void startupListeners()
|
||||
{
|
||||
buttonCriar.addActionListener( new ActionListener()
|
||||
{
|
||||
@Override
|
||||
public void actionPerformed( ActionEvent e )
|
||||
{
|
||||
criarLegislacao( );
|
||||
}
|
||||
} );
|
||||
buttonRemover.addActionListener( new ActionListener()
|
||||
{
|
||||
@Override
|
||||
public void actionPerformed( ActionEvent e )
|
||||
{
|
||||
removerLegislacao();
|
||||
}
|
||||
} );
|
||||
buttonGuardar.addActionListener( new ActionListener()
|
||||
{
|
||||
@Override
|
||||
public void actionPerformed( ActionEvent e )
|
||||
{
|
||||
guardarLegislacao();
|
||||
}
|
||||
} );
|
||||
buttonCancelar.addActionListener( new ActionListener()
|
||||
{
|
||||
@Override
|
||||
public void actionPerformed( ActionEvent e )
|
||||
{
|
||||
cancelarEdicao();
|
||||
}
|
||||
} );
|
||||
tree.getSelectionModel().addTreeSelectionListener( new TreeSelectionListener()
|
||||
{
|
||||
@Override
|
||||
public void valueChanged( TreeSelectionEvent e )
|
||||
{
|
||||
TreePath path = tree.getSelectionPath();
|
||||
Legislacao legislacao = getSelectedLegislacao();
|
||||
if( path != null )
|
||||
{
|
||||
buttonRemover.setEnabled( !root.equals( path.getLastPathComponent() ) );
|
||||
text.setEnabled( !root.equals( path.getLastPathComponent() ) );
|
||||
text.setText( legislacao == null ? "" : legislacao.getDescription() );
|
||||
}
|
||||
else
|
||||
{
|
||||
text.setEnabled( false );
|
||||
buttonRemover.setEnabled( false );
|
||||
text.setText( "" );
|
||||
}
|
||||
}
|
||||
} );
|
||||
text.addCaretListener( new CaretListener()
|
||||
{
|
||||
@Override
|
||||
public void caretUpdate( CaretEvent e )
|
||||
{
|
||||
if( text.getText().length() > 0)
|
||||
{
|
||||
Legislacao legislacao = null;
|
||||
if( newLegislacao != null )
|
||||
{
|
||||
legislacao = newLegislacao;
|
||||
}
|
||||
else
|
||||
{
|
||||
legislacao = getSelectedLegislacao();
|
||||
}
|
||||
boolean changed = legislacao == null ? false : !legislacao.getDescription().equals( text.getText() );
|
||||
buttonGuardar.setEnabled( changed );
|
||||
text.setBorder( changed ? BorderFactory.createLineBorder( Color.RED, 2 ) : BorderFactory.createEtchedBorder() );
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonGuardar.setEnabled( false );
|
||||
text.setBorder( BorderFactory.createEtchedBorder() );
|
||||
}
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
private void placeComponents()
|
||||
{
|
||||
panelTree.add( scroll, new TableLayoutConstraints( 0, 0, 2, 0 ) );
|
||||
panelTree.add( buttonCriar, new TableLayoutConstraints( 0, 1 ) );
|
||||
panelTree.add( buttonRemover, new TableLayoutConstraints( 1, 1 ) );
|
||||
|
||||
panelText.add( text, new TableLayoutConstraints( 0, 0, 2, 0 ) );
|
||||
panelText.add( buttonGuardar, new TableLayoutConstraints( 0, 1 ) );
|
||||
panelText.add( buttonCancelar, new TableLayoutConstraints( 1, 1 ) );
|
||||
|
||||
this.getContentPane().add( panelTree );
|
||||
this.getContentPane().add( panelText );
|
||||
}
|
||||
|
||||
private void criarLegislacao()
|
||||
{
|
||||
text.setText( "" );
|
||||
Legislacao selected = getSelectedLegislacao();
|
||||
if( selected != null )
|
||||
{
|
||||
newLegislacao = provider.createNovaLegislacao( selected );
|
||||
}
|
||||
else
|
||||
{
|
||||
newLegislacao = provider.createNovaLegislacao( getSelectedLegislacao() );
|
||||
}
|
||||
prepareEditar( false );
|
||||
textInputOnly( true );
|
||||
}
|
||||
|
||||
private void prepareEditar( boolean editar )
|
||||
{
|
||||
buttonGuardar.setText( editar ? "Editar" : "Criar" );
|
||||
buttonCancelar.setText( editar ? "Reverter" : "Cancelar" );
|
||||
}
|
||||
|
||||
private void textInputOnly( boolean doTextInput )
|
||||
{
|
||||
text.setEnabled( doTextInput );
|
||||
buttonCancelar.setEnabled( doTextInput );
|
||||
buttonCriar.setEnabled( !doTextInput );
|
||||
tree.setEnabled( !doTextInput );
|
||||
text.setBorder( doTextInput ? BorderFactory.createLineBorder( Color.RED, 2 ) : BorderFactory.createEtchedBorder());
|
||||
if( doTextInput ){
|
||||
text.setCaretPosition( 0 );
|
||||
text.requestFocus();
|
||||
buttonRemover.setEnabled( false );
|
||||
}
|
||||
}
|
||||
|
||||
private void guardarLegislacao()
|
||||
{
|
||||
TreePath path = tree.getSelectionPath();
|
||||
if( newLegislacao != null )
|
||||
{
|
||||
newLegislacao.setDescription( text.getText() );
|
||||
provider.commit();
|
||||
newLegislacao = null;
|
||||
prepareEditar( true );
|
||||
textInputOnly( false );
|
||||
refresh();
|
||||
}
|
||||
else if( path != null )
|
||||
{
|
||||
Legislacao legislacao = getSelectedLegislacao();
|
||||
legislacao.setDescription( text.getText() );
|
||||
provider.commit();
|
||||
prepareEditar( true );
|
||||
textInputOnly( false );
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
private void cancelarEdicao()
|
||||
{
|
||||
TreePath path = tree.getSelectionPath();
|
||||
if( newLegislacao != null )
|
||||
{
|
||||
newLegislacao = null;
|
||||
prepareEditar( true );
|
||||
textInputOnly( false );
|
||||
refresh();
|
||||
tree.setSelectionPath( path );
|
||||
}
|
||||
else if( path != null )
|
||||
{
|
||||
prepareEditar( true );
|
||||
textInputOnly( false );
|
||||
refresh();
|
||||
tree.setSelectionPath( path );
|
||||
}
|
||||
}
|
||||
|
||||
private Legislacao getSelectedLegislacao()
|
||||
{
|
||||
Legislacao result = null;
|
||||
TreePath path = tree.getSelectionPath();
|
||||
if( path != null )
|
||||
{
|
||||
Object o = ( (DefaultMutableTreeNode) path.getLastPathComponent() ).getUserObject();
|
||||
if( o instanceof Legislacao )
|
||||
{
|
||||
result = (Legislacao) o;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void removerLegislacao()
|
||||
{
|
||||
Legislacao legislacao = getSelectedLegislacao();
|
||||
if( legislacao != null )
|
||||
{
|
||||
provider.delete( legislacao );
|
||||
}
|
||||
refresh();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh()
|
||||
{
|
||||
clearTree();
|
||||
fillTree();
|
||||
}
|
||||
|
||||
private void clearTree()
|
||||
{
|
||||
root.removeAllChildren();
|
||||
refreshTree();
|
||||
}
|
||||
|
||||
private void fillTree()
|
||||
{
|
||||
List<Legislacao> legislacoes = provider.getAllLegislacoes( null );
|
||||
for( Legislacao legislacao : legislacoes )
|
||||
{
|
||||
DefaultMutableTreeNode node = new DefaultMutableTreeNode( legislacao );
|
||||
fillWithChildren( node, legislacao );
|
||||
root.add( node );
|
||||
}
|
||||
refreshTree();
|
||||
}
|
||||
|
||||
private void fillWithChildren( DefaultMutableTreeNode node, Legislacao legislacao )
|
||||
{
|
||||
if( legislacao != null )
|
||||
{
|
||||
for( Legislacao child : legislacao.getChildrenArray() )
|
||||
{
|
||||
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child);
|
||||
fillWithChildren( childNode, child );
|
||||
node.add( childNode );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void refreshTree()
|
||||
{
|
||||
model.nodeStructureChanged( root );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean closeIfPossible()
|
||||
{
|
||||
close();
|
||||
return true;
|
||||
}
|
||||
|
||||
private void close()
|
||||
{
|
||||
SwingUtilities.invokeLater( new Runnable() {
|
||||
public void run()
|
||||
{
|
||||
setVisible( false );
|
||||
dispose();
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open()
|
||||
{
|
||||
setVisible( true );
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in new issue