Skip to content

Commit

Permalink
added reference to not loaded databases in user database list
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonioG70 committed Oct 8, 2024
1 parent 3de8dea commit 9502d23
Show file tree
Hide file tree
Showing 6 changed files with 224 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public IndexResult<ViewerDatabase> find(FindRequest findRequest, String localeSt
fieldsToReturn.add(ViewerConstants.SOLR_DATABASES_PERMISSIONS);

FindRequest userFindRequest = new FindRequest(findRequest.classToReturn,
getDatabaseFilterForUser(user, findRequest.filter, true), findRequest.sorter, findRequest.sublist,
getDatabaseFindFilterForUser(user, findRequest.filter), findRequest.sorter, findRequest.sublist,
findRequest.facets, findRequest.exportFacets, fieldsToReturn);
return getViewerDatabaseIndexResult(userFindRequest, fieldsToReturn, controllerAssistant, user, state);
}
Expand All @@ -102,7 +102,7 @@ public IndexResult<ViewerDatabase> findAll(FindRequest findRequest, String local
return getCrossViewerDatabaseIndexResult(findRequest, controllerAssistant, user, state);
} else {
return getCrossViewerDatabaseIndexResult(findRequest, controllerAssistant, user, state,
getDatabaseFilterForUser(user, findRequest.filter, false));
getDatabaseFindAllFilterForUser(user));
}
} else {
return getCrossViewerDatabaseIndexResult(findRequest, controllerAssistant, user, state);
Expand Down Expand Up @@ -253,16 +253,55 @@ private IndexResult<ViewerDatabase> getCrossViewerDatabaseIndexResult(FindReques
}
}

private Filter getDatabaseFilterForUser(User user, Filter searchFilter, boolean addSearchFilter) {
// private Filter getDatabaseFilterForUser(User user, Filter searchFilter, boolean addSearchFilter) {
// ArrayList<FilterParameter> permissionFilterParameters = new ArrayList<>();
//
// // Only retrieve databases with AVAILABLE status except if the search filter is
// // for METADATA_ONLY to use in UserDatabaseListPanel
// SimpleFilterParameter statusFilter;
// if (!searchFilter.getParameters().isEmpty() && searchFilter.getParameters().get(0) instanceof SimpleFilterParameter
// && searchFilter.getParameters().get(0).getName().equals(ViewerConstants.SOLR_DATABASES_STATUS)) {
// statusFilter = new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS,
// ViewerDatabaseStatus.METADATA_ONLY.name());
// } else {
// statusFilter = new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS,
// ViewerDatabaseStatus.AVAILABLE.name());
// }
// permissionFilterParameters.add(statusFilter);
//
// if (!addSearchFilter) {
// permissionFilterParameters
// .add(new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_AVAILABLE_TO_SEARCH_ALL, "true"));
// }
//
// // Add user permissions on filter
// ArrayList<FilterParameter> permissionsOrFilterParameters = new ArrayList<>();
// for (String role : user.getAllRoles()) {
// permissionsOrFilterParameters.add(new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_PERMISSIONS, role));
// }
//
// permissionFilterParameters.add(new OrFiltersParameters(permissionsOrFilterParameters));
//
// if (!searchFilter.getParameters().isEmpty() && addSearchFilter
// && searchFilter.getParameters().get(0) instanceof BasicSearchFilterParameter searchFilterParameter) {
// String searchValue = searchFilterParameter.getValue();
// permissionFilterParameters.add(new SimpleFilterParameter(ViewerConstants.INDEX_SEARCH, searchValue));
// }
//
// return new Filter(new AndFiltersParameters(permissionFilterParameters));
// }

private Filter getDatabaseFindAllFilterForUser(User user) {
ArrayList<FilterParameter> permissionFilterParameters = new ArrayList<>();
// Only retrieve databases with AVAILABLE status
SimpleFilterParameter statusFilter = new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS,

// Only retrieve databases with AVAILABLE
SimpleFilterParameter statusFilter;
statusFilter = new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS,
ViewerDatabaseStatus.AVAILABLE.name());
permissionFilterParameters.add(statusFilter);

if (!addSearchFilter) {
permissionFilterParameters.add(new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_AVAILABLE_TO_SEARCH_ALL, "true"));
}
permissionFilterParameters
.add(new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_AVAILABLE_TO_SEARCH_ALL, "true"));

// Add user permissions on filter
ArrayList<FilterParameter> permissionsOrFilterParameters = new ArrayList<>();
Expand All @@ -272,13 +311,46 @@ private Filter getDatabaseFilterForUser(User user, Filter searchFilter, boolean

permissionFilterParameters.add(new OrFiltersParameters(permissionsOrFilterParameters));

if (!searchFilter.getParameters().isEmpty() && addSearchFilter) {
BasicSearchFilterParameter searchFilterParameter = (BasicSearchFilterParameter) searchFilter.getParameters()
.get(0);
String searchValue = searchFilterParameter.getValue();
permissionFilterParameters.add(new SimpleFilterParameter(ViewerConstants.INDEX_SEARCH, searchValue));
return new Filter(new AndFiltersParameters(permissionFilterParameters));
}

private Filter getDatabaseFindFilterForUser(User user, Filter searchFilter) {
ArrayList<FilterParameter> permissionFilterParameters = new ArrayList<>();

// Only retrieve databases with AVAILABLE, this filter has to be default
SimpleFilterParameter statusFilter;
statusFilter = new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS,
ViewerDatabaseStatus.AVAILABLE.name());
permissionFilterParameters.add(statusFilter);

// Controlling the search filter
if (!searchFilter.getParameters().isEmpty()) {
for (FilterParameter filterParameter : searchFilter.getParameters()) {
if (filterParameter instanceof SimpleFilterParameter simpleFilterParameter) {
// If there is a status filter, remove the default and add the new one(s).
if (simpleFilterParameter.getName().equals(ViewerConstants.SOLR_DATABASES_STATUS)) {
permissionFilterParameters.remove(statusFilter);
permissionFilterParameters
.add(new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS, simpleFilterParameter.getValue()));
} else if (simpleFilterParameter.getName().equals(ViewerConstants.SOLR_DATABASES_AVAILABLE_TO_SEARCH_ALL)) {
permissionFilterParameters.add(new SimpleFilterParameter(
ViewerConstants.SOLR_DATABASES_AVAILABLE_TO_SEARCH_ALL, simpleFilterParameter.getValue()));
}
} else if (filterParameter instanceof BasicSearchFilterParameter searchFilterParameter) {
String searchValue = searchFilterParameter.getValue();
permissionFilterParameters.add(new SimpleFilterParameter(ViewerConstants.INDEX_SEARCH, searchValue));
}
}
}

// Add user permissions on filter
ArrayList<FilterParameter> permissionsOrFilterParameters = new ArrayList<>();
for (String role : user.getAllRoles()) {
permissionsOrFilterParameters.add(new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_PERMISSIONS, role));
}

permissionFilterParameters.add(new OrFiltersParameters(permissionsOrFilterParameters));

return new Filter(new AndFiltersParameters(permissionFilterParameters));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/
package com.databasepreservation.common.client.common.visualization.manager.databasePanel.admin;

import java.util.Collections;
import java.util.List;

import com.databasepreservation.common.client.ViewerConstants;
Expand All @@ -22,11 +23,20 @@
import com.databasepreservation.common.client.common.search.SearchWrapper;
import com.databasepreservation.common.client.common.utils.ApplicationType;
import com.databasepreservation.common.client.common.utils.CommonClientUtils;
import com.databasepreservation.common.client.index.FindRequest;
import com.databasepreservation.common.client.index.IndexResult;
import com.databasepreservation.common.client.index.facets.Facets;
import com.databasepreservation.common.client.index.filter.Filter;
import com.databasepreservation.common.client.index.filter.SimpleFilterParameter;
import com.databasepreservation.common.client.index.sort.Sorter;
import com.databasepreservation.common.client.models.structure.ViewerDatabase;
import com.databasepreservation.common.client.models.structure.ViewerDatabaseStatus;
import com.databasepreservation.common.client.services.DatabaseService;
import com.databasepreservation.common.client.tools.BreadcrumbManager;
import com.databasepreservation.common.client.tools.FontAwesomeIconManager;
import com.databasepreservation.common.client.tools.HistoryManager;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
Expand All @@ -36,6 +46,7 @@
import com.google.gwt.user.client.ui.Widget;

import config.i18n.client.ClientMessages;
import org.roda.core.data.v2.index.sublist.Sublist;

/**
* @author Miguel Guimarães <mguimaraes@keep.pt>
Expand All @@ -61,6 +72,15 @@ interface ManageUiBinder extends UiBinder<Widget, DatabaseManage> {
@UiField
SimplePanel description;

@UiField
SimplePanel siardsNotLoadedInfo;

@UiField
SimplePanel siardsNotSearchableInfo;

@UiField
SimplePanel adminInfo;

@UiField(provided = true)
SearchWrapper search;

Expand Down Expand Up @@ -113,6 +133,14 @@ private DatabaseManage() {

description.setWidget(instance);

setNotLoadedDatabases();
setSiardsNotSearchableDatabases();

MetadataField adminInfoInstance = MetadataField.createInstance(
"If you wish to access a database that is not loaded or searchable, please contact the administrator.");
adminInfoInstance.setCSS("siards-contact-admin-info");
adminInfo.setWidget(adminInfoInstance);

initButtons();
}

Expand All @@ -131,6 +159,41 @@ private void initButtons() {
}
}

private void setNotLoadedDatabases() {
FindRequest notLoadedDatabasesRequest = new FindRequest(ViewerDatabase.class.getName(),
new Filter(
new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS, ViewerDatabaseStatus.METADATA_ONLY.name())),
Sorter.NONE, new Sublist(), Facets.NONE, false, Collections.singletonList(ViewerConstants.INDEX_ID));
DatabaseService.Util.call((IndexResult<ViewerDatabase> result) -> {
MetadataField notLoadedInfoInstance;
if (result.getTotalCount() > 0) {
notLoadedInfoInstance = MetadataField.createInstance(
"This search includes all loaded databases (except for " + result.getTotalCount() + " not loaded).");
} else {
notLoadedInfoInstance = MetadataField.createInstance("This search includes all loaded databases.");
}
notLoadedInfoInstance.setCSS("siards-not-loaded-info");
siardsNotLoadedInfo.setWidget(notLoadedInfoInstance);
}).find(notLoadedDatabasesRequest, LocaleInfo.getCurrentLocale().getLocaleName());
}

private void setSiardsNotSearchableDatabases() {
FindRequest notSearchableDatabasesRequest = new FindRequest(ViewerDatabase.class.getName(),
new Filter(new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_AVAILABLE_TO_SEARCH_ALL, "false")),
Sorter.NONE, new Sublist(), Facets.NONE, false, Collections.singletonList(ViewerConstants.INDEX_ID));
DatabaseService.Util.call((IndexResult<ViewerDatabase> result) -> {
MetadataField notSearchableInfoInstance;
if (result.getTotalCount() > 0) {
notSearchableInfoInstance = MetadataField
.createInstance("This search includes all searchable databases (except for " + result.getTotalCount()
+ " not available for search).");
} else {
notSearchableInfoInstance = MetadataField.createInstance("This search includes all searchable databases.");
}
siardsNotSearchableInfo.setWidget(notSearchableInfoInstance);
}).find(notSearchableDatabasesRequest, LocaleInfo.getCurrentLocale().getLocaleName());
}

/**
* This method is called immediately after a widget becomes attached to the
* browser's document.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
<g:SimplePanel ui:field="description"/>
<g:FlowPanel>
<commonsearch:SearchWrapper ui:field="search" />
<g:SimplePanel ui:field="siardsNotLoadedInfo"/>
<g:SimplePanel ui:field="siardsNotSearchableInfo"/>
<g:SimplePanel ui:field="adminInfo"/>
<g:FlowPanel addStyleNames="button-group-panel">
<g:SimplePanel addStyleNames="button-group-panel-btn">
<g:Button addStyleNames="btn btn btn-primary" ui:field="open">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/
package com.databasepreservation.common.client.common.visualization.manager.databasePanel.user;

import java.util.Collections;
import java.util.List;

import com.databasepreservation.common.client.ViewerConstants;
Expand All @@ -21,23 +22,27 @@
import com.databasepreservation.common.client.common.search.SearchWrapper;
import com.databasepreservation.common.client.common.utils.ApplicationType;
import com.databasepreservation.common.client.common.utils.CommonClientUtils;
import com.databasepreservation.common.client.index.filter.BasicSearchFilterParameter;
import com.databasepreservation.common.client.index.FindRequest;
import com.databasepreservation.common.client.index.IndexResult;
import com.databasepreservation.common.client.index.facets.Facets;
import com.databasepreservation.common.client.index.filter.Filter;
import com.databasepreservation.common.client.index.filter.SimpleFilterParameter;
import com.databasepreservation.common.client.index.sort.Sorter;
import com.databasepreservation.common.client.models.structure.ViewerDatabase;
import com.databasepreservation.common.client.models.structure.ViewerDatabaseStatus;
import com.databasepreservation.common.client.services.DatabaseService;
import com.databasepreservation.common.client.tools.BreadcrumbManager;
import com.databasepreservation.common.client.tools.FontAwesomeIconManager;
import com.databasepreservation.common.client.tools.HistoryManager;
import com.databasepreservation.common.client.tools.ViewerStringUtils;
import com.databasepreservation.common.client.widgets.wcag.AccessibleFocusPanel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

import config.i18n.client.ClientMessages;
import org.roda.core.data.v2.index.sublist.Sublist;

/**
* @author Miguel Guimarães <mguimaraes@keep.pt>
Expand All @@ -63,6 +68,15 @@ interface ManageUiBinder extends UiBinder<Widget, UserDatabaseListPanel> {
@UiField
SimplePanel description;

@UiField
SimplePanel siardsNotLoadedInfo;

@UiField
SimplePanel siardsNotSearchableInfo;

@UiField
SimplePanel adminInfo;

@UiField(provided = true)
SearchWrapper search;

Expand Down Expand Up @@ -110,6 +124,49 @@ private UserDatabaseListPanel() {

description.setWidget(instance);

setNotLoadedDatabases();
setSiardsNotSearchableDatabases();

MetadataField adminInfoInstance = MetadataField.createInstance(
"If you wish to access a database that is not loaded or searchable, please contact the administrator.");
adminInfoInstance.setCSS("siards-contact-admin-info");
adminInfo.setWidget(adminInfoInstance);

}

private void setNotLoadedDatabases() {
FindRequest notLoadedDatabasesRequest = new FindRequest(ViewerDatabase.class.getName(),
new Filter(
new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS, ViewerDatabaseStatus.METADATA_ONLY.name())),
Sorter.NONE, new Sublist(), Facets.NONE, false, Collections.singletonList(ViewerConstants.INDEX_ID));
DatabaseService.Util.call((IndexResult<ViewerDatabase> result) -> {
MetadataField notLoadedInfoInstance;
if (result.getTotalCount() > 0) {
notLoadedInfoInstance = MetadataField.createInstance(
"This search includes all loaded databases (except for " + result.getTotalCount() + " not loaded).");
} else {
notLoadedInfoInstance = MetadataField.createInstance("This search includes all loaded databases.");
}
notLoadedInfoInstance.setCSS("siards-not-loaded-info");
siardsNotLoadedInfo.setWidget(notLoadedInfoInstance);
}).find(notLoadedDatabasesRequest, LocaleInfo.getCurrentLocale().getLocaleName());
}

private void setSiardsNotSearchableDatabases() {
FindRequest notSearchableDatabasesRequest = new FindRequest(ViewerDatabase.class.getName(),
new Filter(new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_AVAILABLE_TO_SEARCH_ALL, "false")),
Sorter.NONE, new Sublist(), Facets.NONE, false, Collections.singletonList(ViewerConstants.INDEX_ID));
DatabaseService.Util.call((IndexResult<ViewerDatabase> result) -> {
MetadataField notSearchableInfoInstance;
if (result.getTotalCount() > 0) {
notSearchableInfoInstance = MetadataField
.createInstance("This search includes all searchable databases (except for " + result.getTotalCount()
+ " not available for search).");
} else {
notSearchableInfoInstance = MetadataField.createInstance("This search includes all searchable databases.");
}
siardsNotSearchableInfo.setWidget(notSearchableInfoInstance);
}).find(notSearchableDatabasesRequest, LocaleInfo.getCurrentLocale().getLocaleName());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,8 @@
<g:FlowPanel>
<commonsearch:SearchWrapper ui:field="search"/>
</g:FlowPanel>
<g:SimplePanel ui:field="siardsNotLoadedInfo"/>
<g:SimplePanel ui:field="siardsNotSearchableInfo"/>
<g:SimplePanel ui:field="adminInfo"/>
</g:FlowPanel>
</ui:UiBinder>
Original file line number Diff line number Diff line change
Expand Up @@ -1069,6 +1069,14 @@ p[data-value]:after {
margin-bottom: 10px;
}

.siards-not-loaded-info {
margin-top: -30px;
}

.siards-contact-admin-info {
margin-bottom: 5px;
}

.btn-pull-right {
padding-right: 0 !important;
}
Expand Down

0 comments on commit 9502d23

Please sign in to comment.