package com.constellio.app.modules.es.connectors.smb.jobmanagement; import com.constellio.app.modules.es.connectors.smb.LastFetchedStatus; import static com.constellio.app.ui.i18n.i18n.$; import org.joda.time.LocalDateTime; import com.constellio.app.modules.es.connectors.smb.service.SmbFileDTO; import com.constellio.app.modules.es.connectors.smb.service.SmbRecordService; import com.constellio.app.modules.es.model.connectors.ConnectorDocument; 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.model.connectors.smb.ConnectorSmbInstance; import com.constellio.data.utils.TimeProvider; import com.constellio.model.entities.schemas.Schemas; import javax.activation.MimetypesFileTypeMap; import java.net.URLConnection; public class SmbDocumentOrFolderUpdater { private final ConnectorSmbInstance connectorInstance; private SmbRecordService smbRecordService; public SmbDocumentOrFolderUpdater(ConnectorSmbInstance connectorInstance, SmbRecordService smbRecordService) { this.connectorInstance = connectorInstance; this.smbRecordService = smbRecordService; } public void updateDocumentOrFolder(SmbFileDTO smbFileDTO, ConnectorDocument<?> documentOrFolder, String parentId) { ConnectorSmbDocument smbDocument = smbRecordService.convertToSmbDocumentOrNull(documentOrFolder); if (smbDocument != null) { updateFullDocumentDTO(smbFileDTO, smbDocument, parentId); } else { ConnectorSmbFolder smbFolder = smbRecordService.convertToSmbFolderOrNull(documentOrFolder); if (smbFolder != null) { updateFullFolderDTO(smbFileDTO, smbFolder, parentId); } } } private void updateFullDocumentDTO(SmbFileDTO smbFileDTO, ConnectorSmbDocument smbDocument, String parentId) { // Utility smbDocument.setConnector(connectorInstance) .setTraversalCode(connectorInstance.getTraversalCode()) .setFetched(true) .setLastFetched(new LocalDateTime(smbFileDTO.getLastFetchAttempt())) .setFetchedDateTime(TimeProvider.getLocalDateTime()) .setParent(parentId); // Mandatory smbDocument.setUrl(smbFileDTO.getUrl()) .setPermissionsHash(smbFileDTO.getPermissionsHash()) .setManualTokens(smbFileDTO.getAllowTokens()) .set(Schemas.DENY_TOKENS.getLocalCode(), smbFileDTO.getDenyTokens()) .set(Schemas.SHARE_TOKENS.getLocalCode(), smbFileDTO.getAllowShareTokens()) .set(Schemas.SHARE_DENY_TOKENS.getLocalCode(), smbFileDTO.getDenyShareTokens()); String mimeType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(smbFileDTO.getUrl()); // Optional smbDocument.setParsedContent(smbFileDTO.getParsedContent()) .setSize(smbFileDTO.getLength()) .setCreatedOn(new LocalDateTime(smbFileDTO.getCreateTime())) .setLastModified(new LocalDateTime(smbFileDTO.getLastModified())) .setPermissionsHash(smbFileDTO.getPermissionsHash()) .setLanguage(smbFileDTO.getLanguage()) .setExtension(smbFileDTO.getExtension()) .setMimetype(mimeType) .setTitle(smbFileDTO.getName()); // Errors smbDocument.setLastFetchAttemptDetails(smbFileDTO.getErrorMessage()) .setLastFetchAttemptStatus(LastFetchedStatus.OK); smbDocument.setErrorCode(null); smbDocument.setErrorMessage(null); smbDocument.setErrorStackTrace(null); smbDocument.resetErrorsCount(); smbDocument.addDateTimeProperty("dateCreated", new LocalDateTime(smbFileDTO.getCreateTime())) .withPropertyLabel("dateCreated", $("SmbDocumentOrFolderUpdater.dateCreated")); smbDocument.addDateTimeProperty("dateModified", new LocalDateTime(smbFileDTO.getLastModified())) .withPropertyLabel("dateModified", $("SmbDocumentOrFolderUpdater.dateModified")); } private void updateFullFolderDTO(SmbFileDTO smbFileDTO, ConnectorSmbFolder smbFolder, String parentId) { smbFolder.setTitle(smbFileDTO.getName()) .setUrl(smbFileDTO.getUrl()) .setTraversalCode(connectorInstance.getTraversalCode()) .setConnector(connectorInstance) .setFetched(true) .setLastFetched(new LocalDateTime(smbFileDTO.getLastFetchAttempt())) .setLastFetchedStatus(LastFetchedStatus.OK) .setCreatedOn(new LocalDateTime(smbFileDTO.getCreateTime())) .setLastModified(new LocalDateTime(smbFileDTO.getLastModified())) .setParent(parentId); // Utility smbFolder.setTraversalCode(connectorInstance.getTraversalCode()) .setConnector(connectorInstance) .setFetched(true) .setLastFetched(new LocalDateTime(smbFileDTO.getLastFetchAttempt())); // Mandatory smbFolder.setUrl(smbFileDTO.getUrl()); // Optional // Errors smbFolder.setLastFetchedStatus(LastFetchedStatus.OK); smbFolder.setErrorCode(null); smbFolder.setErrorMessage(null); smbFolder.setErrorStackTrace(null); smbFolder.resetErrorsCount(); smbFolder.addDateTimeProperty("dateCreated", new LocalDateTime(smbFileDTO.getCreateTime())) .withPropertyLabel("dateCreated", $("SmbDocumentOrFolderUpdater.dateCreated")); smbFolder.addDateTimeProperty("dateModified", new LocalDateTime(smbFileDTO.getLastModified())) .withPropertyLabel("dateModified", $("SmbDocumentOrFolderUpdater.dateModified")); } public void updateFailedDocumentOrFolder(SmbFileDTO smbFileDTO, ConnectorDocument documentOrFolder, String parentId) { ConnectorSmbDocument smbDocument = smbRecordService.convertToSmbDocumentOrNull(documentOrFolder); if (smbDocument != null) { updateFailedDocumentDTO(smbFileDTO, smbDocument, parentId); } else { ConnectorSmbFolder smbFolder = smbRecordService.convertToSmbFolderOrNull(documentOrFolder); if (smbFolder != null) { updateFailedFolderDTO(smbFileDTO, smbFolder, parentId); } } } private void updateFailedDocumentDTO(SmbFileDTO smbFileDTO, ConnectorSmbDocument smbDocument, String parentId) { smbDocument.setConnector(connectorInstance) .setTraversalCode(connectorInstance.getTraversalCode()) .setFetched(true) .setLastFetched(new LocalDateTime(smbFileDTO.getLastFetchAttempt())) .setFetchedDateTime(TimeProvider.getLocalDateTime()) .setUrl(smbFileDTO.getUrl()) .setLastFetchAttemptDetails(smbFileDTO.getErrorMessage()) .setLastFetchAttemptStatus(LastFetchedStatus.FAILED) .setParent(parentId); smbDocument.setErrorCode("ErrorCode") .setErrorMessage(smbFileDTO.getErrorMessage()) .setErrorStackTrace(smbFileDTO.getErrorMessage()) .incrementErrorsCount(); } private void updateFailedFolderDTO(SmbFileDTO smbFileDTO, ConnectorSmbFolder smbFolder, String parentId) { smbFolder.setConnector(connectorInstance) .setTraversalCode(connectorInstance.getTraversalCode()) .setFetched(true) .setLastFetched(new LocalDateTime(smbFileDTO.getLastFetchAttempt())) .setFetchedDateTime(TimeProvider.getLocalDateTime()) .setUrl(smbFileDTO.getUrl()) .setLastFetchedStatus(LastFetchedStatus.FAILED) .setErrorCode("ErrorCode") .setErrorMessage(smbFileDTO.getErrorMessage()) .setErrorStackTrace(smbFileDTO.getErrorMessage()) .incrementErrorsCount() .setParent(parentId); } public void updateUnmodifiedDocument(SmbFileDTO smbFileDTO, ConnectorDocument<?> document, String parentId) { ConnectorSmbDocument smbDocument = smbRecordService.convertToSmbDocumentOrNull(document); if (smbDocument != null) { smbDocument.setTraversalCode(connectorInstance.getTraversalCode()); smbDocument.setLastFetched(smbFileDTO.getLastFetchAttempt()); smbDocument.setLastFetchAttemptStatus(LastFetchedStatus.OK); smbDocument.setParent(parentId); smbDocument.setErrorCode(null); smbDocument.setErrorMessage(null); smbDocument.setErrorStackTrace(null); smbDocument.resetErrorsCount(); } } }