edu.stanford.protege.webprotege.dispatch.AbstractProjectActionHandler Maven / Gradle / Ivy
The newest version!
package edu.stanford.protege.webprotege.dispatch;
import edu.stanford.protege.webprotege.access.AccessManager;
import edu.stanford.protege.webprotege.access.BuiltInAction;
import edu.stanford.protege.webprotege.authorization.ActionId;
import edu.stanford.protege.webprotege.common.ProjectId;
import edu.stanford.protege.webprotege.common.ProjectRequest;
import edu.stanford.protege.webprotege.common.Request;
import edu.stanford.protege.webprotege.common.Response;
import edu.stanford.protege.webprotege.dispatch.validators.CompositeRequestValidator;
import edu.stanford.protege.webprotege.dispatch.validators.NullValidator;
import edu.stanford.protege.webprotege.dispatch.validators.ProjectPermissionValidator;
import edu.stanford.protege.webprotege.project.HasProjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Author: Matthew Horridge
* Stanford University
* Bio-Medical Informatics Research Group
* Date: 21/02/2013
*
* A skeleton handler for handling actions that pertain to projects (i.e. {@link Action}s that implement
* {@link HasProjectId}. Further more, the validation includes a check to see if the project
* actually exists and fails if this isn't the case.
*
*/
public abstract class AbstractProjectActionHandler, R extends Response> implements ProjectActionHandler {
@Nonnull
private final AccessManager accessManager;
public AbstractProjectActionHandler(@Nonnull AccessManager accessManager) {
this.accessManager = checkNotNull(accessManager);
}
@Nonnull
@Override
public final RequestValidator getRequestValidator(@Nonnull A action, @Nonnull RequestContext requestContext) {
List validators = new ArrayList<>();
BuiltInAction builtInAction = getRequiredExecutableBuiltInAction(action);
ProjectId projectId;
if(action instanceof ProjectAction) {
projectId = ((ProjectAction>) action).projectId();
}
else if(action instanceof ProjectRequest) {
projectId = ((ProjectRequest>) action).projectId();
}
else {
throw new RuntimeException("Not a project action or request");
}
if(builtInAction != null) {
ProjectPermissionValidator validator = new ProjectPermissionValidator(accessManager,
projectId,
requestContext.getUserId(),
builtInAction.getActionId());
validators.add(validator);
}
ActionId reqActionId = getRequiredExecutableAction();
if (reqActionId != null) {
ProjectPermissionValidator validator = new ProjectPermissionValidator(accessManager,
projectId,
requestContext.getUserId(),
reqActionId);
validators.add(validator);
}
Iterable requiredExecutableBuiltInActions = getRequiredExecutableBuiltInActions(action);
for(BuiltInAction actionId : requiredExecutableBuiltInActions) {
ProjectPermissionValidator validator = new ProjectPermissionValidator(accessManager,
projectId,
requestContext.getUserId(),
actionId.getActionId());
validators.add(validator);
}
final RequestValidator additionalRequestValidator = getAdditionalRequestValidator(action, requestContext);
if (additionalRequestValidator != NullValidator.get()) {
validators.add(additionalRequestValidator);
}
return CompositeRequestValidator.get(validators);
}
@Nullable
protected BuiltInAction getRequiredExecutableBuiltInAction(A action) {
return null;
}
@Nullable
protected ActionId getRequiredExecutableAction() {
return null;
}
@Nonnull
protected Iterable getRequiredExecutableBuiltInActions(A action) {
return Collections.emptyList();
}
/**
* Gets an additional validator that is specific to the implementing handler. This is returned as part of a
* {@link CompositeRequestValidator} by the the implementation of
* the {@link #getRequestValidator(Action,
* edu.stanford.protege.webprotege.dispatch.RequestContext)} method.
*
* @param action The action that the validation will be completed against.
* @param requestContext The {@link RequestContext} that describes the context for the request.
* @return A {@link RequestValidator} for this handler. Not {@code null}.
*/
@Nonnull
protected RequestValidator getAdditionalRequestValidator(A action, RequestContext requestContext) {
return NullValidator.get();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy