package com.constellio.app.modules.es.connectors.smb.service; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.where; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.constellio.model.entities.schemas.Metadata; import org.apache.commons.lang3.StringUtils; import org.joda.time.LocalDateTime; import com.constellio.app.modules.es.connectors.smb.utils.ConnectorSmbUtils; 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.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; public class SmbRecordService { private ESSchemasRecordsServices es; private ConnectorSmbInstance connectorInstance; private ConnectorSmbUtils smbUtils; public SmbRecordService(ESSchemasRecordsServices es, ConnectorSmbInstance connectorInstance) { this.es = es; this.connectorInstance = connectorInstance; this.smbUtils = new ConnectorSmbUtils(); } public static String getSafeId(ConnectorSmbFolder folder) { String folderId = null; if (folder != null) { folderId = folder.getId(); } return folderId; } private List<ConnectorSmbDocument> getDocuments(String url) { return es.searchConnectorSmbDocuments(es.fromConnectorSmbDocumentWhereConnectorIs(connectorInstance) .andWhere(es.connectorSmbDocument.url()) .isEqualTo(url)); } private List<ConnectorSmbFolder> getFolders(String url) { return es.searchConnectorSmbFolders(es.fromConnectorSmbFolderWhereConnectorIs(connectorInstance) .andWhere(es.connectorSmbFolder.url()) .isEqualTo(url)); } public synchronized ConnectorSmbDocument newConnectorSmbDocument(String url) { ConnectorSmbDocument document = es.newConnectorSmbDocument(connectorInstance); return document; } public ConnectorSmbDocument convertToSmbDocumentOrNull(ConnectorDocument document) { ConnectorSmbDocument result = null; String documentSchemaCode = document.getSchemaCode(); String smbDocumentSchemaTypeCode = es.connectorSmbDocument.schemaType() .getCode(); if (documentSchemaCode.contains(smbDocumentSchemaTypeCode)) { result = es.wrapConnectorSmbDocument(document.getWrappedRecord()); } return result; } public ConnectorSmbFolder convertToSmbFolderOrNull(ConnectorDocument document) { ConnectorSmbFolder result = null; String documentSchemaCode = document.getSchemaCode(); String smbFolderSchemaTypeCode = es.connectorSmbFolder.schemaType() .getCode(); if (documentSchemaCode.contains(smbFolderSchemaTypeCode)) { result = es.wrapConnectorSmbFolder(document.getWrappedRecord()); } return result; } public synchronized ConnectorSmbFolder newConnectorSmbFolder(String url) { ConnectorSmbFolder folder = es.newConnectorSmbFolder(connectorInstance); return folder; } public List<String> getRecordsWithDifferentTraversalCode() { List<String> recordsToDelete = new ArrayList<>(); for (Iterator<String> documentIterator = getDocumentUrlsToDelete(); documentIterator.hasNext(); ) { recordsToDelete.add(documentIterator.next()); } for (Iterator<String> folderIterator = getFolderUrlsToDelete(); folderIterator.hasNext(); ) { recordsToDelete.add(folderIterator.next()); } return recordsToDelete; } private Iterator<String> getDocumentUrlsToDelete() { return es.getUrlsIterator(new LogicalSearchQuery(es.fromConnectorSmbDocumentWhereConnectorIs(connectorInstance) .andWhere(es.connectorDocument.traversalCode()) .isNotEqual(connectorInstance.getTraversalCode()))); } private Iterator<String> getFolderUrlsToDelete() { return es.getUrlsIterator(new LogicalSearchQuery(from(es.connectorSmbDocument.schemaType()) .where(es.fromConnectorSmbFolderWhereConnectorIs(connectorInstance) .andWhere(es.connectorDocument.traversalCode()) .isNotEqual(connectorInstance.getTraversalCode())))); } public ConnectorSmbFolder getFolder(String url) { if (StringUtils.isBlank(url)) { return null; } else { List<ConnectorSmbFolder> folders = getFolders(url); if (folders.isEmpty()) { return null; } return folders.get(0); } } public ConnectorSmbDocument getDocument(String url) { if (StringUtils.isBlank(url)) { return null; } else { List<ConnectorSmbDocument> documents = getDocuments(url); if (documents.isEmpty()) { return null; } return documents.get(0); } } public void updateResumeUrl(String url) { connectorInstance.setResumeUrl(url); } public Iterator<ConnectorSmbDocument> getAllDocumentsInFolder(ConnectorDocument<?> folderToDelete) { if (folderToDelete.getPaths().isEmpty()) { return new ArrayList<ConnectorSmbDocument>().iterator(); } String path = folderToDelete.getPaths().get(0); return es.iterateConnectorSmbDocuments(where(Schemas.PATH).isStartingWithText(path)); } }