package org.ohdsi.rabbitInAHat;
import java.awt.Container;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import org.ohdsi.rabbitInAHat.ResizeListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
public class FilterDialog extends JDialog implements ActionListener, ResizeListener {
/**
*
*/
private static final long serialVersionUID = 7009265246652874341L;
private JTextField sourceSearchField;
private JTextField targetSearchField;
private MappingPanel filterPanel;
SpringLayout layout = new SpringLayout();
Container contentPane = this.getContentPane();
public FilterDialog(Window parentWindow){
super(parentWindow,"Filter",ModalityType.MODELESS);
this.setResizable(false);
this.setLocation(parentWindow.getX()+parentWindow.getWidth()/2, parentWindow.getY()+100);
contentPane.setLayout(layout);
sourceSearchField = new JTextField(30);
sourceSearchField.setName("Source");
targetSearchField = new JTextField(30);
targetSearchField.setName("Target");
// Add key listener to send search string as it's being typed
sourceSearchField.addKeyListener(new SearchListener() );
sourceSearchField.addFocusListener(new SearchFocusListener());
JLabel sourceLabel = new JLabel("Filter Source:",JLabel.TRAILING);
JButton sourceClearBtn = new JButton("Clear");
contentPane.add(sourceLabel);
contentPane.add(sourceSearchField);
sourceClearBtn.addActionListener(this);
sourceClearBtn.setActionCommand("Clear Source");
sourceClearBtn.setFocusable(false);
contentPane.add(sourceClearBtn);
targetSearchField.addKeyListener(new SearchListener() );
targetSearchField.addFocusListener(new SearchFocusListener());
JLabel targetLabel = new JLabel("Filter Target:",JLabel.TRAILING);
JButton targetClearBtn = new JButton("Clear");
contentPane.add(targetLabel);
contentPane.add(targetSearchField);
targetClearBtn.addActionListener(this);
targetClearBtn.setActionCommand("Clear Target");
targetClearBtn.setFocusable(false);
contentPane.add(targetClearBtn);
layout.putConstraint(SpringLayout.WEST, sourceLabel, 5, SpringLayout.WEST, contentPane);
layout.putConstraint(SpringLayout.NORTH, sourceLabel, 5, SpringLayout.NORTH, contentPane);
layout.putConstraint(SpringLayout.WEST, sourceSearchField, 5, SpringLayout.EAST, sourceLabel);
layout.putConstraint(SpringLayout.NORTH, sourceSearchField, 5, SpringLayout.NORTH, contentPane);
layout.putConstraint(SpringLayout.WEST, sourceClearBtn, 5, SpringLayout.EAST, sourceSearchField);
layout.putConstraint(SpringLayout.NORTH, sourceClearBtn, 5, SpringLayout.NORTH, contentPane);
layout.putConstraint(SpringLayout.WEST, targetLabel, 5, SpringLayout.WEST, contentPane);
layout.putConstraint(SpringLayout.NORTH, targetLabel, 10, SpringLayout.SOUTH, sourceLabel);
layout.putConstraint(SpringLayout.WEST, targetSearchField, 0, SpringLayout.WEST, sourceSearchField);
layout.putConstraint(SpringLayout.NORTH, targetSearchField, 0, SpringLayout.NORTH, targetLabel);
layout.putConstraint(SpringLayout.WEST, targetClearBtn, 5, SpringLayout.EAST, targetSearchField);
layout.putConstraint(SpringLayout.NORTH, targetClearBtn, 0, SpringLayout.NORTH, targetSearchField);
layout.putConstraint(SpringLayout.SOUTH, contentPane, 5, SpringLayout.SOUTH, targetLabel);
layout.putConstraint(SpringLayout.NORTH, contentPane, 5, SpringLayout.NORTH, sourceLabel);
layout.putConstraint(SpringLayout.WEST, contentPane, 5, SpringLayout.WEST, sourceLabel);
layout.putConstraint(SpringLayout.EAST, contentPane, 5, SpringLayout.EAST, targetClearBtn);
this.pack();
};
public void setFilterPanel(MappingPanel aFilterPanel){
if (filterPanel != null) {
filterPanel.removeResizeListener(this);
}
filterPanel = aFilterPanel;
if (filterPanel != null) {
aFilterPanel.addResizeListener(this);
}
setSearchFieldsToLastSearch();
}
public MappingPanel getFilterPanel(){
if(filterPanel.isMinimized()){
return filterPanel.getSlaveMappingPanel();
}else{
return filterPanel;
}
}
public void doFilterPanel(String str,String panelName){
getFilterPanel().filterComponents(str,panelName=="Target");
}
@Override
public void actionPerformed(ActionEvent event) {
switch (event.getActionCommand()) {
case "Clear Source":
clearSourceFilter();
break;
case "Clear Target":
clearTargetFilter();
break;
}
}
private void clearTargetFilter() {
targetSearchField.setText("");
doFilterPanel("","Target");
}
private void clearSourceFilter() {
sourceSearchField.setText("");
doFilterPanel("","Source");
}
private void setSearchFieldsToLastSearch(){
sourceSearchField.setText(getFilterPanel().getLastSourceFilter());
targetSearchField.setText(getFilterPanel().getLastTargetFilter());
}
public void notifyResized(int height, boolean minimized, boolean maximized) {
setSearchFieldsToLastSearch();
}
class SearchListener implements KeyListener{
private String searchStrBuffer = "";
@Override
public void keyPressed(KeyEvent event) {
}
@Override
public void keyReleased(KeyEvent event) {
switch (event.getComponent().getName()) {
case "Source":
searchStrBuffer = sourceSearchField.getText();
break;
case "Target":
searchStrBuffer = targetSearchField.getText();
break;
}
doFilterPanel(searchStrBuffer,event.getComponent().getName());
}
@Override
public void keyTyped(KeyEvent event) {
}
}
public class SearchFocusListener implements FocusListener {
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
JTextField jtf = (JTextField) e.getComponent();
jtf.selectAll();
}
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
}
}
}