package com.constellio.app.modules.es.connectors.smb.jobs;
import com.constellio.app.modules.es.connectors.smb.jobmanagement.SmbConnectorJob;
import com.constellio.app.modules.es.connectors.smb.jobmanagement.SmbJobFactoryImpl.SmbJobType;
import com.constellio.app.modules.es.connectors.smb.service.SmbFileDTO;
import com.constellio.app.modules.es.connectors.smb.service.SmbFileDTO.SmbFileDTOStatus;
import com.constellio.app.modules.es.connectors.spi.Connector;
import com.constellio.app.modules.es.connectors.spi.ConnectorJob;
import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbDocument;
import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbFolder;
import com.constellio.app.modules.es.services.crawler.DeleteEventOptions;
import java.util.LinkedHashMap;
import static com.constellio.model.services.records.RecordLogicalDeleteOptions.LogicallyDeleteTaxonomyRecordsBehavior.LOGICALLY_DELETE_THEM;
import static com.constellio.model.services.records.RecordPhysicalDeleteOptions.PhysicalDeleteTaxonomyRecordsBehavior.PHYSICALLY_DELETE_THEM;
public class SmbDeleteJob extends SmbConnectorJob {
private static final String jobName = SmbDeleteJob.class.getSimpleName();
private final JobParams jobParams;
public SmbDeleteJob(JobParams jobParams) {
super(jobParams.getConnector(), jobName);
this.jobParams = jobParams;
}
@Override
public void execute(Connector connector) {
String url = jobParams.getUrl();
if (jobParams.getSmbUtils().isAccepted(url, jobParams.getConnectorInstance())) {
SmbFileDTO smbFileDTO = jobParams.getSmbShareService().getSmbFileDTO(url, false);
SmbFileDTOStatus status = smbFileDTO.getStatus();
switch (status) {
case DELETE_DTO:
deleteRecords();
break;
case FAILED_DTO:
// Do nothing
break;
case FULL_DTO:
// Do nothing
break;
default:
connector.getLogger()
.error("Unexpected DTO status when deleting : " + url, "", new LinkedHashMap<String, String>());
break;
}
} else {
deleteRecords();
}
}
private void deleteRecords() {
String url = jobParams.getUrl();
if (jobParams.getSmbUtils().isFolder(url)) {
ConnectorSmbFolder folderToDelete = jobParams.getSmbRecordService().getFolder(url);
if (folderToDelete != null) {
DeleteEventOptions options = new DeleteEventOptions();
options.getPhysicalDeleteOptions().setBehaviorForRecordsAttachedToTaxonomy(PHYSICALLY_DELETE_THEM);
options.getLogicalDeleteOptions().setBehaviorForRecordsAttachedToTaxonomy(LOGICALLY_DELETE_THEM);
jobParams.getEventObserver().deleteEvents(options, folderToDelete);
}
} else {
ConnectorSmbDocument documentToDelete = jobParams.getSmbRecordService().getDocument(url);
if (documentToDelete != null) {
jobParams.getEventObserver().deleteEvents(documentToDelete);
}
}
jobParams.getConnector().getContext().delete(url);
}
@Override
public String toString() {
return jobName + '@' + Integer.toHexString(hashCode()) + " - " + jobParams.getUrl();
}
@Override
public String getUrl() {
return jobParams.getUrl();
}
@Override
public SmbJobType getType() {
return SmbJobType.DELETE_JOB;
}
}