Add your Abstract class to the hot-folder-store-yourProjectCore-spring.xml as a bean:
<bean id="batchRunnerTask" class="com.your.project.core.integration.dataimport.AbstractYourProjectImpexRunnerTask">
<property name="sessionService" ref="sessionService" />
<property name="importService" ref="importService" />
<lookup-method name="getImportConfig" bean="importConfig" />
</bean>
AbstractYourProjectImpexRunnerTask Class definition:
package com.your.project.core.integration.dataimport;
import de.hybris.platform.acceleratorservices.dataimport.batch.BatchHeader;
import de.hybris.platform.acceleratorservices.dataimport.batch.task.AbstractImpexRunnerTask;
import de.hybris.platform.servicelayer.impex.ImportConfig;
import de.hybris.platform.servicelayer.session.Session;
import de.hybris.platform.servicelayer.session.SessionExecutionBody;
import de.hybris.platform.servicelayer.session.SessionService;
import de.hybris.platform.servicelayer.user.UserService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import java.io.File;
import java.io.FileNotFoundException;
/**
* Created by dsg on 6/8/2017.
*/
public abstract class AbstractYourProjectImpexRunnerTask extends AbstractImpexRunnerTask {
@Autowired
private SessionService sessionService;
@Autowired
private UserService userService;
private static final Logger LOG = Logger.getLogger(AbstractYourProjectImpexRunnerTask.class);
@Override
public BatchHeader execute(BatchHeader header) throws FileNotFoundException {
Assert.notNull(header);
Assert.notNull(header.getEncoding());
if (CollectionUtils.isNotEmpty(header.getTransformedFiles()))
{
boolean alreadyHasSession = getSessionService().hasCurrentSession();
final Session localSession;
if (!alreadyHasSession) {
localSession = getSessionService().createNewSession();
} else {
localSession = null;
}
try
{
final BatchHeader finalHeader = header;
for (final File file : finalHeader.getTransformedFiles())
{
sessionService.executeInLocalView(new SessionExecutionBody() {
@Override
public void executeWithoutResult() {
// set the user as admin and process the file then (as an admin)
userService.setCurrentUser(userService.getAdminUser());
try {
processFile(file, finalHeader.getEncoding());
} catch (FileNotFoundException e) {
LOG.error(e.getMessage(), e);
}
super.executeWithoutResult();
}
});
}
}
finally
{
if (!alreadyHasSession) {
getSessionService().closeSession(localSession);
}
}
}
return header;
}
}
0 Comments