예제 #1
0
  /**
   * Process a legacy V1 request (single item)
   *
   * @param hyperionContext The context
   */
  protected void processLegacyRequest(HyperionContext hyperionContext) {
    EndpointRequest request = hyperionContext.getEndpointRequest();
    EndpointResponse response = hyperionContext.getEndpointResponse();

    ApiVersionPlugin<ApiObject<Serializable>, PersistentObject<Serializable>, Serializable>
        apiVersionPlugin = hyperionContext.getVersionPlugin();
    EntityPlugin plugin = hyperionContext.getEntityPlugin();

    ApiObject clientObject = null;
    try {
      clientObject =
          marshaller.unmarshall(request.getInputStream(), apiVersionPlugin.getApiClass());
    } catch (MarshallingException e) {
      throw new BadRequestException(
          messageSource.getErrorMessage(
              ERROR_READING_REQUEST, hyperionContext.getLocale(), e.getMessage()),
          e);
    }
    clientObject.setId(null);

    PersistenceContext persistenceContext = buildPersistenceContext(hyperionContext);
    Set<String> fieldSet = persistenceContext.getRequestedFields();
    if (fieldSet != null) fieldSet.add("id");

    ApiObject saved =
        (ApiObject)
            plugin
                .getPersistenceOperations()
                .createOrUpdateItems(Collections.singletonList(clientObject), persistenceContext)
                .get(0);

    processChangeEvents(hyperionContext, persistenceContext);
    response.setResponseCode(200);
    hyperionContext.setResult(saved);
  }
예제 #2
0
  protected void processChangeEvents(
      HyperionContext phaseContext, PersistenceContext persistenceContext) {
    EntityPlugin entityPlugin = phaseContext.getEntityPlugin();
    if (!entityPlugin.hasEntityChangeListeners()) return;

    List<EntityChangeListener> entityChangeListeners = entityPlugin.getEntityChangeListeners();
    for (EntityChangeListener entityChangeListener : entityChangeListeners) {
      for (EntityChangeEvent event : persistenceContext.getEntityChangeEvents()) {
        entityChangeListener.processEntityChange(event);
      }
    }
  }
예제 #3
0
  /**
   * Process a multi-item request
   *
   * @param hyperionContext The context
   */
  protected void processCollectionRequest(HyperionContext hyperionContext) {
    EndpointRequest request = hyperionContext.getEndpointRequest();
    EndpointResponse response = hyperionContext.getEndpointResponse();

    ApiVersionPlugin<ApiObject<Serializable>, PersistentObject<Serializable>, Serializable>
        apiVersionPlugin = hyperionContext.getVersionPlugin();
    EntityPlugin plugin = hyperionContext.getEntityPlugin();

    List<ApiObject<Serializable>> clientObjects = null;
    try {
      clientObjects =
          marshaller.unmarshallCollection(request.getInputStream(), apiVersionPlugin.getApiClass());
    } catch (WriteLimitException e) {
      throw new BadRequestException(
          messageSource.getErrorMessage(
              ERROR_WRITE_LIMIT, hyperionContext.getLocale(), e.getWriteLimit()),
          e);
    } catch (MarshallingException e) {
      throw new BadRequestException(
          messageSource.getErrorMessage(
              ERROR_READING_REQUEST, hyperionContext.getLocale(), e.getMessage()),
          e);
    }

    PersistenceContext persistenceContext = buildPersistenceContext(hyperionContext);
    Set<String> fieldSet = persistenceContext.getRequestedFields();
    if (fieldSet != null) fieldSet.add("id");

    List<ApiObject> saved =
        plugin.getPersistenceOperations().createOrUpdateItems(clientObjects, persistenceContext);

    processChangeEvents(hyperionContext, persistenceContext);

    response.setResponseCode(200);

    EntityList<ApiObject> entityResponse = new EntityList<>();
    entityResponse.setEntries(saved);
    hyperionContext.setResult(entityResponse);
  }
예제 #4
0
  protected PersistenceContext buildPersistenceContext(HyperionContext context) {
    EntityPlugin entityPlugin = context.getEntityPlugin();
    HyperionRequest endpointRequest = context.getEndpointRequest();

    PersistenceContext persistenceContext = new PersistenceContext();
    persistenceContext.setEntityPlugin(entityPlugin);
    persistenceContext.setEntity(entityPlugin.getEndpointName());
    persistenceContext.setHttpMethod(context.getEffectiveMethod());
    persistenceContext.setApiVersionPlugin(context.getVersionPlugin());
    persistenceContext.setUserContext(context.getAuthorizationContext().getUserContext());
    persistenceContext.setRequestedFields(
        buildFieldSet(endpointRequest.getFirstParameter("fields")));
    persistenceContext.setAuthorizationContext(context.getAuthorizationContext());
    persistenceContext.setLocale(context.getLocale());
    persistenceContext.setMessageSource(messageSource);

    Set<String> additionalParameters = entityPlugin.getAdditionalParameters();
    if (additionalParameters != null && additionalParameters.size() > 0)
      persistenceContext.setAdditionalParameters(
          endpointRequest.getParameterMap(additionalParameters));

    return persistenceContext;
  }