/*
* WPCleaner: A tool to help on Wikipedia maintenance tasks.
* Copyright (C) 2013 Nicolas Vervelle
*
* See README.txt file for licensing information.
*/
package org.wikipediacleaner.gui.swing;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.beans.EventHandler;
import java.text.NumberFormat;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import org.wikipediacleaner.api.constants.EnumWikipedia;
import org.wikipediacleaner.api.data.Page;
import org.wikipediacleaner.api.data.PageComment;
import org.wikipediacleaner.gui.swing.action.ActionDispose;
import org.wikipediacleaner.gui.swing.basic.BasicWindow;
import org.wikipediacleaner.gui.swing.basic.DefaultBasicWindowListener;
import org.wikipediacleaner.gui.swing.basic.Utilities;
import org.wikipediacleaner.i18n.GT;
import org.wikipediacleaner.utils.Configuration;
/**
* Page Comments Window of WikipediaCleaner.
*/
public class PageCommentsWindow extends BasicWindow {
Page page;
private Integer countMain;
private Integer countOther;
private Integer countTemplate;
private JTextField txtComments;
private JFormattedTextField txtMaxMain;
private JFormattedTextField txtMaxOther;
private JFormattedTextField txtMaxTemplate;
private JButton buttonCancel;
private JButton buttonCopyMaxMain;
private JButton buttonCopyMaxOther;
private JButton buttonCopyMaxTemplate;
private JButton buttonOk;
private JButton buttonRemove;
public final static Integer WINDOW_VERSION = Integer.valueOf(2);
/**
* Create and display a PageCommentsWindow.
*
* @param page Page.
* @param wikipedia Wikipedia.
*/
public static void createPageCommentsWindow(
final Page page,
EnumWikipedia wikipedia) {
createWindow(
"PageCommentsWindow",
wikipedia,
WindowConstants.DISPOSE_ON_CLOSE,
PageCommentsWindow.class,
new DefaultBasicWindowListener() {
@Override
public void initializeWindow(BasicWindow window) {
if (window instanceof PageCommentsWindow) {
PageCommentsWindow pageComments = (PageCommentsWindow) window;
pageComments.page = page;
}
}
});
}
/* (non-Javadoc)
* @see org.wikipediacleaner.gui.swing.basic.BasicWindow#getTitle()
*/
@Override
public String getTitle() {
return GT._("Page comments - {0}", page.getTitle());
}
/**
* @return Window components.
*/
@Override
protected Component createComponents() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(createCommentsComponents());
panel.add(createCommandComponents());
return panel;
}
/**
* @return Comments components.
*/
private Component createCommentsComponents() {
JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(), GT._("Comments")));
// Initialize constraints
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.gridx = 0;
constraints.gridy = 0;
constraints.insets = new Insets(2, 2, 2, 2);
constraints.ipadx = 0;
constraints.ipady = 0;
constraints.weightx = 0;
constraints.weighty = 0;
// Comment
txtComments = new JTextField(20);
if ((page != null) && (page.getComment() != null)) {
txtComments.setText(page.getComment().getComment());
}
JLabel labelComments = Utilities.createJLabel(GT._("Comments :"));
labelComments.setLabelFor(txtComments);
labelComments.setHorizontalAlignment(SwingConstants.TRAILING);
constraints.gridx = 0;
constraints.weightx = 0;
panel.add(labelComments, constraints);
constraints.gridwidth = 3;
constraints.gridx++;
constraints.weightx = 1;
panel.add(txtComments, constraints);
constraints.gridwidth = 1;
constraints.gridy++;
// Maximum number of backlinks
txtMaxMain = new JFormattedTextField(NumberFormat.getIntegerInstance());
txtMaxMain.setFocusLostBehavior(JFormattedTextField.COMMIT);
txtMaxMain.setColumns(4);
if ((page != null) &&
(page.getComment() != null) &&
(page.getComment().getMaxMainArticles() != null)) {
txtMaxMain.setValue(page.getComment().getMaxMainArticles());
}
JLabel labelMaxMain = Utilities.createJLabel(GT._("Max backlinks in Main :"));
labelMaxMain.setLabelFor(txtMaxMain);
labelMaxMain.setHorizontalAlignment(SwingConstants.TRAILING);
countMain = (page != null) ? page.getBacklinksCountInMainNamespace() : null;
JLabel labelMain = new JLabel((countMain != null) ? "/ " + countMain.toString() : "");
labelMain.setHorizontalAlignment(SwingConstants.LEADING);
buttonCopyMaxMain = Utilities.createJButton("\u21D0", null);
buttonCopyMaxMain.addActionListener(EventHandler.create(
ActionListener.class, this, "actionCopyMain"));
buttonCopyMaxMain.setEnabled(countMain != null);
constraints.gridx = 0;
constraints.weightx = 0;
panel.add(labelMaxMain, constraints);
constraints.gridx++;
constraints.weightx = 0;
panel.add(txtMaxMain, constraints);
constraints.gridx++;
constraints.weightx = 0;
panel.add(buttonCopyMaxMain, constraints);
constraints.gridx++;
constraints.weightx = 1;
panel.add(labelMain, constraints);
constraints.gridy++;
txtMaxTemplate = new JFormattedTextField(NumberFormat.getIntegerInstance());
txtMaxTemplate.setFocusLostBehavior(JFormattedTextField.COMMIT);
txtMaxTemplate.setColumns(4);
if ((page != null) &&
(page.getComment() != null) &&
(page.getComment().getMaxTemplateArticles() != null)) {
txtMaxTemplate.setValue(page.getComment().getMaxTemplateArticles());
}
JLabel labelMaxTemplate = Utilities.createJLabel(GT._("Max backlinks in Template :"));
labelMaxTemplate.setLabelFor(txtMaxTemplate);
labelMaxTemplate.setHorizontalAlignment(SwingConstants.TRAILING);
countTemplate = (page != null) ? page.getBacklinksCountInTemplateNamespace() : null;
JLabel labelTemplate = new JLabel((countTemplate != null) ? "/ " + countTemplate.toString() : "");
labelTemplate.setHorizontalAlignment(SwingConstants.LEADING);
buttonCopyMaxTemplate = Utilities.createJButton("\u21D0", null);
buttonCopyMaxTemplate.addActionListener(EventHandler.create(
ActionListener.class, this, "actionCopyTemplate"));
buttonCopyMaxTemplate.setEnabled(countTemplate != null);
constraints.gridx = 0;
constraints.weightx = 0;
panel.add(labelMaxTemplate, constraints);
constraints.gridx++;
constraints.weightx = 0;
panel.add(txtMaxTemplate, constraints);
constraints.gridx++;
constraints.weightx = 0;
panel.add(buttonCopyMaxTemplate, constraints);
constraints.gridx++;
constraints.weightx = 1;
panel.add(labelTemplate, constraints);
constraints.gridy++;
txtMaxOther = new JFormattedTextField(NumberFormat.getIntegerInstance());
txtMaxOther.setFocusLostBehavior(JFormattedTextField.COMMIT);
txtMaxOther.setColumns(4);
if ((page != null) &&
(page.getComment() != null) &&
(page.getComment().getMaxOtherArticles() != null)) {
txtMaxOther.setValue(page.getComment().getMaxOtherArticles());
}
JLabel labelMaxOther = Utilities.createJLabel(GT._("Max backlinks in other namespaces :"));
labelMaxOther.setLabelFor(txtMaxOther);
labelMaxOther.setHorizontalAlignment(SwingConstants.TRAILING);
if (page.getBacklinksCount() != null) {
int count = page.getBacklinksCount().intValue();
if (page.getBacklinksCountInMainNamespace() != null) {
count -= page.getBacklinksCountInMainNamespace().intValue();
}
if (page.getBacklinksCountInTemplateNamespace() != null) {
count -= page.getBacklinksCountInTemplateNamespace().intValue();
}
countOther = Integer.valueOf(count);
} else {
countOther = null;
}
JLabel labelOther = new JLabel((countOther != null) ? "/ " + countOther.toString() : "");
labelOther.setHorizontalAlignment(SwingConstants.LEADING);
buttonCopyMaxOther = Utilities.createJButton("\u21D0", null);
buttonCopyMaxOther.addActionListener(EventHandler.create(
ActionListener.class, this, "actionCopyOther"));
buttonCopyMaxOther.setEnabled(countOther != null);
constraints.gridx = 0;
constraints.weightx = 0;
panel.add(labelMaxOther, constraints);
constraints.gridx++;
constraints.weightx = 0;
panel.add(txtMaxOther, constraints);
constraints.gridx++;
constraints.weightx = 0;
panel.add(buttonCopyMaxOther, constraints);
constraints.gridx++;
constraints.weightx = 1;
panel.add(labelOther, constraints);
constraints.gridy++;
// Empty panel
JPanel emptyPanel = new JPanel();
emptyPanel.setMinimumSize(new Dimension(0, 0));
emptyPanel.setPreferredSize(new Dimension(0, 0));
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth = 2;
constraints.gridx = 0;
constraints.insets = new Insets(0, 0, 0, 0);
constraints.weightx = 1;
constraints.weighty = 1;
panel.add(emptyPanel, constraints);
return panel;
}
/**
* @return Login components.
*/
private Component createCommandComponents() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel.setBorder(BorderFactory.createEtchedBorder());
// Ok button
buttonOk = Utilities.createJButton(GT._("&OK"), null);
buttonOk.addActionListener(EventHandler.create(
ActionListener.class, this, "actionOk"));
panel.add(buttonOk);
// Validate button
buttonRemove = Utilities.createJButton(GT._("&Remove page comments"), null);
buttonRemove.addActionListener(EventHandler.create(
ActionListener.class, this, "actionRemove"));
panel.add(buttonRemove);
// Cancel button
buttonCancel = ActionDispose.createButton(getParentComponent(), true, true);
panel.add(buttonCancel);
return panel;
}
/**
* Action called when Copy Main button is pressed.
*/
public void actionCopyMain() {
if (countMain != null) {
txtMaxMain.setText(countMain.toString());
}
}
/**
* Action called when Copy Template button is pressed.
*/
public void actionCopyTemplate() {
if (countTemplate != null) {
txtMaxTemplate.setText(countTemplate.toString());
}
}
/**
* Action called when Copy Other button is pressed.
*/
public void actionCopyOther() {
if (countOther != null) {
txtMaxOther.setText(countOther.toString());
}
}
/**
* Action called when OK button is pressed.
*/
public void actionOk() {
if (page != null) {
PageComment comment = page.getComment();
if (comment == null) {
comment = new PageComment();
}
comment.setComment(txtComments.getText());
try {
comment.setMaxMainArticles(Integer.valueOf(txtMaxMain.getText()));
} catch (NumberFormatException e) {
comment.setMaxMainArticles(null);
}
try {
comment.setMaxTemplateArticles(Integer.valueOf(txtMaxTemplate.getText()));
} catch (NumberFormatException e) {
comment.setMaxTemplateArticles(null);
}
try {
comment.setMaxOtherArticles(Integer.valueOf(txtMaxOther.getText()));
} catch (NumberFormatException e) {
comment.setMaxOtherArticles(null);
}
page.setComment(comment);
Configuration config = Configuration.getConfiguration();
config.addPojo(page.getWikipedia(), Configuration.POJO_PAGE_COMMENTS, comment, page.getTitle());
}
dispose();
}
/**
* Action called when Remove button is pressed.
*/
public void actionRemove() {
if (page != null) {
page.setComment(null);
Configuration config = Configuration.getConfiguration();
config.removePojo(page.getWikipedia(), Configuration.POJO_PAGE_COMMENTS, page.getTitle());
}
dispose();
}
}