package com.constellio.dev;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from;
import java.util.Collections;
import java.util.List;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.data.dao.dto.records.OptimisticLockingResolution;
import com.constellio.data.dao.managers.config.ConfigManager;
import com.constellio.model.entities.records.ActionExecutorInBatch;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.schemas.ModificationImpact;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.services.collections.CollectionsListManager;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordModificationImpactHandler;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.extractions.RecordPopulateServices;
import com.constellio.model.services.records.reindexing.ReindexationMode;
import com.constellio.model.services.records.reindexing.ReindexingServices;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.security.AuthorizationDetailsManager;
import com.constellio.sdk.SDKScriptUtils;
public class DeleteAllAuthorizationsMain {
static String currentCollection;
static AppLayerFactory appLayerFactory;
static ModelLayerFactory modelLayerFactory;
static SearchServices searchServices;
static RecordServices recordServices;
static RMSchemasRecordsServices rm;
private static final int BATCH_SIZE = 5000;
private static void startBackend() {
//TODO
//Only enable this line to run in production
//appLayerFactory = startLayerFactoriesWithoutBackgroundThreads();
//Only enable this line to run on developer workstation
appLayerFactory = SDKScriptUtils.startApplicationWithoutBackgroundProcessesAndAuthentication();
}
public static void main(String argv[])
throws Exception {
RecordPopulateServices.LOG_CONTENT_MISSING = false;
startBackend();
modelLayerFactory = appLayerFactory.getModelLayerFactory();
searchServices = modelLayerFactory.newSearchServices();
recordServices = modelLayerFactory.newRecordServices();
CollectionsListManager collectionsListManager = modelLayerFactory.getCollectionsListManager();
//for (String collection : collectionsListManager.getCollections()) {
//currentCollection = collection;
currentCollection = "collection20151002";
rm = new RMSchemasRecordsServices(currentCollection, appLayerFactory);
runScriptForCurrentCollection();
//}
ReindexingServices reindexingServices = modelLayerFactory.newReindexingServices();
reindexingServices.reindexCollections(ReindexationMode.RECALCULATE_AND_REWRITE);
}
private static class ResetRecordAuthorizationAction extends ActionExecutorInBatch {
public ResetRecordAuthorizationAction(String actionName) {
super(searchServices, actionName, BATCH_SIZE);
}
@Override
public void doActionOnBatch(List<Record> records)
throws Exception {
Transaction transaction = new Transaction();
transaction.setSkippingRequiredValuesValidation(true);
transaction.setSkippingReferenceToLogicallyDeletedValidation(true);
transaction.setOptimisticLockingResolution(OptimisticLockingResolution.EXCEPTION);
for (Record record : records) {
record.set(Schemas.REMOVED_AUTHORIZATIONS, Collections.emptyList());
record.set(Schemas.AUTHORIZATIONS, Collections.emptyList());
record.set(Schemas.IS_DETACHED_AUTHORIZATIONS, null);
if (record.isDirty()) {
transaction.add(record);
}
}
recordServices.executeWithImpactHandler(transaction, new RecordModificationImpactHandler() {
@Override
public void prepareToHandle(ModificationImpact modificationImpact) {
}
@Override
public void handle() {
}
@Override
public void cancel() {
}
});
}
}
private static void runScriptForCurrentCollection()
throws Exception {
new ResetRecordAuthorizationAction("Collection " + currentCollection + " - Delete group authorisations")
.execute(from(rm.groupSchemaType()).returnAll());
new ResetRecordAuthorizationAction("Collection " + currentCollection + " - Delete user authorisations")
.execute(from(rm.userSchemaType()).returnAll());
new ResetRecordAuthorizationAction("Collection " + currentCollection + " - Delete administrative units authorisations")
.execute(from(rm.administrativeUnit.schemaType()).returnAll());
new ResetRecordAuthorizationAction("Collection " + currentCollection + " - Delete folders authorisations")
.execute(from(rm.folderSchemaType()).returnAll());
new ResetRecordAuthorizationAction("Collection " + currentCollection + " - Delete documents authorisations")
.execute(from(rm.documentSchemaType()).returnAll());
AuthorizationDetailsManager authorizationDetailsManager = modelLayerFactory.getAuthorizationDetailsManager();
ConfigManager configManager = modelLayerFactory.getDataLayerFactory().getConfigManager();
configManager.delete("/" + currentCollection + "/authorizations.xml");
authorizationDetailsManager.createCollectionAuthorizationDetail(currentCollection);
}
}