package com.constellio.app.modules.es.connectors.smb.jobs;
import com.constellio.app.modules.es.connectors.smb.ConnectorSmb;
import com.constellio.app.modules.es.connectors.smb.jobmanagement.SmbConnectorJob;
import com.constellio.app.modules.es.connectors.smb.jobmanagement.SmbJobFactoryImpl.SmbJobCategory;
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.SmbModificationIndicator;
import com.constellio.app.modules.es.connectors.smb.service.SmbRecordService;
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.ConnectorDocument;
import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbFolder;
import java.util.Arrays;
import java.util.LinkedHashMap;
public class SmbNewFolderRetrievalJob extends SmbConnectorJob {
private static final String jobName = SmbNewFolderRetrievalJob.class.getSimpleName();
private final JobParams jobParams;;
public SmbNewFolderRetrievalJob(JobParams jobParams) {
super(jobParams.getConnector(), jobName);
this.jobParams = jobParams;
}
@Override
public void execute(Connector connector) {
String url = jobParams.getUrl();
SmbFileDTO smbFileDTO = jobParams.getSmbShareService().getSmbFileDTO(url);
switch (smbFileDTO.getStatus()) {
case FULL_DTO:
try {
ConnectorSmbFolder fullFolder = jobParams.getSmbRecordService().getFolder(url);
if (fullFolder == null) {
fullFolder = jobParams.getSmbRecordService().newConnectorSmbFolder(url);
}
String parentId = jobParams.getConnector().getContext().getParentId(url);
if (parentId == null && jobParams.getParentUrl() != null) {
ConnectorSmbFolder parentFolder = jobParams.getSmbRecordService().getFolder(jobParams.getParentUrl());
parentId = SmbRecordService.getSafeId(parentFolder);
}
jobParams.getUpdater().updateDocumentOrFolder(smbFileDTO, fullFolder, parentId);
jobParams.getEventObserver().push(Arrays.asList((ConnectorDocument) fullFolder));
jobParams.getSmbRecordService().updateResumeUrl(url);
jobParams.getConnector().getContext().traverseModified(url, new SmbModificationIndicator(smbFileDTO), parentId, jobParams.getConnectorInstance().getTraversalCode());
} catch (Exception e) {
this.connector.getLogger().errorUnexpected(e);
}
break;
case FAILED_DTO:
try {
ConnectorSmbFolder fullFolder = jobParams.getSmbRecordService().getFolder(url);
if (fullFolder == null) {
fullFolder = jobParams.getSmbRecordService().newConnectorSmbFolder(url);
}
String parentId = jobParams.getConnector().getContext().getParentId(url);
if (parentId == null && jobParams.getParentUrl() != null) {
ConnectorSmbFolder parentFolder = jobParams.getSmbRecordService().getFolder(jobParams.getParentUrl());
parentId = SmbRecordService.getSafeId(parentFolder);
}
jobParams.getUpdater().updateFailedDocumentOrFolder(smbFileDTO, fullFolder, parentId);
jobParams.getEventObserver().push(Arrays.asList((ConnectorDocument) fullFolder));
jobParams.getConnector().getContext().traverseModified(url, new SmbModificationIndicator(smbFileDTO), parentId, jobParams.getConnectorInstance().getTraversalCode());
} catch (Exception e) {
this.connector.getLogger().errorUnexpected(e);
}
break;
case DELETE_DTO:
try {
ConnectorSmb connectorSmb = (ConnectorSmb) connector;
SmbConnectorJob deleteJob = jobParams.getJobFactory().get(SmbJobCategory.DELETE, url, jobParams.getParentUrl());
connectorSmb.queueJob(deleteJob);
} catch (Exception e) {
this.connector.getLogger().errorUnexpected(e);
}
break;
default:
this.connector.getLogger()
.error("Unexpected DTO type for : " + url, "", new LinkedHashMap<String, String>());
break;
}
}
@Override
public String getUrl() {
return jobParams.getUrl();
}
@Override
public SmbJobType getType() {
return SmbJobType.NEW_FOLDER_JOB;
}
@Override
public String toString() {
return jobName + '@' + Integer.toHexString(hashCode()) + " - " + jobParams.getUrl();
}
}