package org.molgenis.data.importer;
import org.apache.commons.lang3.StringUtils;
import org.molgenis.data.DatabaseAction;
import org.molgenis.data.RepositoryCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import javax.servlet.http.HttpSession;
public class ImportJob implements Runnable
{
private static final Logger LOG = LoggerFactory.getLogger(ImportJob.class);
private final ImportService importService;
private final SecurityContext securityContext;
private final RepositoryCollection source;
private final DatabaseAction databaseAction;
private final String importRunId;
private final ImportRunService importRunService;
private final HttpSession session;
private final String defaultPackage;
public ImportJob(ImportService importService, SecurityContext securityContext, RepositoryCollection source,
DatabaseAction databaseAction, String importRunId, ImportRunService importRunService, HttpSession session,
String defaultPackage)
{
this.importService = importService;
this.securityContext = securityContext;
this.source = source;
this.databaseAction = databaseAction;
this.importRunId = importRunId;
this.importRunService = importRunService;
this.session = session;
this.defaultPackage = defaultPackage;
}
@Override
public void run()
{
try
{
long t0 = System.currentTimeMillis();
LOG.info("Import started");
SecurityContextHolder.setContext(securityContext);
EntityImportReport importReport = importService.doImport(source, databaseAction, defaultPackage);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
try
{
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
}
catch (IllegalStateException e)
{
// session invalidated
}
importRunService.finishImportRun(importRunId, importReport.toString(),
StringUtils.join(importReport.getNewEntities(), ','));
long t = System.currentTimeMillis();
LOG.info("Import finished in " + (t - t0) + " msec.");
}
catch (Exception e)
{
LOG.info("Import failed.", e);
importRunService.failImportRun(importRunId, e.getMessage());
}
}
}