/* * 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.request.query.meta; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.filter.Filters; import org.jdom2.xpath.XPathExpression; import org.jdom2.xpath.XPathFactory; import org.wikipediacleaner.api.APIException; import org.wikipediacleaner.api.constants.EnumWikipedia; import org.wikipediacleaner.api.request.ApiRequest; import org.wikipediacleaner.api.request.ApiXmlResult; /** * MediaWiki API XML messages results. */ public class ApiXmlAllMessagesResult extends ApiXmlResult implements ApiAllMessagesResult { /** * @param wiki Wiki on which requests are made. * @param httpClient HTTP client for making requests. */ public ApiXmlAllMessagesResult( EnumWikipedia wiki, HttpClient httpClient) { super(wiki, httpClient); } /** * Execute message request. * * @param properties Properties defining request. * @return Message. * @throws APIException */ @Override public String executeMessage( Map<String, String> properties) throws APIException { try { Element root = getRoot(properties, ApiRequest.MAX_ATTEMPTS); // Retrieve general information XPathExpression<Element> xpa = XPathFactory.instance().compile( "/api/query/allmessages/message", Filters.element()); Element generalNode = xpa.evaluateFirst(root); if (generalNode != null) { return generalNode.getValue(); } return null; } catch (JDOMException e) { log.error("Error loading messages", e); throw new APIException("Error parsing XML", e); } } /** * Execute messages request. * * @param properties Properties defining request. * @param messages Map of messages to be filled with the results. * @return True if request should be continued. * @throws APIException */ @Override public boolean executeMessages( Map<String, String> properties, Map<String, String> messages) throws APIException { try { Element root = getRoot(properties, ApiRequest.MAX_ATTEMPTS); // Retrieve general information XPathExpression<Element> xpa = XPathFactory.instance().compile( "/api/query/allmessages/message", Filters.element()); List<Element> listMessages = xpa.evaluate(root); Iterator<Element> itMessages = listMessages.iterator(); while (itMessages.hasNext()) { Element message = itMessages.next(); String name = message.getAttributeValue("name"); String text = message.getText().trim(); messages.put(name, text); } // Retrieve continue return shouldContinue( root, "/api/query-continue/allmessages", properties); } catch (JDOMException e) { log.error("Error loading messages", e); throw new APIException("Error parsing XML", e); } } }