package edu.asu.spring.quadriga.aspects;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import edu.asu.spring.quadriga.aspects.annotations.InjectProject;
import edu.asu.spring.quadriga.aspects.annotations.InjectProjectById;
import edu.asu.spring.quadriga.aspects.annotations.ProjectIdentifier;
import edu.asu.spring.quadriga.domain.workbench.IProject;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.workbench.IRetrieveProjectManager;
/**
* This class intercepts the methods annotated by {@link InjectProjectById} and
* retrieves the Project Id from the variable annotated by
* {@link ProjectIdentifier} Inject the Project into the variable annotated by
* {@link InjectProject}
*
* @author Nischal Samji
*
*/
@Aspect
@Order(value = 10)
@Component
public class InjectProjectByIdAspect extends InjectProjectAspect {
@Autowired
private IRetrieveProjectManager projectManager;
@Around("within(edu.asu.spring.quadriga.web..*) && @annotation(ipId)")
public Object injectProject(ProceedingJoinPoint joinPoint, InjectProjectById ipId) throws Throwable {
return super.injectProject(joinPoint);
}
@Override
public String getErrorPage() {
return "public/404";
}
@Override
public IProject getProject(String projectId) throws QuadrigaStorageException {
return projectManager.getProjectDetails(projectId);
}
}