/*
* WPCleaner: A tool to help on Wikipedia maintenance tasks.
* Copyright (C) 2013 Nicolas Vervelle
*
* See README.txt file for licensing information.
*/
package org.wikipediacleaner.api.data;
import java.util.ArrayList;
import java.util.List;
import org.wikipediacleaner.api.constants.EnumWikipedia;
import org.wikipediacleaner.i18n.GT;
/**
* A class for describing a matcher for template creating internal links from parameter value.
* {{templateName|parameter1=value1}} => [[value1]]
* {{templateName|parameter1=value1|parameter2=value2}} => [[value1|value2]]
*/
public class TemplateMatcher1L2T extends TemplateMatcher {
private final String parameterName1;
private final String parameterName2;
/**
* @param wikipedia Wikipedia.
* @param templateName Template name.
* @param explanation Explanation.
* @param parameterName1 First parameter name.
* @param parameterName2 Second parameter name.
*/
public TemplateMatcher1L2T(
EnumWikipedia wikipedia, String templateName,
String explanation,
String parameterName1, String parameterName2) {
super(wikipedia, templateName, explanation, false, false);
this.parameterName1 = parameterName1;
this.parameterName2 = parameterName2;
}
/**
* @param page Page.
* @param template Template being analyzed.
* @return Link (if any) created by the template for this matcher.
*/
@Override
public String linksTo(Page page, PageElementTemplate template) {
if ((template == null) || (parameterName1 == null) || (parameterName2 == null)) {
return null;
}
return getParameterValue1(page, template);
}
/**
* @param page Page.
* @param template Template.
* @return List of possible kinds of replacements.
*/
@Override
public List<String> getReplacements(Page page, PageElementTemplate template) {
List<String> replacements = new ArrayList<String>();
if (!isGood()) {
replacements.add(GT._("Link parameter {0} to", parameterName1));
}
return replacements;
}
/**
* @param page Page.
* @param template Template.
* @param index Replacement index.
* @param text Replacement text.
* @return Full replacement.
*/
@Override
public String getReplacement(
Page page, PageElementTemplate template,
int index, String text) {
String parameterValue1 = text;
String parameterValue2 = getParameterValue2(page, template);
if (parameterValue2 == null) {
parameterValue2 = getParameterValue1(page, template);
}
return template.getParameterReplacement(
parameterName1, parameterValue1,
parameterName2, parameterValue2);
}
/**
* @param page Page.
* @param template Template
* @return Parameter value.
*/
private String getParameterValue1(Page page, PageElementTemplate template) {
String value = template.getParameterValue(parameterName1);
return PageContents.expandText(page, value);
}
/**
* @param page Page.
* @param template Template
* @return Parameter value.
*/
private String getParameterValue2(Page page, PageElementTemplate template) {
String value = template.getParameterValue(parameterName2);
return PageContents.expandText(page, value);
}
}