package com.constellio.app.ui.pages.management.collections;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.HashMap;
import java.util.Map;
import com.constellio.app.services.collections.CollectionsManager;
import com.constellio.app.ui.application.NavigatorConfigurationService;
import com.constellio.app.ui.framework.data.CollectionVODataProvider;
import com.constellio.app.ui.framework.data.CollectionVODataProvider.CollectionVO;
import com.constellio.app.ui.pages.base.BasePresenter;
import com.constellio.app.ui.params.ParamUtils;
import com.constellio.model.entities.CorePermissions;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.security.global.UserCredential;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.users.UserServices;
public class CollectionManagementPresenter extends BasePresenter<CollectionManagementView> {
protected transient CollectionsManager collectionManager;
protected transient RecordServices recordServices;
public CollectionManagementPresenter(CollectionManagementView view) {
super(view);
}
public CollectionVODataProvider getDataProvider() {
return new CollectionVODataProvider(appLayerFactory);
}
public void editButtonClicked(CollectionVODataProvider dataProvider, Integer index) {
CollectionVO collectionVO = dataProvider.getRecordVO(index);
String parameters = getParameters(collectionVO);
view.navigate().to().addEditCollection(parameters);
}
public void deleteButtonClicked(CollectionVODataProvider dataProvider, Integer index) {
CollectionVO collectionVO = dataProvider.getRecordVO(index);
dataProvider.delete(index);
collectionManager().deleteCollection(collectionVO.getCode());
view.showMessage($("CollectionManagementView.removalConfirmation"));
}
CollectionsManager collectionManager() {
if (collectionManager == null) {
collectionManager = appLayerFactory.getCollectionsManager();
}
return collectionManager;
}
public void addButtonClick() {
view.navigate().to().addEditCollection(getParameters(null));
}
private String getParameters(CollectionVO entity) {
Map<String, Object> params = new HashMap<>();
if (entity != null) {
params.put("collectionCode", entity.getCode());
}
return ParamUtils.addParams(NavigatorConfigurationService.COLLECTION_MANAGEMENT, params);
}
public void backButtonClick() {
view.navigate().to().adminModule();
}
public boolean isDeletePossible(CollectionVODataProvider dataProvider, Integer index) {
String collection = dataProvider.getRecordVO(index).getCode();
UserServices userServices = modelLayerFactory.newUserServices();
UserCredential userCredential = userServices.getUserCredential(getCurrentUser().getUsername());
boolean hasDeleteAccess = userCredential.isSystemAdmin();
if (!hasDeleteAccess && userCredential.getCollections().contains(collection)) {
User user = userServices.getUserInCollection(userCredential.getUsername(), collection);
hasDeleteAccess = user.has(CorePermissions.MANAGE_SYSTEM_COLLECTIONS).globally();
}
return hasDeleteAccess && !collection.equals(view.getCollection());
}
@Override
protected boolean hasPageAccess(String params, final User user) {
return user.has(CorePermissions.MANAGE_SYSTEM_COLLECTIONS).globally();
}
}