/*
* 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.component;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractButton;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import org.wikipediacleaner.api.APIFactory;
import org.wikipediacleaner.api.check.CheckErrorPage;
import org.wikipediacleaner.api.check.CheckWiki;
import org.wikipediacleaner.api.check.algorithm.CheckErrorAlgorithm;
import org.wikipediacleaner.api.constants.EnumWikipedia;
import org.wikipediacleaner.gui.swing.action.CheckErrorGlobalFixAction;
import org.wikipediacleaner.gui.swing.menu.BasicMenuCreator;
import org.wikipediacleaner.i18n.GT;
/**
* A popup menu listener for CheckErrorPage list.
*/
public class CheckErrorPageListPopupListener extends MouseAdapter {
private final EnumWikipedia wiki;
private final MWPane textComponent;
private final AbstractButton button;
public CheckErrorPageListPopupListener(
EnumWikipedia wiki,
MWPane textComponent,
AbstractButton button) {
this.wiki = wiki;
this.textComponent = textComponent;
this.button = button;
}
/* (non-Javadoc)
* @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
*/
@Override
public void mouseClicked(MouseEvent e) {
maybeShowPopup(e);
}
/* (non-Javadoc)
* @see java.awt.event.MouseAdapter#mousePressed(java.awt.event.MouseEvent)
*/
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
/* (non-Javadoc)
* @see java.awt.event.MouseAdapter#mouseReleased(java.awt.event.MouseEvent)
*/
@Override
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
/**
* Construct and show popup menu if necessary.
*
* @param e Event.
*/
private void maybeShowPopup(MouseEvent e) {
// Retrieve information
if (!e.isPopupTrigger()) {
return;
}
if (!(e.getComponent() instanceof JList)) {
return;
}
JList list = (JList) e.getComponent();
int position = list.locationToIndex(e.getPoint());
if (position < 0) {
return;
}
Object object = list.getModel().getElementAt(position);
if (!(object instanceof CheckErrorPage)) {
return;
}
CheckErrorPage error = (CheckErrorPage) object;
CheckErrorAlgorithm algorithm = error.getAlgorithm();
// Menu name
BasicMenuCreator menu = new BasicMenuCreator();
JPopupMenu popup = menu.createPopupMenu(GT._("Error n°{0}", algorithm.getErrorNumberString()));
// Global fixes
JMenuItem menuItem = null;
String[] fixes = algorithm.getGlobalFixes();
if ((fixes != null) && (fixes.length > 0)) {
menu.addSeparator(popup);
for (int i = 0; i < fixes.length; i++) {
menuItem = new JMenuItem(fixes[i]);
ActionListener action = new CheckErrorGlobalFixAction(
algorithm, fixes[i], error.getPage(), textComponent, button);
menuItem.addActionListener(action);
popup.add(menuItem);
}
}
// Create sub menus
menu.addSeparator(popup);
menu.addItemView(wiki, popup, algorithm.getLink(), GT._("Detail"));
CheckWiki checkWiki = APIFactory.getCheckWiki();
String toolserverUrl = checkWiki.getUrlDescription(wiki, algorithm);
menu.addItemView(null, popup, toolserverUrl, GT._("List on {0}", CheckWiki.getServerName(wiki)));
menu.addItemView(wiki, popup, algorithm.getWhiteListPageName(), GT._("View or edit whitelist"));
popup.show(e.getComponent(), e.getX(), e.getY());
}
}