/* * Copyright (c) 2002-2016, Mairie de Paris * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright notice * and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice * and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * License 1.0 */ package fr.paris.lutece.plugins.${plugin_model.pluginName}.rs; import fr.paris.lutece.plugins.${plugin_model.pluginName}.business.${business_class.businessClass?cap_first}; import fr.paris.lutece.plugins.${plugin_model.pluginName}.business.${business_class.businessClass?cap_first}Home; import fr.paris.lutece.plugins.rest.service.RestConstants; import fr.paris.lutece.util.json.ErrorJsonResponse; import fr.paris.lutece.util.json.JsonResponse; import fr.paris.lutece.util.json.JsonUtil; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import java.util.List; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.DELETE; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** * ${business_class.businessClass?cap_first}Rest */ @Path( RestConstants.BASE_PATH + Constants.API_PATH + Constants.VERSION_PATH + Constants.${business_class.businessClass?upper_case}_PATH ) public class ${business_class.businessClass?cap_first}Rest { private static final int VERSION_1 = 1; private final Logger _logger = Logger.getLogger( RestConstants.REST_LOGGER ); /** * Get ${business_class.businessClass?cap_first} List * @param nVersion the API version * @return the ${business_class.businessClass?cap_first} List */ @GET @Path( StringUtils.EMPTY ) @Produces( MediaType.APPLICATION_JSON ) public Response get${business_class.businessClass?cap_first}List( @PathParam( Constants.VERSION ) Integer nVersion ) { switch ( nVersion ) { case VERSION_1: return get${business_class.businessClass?cap_first}ListV1( ); default: break; } _logger.error( Constants.ERROR_NOT_FOUND_VERSION ); return Response.status( Response.Status.NOT_FOUND ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_VERSION ) ) ) .build( ); } /** * Get ${business_class.businessClass?cap_first} List V1 * @return the ${business_class.businessClass?cap_first} List for the version 1 */ private Response get${business_class.businessClass?cap_first}ListV1( ) { List<${business_class.businessClass?cap_first}> _list${business_class.businessClass?cap_first}s = ${business_class.businessClass?cap_first}Home.get${business_class.businessClass?cap_first}sList( ); if( _list${business_class.businessClass?cap_first}s.isEmpty( ) ) { return Response.status( Response.Status.NO_CONTENT ) .entity( JsonUtil.buildJsonResponse( new JsonResponse( Constants.EMPTY_OBJECT ) ) ) .build( ); } return Response.status( Response.Status.OK ) .entity( JsonUtil.buildJsonResponse( new JsonResponse( _list${business_class.businessClass?cap_first}s ) ) ) .build( ); } /** * Create ${business_class.businessClass?cap_first} * @param nVersion the API version <#list business_class.attributes as attribute> * @param ${attribute.paramName?lower_case} the ${attribute.paramName?lower_case} * @return the ${business_class.businessClass?cap_first} if created */ @POST @Path( StringUtils.EMPTY ) @Produces( MediaType.APPLICATION_JSON ) public Response create${business_class.businessClass?cap_first}( <#list business_class.attributes as attribute> @FormParam( Constants.${business_class.businessClass?upper_case}_ATTRIBUTE_${attribute.paramName?upper_case} ) String ${attribute.paramName?lower_case}, @PathParam( Constants.VERSION ) Integer nVersion ) { switch ( nVersion ) { case VERSION_1: return create${business_class.businessClass?cap_first}V1( <#list business_class.attributes as attribute>${attribute.paramName?lower_case}<#if attribute_has_next>, ); default: break; } _logger.error( Constants.ERROR_NOT_FOUND_VERSION ); return Response.status( Response.Status.NOT_FOUND ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_VERSION ) ) ) .build( ); } /** * Create ${business_class.businessClass?cap_first} V1 <#list business_class.attributes as attribute> * @param ${attribute.paramName?lower_case} the ${attribute.paramName?lower_case} * @return the ${business_class.businessClass?cap_first} if created for the version 1 */ private Response create${business_class.businessClass?cap_first}V1( <#list business_class.attributes as attribute>String ${attribute.paramName?lower_case}<#if attribute_has_next>, ) { if ( <#list business_class.attributes as attribute>StringUtils.isEmpty( ${attribute.paramName?lower_case} )<#if attribute_has_next> || ) { _logger.error( Constants.ERROR_BAD_REQUEST_EMPTY_PARAMETER ); return Response.status( Response.Status.BAD_REQUEST ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.BAD_REQUEST.name( ), Constants.ERROR_BAD_REQUEST_EMPTY_PARAMETER ) ) ) .build( ); } ${business_class.businessClass?cap_first} _${business_class.businessClass?lower_case} = new ${business_class.businessClass?cap_first}( ); <#list business_class.attributes as attribute> _${business_class.businessClass?lower_case}.set${attribute.name?cap_first}( <#if attribute.type == 'int' >Integer.parseInt( ${attribute.paramName?lower_case} )<#else>${attribute.paramName?lower_case} ); ${business_class.businessClass?cap_first}Home.create( _${business_class.businessClass?lower_case} ); return Response.status( Response.Status.OK ) .entity( JsonUtil.buildJsonResponse( new JsonResponse( _${business_class.businessClass?lower_case} ) ) ) .build( ); } /** * Modify ${business_class.businessClass?cap_first} * @param nVersion the API version * @param id the id <#list business_class.attributes as attribute> * @param ${attribute.paramName?lower_case} the ${attribute.paramName?lower_case} * @return the ${business_class.businessClass?cap_first} if modified */ @PUT @Path( Constants.ID_PATH ) @Produces( MediaType.APPLICATION_JSON ) public Response modify${business_class.businessClass?cap_first}( @PathParam( Constants.ID ) Integer id, <#list business_class.attributes as attribute> @FormParam( Constants.${business_class.businessClass?upper_case}_ATTRIBUTE_${attribute.paramName?upper_case} ) String ${attribute.paramName?lower_case}, @PathParam( Constants.VERSION ) Integer nVersion ) { switch ( nVersion ) { case VERSION_1: return modify${business_class.businessClass?cap_first}V1( id, <#list business_class.attributes as attribute>${attribute.paramName?lower_case}<#if attribute_has_next>, ); default: break; } _logger.error( Constants.ERROR_NOT_FOUND_VERSION ); return Response.status( Response.Status.NOT_FOUND ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_VERSION ) ) ) .build( ); } /** * Modify ${business_class.businessClass?cap_first} V1 * @param id the id <#list business_class.attributes as attribute> * @param ${attribute.paramName?lower_case} the ${attribute.paramName?lower_case} * @return the ${business_class.businessClass?cap_first} if modified for the version 1 */ private Response modify${business_class.businessClass?cap_first}V1( Integer id, <#list business_class.attributes as attribute>String ${attribute.paramName?lower_case}<#if attribute_has_next>, ) { if ( <#list business_class.attributes as attribute>StringUtils.isEmpty( ${attribute.paramName?lower_case} )<#if attribute_has_next> || ) { _logger.error( Constants.ERROR_BAD_REQUEST_EMPTY_PARAMETER ); return Response.status( Response.Status.BAD_REQUEST ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.BAD_REQUEST.name( ), Constants.ERROR_BAD_REQUEST_EMPTY_PARAMETER ) ) ) .build( ); } ${business_class.businessClass?cap_first} _${business_class.businessClass?lower_case} = ${business_class.businessClass?cap_first}Home.findByPrimaryKey( id ); if ( _${business_class.businessClass?lower_case} == null ) { _logger.error( Constants.ERROR_NOT_FOUND_RESOURCE ); return Response.status( Response.Status.NOT_FOUND ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_RESOURCE ) ) ) .build( ); } <#list business_class.attributes as attribute> _${business_class.businessClass?lower_case}.set${attribute.name?cap_first}( <#if attribute.type == 'int' >Integer.parseInt( ${attribute.paramName?lower_case} )<#else>${attribute.paramName?lower_case} ); ${business_class.businessClass?cap_first}Home.update( _${business_class.businessClass?lower_case} ); return Response.status( Response.Status.OK ) .entity( JsonUtil.buildJsonResponse( new JsonResponse( _${business_class.businessClass?lower_case} ) ) ) .build( ); } /** * Delete ${business_class.businessClass?cap_first} * @param nVersion the API version * @param id the id * @return the ${business_class.businessClass?cap_first} List if deleted */ @DELETE @Path( Constants.ID_PATH ) @Produces( MediaType.APPLICATION_JSON ) public Response delete${business_class.businessClass?cap_first}( @PathParam( Constants.VERSION ) Integer nVersion, @PathParam( Constants.ID ) Integer id ) { switch ( nVersion ) { case VERSION_1: return delete${business_class.businessClass?cap_first}V1( id ); default: break; } _logger.error( Constants.ERROR_NOT_FOUND_VERSION ); return Response.status( Response.Status.NOT_FOUND ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_VERSION ) ) ) .build( ); } /** * Delete ${business_class.businessClass?cap_first} V1 * @param id the id * @return the ${business_class.businessClass?cap_first} List if deleted for the version 1 */ private Response delete${business_class.businessClass?cap_first}V1( Integer id ) { ${business_class.businessClass?cap_first} _${business_class.businessClass?lower_case} = ${business_class.businessClass?cap_first}Home.findByPrimaryKey( id ); if ( _${business_class.businessClass?lower_case} == null ) { _logger.error( Constants.ERROR_NOT_FOUND_RESOURCE ); return Response.status( Response.Status.NOT_FOUND ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_RESOURCE ) ) ) .build( ); } ${business_class.businessClass?cap_first}Home.remove( id ); return Response.status( Response.Status.OK ) .entity( JsonUtil.buildJsonResponse( new JsonResponse( Constants.EMPTY_OBJECT ) ) ) .build( ); } /** * Get ${business_class.businessClass?cap_first} * @param nVersion the API version * @param id the id * @return the ${business_class.businessClass?cap_first} */ @GET @Path( Constants.ID_PATH ) @Produces( MediaType.APPLICATION_JSON ) public Response get${business_class.businessClass?cap_first}( @PathParam( Constants.VERSION ) Integer nVersion, @PathParam( Constants.ID ) Integer id ) { switch ( nVersion ) { case VERSION_1: return get${business_class.businessClass?cap_first}V1( id ); default: break; } _logger.error( Constants.ERROR_NOT_FOUND_VERSION ); return Response.status( Response.Status.NOT_FOUND ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_VERSION ) ) ) .build( ); } /** * Get ${business_class.businessClass?cap_first} V1 * @param id the id * @return the ${business_class.businessClass?cap_first} for the version 1 */ private Response get${business_class.businessClass?cap_first}V1( Integer id ) { ${business_class.businessClass?cap_first} _${business_class.businessClass?lower_case} = ${business_class.businessClass?cap_first}Home.findByPrimaryKey( id ); if ( _${business_class.businessClass?lower_case} == null ) { _logger.error( Constants.ERROR_NOT_FOUND_RESOURCE ); return Response.status( Response.Status.NOT_FOUND ) .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_RESOURCE ) ) ) .build( ); } return Response.status( Response.Status.OK ) .entity( JsonUtil.buildJsonResponse( new JsonResponse( _${business_class.businessClass?lower_case} ) ) ) .build( ); } }