/** * @return Window components. */ @Override protected Component createComponents() { JPanel panel = new JPanel(new GridBagLayout()); // 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(0, 0, 0, 0); constraints.ipadx = 0; constraints.ipady = 0; constraints.weightx = 1; constraints.weighty = 0; // Label JLabel label = Utilities.createJLabel(GT._( "Templates used in {0}, linking to {1}", new Object[] { page.getTitle(), link.getTitle() })); panel.add(label, constraints); constraints.gridy++; // Menu modelLinks = new PageListModel(); modelLinks.setShowDisambiguation(true); modelLinks.setShowOther(true); // Links constraints.fill = GridBagConstraints.BOTH; constraints.weighty = 1; listLinks = new JList<Page>(modelLinks); listLinks.setCellRenderer(new PageListCellRenderer()); listLinks.addMouseListener(new BasicPageListPopupListener(getWikipedia(), null, listLinks, this)); listLinks.addMouseListener(new PageListAnalyzeListener(getWikipedia(), null)); JScrollPane scrollLinks = new JScrollPane(listLinks); scrollLinks.setMinimumSize(new Dimension(100, 100)); scrollLinks.setPreferredSize(new Dimension(200, 500)); scrollLinks.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); panel.add(scrollLinks, constraints); constraints.gridy++; return panel; }
/** * Fix all the errors in the page. * * @param fixName Fix name (extracted from getGlobalFixes()). * @param analysis Page analysis. * @param textPane Text pane. * @return Page contents after fix. */ @Override public String fix(String fixName, PageAnalysis analysis, MWPane textPane) { // Initialize API api = APIFactory.getAPI(); StringBuilder tmpContents = new StringBuilder(); int currentIndex = 0; // Manage templates that can be used to replace a link to an other language List<String> templatesList = getTemplatesList(); String[] templateArgs = null; if ((templatesList != null) && (templatesList.size() > 0)) { String[] tmp = templatesList.get(0).split("\\|"); if (tmp.length >= 5) { templateArgs = tmp; } } // Check all internal links Object highlight = null; String contents = analysis.getContents(); try { EnumWikipedia toWiki = analysis.getWikipedia(); for (PageElementInterwikiLink link : analysis.getInterwikiLinks()) { if (isLanguageLink(link, toWiki)) { String lgCode = link.getInterwiki().getPrefix(); EnumWikipedia fromWiki = EnumWikipedia.getWikipedia(lgCode); if ((fromWiki != null) && (fromWiki.getSettings().getCode().equals(lgCode))) { String pageTitle = link.getLink(); int beginIndex = link.getBeginIndex(); int endIndex = link.getEndIndex(); String replacement = null; // Display selection highlight = addHighlight(textPane, beginIndex, endIndex); textPane.select(beginIndex, endIndex); // Check for language link String toTitle = api.getLanguageLink(fromWiki, toWiki, pageTitle); if (toTitle != null) { // List possible replacements List<String> possibleValues = new ArrayList<String>(); String possible = null; possible = PageElementInternalLink.createInternalLink(toTitle, link.getText()); if (!possibleValues.contains(possible)) { possibleValues.add(possible); } possible = PageElementInternalLink.createInternalLink(toTitle, link.getFullLink()); if (!possibleValues.contains(possible)) { possibleValues.add(possible); } possible = PageElementInternalLink.createInternalLink(toTitle, null); if (!possibleValues.contains(possible)) { possibleValues.add(possible); } possibleValues.add(GT._("Do not replace")); possibleValues.add(GT._("Cancel")); // Ask user what replacement to use String message = GT._( "The page \"{0}\" in \"{1}\" has a language link to \"{2}\": {3}.\n" + "With what text do you want to replace the link ?", new Object[] { pageTitle, fromWiki, toWiki, toTitle } ); int answer = Utilities.displayQuestion( textPane.getParent(), message, possibleValues.toArray()); if ((answer < 0) || (answer >= possibleValues.size() - 1)) { break; } else if (answer < possibleValues.size() - 2) { replacement = possibleValues.get(answer); } } else if (templateArgs != null) { String message = GT._("The page \"{0}\" in \"{1}\" doesn''t have a language link to \"{2}\".", new Object[] { pageTitle, fromWiki, toWiki }) +"\n" + GT._("You can replace the link using template {0}.", "{{" + templateArgs[0] + "}}") + "\n" + GT._("What is the title of the page on this wiki ?"); if ((link.getText() != null) && (!link.getText().equals(pageTitle))) { toTitle = Utilities.askForValue( textPane.getParent(), message, link.getText(), checker); } else { toTitle = Utilities.askForValue( textPane.getParent(), message, pageTitle, checker); } if (toTitle != null) { replacement = "{{" + templateArgs[0] + "|" + templateArgs[1] + "=" + toTitle + "|" + templateArgs[2] + "=" + lgCode + "|" + templateArgs[3] + "=" + pageTitle + "|" + templateArgs[4] + "=" + ((link.getText() != null) ? link.getText() : pageTitle) + "}}"; } } // Do the replacement if (replacement != null) { if (currentIndex < link.getBeginIndex()) { tmpContents.append(contents.substring(currentIndex, link.getBeginIndex())); } tmpContents.append(replacement); currentIndex = link.getEndIndex(); } removeHighlight(textPane, highlight); highlight = null; } } } } catch (APIException e) { // } removeHighlight(textPane, highlight); highlight = null; // Return result if (currentIndex == 0) { return contents; } if (currentIndex < contents.length()) { tmpContents.append(contents.substring(currentIndex)); } return tmpContents.toString(); }