/* * 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; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wikipediacleaner.api.HttpUtils; import org.wikipediacleaner.api.constants.ConnectionInformation; import org.wikipediacleaner.api.constants.EnumWikipedia; import org.wikipediacleaner.api.request.login.ApiLoginRequest; import org.wikipediacleaner.utils.Configuration; import org.wikipediacleaner.utils.ConfigurationValueBoolean; /** * MediaWiki API XML results. */ public abstract class BasicApiResult implements ApiResult { /** * Logger. */ protected final Log log = LogFactory.getLog(BasicApiResult.class); /** * Wiki on which request are made. */ private final EnumWikipedia wiki; /** * HTTP client for making requests. */ private final HttpClient httpClient; /** * @param wiki Wiki on which requests are made. * @param httpClient HTTP client for making requests. */ protected BasicApiResult( EnumWikipedia wiki, HttpClient httpClient) { this.wiki = wiki; this.httpClient = httpClient; } /** * @return Wiki on which requests are made. */ @Override public EnumWikipedia getWiki() { return wiki; } /** * @return HTTP client for making requests. */ @Override public HttpClient getHttpClient() { return httpClient; } // ========================================================================== // HTTP management // ========================================================================== /** * Create an HttpMethod. * * @param properties Properties to drive the API. * @return HttpMethod. */ protected HttpMethod createHttpMethod( Map<String, String> properties) { if (shouldSendIdentification()) { ConnectionInformation connection = wiki.getConnection(); if (connection.getLgToken() != null) { properties.put( ApiLoginRequest.PROPERTY_TOKEN, connection.getLgToken()); } if (connection.getLgUserName() != null) { properties.put( ApiLoginRequest.PROPERTY_USER_NAME, connection.getLgUserName()); } if (connection.getLgUserId() != null) { properties.put( ApiLoginRequest.PROPERTY_USER_ID, connection.getLgUserId()); } } boolean getMethod = canUseGetMethod(properties); Configuration config = Configuration.getConfiguration(); boolean useHttps = !config.getBoolean(null, ConfigurationValueBoolean.FORCE_HTTP_API); return HttpUtils.createHttpMethod( getWiki().getSettings().getApiURL(useHttps), properties, getMethod); } /** * @return True if identification parameters should be sent. */ protected boolean shouldSendIdentification() { return false; } /** * @param properties Properties to drive the API. * @return True if GET method can be used. */ private boolean canUseGetMethod(Map<String, String> properties) { if (properties == null) { return false; } String action = properties.get("action"); if (action == null) { return false; } if (ApiRequest.ACTION_QUERY.equals(action)) { return true; } return false; } }