Exemplo n.º 1
0
 private void sendResults(
     final DataRequest request,
     final ODataSQLBuilder visitor,
     final BaseResponse queryResponse,
     EntitySetResponse response)
     throws ODataApplicationException, SerializerException {
   if (request.getPreference(ODATA_MAXPAGESIZE) != null) {
     response.writeHeader(
         PREFERENCE_APPLIED,
         ODATA_MAXPAGESIZE + "=" + request.getPreference(ODATA_MAXPAGESIZE)); // $NON-NLS-1$
   }
   EntityCollectionResponse result = (EntityCollectionResponse) queryResponse;
   if (result.getNextToken() != null) {
     try {
       String nextUri =
           request.getODataRequest().getRawBaseUri()
               + request.getODataRequest().getRawODataPath()
               + "?"
               + buildNextToken(
                   request.getODataRequest().getRawQueryPath(), result.getNextToken());
       result.setNext(new URI(nextUri));
     } catch (URISyntaxException e) {
       throw new ODataApplicationException(e.getMessage(), 500, Locale.getDefault(), e);
     } catch (MalformedURLException e) {
       throw new ODataApplicationException(e.getMessage(), 500, Locale.getDefault(), e);
     }
   }
   response.writeReadEntitySet(visitor.getContext().getEdmEntityType(), result);
 }
  @Test
  public void getPrevHref() {
    EntityPager pager = new EntityPager(0, 15, 30l, null);
    EntityCollectionResponse response =
        new EntityCollectionResponse(pager, null, "/test", entityMetaData, permissionService);
    assertNull(response.getPrevHref());

    pager = new EntityPager(15, 15, 30l, null);
    response =
        new EntityCollectionResponse(pager, null, "/test", entityMetaData, permissionService);
    assertEquals(response.getPrevHref(), "/test?start=0&num=15");

    pager = new EntityPager(30, 15, 30l, null);
    response =
        new EntityCollectionResponse(pager, null, "/test", entityMetaData, permissionService);
    assertEquals(response.getPrevHref(), "/test?start=15&num=15");
  }
  @Test
  public void getNextHref() {
    EntityPager pager = new EntityPager(0, 10, 25l, null);
    EntityCollectionResponse response =
        new EntityCollectionResponse(pager, null, "/test", entityMetaData, permissionService);
    assertEquals(response.getNextHref(), "/test?start=10&num=10");

    pager = new EntityPager(10, 10, 25l, null);
    response =
        new EntityCollectionResponse(pager, null, "/test", entityMetaData, permissionService);
    assertEquals(response.getNextHref(), "/test?start=20&num=10");

    pager = new EntityPager(0, 25, 25l, null);
    response =
        new EntityCollectionResponse(pager, null, "/test", entityMetaData, permissionService);
    assertNull(response.getNextHref());
  }
Exemplo n.º 4
0
  @Override
  public void upsertEntity(
      DataRequest request, Entity entity, boolean merge, String entityETag, EntityResponse response)
      throws ODataLibraryException, ODataApplicationException {

    final ODataSQLBuilder visitor =
        new ODataSQLBuilder(
            this.odata,
            getClient().getMetadataStore(),
            this.prepared,
            true,
            request.getODataRequest().getRawBaseUri(),
            this.serviceMetadata,
            this.nameGenerator);
    visitor.visit(request.getUriInfo());

    final EntityCollectionResponse queryResponse;
    try {
      Query query = visitor.selectQuery();
      queryResponse =
          (EntityCollectionResponse)
              executeQuery(request, request.isCountRequest(), visitor, query);
    } catch (Exception e) {
      throw new ODataApplicationException(
          e.getMessage(),
          HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(),
          Locale.getDefault(),
          e);
    }

    if (!queryResponse.getEntities().isEmpty()) {
      updateEntity(request, entity, merge, entityETag, response);
    } else {
      createEntity(request, entity, response);
    }
  }
Exemplo n.º 5
0
  @Override
  public void createEntity(DataRequest request, Entity entity, EntityResponse response)
      throws ODataLibraryException, ODataApplicationException {

    EdmEntityType entityType = request.getEntitySet().getEntityType();

    String txn;
    try {
      txn = getClient().startTransaction();
    } catch (SQLException e) {
      throw new ODataApplicationException(
          e.getMessage(),
          HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(),
          Locale.getDefault(),
          e);
    }
    boolean success = false;

    try {
      List<ExpandNode> expands = new ArrayList<TeiidServiceHandler.ExpandNode>();
      UpdateResponse updateResponse =
          performDeepInsert(
              request.getODataRequest().getRawBaseUri(),
              request.getUriInfo(),
              entityType,
              entity,
              expands);

      if (updateResponse != null && updateResponse.getUpdateCount() == 1) {
        ODataSQLBuilder visitor =
            new ODataSQLBuilder(
                this.odata,
                getClient().getMetadataStore(),
                true,
                false,
                request.getODataRequest().getRawBaseUri(),
                this.serviceMetadata,
                this.nameGenerator);

        Query query =
            visitor.selectWithEntityKey(
                entityType, entity, updateResponse.getGeneratedKeys(), expands);
        LogManager.logDetail(
            LogConstants.CTX_ODATA,
            null,
            "created entity = ",
            entityType.getName(),
            " with key=",
            query.getCriteria().toString()); // $NON-NLS-1$ //$NON-NLS-2$

        EntityCollectionResponse result =
            new EntityCollectionResponse(
                request.getODataRequest().getRawBaseUri(), visitor.getContext());

        getClient().executeSQL(query, visitor.getParameters(), false, null, null, null, 1, result);

        if (!result.getEntities().isEmpty()) {
          entity = result.getEntities().get(0);
          String location =
              EntityResponse.buildLocation(
                  request.getODataRequest().getRawBaseUri(),
                  entity,
                  request.getEntitySet().getName(),
                  entityType);
          entity.setId(new URI(location));
        }
        response.writeCreatedEntity(request.getEntitySet(), entity);
      } else {
        response.writeNotModified();
      }
      getClient().commit(txn);
      success = true;
    } catch (SQLException e) {
      throw new ODataApplicationException(
          e.getMessage(),
          HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(),
          Locale.getDefault(),
          e);
    } catch (URISyntaxException e) {
      throw new ODataApplicationException(
          e.getMessage(),
          HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(),
          Locale.getDefault(),
          e);
    } catch (TeiidException e) {
      throw new ODataApplicationException(
          e.getMessage(),
          HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(),
          Locale.getDefault(),
          e);
    } catch (EdmPrimitiveTypeException e) {
      throw new ODataApplicationException(
          e.getMessage(),
          HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(),
          Locale.getDefault(),
          e);
    } finally {
      if (!success) {
        try {
          getClient().rollback(txn);
        } catch (SQLException e1) {
          // ignore
        }
      }
    }
  }