// 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/response/AudioDescriptors.java
// public class AudioDescriptors {
// 
// 	/** Fixed length descriptors that take a single value (e.g. pitch). */
// 	private Set<String> fixedLengthOneDimensional;
// 
// 	/** Fixed length descriptors that take a multiple values (e.g. mfcc). */
// 	private Set<String> fixedLengthMultiDimensional;
// 
// 	/** Descriptors that have different values depending on the sound. */
// 	private Set<String> variableLength;
// 
// 	/**
// 	 * @return the fixedLengthOneDimensional
// 	 */
// 	public Set<String> getFixedLengthOneDimensional() {
// 		return fixedLengthOneDimensional;
// 	}
// 
// 	/**
// 	 * @param fixedLengthOneDimensional the fixedLengthOneDimensional to set
// 	 */
// 	public void setFixedLengthOneDimensional(final Set<String> fixedLengthOneDimensional) {
// 		this.fixedLengthOneDimensional = fixedLengthOneDimensional;
// 	}
// 
// 	/**
// 	 * @return the fixedLengthMultiDimensional
// 	 */
// 	public Set<String> getFixedLengthMultiDimensional() {
// 		return fixedLengthMultiDimensional;
// 	}
// 
// 	/**
// 	 * @param fixedLengthMultiDimensional the fixedLengthMultiDimensional to set
// 	 */
// 	public void setFixedLengthMultiDimensional(
// 			final Set<String> fixedLengthMultiDimensional) {
// 		this.fixedLengthMultiDimensional = fixedLengthMultiDimensional;
// 	}
// 
// 	/**
// 	 * @return the variableLength
// 	 */
// 	public Set<String> getVariableLength() {
// 		return variableLength;
// 	}
// 
// 	/**
// 	 * @param variableLength the variableLength to set
// 	 */
// 	public void setVariableLength(final Set<String> variableLength) {
// 		this.variableLength = variableLength;
// 	}
// }
// 
// Path: src/main/java/com/sonoport/freesound/response/mapping/AudioDescriptorsMapper.java
// public class AudioDescriptorsMapper extends Mapper<JSONObject, AudioDescriptors> {
// 
// 	@Override
// 	public AudioDescriptors map(final JSONObject source) {
// 		final AudioDescriptors audioDescriptors = new AudioDescriptors();
// 
// 		final JSONObject fixedLengthDescriptors = extractFieldValue(source, "fixed-length", JSONObject.class);
// 		final JSONArray fixedLengthOneDimensionalDescriptors =
// 				extractFieldValue(fixedLengthDescriptors, "one-dimensional", JSONArray.class);
// 		audioDescriptors.setFixedLengthOneDimensional(new TreeSet<>(parseArray(fixedLengthOneDimensionalDescriptors)));
// 
// 		final JSONArray fixedLengthMultiDimensionalDescriptors =
// 				extractFieldValue(fixedLengthDescriptors, "multi-dimensional", JSONArray.class);
// 		audioDescriptors.setFixedLengthMultiDimensional(
// 				new TreeSet<>(parseArray(fixedLengthMultiDimensionalDescriptors)));
// 
// 		final JSONArray variableLengthDescriptors = extractFieldValue(source, "variable-length", JSONArray.class);
// 		audioDescriptors.setVariableLength(new TreeSet<>(parseArray(variableLengthDescriptors)));
// 
// 		return audioDescriptors;
// 	}
// 
// }


import java.util.Collections;
import java.util.Map;
import com.sonoport.freesound.query.HTTPRequestMethod;
import com.sonoport.freesound.query.JSONResponseQuery;
import com.sonoport.freesound.response.AudioDescriptors;
import com.sonoport.freesound.response.mapping.AudioDescriptorsMapper;
/*
 * 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.other;



/**
 * Query used to retrieve all available audio descriptors used in content searches.
 *
 * API documentation at: http://www.freesound.org/docs/api/resources_apiv2.html#available-audio-descriptors.
 */
public class AvailableAudioDescriptorsQuery extends JSONResponseQuery<AudioDescriptors> {

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

	/**
	 * No-arg constructor.
	 */
	public AvailableAudioDescriptorsQuery() {
// 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/response/AudioDescriptors.java
// public class AudioDescriptors {
// 
// 	/** Fixed length descriptors that take a single value (e.g. pitch). */
// 	private Set<String> fixedLengthOneDimensional;
// 
// 	/** Fixed length descriptors that take a multiple values (e.g. mfcc). */
// 	private Set<String> fixedLengthMultiDimensional;
// 
// 	/** Descriptors that have different values depending on the sound. */
// 	private Set<String> variableLength;
// 
// 	/**
// 	 * @return the fixedLengthOneDimensional
// 	 */
// 	public Set<String> getFixedLengthOneDimensional() {
// 		return fixedLengthOneDimensional;
// 	}
// 
// 	/**
// 	 * @param fixedLengthOneDimensional the fixedLengthOneDimensional to set
// 	 */
// 	public void setFixedLengthOneDimensional(final Set<String> fixedLengthOneDimensional) {
// 		this.fixedLengthOneDimensional = fixedLengthOneDimensional;
// 	}
// 
// 	/**
// 	 * @return the fixedLengthMultiDimensional
// 	 */
// 	public Set<String> getFixedLengthMultiDimensional() {
// 		return fixedLengthMultiDimensional;
// 	}
// 
// 	/**
// 	 * @param fixedLengthMultiDimensional the fixedLengthMultiDimensional to set
// 	 */
// 	public void setFixedLengthMultiDimensional(
// 			final Set<String> fixedLengthMultiDimensional) {
// 		this.fixedLengthMultiDimensional = fixedLengthMultiDimensional;
// 	}
// 
// 	/**
// 	 * @return the variableLength
// 	 */
// 	public Set<String> getVariableLength() {
// 		return variableLength;
// 	}
// 
// 	/**
// 	 * @param variableLength the variableLength to set
// 	 */
// 	public void setVariableLength(final Set<String> variableLength) {
// 		this.variableLength = variableLength;
// 	}
// }
// 
// Path: src/main/java/com/sonoport/freesound/response/mapping/AudioDescriptorsMapper.java
// public class AudioDescriptorsMapper extends Mapper<JSONObject, AudioDescriptors> {
// 
// 	@Override
// 	public AudioDescriptors map(final JSONObject source) {
// 		final AudioDescriptors audioDescriptors = new AudioDescriptors();
// 
// 		final JSONObject fixedLengthDescriptors = extractFieldValue(source, "fixed-length", JSONObject.class);
// 		final JSONArray fixedLengthOneDimensionalDescriptors =
// 				extractFieldValue(fixedLengthDescriptors, "one-dimensional", JSONArray.class);
// 		audioDescriptors.setFixedLengthOneDimensional(new TreeSet<>(parseArray(fixedLengthOneDimensionalDescriptors)));
// 
// 		final JSONArray fixedLengthMultiDimensionalDescriptors =
// 				extractFieldValue(fixedLengthDescriptors, "multi-dimensional", JSONArray.class);
// 		audioDescriptors.setFixedLengthMultiDimensional(
// 				new TreeSet<>(parseArray(fixedLengthMultiDimensionalDescriptors)));
// 
// 		final JSONArray variableLengthDescriptors = extractFieldValue(source, "variable-length", JSONArray.class);
// 		audioDescriptors.setVariableLength(new TreeSet<>(parseArray(variableLengthDescriptors)));
// 
// 		return audioDescriptors;
// 	}
// 
// }


// Path: src/main/java/com/sonoport/freesound/query/other/AvailableAudioDescriptorsQuery.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.response.AudioDescriptors;
import com.sonoport.freesound.response.mapping.AudioDescriptorsMapper;

/*
 * 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.other;



/**
 * Query used to retrieve all available audio descriptors used in content searches.
 *
 * API documentation at: http://www.freesound.org/docs/api/resources_apiv2.html#available-audio-descriptors.
 */
public class AvailableAudioDescriptorsQuery extends JSONResponseQuery<AudioDescriptors> {

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

	/**
	 * No-arg constructor.
	 */
	public AvailableAudioDescriptorsQuery() {
		super(HTTPRequestMethod.GET, PATH, new AudioDescriptorsMapper());