package com.socrata.datasync.ui;
import com.socrata.datasync.model.ControlFileModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
/**
* Created by franklinwilliams on 4/27/15.
*/
public class OptionsPanel extends JPanel {
ControlFileModel model;
JCheckBox trimWhitespace;
JCheckBox hasHeaderRow;
JCheckBox useSocrataGeocoding;
JCheckBox setAsideErrors;
JPanel container;
int maximumHeight = 25;
int maximumCheckboxWidth = 200;
Dimension checkboxDim = new Dimension(maximumCheckboxWidth,maximumHeight);
public OptionsPanel(ControlFileModel model){
this.model = model;
initializeComponents();
layoutComponents();
}
public void initializeComponents() {
container = new JPanel();
TrimWhitespaceListener trimWhitespaceListener = new TrimWhitespaceListener();
trimWhitespace = generateGenericCheckbox("Trim whitespace", model.getControlFile().getFileTypeControl().trimWhitespace, trimWhitespaceListener);
HasHeaderRowListener headerRowListener = new HasHeaderRowListener();
hasHeaderRow =generateGenericCheckbox("Has header row", model.getControlFile().getFileTypeControl().hasHeaderRow, headerRowListener);
SetAsideErrorsListener setAsideErrorsListener = new SetAsideErrorsListener();
setAsideErrors = generateGenericCheckbox("Set Aside Errors", model.getControlFile().getFileTypeControl().setAsideErrors, setAsideErrorsListener);
useSocrataGeocoding = generateGenericCheckbox("Use Socrata Geocoding", model.getControlFile().getFileTypeControl().useSocrataGeocoding, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.setSocrataGeocoding(useSocrataGeocoding.isSelected());
}
});
}
public void layoutComponents(){
this.setLayout(new GridLayout(1,0));
container.setLayout(new GridLayout(1,3));
this.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,0,1,0),BorderFactory.createTitledBorder("Options")));
hasHeaderRow.setAlignmentX(Component.LEFT_ALIGNMENT);
hasHeaderRow.setMaximumSize(checkboxDim);
container.add(hasHeaderRow);
JPanel trimPanel = new JPanel();
trimPanel.setLayout(new FlowLayout());
trimWhitespace.setAlignmentX(LEFT_ALIGNMENT);
trimWhitespace.setMaximumSize(checkboxDim);
trimPanel.add(trimWhitespace);
String trimHelpString = "<HTML>Select this option to remove extra spaces<br> " +
"before or after fields in your incoming data.<HTML>";
JLabel trimHelpBubble = UIUtility.generateHelpBubble(trimHelpString);
trimHelpBubble.setAlignmentX(LEFT_ALIGNMENT);
trimPanel.add(trimHelpBubble);
container.add(trimPanel);
JPanel errorsPanel = new JPanel();
errorsPanel.setLayout(new FlowLayout());
setAsideErrors.setAlignmentX(LEFT_ALIGNMENT);
setAsideErrors.setMaximumSize(checkboxDim);
errorsPanel.add(setAsideErrors);
String helpString = "<HTML>With “Set aside errors” selected, any rows that contain invalid data<br>" +
"will be set aside for inspection, while all valid rows will be imported<br>" +
"to the dataset. The invalid rows will be available for download on the<br>" +
"Job Status page for this job.<HTML>";
JLabel helpBubble = UIUtility.generateHelpBubble(helpString);
helpBubble.setAlignmentX(LEFT_ALIGNMENT);
errorsPanel.add(helpBubble);
container.add(errorsPanel);
this.add(container);
}
//TODO: This already exists in the advanced panel. Refactor it out into one.
private JCheckBox generateGenericCheckbox(String label, boolean initialState, ActionListener listener){
JCheckBox box = new JCheckBox(label);
box.setBorder(BorderFactory.createEmptyBorder(0,0,5,0));
box.setSelected(initialState);
box.addActionListener(listener);
return box;
}
class TrimWhitespaceListener extends FocusAdapter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JCheckBox box = (JCheckBox) e.getSource();
model.setTrimWhiteSpace(box.isSelected());
}
}
class HasHeaderRowListener extends FocusAdapter implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JCheckBox box = (JCheckBox) e.getSource();
model.setHasHeaderRow(box.isSelected());
}
}
class SetAsideErrorsListener extends FocusAdapter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JCheckBox box = (JCheckBox) e.getSource();
model.setSetAsideErrors(box.isSelected());
}
}
}