View Javadoc
1   /*
2    * Copyright (c) 2002-2017, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.transparency.rs;
35  
36  import fr.paris.lutece.plugins.transparency.business.Lobby;
37  import fr.paris.lutece.plugins.transparency.business.LobbyHome;
38  import fr.paris.lutece.plugins.rest.service.RestConstants;
39  import fr.paris.lutece.portal.service.i18n.I18nService;
40  import fr.paris.lutece.util.json.ErrorJsonResponse;
41  import fr.paris.lutece.util.json.JsonResponse;
42  import fr.paris.lutece.util.json.JsonUtil;
43  
44  import org.apache.commons.lang.StringUtils;
45  import org.apache.log4j.Logger;
46  import java.util.List;
47  import javax.ws.rs.GET;
48  import javax.ws.rs.Path;
49  import javax.ws.rs.PathParam;
50  import javax.ws.rs.Produces;
51  import javax.ws.rs.core.MediaType;
52  import javax.ws.rs.core.Response;
53  import org.json.JSONArray;
54  import org.json.JSONObject;
55  
56  /**
57   * LobbyRest
58   */
59  @Path( RestConstants.BASE_PATH + Constants.API_PATH + Constants.VERSION_PATH + Constants.LOBBY_PATH )
60  public class LobbyRest
61  {
62      private static final int VERSION_1 = 1;
63      private final Logger _logger = Logger.getLogger( RestConstants.REST_LOGGER );
64  
65      /**
66       * Get Lobby List (filtred by names like TEXT if present)
67       * 
68       * @param nVersion
69       *            the API version
70       * @param strLikeText
71       * @return the Lobby List
72       */
73      @GET
74      @Path( Constants.SEARCH_PATH )
75      @Produces( MediaType.APPLICATION_JSON )
76      public Response getLobbyListLike( @PathParam( Constants.VERSION ) Integer nVersion, @PathParam( Constants.TEXT ) String strLikeText )
77      {
78          switch( nVersion )
79          {
80              case VERSION_1:
81                  return getLobbyListV1( strLikeText );
82              default:
83                  break;
84          }
85          _logger.error( Constants.ERROR_NOT_FOUND_VERSION );
86          return Response.status( Response.Status.NOT_FOUND )
87                  .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_VERSION ) ) ).build( );
88      }
89  
90      /**
91       * Get Lobby List
92       * 
93       * @param nVersion
94       *            the API version
95       * @return the Lobby List
96       */
97      @GET
98      @Path( StringUtils.EMPTY )
99      @Produces( MediaType.APPLICATION_JSON )
100     public Response getLobbyList( @PathParam( Constants.VERSION ) Integer nVersion )
101     {
102         switch( nVersion )
103         {
104             case VERSION_1:
105                 return getLobbyListV1( "" );
106             default:
107                 break;
108         }
109         _logger.error( Constants.ERROR_NOT_FOUND_VERSION );
110         return Response.status( Response.Status.NOT_FOUND )
111                 .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_VERSION ) ) ).build( );
112     }
113 
114     /**
115      * Get Lobby List V1
116      * 
117      * @return the Lobby List for the version 1
118      */
119     private Response getLobbyListV1( String strLikeText )
120     {
121         List<Lobby> _listLobbies = LobbyHome.getLobbiesListNamedLike( "%" + strLikeText + "%" );
122 
123         if ( _listLobbies.isEmpty( ) )
124         {
125             JSONObject jsonNoProposal = new JSONObject( );
126 
127             jsonNoProposal.put( Constants.JSON_AUTOCOMPLETE_ID_KEY, -1 );
128             jsonNoProposal.put( Constants.JSON_AUTOCOMPLETE_VALUE_KEY,
129                     I18nService.getLocalizedString( Constants.MESSAGE_NO_PROPOSAL_I18N_KEY, I18nService.getDefaultLocale( ) ) );
130 
131             return Response.status( Response.Status.NO_CONTENT ).entity( jsonNoProposal.toString( ) ).build( );
132         }
133 
134         JSONArray listJsonLobbies = new JSONArray( );
135         for ( Lobby lobby : _listLobbies )
136         {
137             JSONObject jsonLobby = new JSONObject( );
138 
139             jsonLobby.put( Constants.JSON_AUTOCOMPLETE_ID_KEY, lobby.getId( ) );
140             jsonLobby.put( Constants.JSON_AUTOCOMPLETE_VALUE_KEY, lobby.getName( ) );
141             jsonLobby.put( Constants.JSON_AUTOCOMPLETE_LABEL_KEY, lobby.getName( ) );
142 
143             listJsonLobbies.put( jsonLobby );
144         }
145         return Response.status( Response.Status.OK ).entity( listJsonLobbies.toString( ) ).build( );
146     }
147 
148     /**
149      * Get Lobby
150      * 
151      * @param nVersion
152      *            the API version
153      * @param id
154      *            the id
155      * @return the Lobby
156      */
157     @GET
158     @Path( Constants.ID_PATH )
159     @Produces( MediaType.APPLICATION_JSON )
160     public Response getLobby( @PathParam( Constants.VERSION ) Integer nVersion, @PathParam( Constants.ID ) Integer id )
161     {
162         switch( nVersion )
163         {
164             case VERSION_1:
165                 return getLobbyV1( id );
166             default:
167                 break;
168         }
169         _logger.error( Constants.ERROR_NOT_FOUND_VERSION );
170         return Response.status( Response.Status.NOT_FOUND )
171                 .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_VERSION ) ) ).build( );
172     }
173 
174     /**
175      * Get Lobby V1
176      * 
177      * @param id
178      *            the id
179      * @return the Lobby for the version 1
180      */
181     private Response getLobbyV1( Integer id )
182     {
183         Lobby _lobby = LobbyHome.findByPrimaryKey( id );
184         if ( _lobby == null )
185         {
186             _logger.error( Constants.ERROR_NOT_FOUND_RESOURCE );
187             return Response.status( Response.Status.NOT_FOUND )
188                     .entity( JsonUtil.buildJsonResponse( new ErrorJsonResponse( Response.Status.NOT_FOUND.name( ), Constants.ERROR_NOT_FOUND_RESOURCE ) ) )
189                     .build( );
190         }
191 
192         return Response.status( Response.Status.OK ).entity( JsonUtil.buildJsonResponse( new JsonResponse( _lobby ) ) ).build( );
193     }
194 }