// 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/SoundPagingQuery.java
// public abstract class SoundPagingQuery<Q extends SoundPagingQuery<Q>> extends PagingQuery<Q, Sound> {
// 
// 	/** Name of parameter to include the list of fields to return, if specified. */
// 	public static final String FIELDS_PARAMETER = "fields";
// 
// 	/** The fields to retrieve as part of the query. If values are specified here, only those fields will be returned.
// 	 * If no values are specified, freesound will return a default set. */
// 	private Set<String> fields;
// 
// 	/**
// 	 * @param httpRequestMethod HTTP method to use for query
// 	 * @param path The URI path to the API endpoint
// 	 */
// 	protected SoundPagingQuery(final HTTPRequestMethod httpRequestMethod, final String path) {
// 		super(httpRequestMethod, path, new PagingResponseMapper<>(new SoundMapper()));
// 	}
// 
// 	@Override
// 	public Map<String, Object> getQueryParameters() {
// 		final Map<String, Object> params = super.getQueryParameters();
// 
// 		if ((fields != null) && !fields.isEmpty()) {
// 			final StringBuilder fieldsString = new StringBuilder();
// 			for (final String field : fields) {
// 				fieldsString.append(field.trim());
// 				fieldsString.append(',');
// 			}
// 			fieldsString.deleteCharAt(fieldsString.lastIndexOf(","));
// 
// 			params.put(FIELDS_PARAMETER, fieldsString.toString());
// 		}
// 
// 		return params;
// 	}
// 
// 	/**
// 	 * Specify a field to return in the results using the Fluent API approach. Users may specify this method multiple
// 	 * times to define the collection of fields they want returning, and/or use
// 	 * {@link SoundPagingQuery#includeFields(Set)} to  define them as a batch.
// 	 *
// 	 * @param field The field to include in the results
// 	 * @return The current query
// 	 */
// 	@SuppressWarnings("unchecked")
// 	public Q includeField(final String field) {
// 		if (this.fields == null) {
// 			this.fields = new HashSet<>();
// 		}
// 
// 		if (field != null) {
// 			this.fields.add(field);
// 		}
// 
// 		return (Q) this;
// 	}
// 
// 	/**
// 	 * Specify the set of fields to return in the results. Defined using the Fluent API approach.
// 	 *
// 	 * @param fields The fields to return
// 	 * @return The current query
// 	 */
// 	@SuppressWarnings("unchecked")
// 	public Q includeFields(final Set<String> fields) {
// 		if (this.fields == null) {
// 			this.fields = new HashSet<>();
// 		}
// 
// 		if (fields != null) {
// 			this.fields.addAll(fields);
// 		}
// 
// 		return (Q) this;
// 	}
// }


import java.util.HashMap;
import java.util.Map;
import com.sonoport.freesound.query.HTTPRequestMethod;
import com.sonoport.freesound.query.SoundPagingQuery;
/*
 * 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 used to retrieve a list of sounds similar to the on specified.
 *
 * API documentation at: http://www.freesound.org/docs/api/resources_apiv2.html#similar-sounds
 */
public class SimilarSoundsQuery extends SoundPagingQuery<SimilarSoundsQuery> {

	/** Route parameter to be replaced with the identifier to retrieve similar sounds for. */
	protected static final String SOUND_ID_ROUTE_PARAMETER = "sound_id";

	/** Path to the API endpoint. */
	private static final String PATH = String.format("/sounds/{%s}/similar/", SOUND_ID_ROUTE_PARAMETER);

	/** Identifier of the sound to retrieve similar sounds for. */
	private final int soundId;

	/**
	 * @param soundId Identifier of the sound to retrieve similar sounds for
	 */
	public SimilarSoundsQuery(final int soundId) {
// 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/SoundPagingQuery.java
// public abstract class SoundPagingQuery<Q extends SoundPagingQuery<Q>> extends PagingQuery<Q, Sound> {
// 
// 	/** Name of parameter to include the list of fields to return, if specified. */
// 	public static final String FIELDS_PARAMETER = "fields";
// 
// 	/** The fields to retrieve as part of the query. If values are specified here, only those fields will be returned.
// 	 * If no values are specified, freesound will return a default set. */
// 	private Set<String> fields;
// 
// 	/**
// 	 * @param httpRequestMethod HTTP method to use for query
// 	 * @param path The URI path to the API endpoint
// 	 */
// 	protected SoundPagingQuery(final HTTPRequestMethod httpRequestMethod, final String path) {
// 		super(httpRequestMethod, path, new PagingResponseMapper<>(new SoundMapper()));
// 	}
// 
// 	@Override
// 	public Map<String, Object> getQueryParameters() {
// 		final Map<String, Object> params = super.getQueryParameters();
// 
// 		if ((fields != null) && !fields.isEmpty()) {
// 			final StringBuilder fieldsString = new StringBuilder();
// 			for (final String field : fields) {
// 				fieldsString.append(field.trim());
// 				fieldsString.append(',');
// 			}
// 			fieldsString.deleteCharAt(fieldsString.lastIndexOf(","));
// 
// 			params.put(FIELDS_PARAMETER, fieldsString.toString());
// 		}
// 
// 		return params;
// 	}
// 
// 	/**
// 	 * Specify a field to return in the results using the Fluent API approach. Users may specify this method multiple
// 	 * times to define the collection of fields they want returning, and/or use
// 	 * {@link SoundPagingQuery#includeFields(Set)} to  define them as a batch.
// 	 *
// 	 * @param field The field to include in the results
// 	 * @return The current query
// 	 */
// 	@SuppressWarnings("unchecked")
// 	public Q includeField(final String field) {
// 		if (this.fields == null) {
// 			this.fields = new HashSet<>();
// 		}
// 
// 		if (field != null) {
// 			this.fields.add(field);
// 		}
// 
// 		return (Q) this;
// 	}
// 
// 	/**
// 	 * Specify the set of fields to return in the results. Defined using the Fluent API approach.
// 	 *
// 	 * @param fields The fields to return
// 	 * @return The current query
// 	 */
// 	@SuppressWarnings("unchecked")
// 	public Q includeFields(final Set<String> fields) {
// 		if (this.fields == null) {
// 			this.fields = new HashSet<>();
// 		}
// 
// 		if (fields != null) {
// 			this.fields.addAll(fields);
// 		}
// 
// 		return (Q) this;
// 	}
// }


// Path: src/main/java/com/sonoport/freesound/query/sound/SimilarSoundsQuery.java
import java.util.HashMap;
import java.util.Map;
import com.sonoport.freesound.query.HTTPRequestMethod;
import com.sonoport.freesound.query.SoundPagingQuery;

/*
 * 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 used to retrieve a list of sounds similar to the on specified.
 *
 * API documentation at: http://www.freesound.org/docs/api/resources_apiv2.html#similar-sounds
 */
public class SimilarSoundsQuery extends SoundPagingQuery<SimilarSoundsQuery> {

	/** Route parameter to be replaced with the identifier to retrieve similar sounds for. */
	protected static final String SOUND_ID_ROUTE_PARAMETER = "sound_id";

	/** Path to the API endpoint. */
	private static final String PATH = String.format("/sounds/{%s}/similar/", SOUND_ID_ROUTE_PARAMETER);

	/** Identifier of the sound to retrieve similar sounds for. */
	private final int soundId;

	/**
	 * @param soundId Identifier of the sound to retrieve similar sounds for
	 */
	public SimilarSoundsQuery(final int soundId) {
		super(HTTPRequestMethod.GET, PATH);