// Path: src/main/java/com/sonoport/freesound/query/HTTPRequestMethod.java
// public enum HTTPRequestMethod {
// 
// 	/** HTTP GET. */
// 	GET,
// 
// 	/** HTTP POST. */
// 	POST,
// 
// 	/** HTTP PUT. */
// 	PUT,
// 
// 	/** HTTP DELETE. */
// 	DELETE,
// 
// 	/** HTTP PATCH. */
// 	PATCH,
// 
// 	/** HTTP HEAD. */
// 	HEAD,
// 
// 	/** HTTP OPTIONS. */
// 	OPTIONS;
// }
// 
// Path: src/main/java/com/sonoport/freesound/query/JSONResponseQuery.java
// public abstract class JSONResponseQuery<R extends Object> extends Query<JSONObject, R> {
// 
// 	/**
// 	 * @param httpRequestMethod HTTP method to use for query
// 	 * @param path Endpoint to submit the query to
// 	 * @param resultsMapper {@link Mapper} to convert results
// 	 */
// 	protected JSONResponseQuery(
// 			final HTTPRequestMethod httpRequestMethod, final String path, final Mapper<JSONObject, R> resultsMapper) {
// 		super(httpRequestMethod, path, resultsMapper);
// 	}
// 
// 	@Override
// 	protected String extractErrorMessage(final JSONObject freesoundResponse) {
// 		return freesoundResponse.getString("detail");
// 	}
// 
// }
// 
// Path: src/main/java/com/sonoport/freesound/query/OAuthQuery.java
// public interface OAuthQuery {
// 
// 	/**
// 	 * @return The oauthToken to be presented with the request
// 	 */
// 	String getOauthToken();
// 
// }
// 
// Path: src/main/java/com/sonoport/freesound/response/PendingUploads.java
// public class PendingUploads {
// 
// 	/** List of names of sounds that do not yet have descriptions associated with them. */
// 	private List<String> pendingDescription;
// 
// 	/** Collection of uploaded sounds that have not yet been processed by the system. */
// 	private List<Sound> pendingProcessing;
// 
// 	/** Collection of uploaded sounds that have not yet passed through the moderation process. */
// 	private List<Sound> pendingModeration;
// 
// 	/**
// 	 * @return the pendingDescription
// 	 */
// 	public List<String> getPendingDescription() {
// 		return pendingDescription;
// 	}
// 
// 	/**
// 	 * @param pendingDescription the pendingDescription to set
// 	 */
// 	public void setPendingDescription(final List<String> pendingDescription) {
// 		this.pendingDescription = pendingDescription;
// 	}
// 
// 	/**
// 	 * @return the pendingProcessing
// 	 */
// 	public List<Sound> getPendingProcessing() {
// 		return pendingProcessing;
// 	}
// 
// 	/**
// 	 * @param pendingProcessing the pendingProcessing to set
// 	 */
// 	public void setPendingProcessing(final List<Sound> pendingProcessing) {
// 		this.pendingProcessing = pendingProcessing;
// 	}
// 
// 	/**
// 	 * @return the pendingModeration
// 	 */
// 	public List<Sound> getPendingModeration() {
// 		return pendingModeration;
// 	}
// 
// 	/**
// 	 * @param pendingModeration the pendingModeration to set
// 	 */
// 	public void setPendingModeration(final List<Sound> pendingModeration) {
// 		this.pendingModeration = pendingModeration;
// 	}
// }
// 
// Path: src/main/java/com/sonoport/freesound/response/mapping/PendingUploadsMapper.java
// public class PendingUploadsMapper extends Mapper<JSONObject, PendingUploads> {
// 
// 	/** Instance of {@link SoundMapper} used to transform details of sounds within the response. */
// 	private final SoundMapper soundMapper = new SoundMapper();
// 
// 	@Override
// 	public PendingUploads map(final JSONObject source) {
// 		final PendingUploads pendingUploads = new PendingUploads();
// 
// 		pendingUploads.setPendingDescription(
// 				parseArray(extractFieldValue(source, "pending_description", JSONArray.class)));
// 
// 		pendingUploads.setPendingModeration(
// 				parseArray(extractFieldValue(source, "pending_moderation", JSONArray.class), soundMapper));
// 
// 		pendingUploads.setPendingProcessing(
// 				parseArray(extractFieldValue(source, "pending_processing", JSONArray.class), soundMapper));
// 
// 		return pendingUploads;
// 	}
// 
// }


import java.util.Collections;
import java.util.Map;
import com.sonoport.freesound.query.HTTPRequestMethod;
import com.sonoport.freesound.query.JSONResponseQuery;
import com.sonoport.freesound.query.OAuthQuery;
import com.sonoport.freesound.response.PendingUploads;
import com.sonoport.freesound.response.mapping.PendingUploadsMapper;
/*
 * Copyright 2014 Sonoport (Asia) Pte Ltd
 *
 * 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.
 */
package com.sonoport.freesound.query.sound;



/**
 * Query class used to retrieve details of sounds that have been uploaded by the current user, but that require
 * additional steps to be performed before they are made publicly available.
 *
 * Full details of API endpoint: http://www.freesound.org/docs/api/resources_apiv2.html#pending-uploads-oauth2-required
 */
public class PendingUploadsQuery extends JSONResponseQuery<PendingUploads> implements OAuthQuery {

	/** Path to API endpoint. */
	private static final String PATH = "/sounds/pending_uploads/";

	/** OAuth2 token to present as credentials. */
	private final String ouathToken;

	/**
	 * @param oauthToken OAuth2 token to present as credentials
	 */
	public PendingUploadsQuery(final String oauthToken) {
// Path: src/main/java/com/sonoport/freesound/query/HTTPRequestMethod.java
// public enum HTTPRequestMethod {
// 
// 	/** HTTP GET. */
// 	GET,
// 
// 	/** HTTP POST. */
// 	POST,
// 
// 	/** HTTP PUT. */
// 	PUT,
// 
// 	/** HTTP DELETE. */
// 	DELETE,
// 
// 	/** HTTP PATCH. */
// 	PATCH,
// 
// 	/** HTTP HEAD. */
// 	HEAD,
// 
// 	/** HTTP OPTIONS. */
// 	OPTIONS;
// }
// 
// Path: src/main/java/com/sonoport/freesound/query/JSONResponseQuery.java
// public abstract class JSONResponseQuery<R extends Object> extends Query<JSONObject, R> {
// 
// 	/**
// 	 * @param httpRequestMethod HTTP method to use for query
// 	 * @param path Endpoint to submit the query to
// 	 * @param resultsMapper {@link Mapper} to convert results
// 	 */
// 	protected JSONResponseQuery(
// 			final HTTPRequestMethod httpRequestMethod, final String path, final Mapper<JSONObject, R> resultsMapper) {
// 		super(httpRequestMethod, path, resultsMapper);
// 	}
// 
// 	@Override
// 	protected String extractErrorMessage(final JSONObject freesoundResponse) {
// 		return freesoundResponse.getString("detail");
// 	}
// 
// }
// 
// Path: src/main/java/com/sonoport/freesound/query/OAuthQuery.java
// public interface OAuthQuery {
// 
// 	/**
// 	 * @return The oauthToken to be presented with the request
// 	 */
// 	String getOauthToken();
// 
// }
// 
// Path: src/main/java/com/sonoport/freesound/response/PendingUploads.java
// public class PendingUploads {
// 
// 	/** List of names of sounds that do not yet have descriptions associated with them. */
// 	private List<String> pendingDescription;
// 
// 	/** Collection of uploaded sounds that have not yet been processed by the system. */
// 	private List<Sound> pendingProcessing;
// 
// 	/** Collection of uploaded sounds that have not yet passed through the moderation process. */
// 	private List<Sound> pendingModeration;
// 
// 	/**
// 	 * @return the pendingDescription
// 	 */
// 	public List<String> getPendingDescription() {
// 		return pendingDescription;
// 	}
// 
// 	/**
// 	 * @param pendingDescription the pendingDescription to set
// 	 */
// 	public void setPendingDescription(final List<String> pendingDescription) {
// 		this.pendingDescription = pendingDescription;
// 	}
// 
// 	/**
// 	 * @return the pendingProcessing
// 	 */
// 	public List<Sound> getPendingProcessing() {
// 		return pendingProcessing;
// 	}
// 
// 	/**
// 	 * @param pendingProcessing the pendingProcessing to set
// 	 */
// 	public void setPendingProcessing(final List<Sound> pendingProcessing) {
// 		this.pendingProcessing = pendingProcessing;
// 	}
// 
// 	/**
// 	 * @return the pendingModeration
// 	 */
// 	public List<Sound> getPendingModeration() {
// 		return pendingModeration;
// 	}
// 
// 	/**
// 	 * @param pendingModeration the pendingModeration to set
// 	 */
// 	public void setPendingModeration(final List<Sound> pendingModeration) {
// 		this.pendingModeration = pendingModeration;
// 	}
// }
// 
// Path: src/main/java/com/sonoport/freesound/response/mapping/PendingUploadsMapper.java
// public class PendingUploadsMapper extends Mapper<JSONObject, PendingUploads> {
// 
// 	/** Instance of {@link SoundMapper} used to transform details of sounds within the response. */
// 	private final SoundMapper soundMapper = new SoundMapper();
// 
// 	@Override
// 	public PendingUploads map(final JSONObject source) {
// 		final PendingUploads pendingUploads = new PendingUploads();
// 
// 		pendingUploads.setPendingDescription(
// 				parseArray(extractFieldValue(source, "pending_description", JSONArray.class)));
// 
// 		pendingUploads.setPendingModeration(
// 				parseArray(extractFieldValue(source, "pending_moderation", JSONArray.class), soundMapper));
// 
// 		pendingUploads.setPendingProcessing(
// 				parseArray(extractFieldValue(source, "pending_processing", JSONArray.class), soundMapper));
// 
// 		return pendingUploads;
// 	}
// 
// }


// Path: src/main/java/com/sonoport/freesound/query/sound/PendingUploadsQuery.java
import java.util.Collections;
import java.util.Map;
import com.sonoport.freesound.query.HTTPRequestMethod;
import com.sonoport.freesound.query.JSONResponseQuery;
import com.sonoport.freesound.query.OAuthQuery;
import com.sonoport.freesound.response.PendingUploads;
import com.sonoport.freesound.response.mapping.PendingUploadsMapper;

/*
 * Copyright 2014 Sonoport (Asia) Pte Ltd
 *
 * 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.
 */
package com.sonoport.freesound.query.sound;



/**
 * Query class used to retrieve details of sounds that have been uploaded by the current user, but that require
 * additional steps to be performed before they are made publicly available.
 *
 * Full details of API endpoint: http://www.freesound.org/docs/api/resources_apiv2.html#pending-uploads-oauth2-required
 */
public class PendingUploadsQuery extends JSONResponseQuery<PendingUploads> implements OAuthQuery {

	/** Path to API endpoint. */
	private static final String PATH = "/sounds/pending_uploads/";

	/** OAuth2 token to present as credentials. */
	private final String ouathToken;

	/**
	 * @param oauthToken OAuth2 token to present as credentials
	 */
	public PendingUploadsQuery(final String oauthToken) {
		super(HTTPRequestMethod.GET, PATH, new PendingUploadsMapper());