Example #1
0
  /** since Teiid only deals with primitive types, merge does not apply */
  @Override
  public void updateProperty(
      DataRequest request,
      Property property,
      boolean rawValue,
      boolean merge,
      String entityETag,
      PropertyResponse response)
      throws ODataLibraryException, ODataApplicationException {

    // TODO: need to match entityETag.
    checkETag(entityETag);

    UpdateResponse updateResponse = null;
    EdmProperty edmProperty = request.getUriResourceProperty().getProperty();
    try {
      ODataSQLBuilder visitor =
          new ODataSQLBuilder(
              this.odata,
              getClient().getMetadataStore(),
              this.prepared,
              false,
              request.getODataRequest().getRawBaseUri(),
              this.serviceMetadata,
              this.nameGenerator);
      visitor.visit(request.getUriInfo());
      Update update = visitor.updateProperty(edmProperty, property, this.prepared, rawValue);
      updateResponse = getClient().executeUpdate(update, visitor.getParameters());
    } catch (SQLException 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);
    }

    if (updateResponse != null && updateResponse.getUpdateCount() > 0) {
      response.writePropertyUpdated();
    } else {
      response.writeNotModified();
    }
  }