Package er.directtorest

Source Code of er.directtorest.ERD2RestDelegate

package er.directtorest;

import com.webobjects.directtoweb.D2WContext;
import com.webobjects.eoaccess.EOEntity;

import er.extensions.foundation.ERXThreadStorage;
import er.rest.ERXRestException;
import er.rest.entityDelegates.ERXDefaultRestDelegate;
import er.rest.entityDelegates.ERXDenyRestEntityDelegate;
import er.rest.entityDelegates.ERXRestContext;
import er.rest.entityDelegates.ERXRestKey;
import er.rest.entityDelegates.ERXRestNotFoundException;
import er.rest.entityDelegates.ERXRestRequest;
import er.rest.entityDelegates.ERXRestSecurityException;
import er.rest.entityDelegates.IERXRestEntityDelegate;

public class ERD2RestDelegate extends ERXDefaultRestDelegate {
   
    private IERXRestEntityDelegate _defaultDelegate;
   
    /**
     * Constructs an ERXDefaultRestDelegate with an ERXDenyRestEntityDelegate as the default entity delegate.
     */
    public ERD2RestDelegate() {
        super(new ERXDenyRestEntityDelegate(), true);
        _defaultDelegate = new ERXDenyRestEntityDelegate();
    }
   
    @Override
    public String entityNameForAlias(String entityAlias) {
        d2wContext().takeValueForKey(entityAlias, "restEntityAlias");
        String entityName = (String) d2wContext().valueForKeyPath("restEntityName");
        if (entityName == null) {
            entityName = entityAlias;
        }
        return entityName;
    }

    public IERXRestEntityDelegate entityDelegate(EOEntity entity) {
        String entityName = entity.name();
        IERXRestEntityDelegate entityDelegate = (IERXRestEntityDelegate) ERXThreadStorage.valueForKey("restEntityDelegate." + entityName);
        if (entityDelegate == null) {
            entityDelegate = (IERXRestEntityDelegate) d2wContext().valueForKey("restEntityDelegate");
            if (entityDelegate == null) {
                entityDelegate = _defaultDelegate;
            }
            ERXThreadStorage.takeValueForKey(entityDelegate, "restEntityDelegate." + entityName);
        }
        d2wContext().setEntity(entity);
        entityDelegate.initializeEntityNamed(entityName);
        return entityDelegate;
    }

    /**
     * Call this method to register an entity-specific delegate for a particular entity name.
     *
     * @param entityDelegate
     *            the entity delegate
     * @param entityName
     *            the entity name to associate the delegate with
     */
    @Override
    public void addDelegateForEntityNamed(IERXRestEntityDelegate entityDelegate, String entityName) {
        throw new IllegalStateException("Can't addDelegateForEntityNamed, is handled by d2wContext.");
    }

    /**
     * Removes the delegate for the given entity name.
     *
     * @param entityName
     *            the name of the entity
     */
    @Override
    public void removeDelegateForEntityNamed(String entityName) {
        throw new IllegalStateException("Can't removeDelegateForEntityNamed, is handled by d2wContext.");
    }
   

    protected void updateDynamicPage(String task, ERXRestRequest restRequest, ERXRestContext restContext) {
        d2wContext().setDynamicPage("Rest" + task + restRequest.key().entity().name());
    }

    private D2WContext d2wContext() {
        return ERDirectToRest.d2wContext();
    }

    @Override
    public ERXRestKey view(ERXRestRequest restRequest, ERXRestContext restContext) {
        updateDynamicPage("View", restRequest, restContext);
        return super.view(restRequest, restContext);
    }

    @Override
    public ERXRestKey insert(ERXRestRequest restRequest, ERXRestContext restContext) {
        updateDynamicPage("Insert", restRequest, restContext);
        return super.view(restRequest, restContext);
    }

    @Override
    public void update(ERXRestRequest restRequest, ERXRestContext restContext) throws ERXRestException, ERXRestSecurityException, ERXRestNotFoundException {
        updateDynamicPage("Update", restRequest, restContext);
        super.update(restRequest, restContext);
    }

    @Override
    public void delete(ERXRestRequest restRequest, ERXRestContext restContext) throws ERXRestException, ERXRestSecurityException, ERXRestNotFoundException {
        updateDynamicPage("Delete", restRequest, restContext);
        super.delete(restRequest, restContext);
    }
}
TOP

Related Classes of er.directtorest.ERD2RestDelegate

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.