/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* https://github.com/CILEA/dspace-cris/wiki/License
*/
package org.dspace.app.webui.cris.controller.jdyna;
import it.cilea.osd.jdyna.model.ANestedPropertiesDefinition;
import it.cilea.osd.jdyna.model.ANestedProperty;
import it.cilea.osd.jdyna.model.ATypeNestedObject;
import it.cilea.osd.jdyna.model.PropertiesDefinition;
import it.cilea.osd.jdyna.model.Property;
import it.cilea.osd.jdyna.web.controller.FileServiceController;
import it.cilea.osd.jdyna.widget.WidgetFile;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dspace.app.cris.model.ACrisObject;
import org.dspace.app.cris.model.CrisConstants;
import org.dspace.app.cris.model.jdyna.ACrisNestedObject;
import org.dspace.app.cris.model.jdyna.widget.AWidgetFileCris;
import org.dspace.app.cris.service.ApplicationService;
import org.dspace.app.cris.statistics.util.StatsConfig;
import org.dspace.app.webui.util.JSPManager;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.core.ConfigurationManager;
import org.dspace.usage.UsageEvent;
import org.dspace.utils.DSpace;
import org.springframework.web.servlet.ModelAndView;
public class CrisFileServiceController<T extends ACrisObject<P, TP, NP, NTP, ACNO, ATNO>, P extends Property<TP>, TP extends PropertiesDefinition, NP extends ANestedProperty<NTP>, NTP extends ANestedPropertiesDefinition, ACNO extends ACrisNestedObject<NP, NTP, P, TP>, ATNO extends ATypeNestedObject<NTP>>
extends FileServiceController
{
private ApplicationService applicationService;
private String filePath;
private Class<T> targetObject;
private Class<TP> targetPropertyDefinition;
@Override
protected String getPath()
{
return ConfigurationManager.getProperty(CrisConstants.CFG_MODULE,
getFilePath());
}
public void setFilePath(String filePath)
{
this.filePath = filePath;
}
public String getFilePath()
{
return filePath;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception
{
try
{
return super.handleRequest(request, response);
}
catch(RuntimeException ex) {
JSPManager.showJSP(request, response, "/error/404.jsp");
return null;
}
finally
{
String idString = request.getPathInfo();
String[] pathInfo = idString.split("/", 4);
String folder = pathInfo[3];
int indexOf = folder.indexOf("/");
String id = folder.substring(0, indexOf);
String idTP = folder.substring((indexOf+1), folder.length() - 1);
TP tp = applicationService.get(getTargetPropertyDefinition(),
Integer.parseInt(idTP));
if (tp.getRendering() instanceof AWidgetFileCris)
{
AWidgetFileCris widget = (AWidgetFileCris) tp.getRendering();
// Fire usage event.
if (widget.isUseInStatistics())
{
request.setAttribute("sectionid", tp.getId());
new DSpace().getEventService().fireEvent(
new UsageEvent(UsageEvent.Action.VIEW, request,
UIUtil.obtainContext(request),
applicationService.getEntityByCrisId(id,
getTargetObject())));
}
}
}
}
public void setApplicationService(ApplicationService applicationService)
{
this.applicationService = applicationService;
}
public Class<T> getTargetObject()
{
return targetObject;
}
public void setTargetObject(Class<T> targetObject)
{
this.targetObject = targetObject;
}
public Class<TP> getTargetPropertyDefinition()
{
return targetPropertyDefinition;
}
public void setTargetPropertyDefinition(Class<TP> targetPropertyDefinition)
{
this.targetPropertyDefinition = targetPropertyDefinition;
}
}