package com.constellio.app.modules.es.connectors.smb.config; import java.util.ArrayList; import java.util.List; import com.constellio.app.entities.schemasDisplay.SchemaDisplayConfig; import com.constellio.app.entities.schemasDisplay.enums.MetadataInputType; 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.ConnectorSmbInstance; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.services.schemasDisplay.SchemaDisplayManagerTransaction; import com.constellio.app.services.schemasDisplay.SchemaTypesDisplayTransactionBuilder; import com.constellio.app.services.schemasDisplay.SchemasDisplayManager; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.entities.schemas.Schemas; public class SmbSchemaDisplayConfiguration { private ESSchemasRecordsServices es; private ConnectorSmbInstance connectorInstance; public SmbSchemaDisplayConfiguration(ESSchemasRecordsServices es, ConnectorSmbInstance connectorInstance) { this.es = es; this.connectorInstance = connectorInstance; } private ESSchemasRecordsServices getEs() { return es; } public void setupMetadatasDisplay() { // TODO Benoit. Update only once / if needed SchemasDisplayManager manager = getEs().getMetadataSchemasDisplayManager(); SchemaDisplayManagerTransaction transaction = new SchemaDisplayManagerTransaction(); // Connector SMB Config/Instance SchemaDisplayConfig schemaFormFolderTypeConfig = order(connectorInstance.getCollection(), getEs().getAppLayerFactory(), "form", manager.getSchema(getEs().getCollection(), getEs().getConnectorSmbDocumentSchemaCode(connectorInstance)), ConnectorDocument.TITLE, ConnectorSmbDocument.URL, ConnectorSmbDocument.PARENT); SchemaDisplayConfig schemaDisplayFolderTypeConfig = order(connectorInstance.getCollection(), getEs().getAppLayerFactory(), "display", manager.getSchema(getEs().getCollection(), getEs().getConnectorSmbDocumentSchemaCode(connectorInstance)), ConnectorDocument.TITLE, ConnectorSmbDocument.URL, ConnectorSmbDocument.PARENT); transaction.add(schemaDisplayFolderTypeConfig.withFormMetadataCodes(schemaFormFolderTypeConfig.getFormMetadataCodes())); manager.execute(transaction); SchemaTypesDisplayTransactionBuilder transactionBuilder = manager.newTransactionBuilderFor(connectorInstance.getCollection()); // transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) // .addToSearchResult(ConnectorSmbDocument.URL) // .afterMetadata(ConnectorDocument.TITLE); // transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) // .addToSearchResult(ConnectorSmbDocument.PARENT) // .afterMetadata(ConnectorSmbDocument.TITLE); // transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) // .addToSearchResult(ConnectorSmbDocument.EXTENSION) // .afterMetadata(ConnectorSmbDocument.PARENT); // transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) // .addToSearchResult(ConnectorSmbDocument.LANGUAGE) // .afterMetadata(ConnectorSmbDocument.EXTENSION); // // transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) // .addToSearchResult(ConnectorSmbDocument.SIZE) // .afterMetadata(ConnectorSmbDocument.LANGUAGE); transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) .addToSearchResult(ConnectorSmbDocument.LAST_MODIFIED) .afterMetadata(ConnectorSmbDocument.TITLE); String modifiedOn = Schemas.MODIFIED_ON.getLocalCode(); transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE).removeFromSearchResult(modifiedOn); // transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) // .addToSearchResult(ConnectorSmbDocument.LAST_FETCH_ATTEMPT) // .afterMetadata(ConnectorSmbDocument.LAST_MODIFIED); // // transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) // .addToSearchResult(ConnectorSmbDocument.LAST_FETCH_ATTEMPT_STATUS) // .afterMetadata(ConnectorSmbDocument.LAST_FETCH_ATTEMPT); // // transactionBuilder.in(ConnectorSmbDocument.SCHEMA_TYPE) // .addToSearchResult(ConnectorSmbDocument.LAST_FETCH_ATTEMPT_DETAILS) // .afterMetadata(ConnectorSmbDocument.LAST_FETCH_ATTEMPT_STATUS); manager.execute(transactionBuilder.build()); } protected SchemaDisplayConfig order(String collection, AppLayerFactory appLayerFactory, String type, SchemaDisplayConfig schema, String... localCodes) { MetadataSchemaTypes schemaTypes = appLayerFactory.getModelLayerFactory() .getMetadataSchemasManager() .getSchemaTypes(collection); List<String> visibleMetadataCodes = new ArrayList<>(); for (String localCode : localCodes) { visibleMetadataCodes.add(schema.getSchemaCode() + "_" + localCode); } List<String> metadataCodes = new ArrayList<>(); metadataCodes.addAll(visibleMetadataCodes); List<String> otherMetadatas = new ArrayList<>(); List<String> retrievedMetadataCodes; if ("form".equals(type)) { retrievedMetadataCodes = schema.getFormMetadataCodes(); } else { retrievedMetadataCodes = schema.getDisplayMetadataCodes(); } for (String retrievedMetadataCode : retrievedMetadataCodes) { int index = visibleMetadataCodes.indexOf(retrievedMetadataCode); if (index != -1) { metadataCodes.set(index, retrievedMetadataCode); } else if (!schemaTypes.getMetadata(retrievedMetadataCode) .isSystemReserved()) { otherMetadatas.add(retrievedMetadataCode); } } SchemaDisplayConfig newSchema; if ("form".equals(type)) { metadataCodes.addAll(otherMetadatas); newSchema = schema.withFormMetadataCodes(metadataCodes); SchemasDisplayManager manager = appLayerFactory.getMetadataSchemasDisplayManager(); for (String invisible : otherMetadatas) { manager.saveMetadata(manager.getMetadata(collection, invisible) .withInputType(MetadataInputType.HIDDEN)); } } else { newSchema = schema.withDisplayMetadataCodes(metadataCodes); } SchemasDisplayManager manager = appLayerFactory.getMetadataSchemasDisplayManager(); manager.saveMetadata(manager.getMetadata(collection, getEs().getConnectorSmbDocumentSchemaCode(connectorInstance), ConnectorSmbDocument.LAST_FETCH_ATTEMPT_STATUS) .withVisibleInAdvancedSearchStatus(true)); return newSchema; } }