package com.constellio.app.modules.complementary.esRmRobots.actions;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.constellio.app.modules.complementary.esRmRobots.model.ClassifyConnectorFolderActionParameters;
import com.constellio.app.modules.complementary.esRmRobots.services.ClassifyConnectorRecordInTaxonomyExecutor;
import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbFolder;
import com.constellio.app.modules.robots.model.ActionExecutor;
import com.constellio.app.modules.robots.model.wrappers.ActionParameters;
import com.constellio.app.modules.robots.model.wrappers.RobotLog;
import com.constellio.app.modules.robots.services.RobotSchemaRecordServices;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.records.wrappers.RecordWrapper;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.RecordServicesException;
public abstract class ClassifyConnectorFolderBaseActionExecutor implements ActionExecutor {
public final static Set<String> SUPPORTED_TYPES = new HashSet<>();
static {
SUPPORTED_TYPES.add(ConnectorSmbFolder.SCHEMA_TYPE);
}
private final static Logger LOGGER = LoggerFactory.getLogger(ClassifyConnectorFolderBaseActionExecutor.class);
@Override
public Transaction execute(String robotId, ActionParameters actionParameters, AppLayerFactory appLayerFactory,
List<Record> records, List<Record> processedRecords, boolean dryRun) {
Transaction transaction = new Transaction();
String collection = actionParameters.getCollection();
RobotSchemaRecordServices robots = new RobotSchemaRecordServices(collection, appLayerFactory);
transaction.add(logguerMessage(robotId, robots, "Démarrage du robot dans la collection " + collection));
ClassifyConnectorFolderActionParameters params = wrap(actionParameters);
User user = appLayerFactory.getModelLayerFactory().newUserServices().getUserInCollection(User.ADMIN, collection);
for (Record record : records) {
try {
new ClassifyConnectorRecordInTaxonomyExecutor(record, params, appLayerFactory, user, robotId, processedRecords, dryRun)
.execute();
processedRecords.add(record);
} catch (Throwable e) {
LOGGER.warn("Cannot classify record", e);
transaction.add(logguerMessage(robotId, robots, ExceptionUtils.getStackTrace(e)));
}
}
return transaction;
}
private RecordWrapper logguerMessage(String robotId, RobotSchemaRecordServices robots, String message) {
return robots.newRobotLog().setTitle(message).setRobot(robotId);
}
protected abstract ClassifyConnectorFolderActionParameters wrap(ActionParameters actionParameters);
}