/*
* 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.worker;
import java.util.Collection;
import org.wikipediacleaner.api.API;
import org.wikipediacleaner.api.APIException;
import org.wikipediacleaner.api.APIFactory;
import org.wikipediacleaner.api.check.CheckError;
import org.wikipediacleaner.api.check.algorithm.CheckErrorAlgorithm;
import org.wikipediacleaner.api.constants.CWConfigurationError;
import org.wikipediacleaner.api.constants.Contributions;
import org.wikipediacleaner.api.constants.EnumWikipedia;
import org.wikipediacleaner.api.data.Page;
import org.wikipediacleaner.api.data.PageAnalysis;
import org.wikipediacleaner.api.data.QueryResult;
import org.wikipediacleaner.gui.swing.OnePageWindow;
import org.wikipediacleaner.gui.swing.basic.BasicWindow;
import org.wikipediacleaner.gui.swing.basic.BasicWorker;
import org.wikipediacleaner.i18n.GT;
/**
* SwingWorker for sending the new page content.
*/
public class SendWorker extends BasicWorker {
/**
* Utility class for storing SendWorker parameters.
*/
private static class Params {
protected boolean updateDabWarning;
protected boolean createDabWarning;
protected boolean updateISBNWarning;
protected boolean createISBNWarning;
protected boolean updateISSNWarning;
protected boolean createISSNWarning;
protected boolean updateDuplicateArgsWarning;
protected boolean createDuplicateArgsWarning;
protected Params() {
//
}
}
/**
* Utility class for building a SendWorker.
*/
public static class Builder {
private Params params;
/**
* Prepare for the creation of a SendWorker.
*/
public Builder() {
params = new Params();
}
/**
* @param update Allow/Deny update of disambiguation warning.
* @param create Allow/Deny creation of disambiguation warning.
* @return Builder itself.
*/
public Builder allowDabWarning(boolean update, boolean create) {
params.updateDabWarning = update;
params.createDabWarning = create;
return this;
}
/**
* @param update Allow/Deny update of ISBN warning.
* @param create Allow/Deny creation of ISBN warning.
* @return Builder itself.
*/
public Builder allowISBNWarning(boolean update, boolean create) {
params.updateISBNWarning = update;
params.createISBNWarning = create;
return this;
}
/**
* @param update Allow/Deny update of ISSN warning.
* @param create Allow/Deny creation of ISSN warning.
* @return Builder itself.
*/
public Builder allowISSNWarning(boolean update, boolean create) {
params.updateISSNWarning = update;
params.createISSNWarning = create;
return this;
}
/**
* @param update Allow/Deny update of duplicate arguments warning.
* @param create Allow/Deny creation of duplicate arguments warning.
* @return Builder itself.
*/
public Builder allowDuplicateArgsWarning(boolean update, boolean create) {
params.updateDuplicateArgsWarning = update;
params.createDuplicateArgsWarning = create;
return this;
}
/**
* @param wiki Wiki.
* @param window Window.
* @param page Page.
* @param text Page contents.
* @param comment Comment.
* @param forceWatch Force watching the page.
* @param contributions Contributions.
* @param errorsFixed Errors fixed by this update.
*/
public SendWorker createWorker(
EnumWikipedia wiki, BasicWindow window,
Page page, String text, String comment,
boolean forceWatch,
Contributions contributions,
Collection<CheckError.Progress> errorsFixed) {
return new SendWorker(wiki, window, page, text, comment, forceWatch, params, contributions, errorsFixed);
}
}
private final Page page;
private final String text;
private final String comment;
private final boolean forceWatch;
private final Params params;
private final Contributions contributions;
private final Collection<CheckError.Progress> errorsFixed;
/**
* @param wiki Wiki.
* @param window Window.
* @param page Page.
* @param text Page contents.
* @param comment Comment.
* @param forceWatch Force watching the page.
* @param params Parameters.
* @param contributions Contributions.
* @param errorsFixed Errors fixed by this update.
*/
SendWorker(
EnumWikipedia wiki, BasicWindow window,
Page page, String text, String comment,
boolean forceWatch,
Params params,
Contributions contributions,
Collection<CheckError.Progress> errorsFixed) {
super(wiki, window);
this.page = page;
this.text = text;
this.comment = comment;
this.forceWatch = forceWatch;
this.params = params;
this.contributions = contributions;
this.errorsFixed = errorsFixed;
}
/* (non-Javadoc)
* @see org.wikipediacleaner.gui.swing.utils.SwingWorker#construct()
*/
@Override
public Object construct() {
setText(GT._("Retrieving MediaWiki API"));
API api = APIFactory.getAPI();
// Updating page contents
QueryResult queryResult = null;
try {
setText(GT._("Updating page contents"));
queryResult = api.updatePage(
getWikipedia(), page, text,
comment,
false, forceWatch);
} catch (APIException e) {
return e;
}
// Take contributions into account
if ((contributions != null) &&
(getWikipedia().getContributions() != null)) {
getWikipedia().getContributions().increaseContributions(contributions);
}
// Updating disambiguation warning
if (params.updateDabWarning) {
try {
UpdateDabWarningTools dabWarningTools = new UpdateDabWarningTools(
getWikipedia(), this, params.createDabWarning, false);
PageAnalysis pageAnalysis = page.getAnalysis(text, true);
dabWarningTools.updateWarning(
pageAnalysis, queryResult.getPageNewRevId(),
null, null, null, null, null);
} catch (APIException e) {
return e;
}
}
// Updating ISBN warning
if (params.updateISBNWarning) {
try {
UpdateISBNWarningTools isbnWarningTools = new UpdateISBNWarningTools(
getWikipedia(), this, params.createISBNWarning, false);
PageAnalysis pageAnalysis = page.getAnalysis(text, true);
isbnWarningTools.updateWarning(
pageAnalysis, queryResult.getPageNewRevId(),
null, null, null, null, null);
} catch (APIException e) {
return e;
}
}
// Updating ISSN warning
if (params.updateISSNWarning) {
try {
UpdateISSNWarningTools issnWarningTools = new UpdateISSNWarningTools(
getWikipedia(), this, params.createISSNWarning, false);
PageAnalysis pageAnalysis = page.getAnalysis(text, true);
issnWarningTools.updateWarning(
pageAnalysis, queryResult.getPageNewRevId(),
null, null, null, null, null);
} catch (APIException e) {
return e;
}
}
// Updating duplicate arguments warning
if (params.updateDuplicateArgsWarning) {
try {
UpdateDuplicateArgsWarningTools duplicateArgsWarningTools = new UpdateDuplicateArgsWarningTools(
getWikipedia(), this, params.createDuplicateArgsWarning, false);
PageAnalysis pageAnalysis = page.getAnalysis(text, true);
duplicateArgsWarningTools.updateWarning(
pageAnalysis, queryResult.getPageNewRevId(),
null, null, null, null, null);
} catch (APIException e) {
return e;
}
}
// Mark errors fixed
if (errorsFixed != null) {
for (CheckError.Progress error: errorsFixed) {
CheckErrorAlgorithm algorithm = error.algorithm;
if ((algorithm.getPriority() != CWConfigurationError.PRIORITY_BOT_ONLY) &&
(error.full)) {
OnePageWindow.markPageAsFixed(algorithm.getErrorNumberString(), page);
}
}
}
return null;
}
}