001/*
002 * Copyright 2011-2016 UnboundID Corp.
003 *
004 * This program is free software; you can redistribute it and/or modify
005 * it under the terms of the GNU General Public License (GPLv2 only)
006 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
007 * as published by the Free Software Foundation.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, see <http://www.gnu.org/licenses>.
016 */
017
018package com.unboundid.scim.wink;
019
020import com.unboundid.scim.sdk.OAuthTokenHandler;
021
022import javax.servlet.http.HttpServletRequest;
023import javax.ws.rs.Consumes;
024import javax.ws.rs.DELETE;
025import javax.ws.rs.GET;
026import javax.ws.rs.POST;
027import javax.ws.rs.PUT;
028import javax.ws.rs.Path;
029import javax.ws.rs.PathParam;
030import javax.ws.rs.Produces;
031import javax.ws.rs.QueryParam;
032import javax.ws.rs.core.Context;
033import javax.ws.rs.core.HttpHeaders;
034import javax.ws.rs.core.MediaType;
035import javax.ws.rs.core.Response;
036import javax.ws.rs.core.SecurityContext;
037import javax.ws.rs.core.UriInfo;
038import java.io.InputStream;
039
040import static com.unboundid.scim.sdk.SCIMConstants.QUERY_PARAMETER_BASE_ID;
041import static com.unboundid.scim.sdk.SCIMConstants.QUERY_PARAMETER_FILTER;
042import static com.unboundid.scim.sdk.SCIMConstants.QUERY_PARAMETER_PAGE_SIZE;
043import static com.unboundid.scim.sdk.SCIMConstants.
044    QUERY_PARAMETER_PAGE_START_INDEX;
045import static com.unboundid.scim.sdk.SCIMConstants.QUERY_PARAMETER_SCOPE;
046import static com.unboundid.scim.sdk.SCIMConstants.QUERY_PARAMETER_SORT_BY;
047import static com.unboundid.scim.sdk.SCIMConstants.QUERY_PARAMETER_SORT_ORDER;
048
049
050
051/**
052 * This class is a Wink resource implementation for operations
053 * on a SCIM resource.
054 */
055@Path("{endpoint}")
056public class SCIMResource extends AbstractSCIMResource
057{
058  /**
059   * Create a new SCIM wink resource for operations on a SCIM endpoint.
060   *
061   * @param application         The SCIMApplication initializing this reosurce.
062   * @param tokenHandler        The token handler to use for OAuth
063   *                            authentication.
064   */
065  public SCIMResource(final SCIMApplication application,
066                      final OAuthTokenHandler tokenHandler)
067  {
068    super(application, tokenHandler);
069  }
070
071
072
073  /**
074   * Implement the GET query operation producing JSON format.
075   *
076   * @param endpoint         The resource endpoint.
077   * @param request          The current HTTP servlet request.
078   * @param securityContext  The security context of the current request.
079   * @param headers          The request headers.
080   * @param uriInfo          The URI info for the request.
081   * @param filterString     The filter query parameter, or {@code null}.
082   * @param baseID           The SCIM resource ID of the search base entry,
083   *                         or {@code null}.
084   * @param searchScope      The LDAP search scope to use, or {@code null}.
085   * @param sortBy           The sortBy query parameter, or {@code null}.
086   * @param sortOrder        The sortOrder query parameter, or {@code null}.
087   * @param pageStartIndex   The startIndex query parameter, or {@code null}.
088   * @param pageSize         The count query parameter, or {@code null}.
089   *
090   * @return  The response to the request.
091   */
092  @GET
093  @Produces(MediaType.APPLICATION_JSON)
094  public Response doJsonGet(@PathParam("endpoint") final String endpoint,
095                            @Context final HttpServletRequest request,
096                            @Context final SecurityContext securityContext,
097                            @Context final HttpHeaders headers,
098                            @Context final UriInfo uriInfo,
099                            @QueryParam(QUERY_PARAMETER_FILTER)
100                            final String filterString,
101                            @QueryParam(QUERY_PARAMETER_BASE_ID)
102                            final String baseID,
103                            @QueryParam(QUERY_PARAMETER_SCOPE)
104                            final String searchScope,
105                            @QueryParam(QUERY_PARAMETER_SORT_BY)
106                            final String sortBy,
107                            @QueryParam(QUERY_PARAMETER_SORT_ORDER)
108                            final String sortOrder,
109                            @QueryParam(QUERY_PARAMETER_PAGE_START_INDEX)
110                            final String pageStartIndex,
111                            @QueryParam(QUERY_PARAMETER_PAGE_SIZE)
112                            final String pageSize)
113  {
114    final RequestContext requestContext =
115        new RequestContext(request, securityContext, headers, uriInfo,
116                           MediaType.APPLICATION_JSON_TYPE,
117                           MediaType.APPLICATION_JSON_TYPE);
118
119    return getUsers(requestContext, endpoint, filterString, baseID, searchScope,
120                    sortBy, sortOrder, pageStartIndex, pageSize);
121  }
122
123
124
125  /**
126   * Implement the GET query operation producing XML format.
127   *
128   * @param endpoint         The resource endpoint.
129   * @param request          The current HTTP servlet request.
130   * @param securityContext  The security context of the current request.
131   * @param headers          The request headers.
132   * @param uriInfo          The URI info for the request.
133   * @param filterString     The filter query parameter, or {@code null}.
134   * @param baseID           The SCIM resource ID of the search base entry,
135   *                         or {@code null}.
136   * @param searchScope      The LDAP search scope to use, or {@code null}.
137   * @param sortBy           The sortBy query parameter, or {@code null}.
138   * @param sortOrder        The sortOrder query parameter, or {@code null}.
139   * @param pageStartIndex   The startIndex query parameter, or {@code null}.
140   * @param pageSize         The count query parameter, or {@code null}.
141   *
142   * @return  The response to the request.
143   */
144  @GET
145  @Produces(MediaType.APPLICATION_XML)
146  public Response doXmlGet(@PathParam("endpoint") final String endpoint,
147                           @Context final HttpServletRequest request,
148                           @Context final SecurityContext securityContext,
149                           @Context final HttpHeaders headers,
150                           @Context final UriInfo uriInfo,
151                           @QueryParam(QUERY_PARAMETER_FILTER)
152                           final String filterString,
153                           @QueryParam(QUERY_PARAMETER_BASE_ID)
154                           final String baseID,
155                           @QueryParam(QUERY_PARAMETER_SCOPE)
156                           final String searchScope,
157                           @QueryParam(QUERY_PARAMETER_SORT_BY)
158                           final String sortBy,
159                           @QueryParam(QUERY_PARAMETER_SORT_ORDER)
160                           final String sortOrder,
161                           @QueryParam(QUERY_PARAMETER_PAGE_START_INDEX)
162                           final String pageStartIndex,
163                           @QueryParam(QUERY_PARAMETER_PAGE_SIZE)
164                           final String pageSize)
165  {
166    final RequestContext requestContext =
167        new RequestContext(request, securityContext, headers, uriInfo,
168                           MediaType.APPLICATION_XML_TYPE,
169                           MediaType.APPLICATION_XML_TYPE);
170
171    return getUsers(requestContext, endpoint, filterString, baseID, searchScope,
172                    sortBy, sortOrder, pageStartIndex, pageSize);
173  }
174
175
176
177  /**
178   * Implement the GET operation on a specified user resource producing
179   * JSON format.
180   *
181   * @param endpoint         The resource endpoint.
182   * @param userID           The requested user ID.
183   * @param request          The current HTTP servlet request.
184   * @param securityContext  The security context for the request.
185   * @param headers          The request headers.
186   * @param uriInfo          The URI info for the request.
187   *
188   * @return  The response to the request.
189   */
190  @GET
191  @Path("{userID}")
192  @Produces(MediaType.APPLICATION_JSON)
193  public Response doJsonGet(@PathParam("endpoint") final String endpoint,
194                            @PathParam("userID") final String userID,
195                            @Context final HttpServletRequest request,
196                            @Context final SecurityContext securityContext,
197                            @Context final HttpHeaders headers,
198                            @Context final UriInfo uriInfo)
199  {
200    final RequestContext requestContext =
201        new RequestContext(request, securityContext, headers, uriInfo,
202                           MediaType.APPLICATION_JSON_TYPE,
203                           MediaType.APPLICATION_JSON_TYPE);
204    return getUser(requestContext, endpoint, userID);
205  }
206
207
208
209  /**
210   * Implement the GET operation on a specified user resource producing
211   * XML format.
212   *
213   * @param endpoint         The resource endpoint.
214   * @param userID           The requested user ID.
215   * @param request          The current HTTP servlet request.
216   * @param securityContext  The security context for the request.
217   * @param headers          The request headers.
218   * @param uriInfo          The URI info for the request.
219   *
220   * @return  The response to the request.
221   */
222  @GET
223  @Path("{userID}")
224  @Produces(MediaType.APPLICATION_XML)
225  public Response doXmlGet(@PathParam("endpoint") final String endpoint,
226                           @PathParam("userID") final String userID,
227                           @Context final HttpServletRequest request,
228                           @Context final SecurityContext securityContext,
229                           @Context final HttpHeaders headers,
230                           @Context final UriInfo uriInfo)
231  {
232    final RequestContext requestContext =
233        new RequestContext(request, securityContext, headers, uriInfo,
234                           MediaType.APPLICATION_XML_TYPE,
235                           MediaType.APPLICATION_XML_TYPE);
236    return getUser(requestContext, endpoint, userID);
237  }
238
239
240
241  /**
242   * Implement the GET operation on a specified user resource where the URL
243   * specifies JSON content type.
244   *
245   * @param endpoint         The resource endpoint.
246   * @param userID           The requested user ID.
247   * @param request          The current HTTP servlet request.
248   * @param securityContext  The security context for the request.
249   * @param headers          The request headers.
250   * @param uriInfo          The URI info for the request.
251   *
252   * @return  The response to the request.
253   */
254  @GET
255  @Path("{userID}.json")
256  @Produces(MediaType.APPLICATION_JSON)
257  public Response doDotJsonGet(@PathParam("endpoint") final String endpoint,
258                               @PathParam("userID") final String userID,
259                               @Context final HttpServletRequest request,
260                               @Context final SecurityContext securityContext,
261                               @Context final HttpHeaders headers,
262                               @Context final UriInfo uriInfo)
263  {
264    final RequestContext requestContext =
265        new RequestContext(request, securityContext, headers, uriInfo,
266                           MediaType.APPLICATION_JSON_TYPE,
267                           MediaType.APPLICATION_JSON_TYPE);
268    return getUser(requestContext, endpoint, userID);
269  }
270
271
272
273  /**
274   * Implement the GET operation on a specified user resource where the URL
275   * specifies XML content type.
276   *
277   * @param endpoint         The resource endpoint.
278   * @param userID           The requested user ID.
279   * @param request          The current HTTP servlet request.
280   * @param securityContext  The security context for the request.
281   * @param headers          The request headers.
282   * @param uriInfo          The URI info for the request.
283   *
284   * @return  The response to the request.
285   */
286  @GET
287  @Path("{userID}.xml")
288  @Produces(MediaType.APPLICATION_XML)
289  public Response doDotXmlGet(@PathParam("endpoint") final String endpoint,
290                              @PathParam("userID") final String userID,
291                              @Context final HttpServletRequest request,
292                              @Context final SecurityContext securityContext,
293                              @Context final HttpHeaders headers,
294                              @Context final UriInfo uriInfo)
295  {
296    final RequestContext requestContext =
297        new RequestContext(request, securityContext, headers, uriInfo,
298                           MediaType.APPLICATION_XML_TYPE,
299                           MediaType.APPLICATION_XML_TYPE);
300    return getUser(requestContext, endpoint, userID);
301  }
302
303
304
305  /**
306   * Implement the POST operation consuming and producing JSON format.
307   *
308   * @param inputStream      The content to be consumed.
309   * @param endpoint         The resource endpoint.
310   * @param request          The current HTTP servlet request.
311   * @param securityContext  The security context for the request.
312   * @param headers          The request headers.
313   * @param uriInfo          The URI info for the request.
314   *
315   * @return  The response to the request.
316   */
317  @POST
318  @Consumes(MediaType.APPLICATION_JSON)
319  @Produces(MediaType.APPLICATION_JSON)
320  public Response doJsonJsonPost(final InputStream inputStream,
321                                 @PathParam("endpoint") final String endpoint,
322                                 @Context final HttpServletRequest request,
323                                 @Context final SecurityContext securityContext,
324                                 @Context final HttpHeaders headers,
325                                 @Context final UriInfo uriInfo)
326  {
327    final RequestContext requestContext =
328        new RequestContext(request, securityContext, headers, uriInfo,
329                           MediaType.APPLICATION_JSON_TYPE,
330                           MediaType.APPLICATION_JSON_TYPE);
331    return postUser(requestContext, endpoint, inputStream);
332  }
333
334
335
336  /**
337   * Implement the POST operation consuming and producing XML format.
338   *
339   * @param inputStream      The content to be consumed.
340   * @param endpoint         The resource endpoint.
341   * @param request          The current HTTP servlet request.
342   * @param securityContext  The security context for the request.
343   * @param headers          The request headers.
344   * @param uriInfo          The URI info for the request.
345   *
346   * @return  The response to the request.
347   */
348  @POST
349  @Consumes(MediaType.APPLICATION_XML)
350  @Produces(MediaType.APPLICATION_XML)
351  public Response doXmlXmlPost(final InputStream inputStream,
352                               @PathParam("endpoint") final String endpoint,
353                               @Context final HttpServletRequest request,
354                               @Context final SecurityContext securityContext,
355                               @Context final HttpHeaders headers,
356                               @Context final UriInfo uriInfo)
357  {
358    final RequestContext requestContext =
359        new RequestContext(request, securityContext, headers, uriInfo,
360                           MediaType.APPLICATION_XML_TYPE,
361                           MediaType.APPLICATION_XML_TYPE);
362    return postUser(requestContext, endpoint, inputStream);
363  }
364
365
366
367  /**
368   * Implement the POST operation consuming XML format and producing JSON
369   * format.
370   *
371   * @param inputStream      The content to be consumed.
372   * @param endpoint         The resource endpoint.
373   * @param request          The current HTTP servlet request.
374   * @param securityContext  The security context for the request.
375   * @param headers          The request headers.
376   * @param uriInfo          The URI info for the request.
377   *
378   * @return  The response to the request.
379   */
380  @POST
381  @Consumes(MediaType.APPLICATION_XML)
382  @Produces(MediaType.APPLICATION_JSON)
383  public Response doXmlJsonPost(final InputStream inputStream,
384                                @PathParam("endpoint") final String endpoint,
385                                @Context final HttpServletRequest request,
386                                @Context final SecurityContext securityContext,
387                                @Context final HttpHeaders headers,
388                                @Context final UriInfo uriInfo)
389  {
390    final RequestContext requestContext =
391        new RequestContext(request, securityContext, headers, uriInfo,
392                           MediaType.APPLICATION_XML_TYPE,
393                           MediaType.APPLICATION_JSON_TYPE);
394    return postUser(requestContext, endpoint, inputStream);
395  }
396
397
398
399  /**
400   * Implement the POST operation consuming JSON format and producing XML
401   * format.
402   *
403   * @param inputStream      The content to be consumed.
404   * @param endpoint         The resource endpoint.
405   * @param request          The current HTTP servlet request.
406   * @param securityContext  The security context for the request.
407   * @param headers          The request headers.
408   * @param uriInfo          The URI info for the request.
409   *
410   * @return  The response to the request.
411   */
412  @POST
413  @Consumes(MediaType.APPLICATION_JSON)
414  @Produces(MediaType.APPLICATION_XML)
415  public Response doJsonXmlPost(final InputStream inputStream,
416                                @PathParam("endpoint") final String endpoint,
417                                @Context final HttpServletRequest request,
418                                @Context final SecurityContext securityContext,
419                                @Context final HttpHeaders headers,
420                                @Context final UriInfo uriInfo)
421  {
422    final RequestContext requestContext =
423        new RequestContext(request, securityContext, headers, uriInfo,
424                           MediaType.APPLICATION_JSON_TYPE,
425                           MediaType.APPLICATION_XML_TYPE);
426    return postUser(requestContext, endpoint, inputStream);
427  }
428
429
430  /**
431   * Implement the PUT operation consuming and producing JSON format.
432   *
433   * @param inputStream      The content to be consumed.
434   * @param endpoint         The resource endpoint.
435   * @param userID           The target user ID.
436   * @param request          The current HTTP servlet request.
437   * @param securityContext  The security context for the request.
438   * @param headers          The request headers.
439   * @param uriInfo          The URI info for the request.
440   *
441   * @return  The response to the request.
442   */
443  @PUT
444  @Path("{userID}")
445  @Consumes(MediaType.APPLICATION_JSON)
446  @Produces(MediaType.APPLICATION_JSON)
447  public Response doJsonJsonPut(final InputStream inputStream,
448                                @PathParam("endpoint") final String endpoint,
449                                @PathParam("userID") final String userID,
450                                @Context final HttpServletRequest request,
451                                @Context final SecurityContext securityContext,
452                                @Context final HttpHeaders headers,
453                                @Context final UriInfo uriInfo)
454  {
455    final RequestContext requestContext =
456        new RequestContext(request, securityContext, headers, uriInfo,
457                           MediaType.APPLICATION_JSON_TYPE,
458                           MediaType.APPLICATION_JSON_TYPE);
459    return putUser(requestContext, endpoint, userID, inputStream);
460  }
461
462
463
464  /**
465   * Implement the PUT operation where the URL specifies JSON format.
466   *
467   * @param inputStream      The content to be consumed.
468   * @param endpoint         The resource endpoint.
469   * @param userID           The target user ID.
470   * @param request          The current HTTP servlet request.
471   * @param securityContext  The security context for the request.
472   * @param headers          The request headers.
473   * @param uriInfo          The URI info for the request.
474   *
475   * @return  The response to the request.
476   */
477  @PUT
478  @Path("{userID}.json")
479  @Consumes(MediaType.APPLICATION_JSON)
480  @Produces(MediaType.APPLICATION_JSON)
481  public Response doJsonDotJsonPut(final InputStream inputStream,
482                                   @PathParam("endpoint") final String endpoint,
483                                   @PathParam("userID") final String userID,
484                                   @Context final HttpServletRequest request,
485                                   @Context final SecurityContext
486                                       securityContext,
487                                   @Context final HttpHeaders headers,
488                                   @Context final UriInfo uriInfo)
489  {
490    final RequestContext requestContext =
491        new RequestContext(request, securityContext, headers, uriInfo,
492                           MediaType.APPLICATION_JSON_TYPE,
493                           MediaType.APPLICATION_JSON_TYPE);
494    return putUser(requestContext,
495        endpoint,
496        userID,
497        inputStream);
498  }
499
500
501
502  /**
503   * Implement the PUT operation consuming XML and where the URL specifies
504   * producing JSON format.
505   *
506   * @param inputStream      The content to be consumed.
507   * @param endpoint         The resource endpoint.
508   * @param userID           The target user ID.
509   * @param request          The current HTTP servlet request.
510   * @param securityContext  The security context for the request.
511   * @param headers          The request headers.
512   * @param uriInfo          The URI info for the request.
513   *
514   * @return  The response to the request.
515   */
516  @PUT
517  @Path("{userID}.json")
518  @Consumes(MediaType.APPLICATION_XML)
519  @Produces(MediaType.APPLICATION_JSON)
520  public Response doXmlDotJsonPut(final InputStream inputStream,
521                                  @PathParam("endpoint") final String endpoint,
522                                  @PathParam("userID") final String userID,
523                                  @Context final HttpServletRequest request,
524                                  @Context final SecurityContext
525                                      securityContext,
526                                  @Context final HttpHeaders headers,
527                                  @Context final UriInfo uriInfo)
528  {
529    final RequestContext requestContext =
530        new RequestContext(request, securityContext, headers, uriInfo,
531                           MediaType.APPLICATION_XML_TYPE,
532                           MediaType.APPLICATION_JSON_TYPE);
533    return putUser(requestContext,
534        endpoint,
535        userID,
536        inputStream);
537  }
538
539
540
541  /**
542   * Implement the PUT operation where the URL specifies XML format.
543   *
544   * @param inputStream      The content to be consumed.
545   * @param endpoint         The resource endpoint.
546   * @param userID           The target user ID.
547   * @param request          The current HTTP servlet request.
548   * @param securityContext  The security context for the request.
549   * @param headers          The request headers.
550   * @param uriInfo          The URI info for the request.
551   *
552   * @return  The response to the request.
553   */
554  @PUT
555  @Path("{userID}.xml")
556  @Consumes(MediaType.APPLICATION_XML)
557  @Produces(MediaType.APPLICATION_XML)
558  public Response doXmlDotXmlPut(final InputStream inputStream,
559                                 @PathParam("endpoint") final String endpoint,
560                                 @PathParam("userID") final String userID,
561                                 @Context final HttpServletRequest request,
562                                 @Context final SecurityContext securityContext,
563                                 @Context final HttpHeaders headers,
564                                 @Context final UriInfo uriInfo)
565  {
566    final RequestContext requestContext =
567        new RequestContext(request, securityContext, headers, uriInfo,
568                           MediaType.APPLICATION_XML_TYPE,
569                           MediaType.APPLICATION_XML_TYPE);
570    return putUser(requestContext,
571                   endpoint,
572                   userID,
573                   inputStream);
574  }
575
576
577
578  /**
579   * Implement the PUT operation where the URL specifies XML format.
580   *
581   * @param inputStream      The content to be consumed.
582   * @param endpoint         The resource endpoint.
583   * @param userID           The target user ID.
584   * @param request          The current HTTP servlet request.
585   * @param securityContext  The security context for the request.
586   * @param headers          The request headers.
587   * @param uriInfo          The URI info for the request.
588   *
589   * @return  The response to the request.
590   */
591  @PUT
592  @Path("{userID}.xml")
593  @Consumes(MediaType.APPLICATION_JSON)
594  @Produces(MediaType.APPLICATION_XML)
595  public Response doJsonDotXmlPut(final InputStream inputStream,
596                                  @PathParam("endpoint") final String endpoint,
597                                  @PathParam("userID") final String userID,
598                                  @Context final HttpServletRequest request,
599                                  @Context final SecurityContext
600                                      securityContext,
601                                  @Context final HttpHeaders headers,
602                                  @Context final UriInfo uriInfo)
603  {
604    final RequestContext requestContext =
605        new RequestContext(request, securityContext, headers, uriInfo,
606                           MediaType.APPLICATION_JSON_TYPE,
607                           MediaType.APPLICATION_XML_TYPE);
608    return putUser(requestContext,
609                   endpoint,
610                   userID,
611                   inputStream);
612  }
613
614
615
616  /**
617   * Implement the PUT operation consuming and producing XML format.
618   *
619   * @param inputStream      The content to be consumed.
620   * @param endpoint         The resource endpoint.
621   * @param userID           The target user ID.
622   * @param request          The current HTTP servlet request.
623   * @param securityContext  The security context for the request.
624   * @param headers          The request headers.
625   * @param uriInfo          The URI info for the request.
626   *
627   * @return  The response to the request.
628   */
629  @PUT
630  @Path("{userID}")
631  @Consumes(MediaType.APPLICATION_XML)
632  @Produces(MediaType.APPLICATION_XML)
633  public Response doXmlXmlPut(final InputStream inputStream,
634                              @PathParam("endpoint") final String endpoint,
635                              @PathParam("userID") final String userID,
636                              @Context final HttpServletRequest request,
637                              @Context final SecurityContext securityContext,
638                              @Context final HttpHeaders headers,
639                              @Context final UriInfo uriInfo)
640  {
641    final RequestContext requestContext =
642        new RequestContext(request, securityContext, headers, uriInfo,
643                           MediaType.APPLICATION_XML_TYPE,
644                           MediaType.APPLICATION_XML_TYPE);
645    return putUser(requestContext, endpoint, userID, inputStream);
646  }
647
648
649
650  /**
651   * Implement the PUT operation consuming XML format and producing JSON
652   * format.
653   *
654   * @param inputStream      The content to be consumed.
655   * @param endpoint         The resource endpoint.
656   * @param userID           The target user ID.
657   * @param request          The current HTTP servlet request.
658   * @param securityContext  The security context for the request.
659   * @param headers          The request headers.
660   * @param uriInfo          The URI info for the request.
661   *
662   * @return  The response to the request.
663   */
664  @PUT
665  @Path("{userID}")
666  @Consumes(MediaType.APPLICATION_XML)
667  @Produces(MediaType.APPLICATION_JSON)
668  public Response doXmlJsonPut(final InputStream inputStream,
669                               @PathParam("endpoint") final String endpoint,
670                               @PathParam("userID") final String userID,
671                               @Context final HttpServletRequest request,
672                               @Context final SecurityContext securityContext,
673                               @Context final HttpHeaders headers,
674                               @Context final UriInfo uriInfo)
675  {
676    final RequestContext requestContext =
677        new RequestContext(request, securityContext, headers, uriInfo,
678                           MediaType.APPLICATION_XML_TYPE,
679                           MediaType.APPLICATION_JSON_TYPE);
680    return putUser(requestContext, endpoint, userID, inputStream);
681  }
682
683
684
685  /**
686   * Implement the PUT operation consuming JSON format and producing XML
687   * format.
688   *
689   * @param inputStream      The content to be consumed.
690   * @param endpoint         The resource endpoint.
691   * @param userID           The target user ID.
692   * @param request          The current HTTP servlet request.
693   * @param securityContext  The security context for the request.
694   * @param headers          The request headers.
695   * @param uriInfo          The URI info for the request.
696   *
697   * @return  The response to the request.
698   */
699  @PUT
700  @Path("{userID}")
701  @Consumes(MediaType.APPLICATION_JSON)
702  @Produces(MediaType.APPLICATION_XML)
703  public Response doJsonXmlPut(final InputStream inputStream,
704                               @PathParam("endpoint") final String endpoint,
705                               @PathParam("userID") final String userID,
706                               @Context final HttpServletRequest request,
707                               @Context final SecurityContext securityContext,
708                               @Context final HttpHeaders headers,
709                               @Context final UriInfo uriInfo)
710  {
711    final RequestContext requestContext =
712        new RequestContext(request, securityContext, headers, uriInfo,
713                           MediaType.APPLICATION_JSON_TYPE,
714                           MediaType.APPLICATION_XML_TYPE);
715    return putUser(requestContext, endpoint, userID, inputStream);
716  }
717
718
719
720  /**
721   * Implement the PATCH operation consuming and producing JSON format.
722   *
723   * @param inputStream      The content to be consumed.
724   * @param endpoint         The resource endpoint.
725   * @param userID           The target user ID.
726   * @param request          The current HTTP servlet request.
727   * @param securityContext  The security context for the request.
728   * @param headers          The request headers.
729   * @param uriInfo          The URI info for the request.
730   *
731   * @return  The response to the request.
732   */
733  @PATCH
734  @Path("{userID}")
735  @Consumes(MediaType.APPLICATION_JSON)
736  @Produces(MediaType.APPLICATION_JSON)
737  public Response doJsonJsonPatch(final InputStream inputStream,
738                                 @PathParam("endpoint") final String endpoint,
739                                 @PathParam("userID") final String userID,
740                                 @Context final HttpServletRequest request,
741                                 @Context final SecurityContext securityContext,
742                                 @Context final HttpHeaders headers,
743                                 @Context final UriInfo uriInfo)
744  {
745    final RequestContext requestContext =
746           new RequestContext(request, securityContext, headers, uriInfo,
747                    MediaType.APPLICATION_JSON_TYPE,
748                    MediaType.APPLICATION_JSON_TYPE);
749    return patchUser(requestContext, endpoint, userID, inputStream);
750  }
751
752
753
754  /**
755   * Implement the PATCH operation consuming and producing XML format.
756   *
757   * @param inputStream      The content to be consumed.
758   * @param endpoint         The resource endpoint.
759   * @param userID           The target user ID.
760   * @param request          The current HTTP servlet request.
761   * @param securityContext  The security context for the request.
762   * @param headers          The request headers.
763   * @param uriInfo          The URI info for the request.
764   *
765   * @return  The response to the request.
766   */
767  @PATCH
768  @Path("{userID}")
769  @Consumes(MediaType.APPLICATION_XML)
770  @Produces(MediaType.APPLICATION_XML)
771  public Response doXmlXmlPatch(final InputStream inputStream,
772                               @PathParam("endpoint") final String endpoint,
773                               @PathParam("userID") final String userID,
774                               @Context final HttpServletRequest request,
775                               @Context final SecurityContext securityContext,
776                               @Context final HttpHeaders headers,
777                               @Context final UriInfo uriInfo)
778  {
779    final RequestContext requestContext =
780           new RequestContext(request, securityContext, headers, uriInfo,
781                    MediaType.APPLICATION_XML_TYPE,
782                    MediaType.APPLICATION_XML_TYPE);
783    return patchUser(requestContext, endpoint, userID, inputStream);
784  }
785
786
787
788  /**
789   * Implement the PATCH operation consuming XML format and producing JSON
790   * format.
791   *
792   * @param inputStream      The content to be consumed.
793   * @param endpoint         The resource endpoint.
794   * @param userID           The target user ID.
795   * @param request          The current HTTP servlet request.
796   * @param securityContext  The security context for the request.
797   * @param headers          The request headers.
798   * @param uriInfo          The URI info for the request.
799   *
800   * @return  The response to the request.
801   */
802  @PATCH
803  @Path("{userID}")
804  @Consumes(MediaType.APPLICATION_XML)
805  @Produces(MediaType.APPLICATION_JSON)
806  public Response doXmlJsonPatch(final InputStream inputStream,
807                                @PathParam("endpoint") final String endpoint,
808                                @PathParam("userID") final String userID,
809                                @Context final HttpServletRequest request,
810                                @Context final SecurityContext securityContext,
811                                @Context final HttpHeaders headers,
812                                @Context final UriInfo uriInfo)
813  {
814    final RequestContext requestContext =
815           new RequestContext(request, securityContext, headers, uriInfo,
816                    MediaType.APPLICATION_XML_TYPE,
817                    MediaType.APPLICATION_JSON_TYPE);
818    return patchUser(requestContext, endpoint, userID, inputStream);
819  }
820
821
822
823  /**
824   * Implement the PATCH operation consuming JSON format and producing XML
825   * format.
826   *
827   * @param inputStream      The content to be consumed.
828   * @param endpoint         The resource endpoint.
829   * @param userID           The target user ID.
830   * @param request          The current HTTP servlet request.
831   * @param securityContext  The security context for the request.
832   * @param headers          The request headers.
833   * @param uriInfo          The URI info for the request.
834   *
835   * @return  The response to the request.
836   */
837  @PATCH
838  @Path("{userID}")
839  @Consumes(MediaType.APPLICATION_JSON)
840  @Produces(MediaType.APPLICATION_XML)
841  public Response doJsonXmlPatch(final InputStream inputStream,
842                                @PathParam("endpoint") final String endpoint,
843                                @PathParam("userID") final String userID,
844                                @Context final HttpServletRequest request,
845                                @Context final SecurityContext securityContext,
846                                @Context final HttpHeaders headers,
847                                @Context final UriInfo uriInfo)
848  {
849    final RequestContext requestContext =
850           new RequestContext(request, securityContext, headers, uriInfo,
851                    MediaType.APPLICATION_JSON_TYPE,
852                    MediaType.APPLICATION_XML_TYPE);
853    return patchUser(requestContext, endpoint, userID, inputStream);
854  }
855
856
857
858  /**
859   * Implement the PATCH operation consuming and producing JSON format.
860   *
861   * @param inputStream      The content to be consumed.
862   * @param endpoint         The resource endpoint.
863   * @param userID           The target user ID.
864   * @param request          The current HTTP servlet request.
865   * @param securityContext  The security context for the request.
866   * @param headers          The request headers.
867   * @param uriInfo          The URI info for the request.
868   *
869   * @return  The response to the request.
870   */
871  @PATCH
872  @Path("{userID}.json")
873  @Consumes(MediaType.APPLICATION_JSON)
874  @Produces(MediaType.APPLICATION_JSON)
875  public Response doJsonDotJsonPatch(final InputStream inputStream,
876                                    @PathParam("endpoint") final String
877                                        endpoint,
878                                    @PathParam("userID") final String userID,
879                                    @Context final HttpServletRequest request,
880                                    @Context final SecurityContext
881                                        securityContext,
882                                    @Context final HttpHeaders headers,
883                                    @Context final UriInfo uriInfo)
884  {
885    final RequestContext requestContext =
886           new RequestContext(request, securityContext, headers, uriInfo,
887                    MediaType.APPLICATION_JSON_TYPE,
888                    MediaType.APPLICATION_JSON_TYPE);
889    return patchUser(requestContext, endpoint, userID, inputStream);
890  }
891
892
893
894  /**
895   * Implement the PATCH operation consuming and producing XML format.
896   *
897   * @param inputStream      The content to be consumed.
898   * @param endpoint         The resource endpoint.
899   * @param userID           The target user ID.
900   * @param request          The current HTTP servlet request.
901   * @param securityContext  The security context for the request.
902   * @param headers          The request headers.
903   * @param uriInfo          The URI info for the request.
904   *
905   * @return  The response to the request.
906   */
907  @PATCH
908  @Path("{userID}.xml")
909  @Consumes(MediaType.APPLICATION_XML)
910  @Produces(MediaType.APPLICATION_XML)
911  public Response doXmlDotXmlPatch(final InputStream inputStream,
912                                  @PathParam("endpoint") final String endpoint,
913                                  @PathParam("userID") final String userID,
914                                  @Context final HttpServletRequest request,
915                                  @Context final SecurityContext
916                                      securityContext,
917                                  @Context final HttpHeaders headers,
918                                  @Context final UriInfo uriInfo)
919  {
920    final RequestContext requestContext =
921           new RequestContext(request, securityContext, headers, uriInfo,
922                    MediaType.APPLICATION_XML_TYPE,
923                    MediaType.APPLICATION_XML_TYPE);
924    return patchUser(requestContext, endpoint, userID, inputStream);
925  }
926
927
928
929  /**
930   * Implement the PATCH operation consuming XML format and producing JSON
931   * format.
932   *
933   * @param inputStream      The content to be consumed.
934   * @param endpoint         The resource endpoint.
935   * @param userID           The target user ID.
936   * @param request          The current HTTP servlet request.
937   * @param securityContext  The security context for the request.
938   * @param headers          The request headers.
939   * @param uriInfo          The URI info for the request.
940   *
941   * @return  The response to the request.
942   */
943  @PATCH
944  @Path("{userID}.json")
945  @Consumes(MediaType.APPLICATION_XML)
946  @Produces(MediaType.APPLICATION_JSON)
947  public Response doXmlDotJsonPatch(final InputStream inputStream,
948                                   @PathParam("endpoint") final String endpoint,
949                                   @PathParam("userID") final String userID,
950                                   @Context final HttpServletRequest request,
951                                   @Context final SecurityContext
952                                       securityContext,
953                                   @Context final HttpHeaders headers,
954                                   @Context final UriInfo uriInfo)
955  {
956    final RequestContext requestContext =
957           new RequestContext(request, securityContext, headers, uriInfo,
958                    MediaType.APPLICATION_XML_TYPE,
959                    MediaType.APPLICATION_JSON_TYPE);
960    return patchUser(requestContext, endpoint, userID, inputStream);
961  }
962
963
964
965  /**
966   * Implement the PATCH operation consuming JSON format and producing XML
967   * format.
968   *
969   * @param inputStream      The content to be consumed.
970   * @param endpoint         The resource endpoint.
971   * @param userID           The target user ID.
972   * @param request          The current HTTP servlet request.
973   * @param securityContext  The security context for the request.
974   * @param headers          The request headers.
975   * @param uriInfo          The URI info for the request.
976   *
977   * @return  The response to the request.
978   */
979  @PATCH
980  @Path("{userID}.xml")
981  @Consumes(MediaType.APPLICATION_JSON)
982  @Produces(MediaType.APPLICATION_XML)
983  public Response doJsonDotXmlPatch(final InputStream inputStream,
984                                   @PathParam("endpoint") final String endpoint,
985                                   @PathParam("userID") final String userID,
986                                   @Context final HttpServletRequest request,
987                                   @Context final SecurityContext
988                                       securityContext,
989                                   @Context final HttpHeaders headers,
990                                   @Context final UriInfo uriInfo)
991  {
992    final RequestContext requestContext =
993           new RequestContext(request, securityContext, headers, uriInfo,
994                    MediaType.APPLICATION_JSON_TYPE,
995                    MediaType.APPLICATION_XML_TYPE);
996    return patchUser(requestContext, endpoint, userID, inputStream);
997  }
998
999
1000
1001  /**
1002   * Implement the DELETE operation on a specified user resource producing
1003   * JSON format.
1004   *
1005   * @param endpoint         The resource endpoint.
1006   * @param userID           The target user ID.
1007   * @param request          The current HTTP servlet request.
1008   * @param securityContext  The security context for the request.
1009   * @param headers          The request headers.
1010   * @param uriInfo          The URI info for the request.
1011   *
1012   * @return  The response to the request.
1013   */
1014  @DELETE
1015  @Path("{userID}")
1016  @Produces(MediaType.APPLICATION_JSON)
1017  public Response doJsonDelete(
1018                               @PathParam("endpoint") final String endpoint,
1019                               @PathParam("userID") final String userID,
1020                               @Context final HttpServletRequest request,
1021                               @Context final SecurityContext securityContext,
1022                               @Context final HttpHeaders headers,
1023                               @Context final UriInfo uriInfo)
1024  {
1025    final RequestContext requestContext =
1026        new RequestContext(request, securityContext, headers, uriInfo,
1027                           MediaType.APPLICATION_JSON_TYPE,
1028                           MediaType.APPLICATION_JSON_TYPE);
1029    return deleteUser(requestContext,endpoint, userID);
1030  }
1031
1032
1033
1034  /**
1035   * Implement the DELETE operation on a specified user resource producing
1036   * XML format.
1037   *
1038   * @param endpoint         The resource endpoint.
1039   * @param userID           The target user ID.
1040   * @param request          The current HTTP servlet request.
1041   * @param securityContext  The security context for the request.
1042   * @param headers          The request headers.
1043   * @param uriInfo          The URI info for the request.
1044   *
1045   * @return  The response to the request.
1046   */
1047  @DELETE
1048  @Path("{userID}")
1049  @Produces(MediaType.APPLICATION_XML)
1050  public Response doXmlDelete(
1051                              @PathParam("endpoint") final String endpoint,
1052                              @PathParam("userID") final String userID,
1053                              @Context final HttpServletRequest request,
1054                              @Context final SecurityContext securityContext,
1055                              @Context final HttpHeaders headers,
1056                              @Context final UriInfo uriInfo)
1057  {
1058    final RequestContext requestContext =
1059        new RequestContext(request, securityContext, headers, uriInfo,
1060                           MediaType.APPLICATION_XML_TYPE,
1061                           MediaType.APPLICATION_XML_TYPE);
1062    return deleteUser(requestContext, endpoint, userID);
1063  }
1064
1065
1066
1067  /**
1068   * Implement the DELETE operation on a specified user resource where the URL
1069   * specifies JSON content type.
1070   *
1071   * @param endpoint         The resource endpoint.
1072   * @param userID           The target user ID.
1073   * @param request          The current HTTP servlet request.
1074   * @param securityContext  The security context for the request.
1075   * @param headers          The request headers.
1076   * @param uriInfo          The URI info for the request.
1077   *
1078   * @return  The response to the request.
1079   */
1080  @DELETE
1081  @Path("{userID}.json")
1082  @Produces(MediaType.APPLICATION_JSON)
1083  public Response doDotJsonDelete(@PathParam("endpoint") final String endpoint,
1084                                  @PathParam("userID") final String userID,
1085                                  @Context final HttpServletRequest request,
1086                                  @Context
1087                                  final SecurityContext securityContext,
1088                                  @Context final HttpHeaders headers,
1089                                  @Context final UriInfo uriInfo)
1090  {
1091    final RequestContext requestContext =
1092        new RequestContext(request, securityContext, headers, uriInfo,
1093                           MediaType.APPLICATION_JSON_TYPE,
1094                           MediaType.APPLICATION_JSON_TYPE);
1095    return deleteUser(requestContext, endpoint, userID);
1096  }
1097
1098
1099
1100  /**
1101   * Implement the DELETE operation on a specified user resource where the URL
1102   * specifies XML content type.
1103   *
1104   * @param endpoint         The resource endpoint.
1105   * @param userID           The target user ID.
1106   * @param request          The current HTTP servlet request.
1107   * @param securityContext  The security context for the request.
1108   * @param headers          The request headers.
1109   * @param uriInfo          The URI info for the request.
1110   *
1111   * @return  The response to the request.
1112   */
1113  @DELETE
1114  @Path("{userID}.xml")
1115  @Produces(MediaType.APPLICATION_XML)
1116  public Response doDotXmlDelete(@PathParam("endpoint") final String endpoint,
1117                                 @PathParam("userID") final String userID,
1118                                 @Context final HttpServletRequest request,
1119                                 @Context final SecurityContext securityContext,
1120                                 @Context final HttpHeaders headers,
1121                                 @Context final UriInfo uriInfo)
1122  {
1123    final RequestContext requestContext =
1124        new RequestContext(request, securityContext, headers, uriInfo,
1125                           MediaType.APPLICATION_XML_TYPE,
1126                           MediaType.APPLICATION_XML_TYPE);
1127    return deleteUser(requestContext, endpoint, userID);
1128  }
1129}