/*
* WPCleaner: A tool to help on Wikipedia maintenance tasks.
* Copyright (C) 2016 Nicolas Vervelle
*
* See README.txt file for licensing information.
*/
package org.wikipediacleaner.gui.swing.bot;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.beans.EventHandler;
import java.io.File;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import org.wikipediacleaner.api.constants.EnumWikipedia;
import org.wikipediacleaner.gui.swing.basic.Utilities;
import org.wikipediacleaner.i18n.GT;
import org.wikipediacleaner.images.EnumImageSize;
import org.wikipediacleaner.utils.Configuration;
import org.wikipediacleaner.utils.ConfigurationValueBoolean;
import org.wikipediacleaner.utils.ConfigurationValueString;
/**
* A panel for configuring the List Check Wiki tool.
*/
public class ListCWPanel extends JPanel {
/** Serialization */
private static final long serialVersionUID = -2902740097721237193L;
/** Wiki */
private final EnumWikipedia wiki;
/** Text field for the dump file */
private JTextField txtDumpFile;
/** Radio button to choose to export to a directory */
private JRadioButton radExportDir;
/** Text field for the export directory */
private JTextField txtExportDir;
/** Button to choose in which directory to export */
private JButton buttonExportDir;
/** Radio button to choose to export to a page */
private JRadioButton radExportPage;
/** Text field for the export page */
private JTextField txtExportPage;
/** Check box to decide if last version of page should be checked before reporting an error */
private JCheckBox chkCheckWiki;
/** Check box to decide to check only pages previously reported */
private JCheckBox chkOnlyRecheck;
/**
* Create a panel for configuring the List Check Wiki tool.
*/
public ListCWPanel(EnumWikipedia wiki) {
super(new GridBagLayout(), true);
this.wiki = wiki;
constructContents();
}
/**
* Construct panel contents.
*/
private void constructContents() {
GridBagConstraints constraints = new GridBagConstraints(
0, 0, 1, 1, 1, 0,
GridBagConstraints.LINE_START, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0, 0);
Configuration config = Configuration.getConfiguration();
// Dump file
String lastDumpFile = config.getString(wiki, ConfigurationValueString.LAST_DUMP_FILE);
txtDumpFile = Utilities.createJTextField(lastDumpFile, 40);
JLabel labelDumpFile = Utilities.createJLabel(GT._("Dump file:"));
labelDumpFile.setLabelFor(txtDumpFile);
JButton buttonDumpFile = Utilities.createJButton(
"gnome-logviewer.png", EnumImageSize.SMALL,
GT._("Dump file"), false, null);
buttonDumpFile.addActionListener(
EventHandler.create(ActionListener.class, this, "actionDumpFile"));
constraints.gridx = 0;
constraints.weightx = 0;
add(labelDumpFile, constraints);
constraints.gridx++;
constraints.weightx = 1;
add(txtDumpFile, constraints);
constraints.gridx++;
constraints.weightx = 0;
add(buttonDumpFile, constraints);
constraints.gridy++;
// Type of export
ButtonGroup groupExport = new ButtonGroup();
boolean exportOnWiki = config.getBoolean(wiki, ConfigurationValueBoolean.DUMP_ON_WIKI);
// Export directory
String lastExportDir = config.getString(wiki, ConfigurationValueString.LAST_EXPORT_DIRECTORY);
txtExportDir = Utilities.createJTextField(lastExportDir, 40);
radExportDir = Utilities.createJRadioButton(GT._("Export directory:"), !exportOnWiki);
radExportDir.addItemListener(EventHandler.create(
ItemListener.class, this, "updateComponentState"));
groupExport.add(radExportDir);
buttonExportDir = Utilities.createJButton(
"gnome-folder.png", EnumImageSize.SMALL,
GT._("Export directory"), false, null);
buttonExportDir.addActionListener(
EventHandler.create(ActionListener.class, this, "actionExportDir"));
constraints.gridx = 0;
constraints.weightx = 0;
add(radExportDir, constraints);
constraints.gridx++;
constraints.weightx = 1;
add(txtExportDir, constraints);
constraints.gridx++;
constraints.weightx = 0;
add(buttonExportDir, constraints);
constraints.gridy++;
// Export page
String lastExportPage = config.getString(wiki, ConfigurationValueString.LAST_EXPORT_PAGE);
txtExportPage = Utilities.createJTextField(lastExportPage, 40);
radExportPage = Utilities.createJRadioButton(GT._("Export pages:"), exportOnWiki);
radExportPage.addItemListener(EventHandler.create(
ItemListener.class, this, "updateComponentState"));
groupExport.add(radExportPage);
constraints.gridx = 0;
constraints.weightx = 0;
add(radExportPage, constraints);
constraints.gridx++;
constraints.weightx = 1;
add(txtExportPage, constraints);
constraints.gridy++;
// Check wiki
boolean checkWiki = config.getBoolean(wiki, ConfigurationValueBoolean.DUMP_CHECK_WIKI);
chkCheckWiki = Utilities.createJCheckBox(
GT._("Check last version of article before reporting an error"), checkWiki);
constraints.gridx = 0;
constraints.gridwidth = 3;
constraints.weightx = 1;
add(chkCheckWiki, constraints);
constraints.gridy++;
// Only check articles previously reported
chkOnlyRecheck = Utilities.createJCheckBox(
GT._("Only check articles previously reported"), false);
constraints.gridx = 0;
constraints.gridwidth = 3;
constraints.weightx = 1;
add(chkOnlyRecheck, constraints);
constraints.gridy++;
updateComponentState();
}
/**
* @return Path to the dump file.
*/
public File getDumpFile() {
String pathDumpFile = txtDumpFile.getText();
if ((pathDumpFile == null) || (pathDumpFile.isEmpty())) {
return null;
}
return new File(pathDumpFile);
}
/**
* @return True if export is done on wiki.
*/
public boolean exportOnWiki() {
return radExportPage.isSelected();
}
/**
* @return Path to the export directory.
*/
public File getExportDir() {
String pathExportDir = txtExportDir.getText();
if ((pathExportDir == null) || (pathExportDir.isEmpty())) {
return null;
}
return new File(pathExportDir);
}
/**
* @return Export page name.
*/
public String getExportPage() {
String exportPage = txtExportPage.getText();
if ((exportPage == null) || (exportPage.isEmpty())) {
return null;
}
return exportPage;
}
/**
* @return True if last version should be checked.
*/
public boolean checkWiki() {
return chkCheckWiki.isSelected();
}
/**
* @return True to check only articles previously reported.
*/
public boolean onlyRecheck() {
return chkOnlyRecheck.isSelected();
}
/**
* Save current configuration.
*/
public void saveConfiguration() {
Configuration config = Configuration.getConfiguration();
config.setString(wiki, ConfigurationValueString.LAST_DUMP_FILE, txtDumpFile.getText());
config.setBoolean(wiki, ConfigurationValueBoolean.DUMP_ON_WIKI, radExportPage.isSelected());
config.setString(wiki, ConfigurationValueString.LAST_EXPORT_DIRECTORY, txtExportDir.getText());
config.setString(wiki, ConfigurationValueString.LAST_EXPORT_PAGE, txtExportPage.getText());
config.setBoolean(wiki, ConfigurationValueBoolean.DUMP_CHECK_WIKI, chkCheckWiki.isSelected());
}
/**
* Action called when the Dump File button is clicked.
*/
public void actionDumpFile() {
JFileChooser fileChooser = new JFileChooser();
File dumpFile = getDumpFile();
fileChooser.setCurrentDirectory((dumpFile != null) ? dumpFile.getParentFile() : new File("."));
fileChooser.setDialogTitle(GT._("Dump file"));
int answer = fileChooser.showOpenDialog(getParent());
if (answer == JFileChooser.APPROVE_OPTION) {
String pathDumpFile = fileChooser.getSelectedFile().getAbsolutePath();
txtDumpFile.setText(pathDumpFile);
}
}
/**
* Action called when component state should be updated.
*/
public void updateComponentState() {
txtExportDir.setEnabled(radExportDir.isSelected());
buttonExportDir.setEnabled(radExportDir.isSelected());
txtExportPage.setEnabled(radExportPage.isSelected());
chkOnlyRecheck.setEnabled(radExportPage.isSelected());
}
/**
* Action called when the Export Directory button is clicked.
*/
public void actionExportDir() {
JFileChooser dirChooser = new JFileChooser();
File exportDir = getExportDir();
dirChooser.setCurrentDirectory((exportDir != null) ? exportDir : new File("."));
dirChooser.setDialogTitle(GT._("Export directory"));
dirChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int answer = dirChooser.showOpenDialog(getParent());
if (answer == JFileChooser.APPROVE_OPTION) {
String pathExportDir = dirChooser.getSelectedFile().getAbsolutePath();
txtExportDir.setText(pathExportDir);
}
}
}