/**
* 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;
import it.cilea.osd.common.controller.BaseFormController;
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dspace.app.cris.model.CrisConstants;
import org.dspace.app.cris.model.jdyna.RPPropertiesDefinition;
import org.dspace.app.cris.service.ApplicationService;
import org.dspace.app.cris.util.ImportExportUtils;
import org.dspace.app.webui.cris.dto.ImportDTO;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.authorize.AuthorizeManager;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
import org.springframework.validation.BindException;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
/**
* This SpringMVC controller is responsible to handle the import by webui
*
* @author cilea
*
*/
public class NewImportFormController extends BaseFormController {
private ApplicationService applicationService;
public void setApplicationService(ApplicationService applicationService) {
this.applicationService = applicationService;
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
Context dspaceContext = UIUtil.obtainContext(request);
ImportDTO object = (ImportDTO) command;
MultipartFile fileDTO = object.getFile();
// read folder from configuration and make dir
String path = ConfigurationManager
.getProperty(CrisConstants.CFG_MODULE,"researcherpage.file.import.path");
File dir = new File(path);
dir.mkdir();
try {
if (object.getModeXSD() != null) {
response.setContentType("application/xml;charset=UTF-8");
response.addHeader("Content-Disposition",
"attachment; filename=rp.xsd");
String nameXSD = "xsd-download-webuirequest.xsd";
File filexsd = new File(dir, nameXSD);
filexsd.createNewFile();
ImportExportUtils.newGenerateXSD(response.getWriter(), dir, applicationService
.findAllContainables(RPPropertiesDefinition.class), filexsd, new String[]{"crisobjects","crisobject"}, "rp:", "http://www.cilea.it/researcherpage/schemas", "http://www.cilea.it/researcherpage/schemas", new String[]{"publicID","uuid","businessID","type"}, new boolean[]{false,false,true,true});
response.getWriter().flush();
response.getWriter().close();
return null;
} else {
if (fileDTO != null && !fileDTO.getOriginalFilename().isEmpty()) {
Boolean defaultStatus = ConfigurationManager
.getBooleanProperty(CrisConstants.CFG_MODULE,"researcherpage.file.import.rpdefaultstatus");
if (AuthorizeManager.isAdmin(dspaceContext)) {
dspaceContext.turnOffAuthorisationSystem();
}
ImportExportUtils.importResearchersXML(fileDTO.getInputStream(), dir,
applicationService, dspaceContext, defaultStatus);
saveMessage(
request,
getText("action.import.with.success",
request.getLocale()));
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
saveMessage(
request,
getText("action.import.with.noSuccess", e.getMessage(),
request.getLocale()));
}
return new ModelAndView(getSuccessView());
}
}