/* * Copyright (c) 2002-2012, 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}.web.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.plugins.rest.util.json.JSONUtil; import fr.paris.lutece.plugins.rest.util.xml.XMLUtil; import fr.paris.lutece.util.xml.XmlUtil; import fr.paris.lutece.portal.service.util.AppLogService; import java.io.IOException; import net.sf.json.JSONObject; import java.util.Collection; import javax.ws.rs.DELETE; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** * Page resource */ @Path( RestConstants.BASE_PATH + Constants.PLUGIN_PATH + Constants.${business_class.businessClass?upper_case}_PATH ) public class ${business_class.businessClass?cap_first}Rest { private static final String KEY_${business_class.businessClass?upper_case}S = "${business_class.businessClass?lower_case}s"; private static final String KEY_${business_class.businessClass?upper_case} = "${business_class.businessClass?lower_case}"; <#list business_class.attributes as attribute> private static final String KEY_${attribute.paramName?upper_case}="${attribute.paramName?lower_case}"; @GET @Path( Constants.ALL_PATH ) public Response get${business_class.businessClass?cap_first}s( @HeaderParam(HttpHeaders.ACCEPT) String accept , @QueryParam( Constants.FORMAT_QUERY ) String format ) throws IOException { String entity; String mediaType; if ( (accept != null && accept.contains(MediaType.APPLICATION_JSON)) || (format != null && format.equals(Constants.MEDIA_TYPE_JSON)) ) { entity = get${business_class.businessClass?cap_first}sJson(); mediaType = MediaType.APPLICATION_JSON; } else { entity = get${business_class.businessClass?cap_first}sXml(); mediaType = MediaType.APPLICATION_XML; } return Response .ok(entity, mediaType) .build(); } /** * Gets all resources list in XML format * @return The list */ public String get${business_class.businessClass?cap_first}sXml( ) { StringBuffer sbXML = new StringBuffer( XmlUtil.getXmlHeader() ); Collection<${business_class.businessClass?cap_first}> list = ${business_class.businessClass?cap_first}Home.get${business_class.businessClass?cap_first}sList(); XmlUtil.beginElement( sbXML , KEY_${business_class.businessClass?upper_case}S ); for ( ${business_class.businessClass?cap_first} ${business_class.businessClass?lower_case} : list ) { add${business_class.businessClass?cap_first}Xml( sbXML, ${business_class.businessClass?lower_case} ); } XmlUtil.endElement( sbXML , KEY_${business_class.businessClass?upper_case}S ); return sbXML.toString( ); } /** * Gets all resources list in JSON format * @return The list */ public String get${business_class.businessClass?cap_first}sJson( ) { JSONObject json${business_class.businessClass?cap_first} = new JSONObject( ); JSONObject json = new JSONObject( ); Collection<${business_class.businessClass?cap_first}> list = ${business_class.businessClass?cap_first}Home.get${business_class.businessClass?cap_first}sList(); for ( ${business_class.businessClass?cap_first} ${business_class.businessClass?lower_case} : list ) { add${business_class.businessClass?cap_first}Json( json${business_class.businessClass?cap_first}, ${business_class.businessClass?lower_case} ); } json.accumulate( KEY_${business_class.businessClass?upper_case}S, json${business_class.businessClass?cap_first} ); return json.toString( ); } @GET @Path( "{" + Constants.ID_PATH + "}" ) public Response get${business_class.businessClass?cap_first}( @PathParam( Constants.ID_PATH ) String strId, @HeaderParam(HttpHeaders.ACCEPT) String accept , @QueryParam( Constants.FORMAT_QUERY ) String format ) throws IOException { String entity; String mediaType; if ( (accept != null && accept.contains(MediaType.APPLICATION_JSON)) || (format != null && format.equals(Constants.MEDIA_TYPE_JSON)) ) { entity = get${business_class.businessClass?cap_first}Json( strId ); mediaType = MediaType.APPLICATION_JSON; } else { entity = get${business_class.businessClass?cap_first}Xml( strId ); mediaType = MediaType.APPLICATION_XML; } return Response .ok(entity, mediaType) .build(); } /** * Gets a resource in XML format * @param strId The resource ID * @return The XML output */ public String get${business_class.businessClass?cap_first}Xml( String strId ) { StringBuffer sbXML = new StringBuffer( ); try { int nId = Integer.parseInt( strId ); ${business_class.businessClass?cap_first} ${business_class.businessClass?lower_case} = ${business_class.businessClass?cap_first}Home.findByPrimaryKey( nId ); if ( ${business_class.businessClass?lower_case} != null ) { sbXML.append( "\n" ); add${business_class.businessClass?cap_first}Xml( sbXML, ${business_class.businessClass?lower_case} ); } } catch ( NumberFormatException e ) { sbXML.append( XMLUtil.formatError( "Invalid ${business_class.businessClass?lower_case} number", 3 ) ); } catch ( Exception e ) { sbXML.append( XMLUtil.formatError( "${business_class.businessClass?cap_first} not found", 1 ) ); } return sbXML.toString( ); } /** * Gets a resource in JSON format * @param strId The resource ID * @return The JSON output */ public String get${business_class.businessClass?cap_first}Json( String strId ) { JSONObject json = new JSONObject( ); String strJson = ""; try { int nId = Integer.parseInt( strId ); ${business_class.businessClass?cap_first} ${business_class.businessClass?lower_case} = ${business_class.businessClass?cap_first}Home.findByPrimaryKey( nId ); if ( ${business_class.businessClass?lower_case} != null ) { add${business_class.businessClass?cap_first}Json( json, ${business_class.businessClass?lower_case} ); strJson = json.toString( ); } } catch ( NumberFormatException e ) { strJson = JSONUtil.formatError( "Invalid ${business_class.businessClass?lower_case} number", 3 ); } catch ( Exception e ) { strJson = JSONUtil.formatError( "${business_class.businessClass?cap_first} not found", 1 ); } return strJson; } @DELETE @Path( "{" + Constants.ID_PATH + "}" ) public Response delete${business_class.businessClass?cap_first}( @PathParam( Constants.ID_PATH ) String strId, @HeaderParam(HttpHeaders.ACCEPT) String accept, @QueryParam( Constants.FORMAT_QUERY ) String format ) throws IOException { try { int nId = Integer.parseInt( strId ); if ( ${business_class.businessClass?cap_first}Home.findByPrimaryKey( nId ) != null ) { ${business_class.businessClass?cap_first}Home.remove( nId ); } } catch ( NumberFormatException e ) { AppLogService.error( "Invalid ${business_class.businessClass?lower_case} number" ); } return get${business_class.businessClass?cap_first}s(accept, format); } @POST public Response create${business_class.businessClass?cap_first}( <#list business_class.attributes as attribute> @FormParam( "${attribute.paramName?lower_case}" ) String ${attribute.paramName?lower_case}, @HeaderParam(HttpHeaders.ACCEPT) String accept, @QueryParam( Constants.FORMAT_QUERY ) String format) throws IOException { if( ${business_class.primaryKey} != null ) { int nId = Integer.parseInt( ${business_class.primaryKey}); ${business_class.businessClass?cap_first} ${business_class.businessClass?lower_case} = ${business_class.businessClass?cap_first}Home.findByPrimaryKey( nId ); if ( ${business_class.businessClass?lower_case} != null ) { <#list business_class.attributes as attribute> <#if !attribute.isPrimary > ${business_class.businessClass?lower_case}.set${attribute.name?cap_first}( ${attribute.paramName?lower_case} ); ${business_class.businessClass?cap_first}Home.update( ${business_class.businessClass?lower_case} ); } } else { ${business_class.businessClass?cap_first} ${business_class.businessClass?lower_case} = new ${business_class.businessClass?cap_first}( ); <#list business_class.attributes as attribute> <#if !attribute.isPrimary > ${business_class.businessClass?lower_case}.set${attribute.name?cap_first}( ${attribute.paramName?lower_case} ); ${business_class.businessClass?cap_first}Home.create( ${business_class.businessClass?lower_case} ); } return get${business_class.businessClass?cap_first}s(accept, format); } /** * Write a ${business_class.businessClass?lower_case} into a buffer * @param sbXML The buffer * @param ${business_class.businessClass?lower_case} The ${business_class.businessClass?lower_case} */ private void add${business_class.businessClass?cap_first}Xml( StringBuffer sbXML, ${business_class.businessClass?cap_first} ${business_class.businessClass?lower_case} ) { XmlUtil.beginElement( sbXML, KEY_${business_class.businessClass?upper_case} ); <#list business_class.attributes as attribute> XmlUtil.addElement( sbXML, KEY_${attribute.paramName?upper_case} , ${business_class.businessClass?lower_case}.get${attribute.name?cap_first} ( ) ); XmlUtil.endElement( sbXML, KEY_${business_class.businessClass?upper_case} ); } /** * Write a ${business_class.businessClass?lower_case} into a JSON Object * @param json The JSON Object * @param ${business_class.businessClass?lower_case} The ${business_class.businessClass?lower_case} */ private void add${business_class.businessClass?cap_first}Json( JSONObject json, ${business_class.businessClass?cap_first} ${business_class.businessClass?lower_case} ) { JSONObject json${business_class.businessClass?cap_first} = new JSONObject( ); <#list business_class.attributes as attribute> json${business_class.businessClass?cap_first}.accumulate( KEY_${attribute.paramName?upper_case}, ${business_class.businessClass?lower_case}.get${attribute.name?cap_first}( ) ); json.accumulate( KEY_${business_class.businessClass?upper_case}, json${business_class.businessClass?cap_first} ); } }