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;
    }
}
Categories: Hybris

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *