All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.pukkaone.odata.elasticsearch2.processor.ElasticsearchEntityCollectionProcessor Maven / Gradle / Ivy

The newest version!
package com.github.pukkaone.odata.elasticsearch2.processor;

import java.util.List;
import lombok.RequiredArgsConstructor;
import org.apache.olingo.commons.api.data.ContextURL;
import org.apache.olingo.commons.api.data.EntityCollection;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
import org.apache.olingo.commons.api.format.ContentType;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ODataApplicationException;
import org.apache.olingo.server.api.ODataLibraryException;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.ODataResponse;
import org.apache.olingo.server.api.ServiceMetadata;
import org.apache.olingo.server.api.processor.EntityCollectionProcessor;
import org.apache.olingo.server.api.serializer.EntityCollectionSerializerOptions;
import org.apache.olingo.server.api.serializer.ODataSerializer;
import org.apache.olingo.server.api.serializer.SerializerResult;
import org.apache.olingo.server.api.uri.UriInfo;
import org.apache.olingo.server.api.uri.UriResource;
import org.apache.olingo.server.api.uri.UriResourceEntitySet;

/**
 * Reads multiple instances of an Entity Type by accessing an Elasticsearch index.
 */
@RequiredArgsConstructor
public class ElasticsearchEntityCollectionProcessor implements EntityCollectionProcessor {

  private final EntityRepository entityRepository;
  private OData odata;
  private ServiceMetadata serviceMetadata;

  @Override
  public void init(OData odata, ServiceMetadata serviceMetadata) {
    this.odata = odata;
    this.serviceMetadata = serviceMetadata;
  }

  @Override
  public void readEntityCollection(
      ODataRequest request,
      ODataResponse response,
      UriInfo uriInfo,
      ContentType responseFormat) throws ODataApplicationException, ODataLibraryException {

    // First path segment is Entity Set.
    List resourcePaths = uriInfo.getUriResourceParts();
    UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0);
    EdmEntitySet entitySet = uriResourceEntitySet.getEntitySet();

    // Retrieve entities from backend.
    EntityCollection entityCollection = entityRepository.list(entitySet, uriInfo);

    // Serialize to response format.
    ContextURL contextUrl = ContextURL.with()
        .entitySet(entitySet)
        .build();
    EntityCollectionSerializerOptions options = EntityCollectionSerializerOptions.with()
        .id(request.getRawBaseUri() + "/" + entitySet.getName())
        .contextURL(contextUrl)
        .build();
    ODataSerializer serializer = odata.createSerializer(responseFormat);
    SerializerResult serializerResult = serializer.entityCollection(
        serviceMetadata, entitySet.getEntityType(), entityCollection, options);

    // Set response attributes.
    response.setContent(serializerResult.getContent());
    response.setStatusCode(HttpStatusCode.OK.getStatusCode());
    response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString());
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy