package org.wikidata.wdtk.wikibaseapi.apierrors;

/*
 * #%L
 * Wikidata Toolkit Wikibase API
 * %%
 * Copyright (C) 2014 - 2015 Wikidata Toolkit Developers
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

/**
 * Exception to indicate a MediaWiki API error caused by exceeding the maxlag
 * parameter. See <a
 * href="https://www.mediawiki.org/wiki/Manual:Maxlag_parameter">MediaWiki
 * documentation</a>.
 *
 * @author Markus Kroetzsch
 *
 */
public class MaxlagErrorException extends MediaWikiApiErrorException {

	private static final long serialVersionUID = -4013361654647685959L;
	
	protected double lag = 0;

	/**
	 * Creates a new exception.
	 *
	 * @param errorMessage
	 *            the error message reported by MediaWiki, or any other
	 *            meaningful message for the user
	 */
	public MaxlagErrorException(String errorMessage) {
		super(MediaWikiApiErrorHandler.ERROR_MAXLAG, errorMessage);
	}
	
	/**
	 * Creates an exception which also stores the lag announced by the server.
	 * 
	 * @param errorMessage
	 *            the error message reported by MediaWiki, or any other
	 *            meaningful message for the user
	 * @param lag
	 *            the value of the reported lag, in seconds
	 */
	public MaxlagErrorException(String errorMessage, double lag) {
		super(MediaWikiApiErrorHandler.ERROR_MAXLAG, errorMessage);
		this.lag = lag;
	}
	
	/**
	 * Retrieves the amount of lag announced by the server when this
	 * error was emitted. May return 0 if the lag was not extracted from
	 * the server response.
	 * 
	 * @return
	 *    the lag on the target server
	 */
	public double getLag() {
		return lag;
	}
}
