package com.constellio.app.modules.es.migrations;
import static com.constellio.app.modules.es.model.connectors.ConnectorInstance.ENABLED;
import static com.constellio.app.modules.es.model.connectors.ConnectorInstance.TRAVERSAL_SCHEDULE;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.AUTHENTICATION_SCHEME;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.DAYS_BEFORE_REFETCHING;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.DOMAIN;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.EXCLUDE_PATTERNS;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.INCLUDE_PATTERNS;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.MAX_LEVEL;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.NUMBER_OF_DOCUMENTS_PER_JOBS;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.NUMBER_OF_JOBS_IN_PARALLEL;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.ON_DEMANDS;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.PASSWORD;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.SEEDS;
import static com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance.USERNAME;
import static com.constellio.app.modules.es.model.connectors.ldap.enums.DirectoryType.ACTIVE_DIRECTORY;
import static com.constellio.model.entities.schemas.MetadataValueType.BOOLEAN;
import static com.constellio.model.entities.schemas.MetadataValueType.DATE_TIME;
import static com.constellio.model.entities.schemas.MetadataValueType.NUMBER;
import static com.constellio.model.entities.schemas.MetadataValueType.STRING;
import static com.constellio.model.entities.schemas.MetadataValueType.STRUCTURE;
import static com.constellio.model.entities.schemas.MetadataValueType.TEXT;
import static java.util.Arrays.asList;
import java.util.List;
import java.util.Map;
import com.constellio.app.entities.modules.MetadataSchemasAlterationHelper;
import com.constellio.app.entities.modules.MigrationHelper;
import com.constellio.app.entities.modules.MigrationResourcesProvider;
import com.constellio.app.entities.modules.MigrationScript;
import com.constellio.app.entities.schemasDisplay.enums.MetadataInputType;
import com.constellio.app.modules.es.ConstellioESModule;
import com.constellio.app.modules.es.connectors.http.ConnectorHttp;
import com.constellio.app.modules.es.connectors.ldap.ConnectorLDAP;
import com.constellio.app.modules.es.connectors.smb.ConnectorSmb;
import com.constellio.app.modules.es.connectors.smb.LastFetchedStatus;
import com.constellio.app.modules.es.constants.ESTaxonomies;
import com.constellio.app.modules.es.migrations.EnterpriseSearchMigrationHelper.ESSchemaTypesMigrationHelper;
import com.constellio.app.modules.es.model.connectors.AuthenticationScheme;
import com.constellio.app.modules.es.model.connectors.ConnectorDocument;
import com.constellio.app.modules.es.model.connectors.ConnectorInstance;
import com.constellio.app.modules.es.model.connectors.ConnectorType;
import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpDocument;
import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance;
import com.constellio.app.modules.es.model.connectors.ldap.ConnectorLDAPInstance;
import com.constellio.app.modules.es.model.connectors.ldap.ConnectorLDAPUserDocument;
import com.constellio.app.modules.es.model.connectors.ldap.enums.DirectoryType;
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.model.connectors.structures.TraversalScheduleFactory;
import com.constellio.app.modules.es.services.ESSchemasRecordsServices;
import com.constellio.app.modules.es.services.mapping.ConnectorField;
import com.constellio.app.modules.es.services.mapping.ConnectorFieldFactory;
import com.constellio.app.modules.es.services.mapping.ConnectorFieldValidator;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.services.schemasDisplay.SchemaTypesDisplayTransactionBuilder;
import com.constellio.app.services.schemasDisplay.SchemasDisplayManager;
import com.constellio.data.dao.services.records.RecordDao;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.Taxonomy;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.records.wrappers.Facet;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.entities.structures.MapStringListStringStructureFactory;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordDeleteServices;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.RecordServicesException;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
import com.constellio.model.services.taxonomies.TaxonomiesManagerRuntimeException.TaxonomyAlreadyExists;
public class ESMigrationTo5_1_6 extends MigrationHelper implements MigrationScript {
EnterpriseSearchMigrationHelper migration;
MigrationResourcesProvider migrationResourcesProvider;
@Override
public String getVersion() {
return "5.1.6";
}
String configurationTab;
String executionTab;
String credentialsTab;
String ldapUserTab;
Map<String, Map<Language, String>> groups;
@Override
public void migrate(String collection, MigrationResourcesProvider migrationResourcesProvider,
AppLayerFactory appLayerFactory)
throws Exception {
this.migrationResourcesProvider = migrationResourcesProvider;
configurationTab = "default:connectors.configurationTab";
executionTab = "connectors.executionTab";
credentialsTab = "connectors.credentialsTab";
ldapUserTab = "connectors.ldapUserTab";
groups = migrationResourcesProvider
.getLanguageMap(asList(configurationTab, executionTab, credentialsTab, ldapUserTab));
clearExistingRecordsAndSchemas(collection, appLayerFactory);
deleteESFacets(collection, appLayerFactory);
new SchemaAlterationFor5_1_6(collection, migrationResourcesProvider, appLayerFactory).migrate();
configureConnectorsInstancesAndDocumentsDisplay(collection, appLayerFactory);
createConnectorTypes(collection, migrationResourcesProvider, appLayerFactory);
createSmbFoldersTaxonomy(collection, appLayerFactory.getModelLayerFactory(), migrationResourcesProvider);
createFacets(collection, appLayerFactory, migrationResourcesProvider);
updateFormAndDisplay(collection, appLayerFactory);
this.migrationResourcesProvider = null;
}
private void deleteESFacets(String collection, AppLayerFactory appLayerFactory) {
SearchServices searchServices = appLayerFactory.getModelLayerFactory().newSearchServices();
RecordServices recordServices = appLayerFactory.getModelLayerFactory().newRecordServices();
ESSchemasRecordsServices es = new ESSchemasRecordsServices(collection, appLayerFactory);
MetadataSchemaType facetSchemaType = es.schemaType(Facet.SCHEMA_TYPE);
if (facetSchemaType.getDefaultSchema().hasMetadataWithCode(Facet.USED_BY_MODULE)) {
LogicalSearchCondition condition = LogicalSearchQueryOperators.from(facetSchemaType)
.where(facetSchemaType.getDefaultSchema().getMetadata(Facet.USED_BY_MODULE)).isEqualTo(ConstellioESModule.ID);
List<Record> esFacets = searchServices.search(new LogicalSearchQuery(condition));
for (Record esFacet : esFacets) {
recordServices.physicallyDelete(esFacet, User.GOD);
}
}
}
private void clearExistingRecordsAndSchemas(String collection, AppLayerFactory appLayerFactory) {
MetadataSchemasManager schemasManager = appLayerFactory.getModelLayerFactory().getMetadataSchemasManager();
MetadataSchemaTypes schemaTypes = schemasManager.getSchemaTypes(collection);
RecordDao recordDao = appLayerFactory.getModelLayerFactory().getDataLayerFactory().newRecordDao();
RecordDeleteServices recordDeleteServices = new RecordDeleteServices(recordDao,
appLayerFactory.getModelLayerFactory());
if (schemaTypes.hasType(ConnectorSmbFolder.SCHEMA_TYPE)) {
recordDeleteServices.totallyDeleteSchemaTypeRecordsSkippingValidation_WARNING_CANNOT_BE_REVERTED(
schemaTypes.getSchemaType(ConnectorSmbFolder.SCHEMA_TYPE));
recordDeleteServices.totallyDeleteSchemaTypeRecordsSkippingValidation_WARNING_CANNOT_BE_REVERTED(
schemaTypes.getSchemaType(ConnectorSmbDocument.SCHEMA_TYPE));
recordDeleteServices.totallyDeleteSchemaTypeRecordsSkippingValidation_WARNING_CANNOT_BE_REVERTED(
schemaTypes.getSchemaType(ConnectorHttpDocument.SCHEMA_TYPE));
schemasManager.deleteSchemaTypes(asList(
schemaTypes.getSchemaType(ConnectorHttpDocument.SCHEMA_TYPE),
schemaTypes.getSchemaType(ConnectorSmbFolder.SCHEMA_TYPE),
schemaTypes.getSchemaType(ConnectorSmbDocument.SCHEMA_TYPE)
));
}
if (schemaTypes.hasType(ConnectorInstance.SCHEMA_TYPE)) {
recordDeleteServices.totallyDeleteSchemaTypeRecordsSkippingValidation_WARNING_CANNOT_BE_REVERTED(
schemaTypes.getSchemaType(ConnectorInstance.SCHEMA_TYPE));
recordDeleteServices.totallyDeleteSchemaTypeRecordsSkippingValidation_WARNING_CANNOT_BE_REVERTED(
schemaTypes.getSchemaType(ConnectorType.SCHEMA_TYPE));
schemasManager.deleteSchemaTypes(asList(
schemaTypes.getSchemaType(ConnectorInstance.SCHEMA_TYPE),
schemaTypes.getSchemaType(ConnectorType.SCHEMA_TYPE)
));
}
if (schemaTypes.hasType(ConnectorLDAPUserDocument.SCHEMA_TYPE)) {
recordDeleteServices.totallyDeleteSchemaTypeRecordsSkippingValidation_WARNING_CANNOT_BE_REVERTED(
schemaTypes.getSchemaType(ConnectorLDAPUserDocument.SCHEMA_TYPE));
schemasManager.deleteSchemaTypes(asList(
schemaTypes.getSchemaType(ConnectorLDAPUserDocument.SCHEMA_TYPE)
));
}
}
private ConnectorField field(String schemaType, String code, MetadataValueType type) {
String label = migrationResourcesProvider.get(code);
return new ConnectorField(schemaType + ":" + code, label, type);
}
private void createConnectorTypes(String collection, MigrationResourcesProvider migrationResourcesProvider,
AppLayerFactory appLayerFactory)
throws RecordServicesException {
migration = new EnterpriseSearchMigrationHelper(appLayerFactory, collection,
migrationResourcesProvider);
Transaction transaction = new Transaction();
transaction.add(migration
.newConnectorType(migration.es.connectorInstance_http.schema(), ConnectorHttp.class, ConnectorType.CODE_HTTP))
.setDefaultAvailableConnectorFields(asList(
field(ConnectorHttpDocument.SCHEMA_TYPE, "charset", STRING),
field(ConnectorHttpDocument.SCHEMA_TYPE, "language", STRING),
field(ConnectorHttpDocument.SCHEMA_TYPE, "lastModification", DATE_TIME)));
transaction.add(migration
.newConnectorType(migration.es.connectorInstance_smb.schema(), ConnectorSmb.class, ConnectorType.CODE_SMB));
transaction.add(migration
.newConnectorType(migration.es.connectorInstance_ldap.schema(), ConnectorLDAP.class,
ConnectorType.CODE_LDAP)
.setDefaultAvailableConnectorFields(asList(
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "userAccountControl", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "sAMAccountType", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "primaryGroupID", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "objectSid", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "objectGUID", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "uSNChanged", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "uSNCreated", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "userPrincipalName", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "primaryGroupID", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "name", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "displayName", MetadataValueType.STRING),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "whenChanged", MetadataValueType.DATE),
field(ConnectorLDAPUserDocument.SCHEMA_TYPE, "whenCreated", MetadataValueType.DATE)
)));
migration.modelLayerFactory.newRecordServices().execute(transaction);
}
private void updateFormAndDisplay(String collection, AppLayerFactory appLayerFactory) {
SchemasDisplayManager manager = appLayerFactory.getMetadataSchemasDisplayManager();
SchemaTypesDisplayTransactionBuilder transactionBuilder = manager.newTransactionBuilderFor(collection);
transactionBuilder.in(ConnectorHttpInstance.SCHEMA_TYPE)
.addToDisplay(ConnectorHttpInstance.INCLUDE_PATTERNS, ConnectorHttpInstance.EXCLUDE_PATTERNS)
.atTheEnd();
transactionBuilder.in(ConnectorHttpInstance.SCHEMA_TYPE)
.addToForm(ConnectorHttpInstance.INCLUDE_PATTERNS, ConnectorHttpInstance.EXCLUDE_PATTERNS)
.atTheEnd();
transactionBuilder.in(ConnectorLDAPUserDocument.SCHEMA_TYPE)
.addToSearchResult(ConnectorLDAPUserDocument.FIRST_NAME,
ConnectorLDAPUserDocument.LAST_NAME, ConnectorLDAPUserDocument.TELEPHONE,
ConnectorLDAPUserDocument.EMAIL, ConnectorLDAPUserDocument.ADDRESS)
.atFirstPosition();
transactionBuilder.in(ConnectorLDAPUserDocument.SCHEMA_TYPE)
.removeFromSearchResult(Schemas.MODIFIED_ON.getLocalCode());
manager.execute(transactionBuilder.build());
}
static class SchemaAlterationFor5_1_6 extends MetadataSchemasAlterationHelper {
MetadataSchemaTypes types;
protected SchemaAlterationFor5_1_6(String collection, MigrationResourcesProvider migrationResourcesProvider,
AppLayerFactory appLayerFactory) {
super(collection, migrationResourcesProvider, appLayerFactory);
types = appLayerFactory.getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(collection);
}
public String getVersion() {
return "5.1.6";
}
@Override
protected void migrate(MetadataSchemaTypesBuilder types) {
ESSchemaTypesMigrationHelper migration = new ESSchemaTypesMigrationHelper(types);
createConnectorCommonSchemaTypes(types, migration);
createConnectorHTTPSchemas(types, migration);
createConnectorSMBSchemas(types, migration);
createConnectorLDAPSchemas(types, migration);
updateConnectorHttpDocumentSchemaType(types);
updateConnectorHttpInstanceSchemaType(types);
}
private void createConnectorLDAPSchemas(MetadataSchemaTypesBuilder types, ESSchemaTypesMigrationHelper migration) {
MetadataSchemaBuilder connectorLDAPInstanceSchema = migration.newConnectorInstanceSchema(
ConnectorLDAPInstance.SCHEMA_LOCAL_CODE);
//in the current version only AD is supported
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.DIRECTORY_TYPE).defineAsEnum(DirectoryType.class)
.setDefaultValue(
ACTIVE_DIRECTORY).setSystemReserved(true).setDefaultRequirement(true);
//for now we fetch only users
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.FETCH_GROUPS).setType(BOOLEAN)
.setSystemReserved(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.FETCH_COMPUTERS).setType(
BOOLEAN).setSystemReserved(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.FETCH_USERS).setType(BOOLEAN)
.setSystemReserved(true).setDefaultValue(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.FOLLOW_REFERENCES).setType(BOOLEAN);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.URLS).setType(STRING).setMultivalue(true)
.setDefaultRequirement(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.INCLUDE_REGEX).setType(STRING);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.EXCLUDE_REGEX).setType(STRING);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.CONNECTION_USERNAME).setType(STRING)
.setDefaultRequirement(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.PASSWORD).setType(STRING).setEncrypted(true)
.setDefaultRequirement(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.USERNAME_ATTRIBUTE_NAME).setType(STRING)
.setDefaultValue("sAMAccountName");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.FIRST_NAME_ATTRIBUTE_NAME).setType(STRING)
.setDefaultValue("givenName");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.LAST_NAME_ATTRIBUTE_NAME).setType(
STRING).setDefaultValue("sn");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.EMAIL_ATTRIBUTE_NAME).setType(
STRING).setDefaultValue("mail");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.ADDRESS_ATTRIBUTE_NAME).setType(STRING)
.setDefaultValue(
asList("physicalDeliveryOfficeName", "streetAddress", "l",
"postalCode", "st", "co", "c")).setMultivalue(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.DISTINGUISHED_NAME_ATTRIBUTE_NAME)
.setType(STRING).setDefaultValue("distinguishedName").setDefaultRequirement(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.WORK_TITLE_ATTRIBUTE_NAME)
.setType(STRING).setDefaultValue("title");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.TELEPHONE_ATTRIBUTE_NAME).setType(STRING)
.setDefaultValue(
asList("telephoneNumber", "mobile", "ipPhone")).setMultivalue(true);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.DISPLAY_NAME_ATTRIBUTE_NAME)
.setType(STRING).setDefaultValue("cn");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.COMPANY_ATTRIBUTE_NAME)
.setType(STRING).setDefaultValue("company");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.DEPARTMENT_ATTRIBUTE_NAME)
.setType(STRING).setDefaultValue("department");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.MANAGER_ATTRIBUTE_NAME)
.setType(STRING).setDefaultValue("manager");
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.NUMBER_OF_JOBS_IN_PARALLEL).setType(NUMBER)
.setDefaultValue(1);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.NUMBER_OF_DOCUMENTS_PER_JOB).setType(
NUMBER).setDefaultValue(10);
connectorLDAPInstanceSchema.createUndeletable(ConnectorLDAPInstance.USER_BASE_CONTEXT_LIST).setType(
STRING).setDefaultRequirement(true).setMultivalue(true);
MetadataSchemaBuilder connectorLDAPDocumentSchema = migration.newConnectorDocumentSchemaType(
ConnectorLDAPUserDocument.SCHEMA_TYPE, ConnectorLDAPInstance.SCHEMA_CODE).getDefaultSchema();
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.DISTINGUISHED_NAME).setType(
STRING).setSystemReserved(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.USERNAME).setType(STRING).setSearchable(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.FIRST_NAME).setType(STRING).setSearchable(
true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.LAST_NAME).setType(STRING)
.setSearchable(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.EMAIL).setType(STRING).setSearchable(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.ADDRESS).setType(TEXT).setSearchable(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.WORK_TITLE).setType(STRING)
.setSearchable(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.TELEPHONE).setType(STRING)
.setMultivalue(true).setSearchable(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.DISPLAY_NAME).setType(STRING);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.COMPANY).setType(STRING).setSearchable(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.DEPARTMENT).setType(STRING)
.setSearchable(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.ENABLED).setType(BOOLEAN)
.setDefaultValue(true);
connectorLDAPDocumentSchema.createUndeletable(ConnectorLDAPUserDocument.MANAGER).setType(STRING);
}
private void updateConnectorHttpDocumentSchemaType(MetadataSchemaTypesBuilder types) {
MetadataSchemaTypeBuilder connectorHttpDocumentSchemaType = types.getSchemaType(ConnectorHttpDocument.SCHEMA_TYPE);
MetadataSchemaBuilder connectorHttpDocumentSchema = typesBuilder.getSchema(ConnectorHttpDocument.DEFAULT_SCHEMA);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.LEVEL).setType(NUMBER);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.PRIORITY).setType(NUMBER).setDefaultValue(0.5f);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.ON_DEMAND).setType(BOOLEAN);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.COPY_OF).setType(STRING);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.INLINKS).setType(STRING).setMultivalue(true);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.OUTLINKS).setType(STRING).setMultivalue(true);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.CHARSET).setType(STRING);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.DIGEST).setType(STRING);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.CONTENT_TYPE).setType(STRING);
connectorHttpDocumentSchema.createUndeletable(ConnectorHttpDocument.DOWNLOAD_TIME).setType(NUMBER);
}
private void createConnectorCommonSchemaTypes(MetadataSchemaTypesBuilder types, ESSchemaTypesMigrationHelper migration) {
MetadataSchemaBuilder connectorSchema, connectorTypeSchema;
//-
//Create ConnectorType schema type
MetadataSchemaTypeBuilder connectorTypeSchemaType = types.createNewSchemaType(ConnectorType.SCHEMA_TYPE);
connectorTypeSchema = connectorTypeSchemaType.getDefaultSchema();
connectorTypeSchema.createUniqueCodeMetadata();
connectorTypeSchema.createUndeletable(ConnectorType.LINKED_SCHEMA).setType(STRING)
.setDefaultRequirement(true);
connectorTypeSchema.createUndeletable(ConnectorType.CONNECTOR_CLASS_NAME).setType(STRING)
.setDefaultRequirement(true);
connectorTypeSchema.createUndeletable(ConnectorType.DEFAULT_AVAILABLE_FIELDS).setType(STRUCTURE).setMultivalue(true)
.defineStructureFactory(ConnectorFieldFactory.class).addValidator(ConnectorFieldValidator.class);
//-
//Create Connector schema type
connectorSchema = types.createNewSchemaType(ConnectorInstance.SCHEMA_TYPE).getDefaultSchema();
connectorSchema.getMetadata(Schemas.TITLE_CODE).setDefaultRequirement(true);
connectorSchema.createUniqueCodeMetadata();
connectorSchema.createUndeletable(ConnectorInstance.CONNECTOR_TYPE)
.setType(MetadataValueType.REFERENCE).setDefaultRequirement(true).defineReferencesTo(connectorTypeSchemaType);
connectorSchema.createUndeletable(ConnectorInstance.TRAVERSAL_CODE).setType(STRING);
connectorSchema.createUndeletable(ConnectorInstance.ENABLED).setType(MetadataValueType.BOOLEAN).setDefaultValue(true);
connectorSchema.createUndeletable(ConnectorInstance.LAST_TRAVERSAL_ON).setType(MetadataValueType.DATE_TIME);
connectorSchema.createUndeletable(ConnectorInstance.AVAILABLE_FIELDS).setType(STRUCTURE).setMultivalue(true)
.defineStructureFactory(ConnectorFieldFactory.class).addValidator(ConnectorFieldValidator.class);
connectorSchema.createUndeletable(ConnectorInstance.PROPERTIES_MAPPING).setType(STRUCTURE)
.defineStructureFactory(MapStringListStringStructureFactory.class);
connectorSchema.createUndeletable(TRAVERSAL_SCHEDULE).setType(STRUCTURE).setMultivalue(true)
.defineStructureFactory(
TraversalScheduleFactory.class);
}
private void createConnectorHTTPSchemas(MetadataSchemaTypesBuilder types, ESSchemaTypesMigrationHelper migration) {
MetadataSchemaBuilder instanceSchema, documentSchema;
//-
//Create Connector HTTP instance schema
instanceSchema = migration.newConnectorInstanceSchema(ConnectorHttpInstance.SCHEMA_LOCAL_CODE);
instanceSchema.createUndeletable(SEEDS).setType(TEXT).setDefaultRequirement(true);
instanceSchema.createUndeletable(ON_DEMANDS).setType(TEXT);
instanceSchema.createUndeletable(INCLUDE_PATTERNS).setType(TEXT);
instanceSchema.createUndeletable(EXCLUDE_PATTERNS).setType(TEXT);
instanceSchema.createUndeletable(NUMBER_OF_DOCUMENTS_PER_JOBS).setType(NUMBER)
.setDefaultValue(10).setDefaultRequirement(true);
instanceSchema.createUndeletable(NUMBER_OF_JOBS_IN_PARALLEL).setType(NUMBER)
.setDefaultValue(1).setDefaultRequirement(true);
instanceSchema.createUndeletable(DAYS_BEFORE_REFETCHING).setType(NUMBER)
.setDefaultValue(5).setDefaultRequirement(true);
instanceSchema.createUndeletable(MAX_LEVEL).setType(NUMBER)
.setDefaultValue(5).setDefaultRequirement(true);
instanceSchema.createUndeletable(AUTHENTICATION_SCHEME).defineAsEnum(AuthenticationScheme.class);
instanceSchema.createUndeletable(USERNAME).setType(STRING);
//FIMXE hidden
instanceSchema.createUndeletable(PASSWORD).setType(STRING).setEncrypted(true);
instanceSchema.createUndeletable(DOMAIN).setType(STRING);
//-
//Create Connector HTTP document schema type
documentSchema = migration.newConnectorDocumentSchemaType(ConnectorHttpDocument.SCHEMA_TYPE,
ConnectorHttpInstance.SCHEMA_CODE).getDefaultSchema();
documentSchema.createUndeletable(ConnectorHttpDocument.PARSED_CONTENT).setType(TEXT).setSearchable(true);
}
private void createConnectorSMBSchemas(MetadataSchemaTypesBuilder types2, ESSchemaTypesMigrationHelper migration) {
MetadataSchemaBuilder instanceSchema, documentSchema, folderSchema;
MetadataSchemaTypeBuilder folderSchemaType;
//-
//Create Connector SMB instance schema
instanceSchema = migration.newConnectorInstanceSchema(ConnectorSmbInstance.SCHEMA_LOCAL_CODE);
instanceSchema.createUndeletable(ConnectorSmbInstance.SEEDS).setType(STRING).setMultivalue(true)
.setDefaultRequirement(true);
instanceSchema.createUndeletable(ConnectorSmbInstance.USERNAME).setType(STRING).setDefaultRequirement(true);
instanceSchema.createUndeletable(ConnectorSmbInstance.PASSWORD).setType(STRING).setDefaultRequirement(true)
.setEncrypted(true);
instanceSchema.createUndeletable(ConnectorSmbInstance.DOMAIN).setType(STRING).setDefaultRequirement(true);
instanceSchema.createUndeletable(ConnectorSmbInstance.INCLUSIONS).setType(STRING).setMultivalue(true);
instanceSchema.createUndeletable(ConnectorSmbInstance.EXCLUSIONS).setType(STRING).setMultivalue(true);
instanceSchema.createUndeletable(ConnectorSmbInstance.RESUME_URL).setType(STRING);
//-
//Create Connector SMB folder schema type
folderSchemaType = migration.newConnectorDocumentSchemaType(ConnectorSmbFolder.SCHEMA_TYPE,
ConnectorSmbInstance.SCHEMA_CODE);
folderSchema = folderSchemaType.getDefaultSchema();
folderSchema.createUndeletable(ConnectorSmbFolder.PARENT).defineReferencesTo(folderSchemaType)
.setChildOfRelationship(true);
folderSchema.createUndeletable(ConnectorSmbFolder.LAST_FETCH_ATTEMPT).setType(DATE_TIME).setSearchable(true);
folderSchema.createUndeletable(ConnectorSmbFolder.LAST_FETCHED_STATUS).defineAsEnum(LastFetchedStatus.class)
.setSearchable(true);
//-
//Create Connector SMB document schema type
documentSchema = migration.newConnectorDocumentSchemaType(ConnectorSmbDocument.SCHEMA_TYPE,
ConnectorSmbInstance.SCHEMA_CODE).getDefaultSchema();
documentSchema.createUndeletable(ConnectorSmbDocument.PARSED_CONTENT).setType(TEXT).setSearchable(true);
documentSchema.createUndeletable(ConnectorSmbDocument.SIZE).setType(NUMBER).setSearchable(true);
documentSchema.createUndeletable(ConnectorSmbDocument.PERMISSIONS_HASH).setType(STRING);
documentSchema.createUndeletable(ConnectorSmbDocument.LAST_FETCH_ATTEMPT).setType(DATE_TIME).setSearchable(true);
documentSchema.createUndeletable(ConnectorSmbDocument.PARENT).defineReferencesTo(folderSchemaType)
.setTaxonomyRelationship(true);
documentSchema.createUndeletable(ConnectorSmbDocument.LAST_FETCH_ATTEMPT_STATUS).defineAsEnum(LastFetchedStatus.class)
.setSearchable(true);
documentSchema.createUndeletable(ConnectorSmbDocument.LAST_FETCH_ATTEMPT_DETAILS).setType(STRING)
.setSearchable(false);
documentSchema.createUndeletable(ConnectorSmbDocument.LANGUAGE).setType(STRING).setSearchable(true);
documentSchema.createUndeletable(ConnectorSmbDocument.EXTENSION).setType(STRING).setSearchable(true);
}
private void updateConnectorHttpInstanceSchemaType(MetadataSchemaTypesBuilder types) {
MetadataSchemaTypeBuilder connectorHttpInstanceSchemaType = types.getSchemaType(ConnectorHttpInstance.SCHEMA_TYPE);
MetadataSchemaBuilder connectorHttpInstanceSchema = connectorHttpInstanceSchemaType
.getSchema(ConnectorHttpInstance.SCHEMA_LOCAL_CODE);
}
}
private void createFacets(String collection, AppLayerFactory appLayerFactory,
MigrationResourcesProvider migrationResourcesProvider)
throws RecordServicesException {
ESSchemasRecordsServices es = new ESSchemasRecordsServices(collection, appLayerFactory);
RecordServices recordServices = es.getModelLayerFactory().newRecordServices();
// Facets common to all connectors
Facet mimetypeFacet = es.newFacetField()
.setUsedByModule(ConstellioESModule.ID)
.setFieldDataStoreCode(es.connectorDocument.mimetype().getDataStoreCode())
.setTitle(migrationResourcesProvider.get("init.facet.mimetype"));
addAllMimetypeLabels(mimetypeFacet);
recordServices.add(mimetypeFacet);
// Facets for SMB connector
recordServices.add(es.newFacetField()
.setUsedByModule(ConstellioESModule.ID)
.setFieldDataStoreCode(es.connectorSmbDocument.language().getDataStoreCode())
.setTitle(migrationResourcesProvider.get("init.facet.language"))
.withLabel("fr", migrationResourcesProvider.get("init.facet.language.fr"))
.withLabel("en", migrationResourcesProvider.get("init.facet.language.en"))
.withLabel("es", migrationResourcesProvider.get("init.facet.language.es")));
recordServices.add(es.newFacetField()
.setUsedByModule(ConstellioESModule.ID)
.setFieldDataStoreCode(es.connectorSmbDocument.extension().getDataStoreCode())
.setTitle(migrationResourcesProvider.get("init.facet.extension")));
recordServices.add(es.newFacetField()
.setUsedByModule(ConstellioESModule.ID)
.setFieldDataStoreCode(es.connectorSmbDocument.parent().getDataStoreCode())
.setTitle(migrationResourcesProvider.get("init.facet.smbFolder")));
recordServices.add(es.newFacetField()
.setUsedByModule(ConstellioESModule.ID)
.setFieldDataStoreCode(es.connectorLdapUserDocument.enabled().getDataStoreCode())
.setTitle(migrationResourcesProvider.get("init.facet.ldapUserEnabled"))
//FIXME
.withLabel("_TRUE_", migrationResourcesProvider.get("init.facet.ldapUserEnabled.true"))
.withLabel("_FALSE_", migrationResourcesProvider.get("init.facet.ldapUserEnabled.false")));
}
private void addAllMimetypeLabels(Facet mimetypeFacet) {
addLabelForMimetype(mimetypeFacet, "application/x-7z-compressed");
addLabelForMimetype(mimetypeFacet, "application/pdf");
addLabelForMimetype(mimetypeFacet, "image/bmp");
addLabelForMimetype(mimetypeFacet, "message/rfc822");
addLabelForMimetype(mimetypeFacet, "image/gif");
addLabelForMimetype(mimetypeFacet, "video/h261");
addLabelForMimetype(mimetypeFacet, "video/h263");
addLabelForMimetype(mimetypeFacet, "video/h264");
addLabelForMimetype(mimetypeFacet, "text/html");
addLabelForMimetype(mimetypeFacet, "image/x-icon");
addLabelForMimetype(mimetypeFacet, "image/jpeg");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-powerpoint.template.macroenabled.12");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-word.document.macroenabled.12");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-word.template.macroenabled.12");
addLabelForMimetype(mimetypeFacet, "application/x-msdownload");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-excel");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-excel.sheet.binary.macroenabled.12");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-excel.template.macroenabled.12");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-excel.sheet.macroenabled.12");
addLabelForMimetype(mimetypeFacet, "application/vnd.openxmlformats-officedocument.presentationml.presentation");
addLabelForMimetype(mimetypeFacet, "application/vnd.openxmlformats-officedocument.presentationml.slide");
addLabelForMimetype(mimetypeFacet, "application/vnd.openxmlformats-officedocument.presentationml.slideshow");
addLabelForMimetype(mimetypeFacet, "application/vnd.openxmlformats-officedocument.presentationml.template");
addLabelForMimetype(mimetypeFacet, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
addLabelForMimetype(mimetypeFacet, "application/vnd.openxmlformats-officedocument.spreadsheetml.template");
addLabelForMimetype(mimetypeFacet, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
addLabelForMimetype(mimetypeFacet, "application/vnd.openxmlformats-officedocument.wordprocessingml.template");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-powerpoint");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-powerpoint.presentation.macroenabled.12");
addLabelForMimetype(mimetypeFacet, "application/vnd.ms-powerpoint.slideshow.macroenabled.12");
addLabelForMimetype(mimetypeFacet, "application/vnd.visio");
addLabelForMimetype(mimetypeFacet, "audio/x-ms-wma");
addLabelForMimetype(mimetypeFacet, "video/x-ms-wmv");
addLabelForMimetype(mimetypeFacet, "application/msword");
addLabelForMimetype(mimetypeFacet, "audio/midi");
addLabelForMimetype(mimetypeFacet, "video/mpeg");
addLabelForMimetype(mimetypeFacet, "video/mp4");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.calc");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.calc.template");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.draw");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.draw.template");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.impress");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.impress.template");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.math");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.writer");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.writer.global");
addLabelForMimetype(mimetypeFacet, "application/vnd.sun.xml.writer.template");
addLabelForMimetype(mimetypeFacet, "image/vnd.adobe.photoshop");
addLabelForMimetype(mimetypeFacet, "image/png");
addLabelForMimetype(mimetypeFacet, "application/x-rar-compressed");
addLabelForMimetype(mimetypeFacet, "application/rtf");
addLabelForMimetype(mimetypeFacet, "application/rss+xml");
addLabelForMimetype(mimetypeFacet, "image/tiff");
addLabelForMimetype(mimetypeFacet, "text/plain");
addLabelForMimetype(mimetypeFacet, "audio/x-wav");
addLabelForMimetype(mimetypeFacet, "application/xml");
addLabelForMimetype(mimetypeFacet, "application/zip");
}
private void addLabelForMimetype(Facet facet, String mimetype) {
facet.withLabel(mimetype, this.migrationResourcesProvider.get("init.facet.mimetype." + mimetype));
}
public static void createSmbFoldersTaxonomy(String collection, ModelLayerFactory modelLayerFactory,
MigrationResourcesProvider migrationResourcesProvider) {
String title = migrationResourcesProvider.getDefaultLanguageString("init.taxoSmbFolders");
Taxonomy taxonomy = Taxonomy.createPublic(ESTaxonomies.SMB_FOLDERS, title, collection, ConnectorSmbFolder.SCHEMA_TYPE);
try {
modelLayerFactory.getTaxonomiesManager().addTaxonomy(taxonomy, modelLayerFactory.getMetadataSchemasManager());
} catch (TaxonomyAlreadyExists e) {
}
}
private void configureConnectorsInstancesAndDocumentsDisplay(String collection, AppLayerFactory appLayerFactory) {
SchemasDisplayManager manager = appLayerFactory.getMetadataSchemasDisplayManager();
SchemaTypesDisplayTransactionBuilder transaction = manager.newTransactionBuilderFor(collection);
configureConnectorInstanceDisplayAndSearchDisplay(transaction, manager, collection);
configureHttpConnectorDisplay(transaction, manager, collection);
configureSmbConnectorDisplay(transaction, manager, collection);
configureLDAPConnectorDisplay(transaction, manager, collection);
configureHttpDocumentDisplay(transaction, manager, collection);
configureSmbDocumentDisplay(transaction, manager, collection);
configureLDAPDocumentDisplay(transaction, manager, collection);
manager.execute(transaction.build());
}
private void configureLDAPDocumentDisplay(SchemaTypesDisplayTransactionBuilder transaction, SchemasDisplayManager manager,
String collection) {
transaction
.add(manager.getType(collection, ConnectorLDAPUserDocument.SCHEMA_TYPE).withSimpleAndAdvancedSearchStatus(true));
transaction
.add(manager.getMetadata(collection, ConnectorLDAPUserDocument.DEFAULT_SCHEMA, ConnectorLDAPUserDocument.USERNAME)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPUserDocument.DEFAULT_SCHEMA, ConnectorLDAPUserDocument.FIRST_NAME)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPUserDocument.DEFAULT_SCHEMA, ConnectorLDAPUserDocument.LAST_NAME)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorLDAPUserDocument.DEFAULT_SCHEMA, ConnectorLDAPUserDocument.EMAIL)
.withVisibleInAdvancedSearchStatus(true));
transaction
.add(manager.getMetadata(collection, ConnectorLDAPUserDocument.DEFAULT_SCHEMA, ConnectorLDAPUserDocument.ADDRESS)
.withVisibleInAdvancedSearchStatus(true));
transaction
.add(manager
.getMetadata(collection, ConnectorLDAPUserDocument.DEFAULT_SCHEMA, ConnectorLDAPUserDocument.TELEPHONE)
.withVisibleInAdvancedSearchStatus(true));
}
private void configureLDAPConnectorDisplay(SchemaTypesDisplayTransactionBuilder transaction, SchemasDisplayManager manager,
String collection) {
List<String> form = asList(
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.CODE,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.TITLE,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.CONNECTION_USERNAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.PASSWORD,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.URLS,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.USER_BASE_CONTEXT_LIST,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.INCLUDE_REGEX,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.EXCLUDE_REGEX,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.FOLLOW_REFERENCES,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ENABLED,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + TRAVERSAL_SCHEDULE,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.NUMBER_OF_DOCUMENTS_PER_JOB,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.NUMBER_OF_JOBS_IN_PARALLEL,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.DISTINGUISHED_NAME_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.USERNAME_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.FIRST_NAME_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.LAST_NAME_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.EMAIL_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.TELEPHONE_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.ADDRESS_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.WORK_TITLE_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.DISPLAY_NAME_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.COMPANY_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.DEPARTMENT_ATTRIBUTE_NAME,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.MANAGER_ATTRIBUTE_NAME
);
List<String> display = asList(
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.CODE,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.TITLE,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.URLS,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.USER_BASE_CONTEXT_LIST,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.INCLUDE_REGEX,
ConnectorLDAPInstance.SCHEMA_CODE + "_" + ConnectorLDAPInstance.EXCLUDE_REGEX
);
transaction.addReplacing(transaction.getModifiedSchema(ConnectorLDAPInstance.SCHEMA_CODE)
.withFormMetadataCodes(form)
.withDisplayMetadataCodes(display));
transaction
.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.CONNECTION_USERNAME)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.PASSWORD)
.withMetadataGroup(configurationTab).withInputType(MetadataInputType.PASSWORD));
transaction.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.DIRECTORY_TYPE)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.URLS)
.withMetadataGroup(configurationTab));
transaction
.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.FOLLOW_REFERENCES)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.FETCH_USERS)
.withMetadataGroup(configurationTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.USER_BASE_CONTEXT_LIST)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ENABLED)
.withMetadataGroup(executionTab));
transaction.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, TRAVERSAL_SCHEDULE)
.withMetadataGroup(executionTab));
transaction.add(
manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE,
ConnectorLDAPInstance.NUMBER_OF_DOCUMENTS_PER_JOB)
.withMetadataGroup(executionTab));
transaction.add(
manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE,
ConnectorLDAPInstance.NUMBER_OF_JOBS_IN_PARALLEL)
.withMetadataGroup(executionTab));
transaction
.add(manager.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE,
ConnectorLDAPInstance.DISTINGUISHED_NAME_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.USERNAME_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.FIRST_NAME_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.LAST_NAME_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.EMAIL_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.ADDRESS_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.WORK_TITLE_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.TELEPHONE_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.DISPLAY_NAME_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.COMPANY_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.DEPARTMENT_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
transaction.add(manager
.getMetadata(collection, ConnectorLDAPInstance.SCHEMA_CODE, ConnectorLDAPInstance.MANAGER_ATTRIBUTE_NAME)
.withMetadataGroup(ldapUserTab));
}
private void configureSmbConnectorDisplay(SchemaTypesDisplayTransactionBuilder transaction, SchemasDisplayManager manager,
String collection) {
List<String> form = asList(
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.CODE,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.TITLE,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.DOMAIN,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.USERNAME,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.PASSWORD,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.SEEDS,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.EXCLUSIONS,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.INCLUSIONS,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.ENABLED,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.TRAVERSAL_SCHEDULE
//ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.RESUME_URL
);
List<String> display = asList(
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.CODE,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.TITLE,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.DOMAIN,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.USERNAME,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.SEEDS,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.EXCLUSIONS,
ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.INCLUSIONS
//ConnectorSmbInstance.SCHEMA_CODE + "_" + ConnectorSmbInstance.RESUME_URL
);
transaction.addReplacing(transaction.getModifiedSchema(ConnectorSmbInstance.SCHEMA_CODE)
.withFormMetadataCodes(form)
.withDisplayMetadataCodes(display));
transaction.add(manager.getMetadata(collection, ConnectorSmbInstance.SCHEMA_CODE, ConnectorSmbInstance.PASSWORD)
.withInputType(MetadataInputType.PASSWORD));
transaction.add(manager.getMetadata(collection, ConnectorSmbInstance.SCHEMA_CODE, ENABLED)
.withMetadataGroup(executionTab));
transaction.add(manager.getMetadata(collection, ConnectorSmbInstance.SCHEMA_CODE, TRAVERSAL_SCHEDULE)
.withMetadataGroup(executionTab));
}
private void configureHttpConnectorDisplay(SchemaTypesDisplayTransactionBuilder transaction, SchemasDisplayManager manager,
String collection) {
transaction.add(manager.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, ENABLED)
.withMetadataGroup(executionTab));
transaction.add(manager.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, NUMBER_OF_DOCUMENTS_PER_JOBS)
.withMetadataGroup(executionTab));
transaction.add(manager.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, NUMBER_OF_JOBS_IN_PARALLEL)
.withMetadataGroup(executionTab));
transaction.add(manager.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, DAYS_BEFORE_REFETCHING)
.withMetadataGroup(executionTab));
transaction.add(manager.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, TRAVERSAL_SCHEDULE)
.withMetadataGroup(executionTab));
transaction.add(manager
.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, ConnectorHttpInstance.AUTHENTICATION_SCHEME)
.withMetadataGroup(credentialsTab));
transaction.add(manager.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, ConnectorHttpInstance.USERNAME)
.withMetadataGroup(credentialsTab));
transaction.add(manager.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, ConnectorHttpInstance.PASSWORD)
.withMetadataGroup(credentialsTab).withInputType(MetadataInputType.PASSWORD));
transaction.add(manager.getMetadata(collection, ConnectorHttpInstance.SCHEMA_CODE, ConnectorHttpInstance.DOMAIN)
.withMetadataGroup(credentialsTab));
}
private void configureSmbDocumentDisplay(SchemaTypesDisplayTransactionBuilder transaction, SchemasDisplayManager manager,
String collection) {
transaction.add(manager.getType(collection, ConnectorSmbDocument.SCHEMA_TYPE).withSimpleAndAdvancedSearchStatus(true));
transaction.add(manager.getType(collection, ConnectorSmbDocument.SCHEMA_TYPE).withSimpleAndAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorHttpDocument.TITLE)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorSmbDocument.EXTENSION)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorSmbDocument.ERROR_CODE)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorSmbDocument.LANGUAGE)
.withVisibleInAdvancedSearchStatus(true));
transaction
.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorSmbDocument.PARSED_CONTENT)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorSmbDocument.SIZE)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorDocument.FETCHED_DATETIME)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorSmbDocument.URL)
.withVisibleInAdvancedSearchStatus(true));
}
private void configureHttpDocumentDisplay(SchemaTypesDisplayTransactionBuilder transaction, SchemasDisplayManager manager,
String collection) {
transaction.in(ConnectorHttpDocument.SCHEMA_TYPE)
.addToSearchResult(ConnectorHttpDocument.URL)
.atTheEnd();
transaction.add(manager.getType(collection, ConnectorHttpDocument.SCHEMA_TYPE).withSimpleAndAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorHttpDocument.DEFAULT_SCHEMA, ConnectorHttpDocument.TITLE)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorHttpDocument.DEFAULT_SCHEMA, ConnectorHttpDocument.CONTENT_TYPE)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorHttpDocument.DEFAULT_SCHEMA, ConnectorHttpDocument.ERROR_CODE)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorHttpDocument.DEFAULT_SCHEMA, ConnectorHttpDocument.LEVEL)
.withVisibleInAdvancedSearchStatus(true));
transaction
.add(manager.getMetadata(collection, ConnectorHttpDocument.DEFAULT_SCHEMA, ConnectorHttpDocument.PARSED_CONTENT)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorSmbDocument.DEFAULT_SCHEMA, ConnectorDocument.FETCHED_DATETIME)
.withVisibleInAdvancedSearchStatus(true));
transaction.add(manager.getMetadata(collection, ConnectorHttpDocument.DEFAULT_SCHEMA, ConnectorHttpDocument.URL)
.withVisibleInAdvancedSearchStatus(true));
}
private void configureConnectorInstanceDisplayAndSearchDisplay(SchemaTypesDisplayTransactionBuilder transaction,
SchemasDisplayManager manager, String collection) {
transaction.add(manager.getType(collection, ConnectorInstance.SCHEMA_TYPE)
.withMetadataGroup(groups));
transaction.add(manager.getMetadata(collection, ConnectorInstance.DEFAULT_SCHEMA, ConnectorInstance.CONNECTOR_TYPE)
.withInputType(MetadataInputType.HIDDEN));
transaction.in(ConnectorInstance.SCHEMA_TYPE)
.addToSearchResult(ConnectorInstance.CONNECTOR_TYPE)
.afterMetadata(Schemas.TITLE_CODE);
transaction.in(ConnectorInstance.SCHEMA_TYPE)
.addToSearchResult(ConnectorInstance.TRAVERSAL_CODE)
.afterMetadata(ConnectorInstance.CONNECTOR_TYPE);
transaction.in(ConnectorInstance.SCHEMA_TYPE)
.removeFromSearchResult(Schemas.MODIFIED_ON.getLocalCode());
transaction.in(ConnectorInstance.SCHEMA_TYPE)
.addToDisplay(ConnectorInstance.CONNECTOR_TYPE)
.afterMetadata(Schemas.TITLE_CODE);
transaction.in(ConnectorInstance.SCHEMA_TYPE)
.addToDisplay(ConnectorInstance.TRAVERSAL_CODE)
.afterMetadata(ConnectorInstance.CONNECTOR_TYPE);
transaction.in(ConnectorInstance.SCHEMA_TYPE)
.addToDisplay(Schemas.MODIFIED_ON.getLocalCode())
.afterMetadata(ConnectorInstance.SCHEMA_TYPE);
}
}