Package er.rest.routes

Source Code of er.rest.routes.ERXUnsafeReadOnlyRouteController

package er.rest.routes;

import com.webobjects.appserver.WOActionResults;
import com.webobjects.appserver.WORequest;
import com.webobjects.eocontrol.EOClassDescription;
import com.webobjects.eocontrol.EOEnterpriseObject;

import er.extensions.eof.ERXKeyFilter;
import er.extensions.foundation.ERXStringUtilities;
import er.rest.ERXRestClassDescriptionFactory;
import er.rest.ERXRestFetchSpecification;
import er.rest.IERXRestDelegate;

/**
* If you just want to quickly drop in a controller to test your entities, you can use or extend
* ERXUnsafeReadOnlyRouteController. This provides a default read-only interface to the attributes and to-one
* relationships of the specified entity.
*
* <pre>
* routeRequestHandler.addDefaultRoutes(YourEntity.ENTITY_NAME, ERXUnsafeReadOnlyRouteController.class);
* </pre>
*
* @author mschrag
*
* @param <T>
*            the type of your entity
*/
public class ERXUnsafeReadOnlyRouteController<T extends EOEnterpriseObject> extends ERXDefaultRouteController {
  public ERXUnsafeReadOnlyRouteController(WORequest request) {
    super(request);
  }

  protected boolean allowUpdates() {
    return false;
  }

  @SuppressWarnings("unchecked")
  protected T object() {
    T obj = (T) routeObjectForKey(ERXStringUtilities.uncapitalize(entityName()));
    return obj;
  }

  protected ERXKeyFilter queryFilter() {
    ERXKeyFilter filter = ERXKeyFilter.filterWithAllRecursive();
    return filter;
  }

  protected ERXKeyFilter showFilter() {
    ERXKeyFilter filter = ERXKeyFilter.filterWithAttributesAndToOneRelationships();
    return filter;
  }

  protected ERXKeyFilter updateFilter() {
    ERXKeyFilter filter = ERXKeyFilter.filterWithAttributesAndToOneRelationships();
    return filter;
  }

  @SuppressWarnings("unchecked")
  @Override
  public WOActionResults createAction() {
    T obj = (T) create(entityName(), updateFilter());
    editingContext().saveChanges();
    return response(obj, showFilter());
  }

  @Override
  public WOActionResults updateAction() {
    if (!allowUpdates()) {
      throw new SecurityException("You are not allowed to update this type of object.");
    }
    T obj = object();
    update(obj, updateFilter());
    editingContext().saveChanges();
    return response(obj, showFilter());
  }

  @Override
  public WOActionResults destroyAction() throws Throwable {
    if (!allowUpdates()) {
      throw new SecurityException("You are not allowed to delete this type of object.");
    }
    T obj = object();
        EOClassDescription classDescription = ERXRestClassDescriptionFactory.classDescriptionForObject(obj, false);
    Object primaryKey = IERXRestDelegate.Factory.delegateForClassDescription(classDescription).primaryKeyForObject(obj, restContext());
    editingContext().deleteObject(obj);
    editingContext().saveChanges();
    return response(primaryKey, null);
  }

  @SuppressWarnings("unchecked")
  @Override
  public WOActionResults newAction() throws Throwable {
    if (!allowUpdates()) {
      throw new SecurityException("You are not allowed to create this type of object.");
    }
    EOClassDescription classDescription = ERXRestClassDescriptionFactory.classDescriptionForEntityName(entityName());
    T obj = (T) IERXRestDelegate.Factory.delegateForClassDescription(classDescription).createObjectOfEntityWithID(classDescription, null, restContext());
    return response(obj, showFilter());
  }

  @Override
  public WOActionResults showAction() {
    return response(object(), showFilter());
  }

  @Override
  public WOActionResults indexAction() {
    if (isSchemaRequest()) {
      return schemaResponse(showFilter());
    }
   
    ERXRestFetchSpecification<T> fetchSpec = new ERXRestFetchSpecification<T>(entityName(), null, null, queryFilter(), null, 25);
    return response(fetchSpec, showFilter());
  }
}
TOP

Related Classes of er.rest.routes.ERXUnsafeReadOnlyRouteController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.