/* * 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.util.Collection; import java.util.List; import org.wikipediacleaner.api.constants.EnumWikipedia; import org.wikipediacleaner.api.data.Page; import org.wikipediacleaner.gui.swing.basic.Utilities; import org.wikipediacleaner.gui.swing.bot.BotToolsWindow; import org.wikipediacleaner.gui.swing.checkwiki.CheckWikiWindow; import org.wikipediacleaner.gui.swing.options.OptionsWindow; import org.wikipediacleaner.i18n.GT; import org.wikipediacleaner.utils.Configuration; import org.wikipediacleaner.utils.ConfigurationValueInteger; /** * A controller for running other windows. */ public class Controller { /** * Run a full analysis on one page. * * @param page Page. * @param knownPages Pages already loaded. * @param wikipedia Wikipedia */ public static void runFullAnalysis( String page, List<Page> knownPages, EnumWikipedia wikipedia) { if (page != null) { OnePageAnalysisWindow.createAnalysisWindow(page, knownPages, wikipedia); } } /** * Run a full analysis on several pages. * * @param parentComponent Parent component. * @param pages Array of pages. * @param knownPages Pages already loaded. * @param wikipedia Wikipedia */ public static void runFullAnalysis( Component parentComponent, List<Page> pages, List<Page> knownPages, EnumWikipedia wikipedia) { if (pages == null) { return; } int pagesCount = getCountOfPages(parentComponent, pages); for (int i = 0; i < pagesCount; i++) { Object page = pages.get(i); if (page != null) { runFullAnalysis(page.toString(), knownPages, wikipedia); } } } /** * Run a disambiguation analysis on one page. * * @param page Page. * @param wikipedia Wikipedia */ public static void runDisambiguationAnalysis(String page, EnumWikipedia wikipedia) { if (page != null) { DisambiguationWindow.createDisambiguationWindow(page, wikipedia); } } /** * Run a disambiguation analysis on several pages. * * @param parentComponent Parent component. * @param pages Array of pages. * @param wikipedia Wikipedia */ public static void runDisambiguationAnalysis( Component parentComponent, List<Page> pages, EnumWikipedia wikipedia) { if (pages == null) { return; } int pagesCount = getCountOfPages(parentComponent, pages); for (int i = 0; i < pagesCount; i++) { Object page = pages.get(i); if (page != null) { runDisambiguationAnalysis(page.toString(), wikipedia); } } } /** * Run automatic fixing. * * @param pages List of pages. * @param referencePage Page. * @param wikipedia Wikipedia */ public static void runAutomaticFixing( Collection<Page> pages, Page referencePage, EnumWikipedia wikipedia) { if (pages != null) { AutomaticFixingWindow.createAutomaticFixingWindow(pages, referencePage, wikipedia); } } /** * Open the Page Comments window for a page. * * @param page Page. * @param wikipedia Wikipedia. */ public static void runPageComments( Page page, EnumWikipedia wikipedia) { if (page != null) { PageCommentsWindow.createPageCommentsWindow(page, wikipedia); } } /** * Open the Page Comments window for several pages. * * @param pages List of pages. * @param wikipedia Wikipedia. */ public static void runPageComments( Collection<Page> pages, EnumWikipedia wikipedia) { for (Page p : pages) { runPageComments(p, wikipedia); } } /** * Run Check Wiki project. * * @param wikipedia Wikipedia */ public static void runCheckWikiProject(EnumWikipedia wikipedia) { CheckWikiWindow.createCheckWikiProjectWindow(wikipedia); } /** * Run Bot tools. * * @param wikipedia Wikipedia */ public static void runBotTools(EnumWikipedia wikipedia) { BotToolsWindow.createBotToolsWindow(wikipedia); } /** * Monitor recent changes. * * @param wiki Wiki. */ public static void runMonitorRC(EnumWikipedia wiki) { MonitorRCWindow.createMonitorRCWindow(wiki); } /** * Open the options window. */ public static void runOptions() { OptionsWindow.createOptionsWindow(); } /** * Open the about window. */ public static void runAbout() { AboutWindow.createAboutWindow(); } /** * Run a new section Window. * * @param page Page. * @param articleText Text of the article. * @param articleTitle Title of the article. * @param wikipedia Wikipedia */ public static void runNewSection( Page page, String articleText, String articleTitle, EnumWikipedia wikipedia) { if ((page != null) && (wikipedia != null)) { NewSectionWindow.createNewSectionWindow(page, articleText, articleTitle, wikipedia); } } /** * Open the Expand Templates / Preview window. * * @param title Page title. * @param text Page text. * @param showExpand Flag indicating if the Expand Templates part should be visible. * @param showPreview Flag indicating if the Preview part should be visible. * @param wikipedia Wikipedia */ public static void runExpandTemplates( String title, String text, boolean showExpand, boolean showPreview, EnumWikipedia wikipedia) { if ((title != null) && (text != null)) { PreviewWindow.createExpandTemplatesWindow( title, text, showExpand, showPreview, wikipedia); } } /** * @param parentComponent Parent component. * @param pages Array of pages. * @return Number of pages to analyze. */ private static int getCountOfPages(Component parentComponent, List<Page> pages) { if (pages == null) { return 0; } int pagesCount = pages.size(); Configuration config = Configuration.getConfiguration(); int maxPagesCount = config.getInt( null, ConfigurationValueInteger.MAXIMUM_PAGES); if (pagesCount > maxPagesCount) { Object[] options = new Object[] { GT._("Yes, {0} pages", Integer.toString(pagesCount)), GT._("No, {0} pages", Integer.toString(maxPagesCount)), GT._("Cancel") }; int answer = Utilities.displayQuestion( parentComponent, GT._( "You have selected {0} pages.\n" + "Would you like to analyze more than {1} pages ?", new Object[]{ pagesCount, maxPagesCount }), options); if (answer == 1) { pagesCount = maxPagesCount; } else if (answer != 0) { pagesCount = 0; } } return pagesCount; } }