Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
006627 committed Sep 25, 2024
1 parent 9f8e876 commit 1bcbf76
Show file tree
Hide file tree
Showing 21 changed files with 969 additions and 112 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
*/
package com.databasepreservation.common.api.v1;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.databasepreservation.common.server.index.utils.SolrUtils;
import org.apache.solr.client.solrj.SolrServerException;
import org.roda.core.data.exceptions.GenericException;
import org.roda.core.data.exceptions.NotFoundException;
import org.roda.core.data.exceptions.RequestNotValidException;
Expand Down Expand Up @@ -69,20 +72,43 @@ public IndexResult<ViewerDatabase> find(FindRequest findRequest, String localeSt
LogEntryState state = LogEntryState.SUCCESS;
User user = controllerAssistant.checkRoles(request);

if (ViewerConfiguration.getInstance().getApplicationEnvironment().equals(ViewerConstants.APPLICATION_ENV_SERVER)) {
if (user.isAdmin() || user.isWhiteList()) {
return getViewerDatabaseIndexResult(findRequest, controllerAssistant, user, state);
} else {
List<String> fieldsToReturn = new ArrayList<>();
fieldsToReturn.add(ViewerConstants.INDEX_ID);
fieldsToReturn.add(ViewerConstants.SOLR_DATABASES_METADATA);
fieldsToReturn.add(ViewerConstants.SOLR_DATABASES_PERMISSIONS);

FindRequest request = new FindRequest(findRequest.classToReturn, getDatabaseFilterForUser(user),
findRequest.sorter, findRequest.sublist, findRequest.facets, findRequest.exportFacets, fieldsToReturn);
return getViewerDatabaseIndexResult(request, fieldsToReturn, controllerAssistant, user, state);
}
} else {
return getViewerDatabaseIndexResult(findRequest, controllerAssistant, user, state);
}
}

@Override
public IndexResult<ViewerDatabase> findAll(FindRequest findRequest, String localeString) {
ControllerAssistant controllerAssistant = new ControllerAssistant() {};

LogEntryState state = LogEntryState.SUCCESS;
User user = controllerAssistant.checkRoles(request);

if (ViewerConfiguration.getInstance().getApplicationEnvironment().equals(ViewerConstants.APPLICATION_ENV_SERVER)) {
if (user.isAdmin() || user.isWhiteList()) {

return getAllViewerDatabaseIndexResult(findRequest, controllerAssistant, user, state);
// return getViewerDatabaseIndexResult(findRequest, controllerAssistant, user,
// state);
} else {
List<String> fieldsToReturn = new ArrayList<>();
fieldsToReturn.add(ViewerConstants.INDEX_ID);
fieldsToReturn.add(ViewerConstants.SOLR_DATABASES_METADATA);
fieldsToReturn.add(ViewerConstants.SOLR_DATABASES_PERMISSIONS);

FindRequest request = new FindRequest(findRequest.classToReturn, getDatabaseFilterForUser(user),
findRequest.sorter, findRequest.sublist, findRequest.facets, findRequest.exportFacets, fieldsToReturn);
findRequest.sorter, findRequest.sublist, findRequest.facets, findRequest.exportFacets, fieldsToReturn);
return getViewerDatabaseIndexResult(request, fieldsToReturn, controllerAssistant, user, state);
}
} else {
Expand Down Expand Up @@ -131,14 +157,21 @@ private IndexResult<ViewerDatabase> getAllViewerDatabaseIndexResult(FindRequest
ControllerAssistant controllerAssistant, User user, LogEntryState state) {
long count = 0;
try {

// List databases
Filter availableFilter = new Filter(
new SimpleFilterParameter(ViewerConstants.SOLR_DATABASES_STATUS, ViewerDatabaseStatus.AVAILABLE.name()));
//availableFilter.add(findRequest.filter.getParameters());

IterableDatabaseResult<ViewerDatabase> databases = ViewerFactory.getSolrManager().findAll(ViewerDatabase.class,
availableFilter, Sorter.NONE, findRequest.fieldsToReturn);

if (databases.getTotalCount() == 0) {
final IndexResult<ViewerDatabase> result = ViewerFactory.getSolrManager().find(ViewerDatabase.class,
findRequest.filter, findRequest.sorter, findRequest.sublist, findRequest.facets, findRequest.fieldsToReturn);
count = result.getTotalCount();
return result;
}

// Search on all collections
List<String> collections = new ArrayList<>();
Map<String, ViewerDatabase> databaseMap = new HashMap<>();
Expand All @@ -155,9 +188,12 @@ private IndexResult<ViewerDatabase> getAllViewerDatabaseIndexResult(FindRequest
// set offset 0
Facets facets = new Facets(simpleFacetParameter);

final IndexResult<ViewerDatabase> result = ViewerFactory.getSolrManager().find(ViewerDatabase.class, collections,
findRequest.filter, findRequest.sorter, findRequest.sublist, facets, findRequest.fieldsToReturn);
count = result.getTotalCount();
String collectionAlias = SolrUtils.crateSearchAllAlias(ViewerFactory.getSolrClient(), "aliase-" + user.getUUID(), collections);


final IndexResult<ViewerDatabase> hits = ViewerFactory.getSolrManager().findHits(ViewerDatabase.class, collectionAlias,
findRequest.filter, findRequest.sorter, findRequest.sublist, facets);
count = hits.getTotalCount();

IndexResult<ViewerDatabase> result2 = new IndexResult<>();
result2.setTotalCount(-1);
Expand All @@ -167,7 +203,7 @@ private IndexResult<ViewerDatabase> getAllViewerDatabaseIndexResult(FindRequest
result2.setResults(resultsFromFacet);
// Retrieve the databases HITs

for (FacetFieldResult facetResult : result.getFacetResults()) {
for (FacetFieldResult facetResult : hits.getFacetResults()) {
for (FacetValue value : facetResult.getValues()) {
String databaseUUID = value.getValue();
long searchHits = value.getCount();
Expand All @@ -179,7 +215,7 @@ private IndexResult<ViewerDatabase> getAllViewerDatabaseIndexResult(FindRequest
}
return result2;

} catch (GenericException | RequestNotValidException e) {
} catch (GenericException | RequestNotValidException | SolrServerException | IOException e) {
state = LogEntryState.FAILURE;
throw new RESTException(e);
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,9 @@ public class ViewerConstants {

public static final String ACTIVITY_LOG_PROPERTY = "activityLogEntry";

public static final String UI_LISTS_PROPERTY = "ui.lists";
public static final String UI_LISTS_SEARCH_SELECTEDINFO_LABEL_DEFAULT_I18N_PROPERTY = "search.selectedInfo.label.default.i18n";

public static final String LISTS_PROPERTY = "lists";

public static final String LISTS_FACETS_QUERY_PROPERTY = "facets.query";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/dbptk-ui
*/
package com.databasepreservation.common.client.common.lists;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.fusesource.restygwt.client.MethodCallback;
import org.roda.core.data.v2.index.sublist.Sublist;

import com.databasepreservation.common.client.ClientLogger;
import com.databasepreservation.common.client.ViewerConstants;
import com.databasepreservation.common.client.common.DefaultAsyncCallback;
import com.databasepreservation.common.client.common.UserLogin;
import com.databasepreservation.common.client.common.lists.columns.ButtonColumn;
import com.databasepreservation.common.client.common.lists.columns.TooltipColumn;
import com.databasepreservation.common.client.common.lists.utils.BasicAsyncTableCell;
import com.databasepreservation.common.client.common.utils.ApplicationType;
import com.databasepreservation.common.client.common.utils.JavascriptUtils;
import com.databasepreservation.common.client.common.utils.html.LabelUtils;
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.sort.Sorter;
import com.databasepreservation.common.client.models.structure.ViewerDatabase;
import com.databasepreservation.common.client.models.user.User;
import com.databasepreservation.common.client.services.DatabaseService;
import com.databasepreservation.common.client.tools.HistoryManager;
import com.databasepreservation.common.client.tools.Humanize;
import com.databasepreservation.common.client.tools.PathUtils;
import com.databasepreservation.common.client.tools.RestUtils;
import com.databasepreservation.common.client.widgets.Alert;
import com.google.gwt.cell.client.SafeHtmlCell;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.safehtml.shared.SafeUri;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortList;
import com.google.gwt.user.client.Window;
import com.google.gwt.view.client.DefaultSelectionEventManager;

import config.i18n.client.ClientMessages;

/**
* @author Bruno Ferreira <[email protected]>
*/
public class CrossDatabaseList extends BasicAsyncTableCell<ViewerDatabase> {
private static final ClientMessages messages = GWT.create(ClientMessages.class);
private final ClientLogger logger = new ClientLogger(getClass().getName());

private static final String OPEN_VALIDATED_SPAN = "<span>&#10004;</span>";
private static final String OPEN_NOT_VALIDATED_SPAN = "<span>&#10006;</span>";

public CrossDatabaseList() {
this(new Filter(), null, null, false, false);
}

private CrossDatabaseList(Filter filter, Facets facets, String summary, boolean selectable, boolean exportable) {
super(filter, facets, summary, selectable, exportable, 15, 15);
autoUpdate(10000);
}

@Override
protected void configureDisplay(CellTable<ViewerDatabase> display) {
display.setSelectionModel(display.getSelectionModel(), DefaultSelectionEventManager.createBlacklistManager(4, 10));

Column<ViewerDatabase, SafeHtml> nameColumn = new TooltipColumn<ViewerDatabase>() {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null && database.getMetadata() != null
? SafeHtmlUtils.fromString(database.getMetadata().getName())
: SafeHtmlUtils.fromString("unknown");
}
};

Column<ViewerDatabase, SafeHtml> description = new TooltipColumn<ViewerDatabase>() {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null && database.getMetadata() != null
? SafeHtmlUtils.fromString(database.getMetadata().getDescription())
: SafeHtmlUtils.fromString("unknown");
}
};

Column<ViewerDatabase, SafeHtml> dbmsColumn = new TooltipColumn<ViewerDatabase>() {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null && database.getMetadata() != null
? SafeHtmlUtils.fromString(database.getMetadata().getDatabaseProduct())
: SafeHtmlUtils.fromString("unknown");
}
};

Column<ViewerDatabase, SafeHtml> dataOwnerColumn = new TooltipColumn<ViewerDatabase>() {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null && database.getMetadata() != null
? SafeHtmlUtils.fromString(database.getMetadata().getDataOwner())
: SafeHtmlUtils.fromString("unknown");
}
};

Column<ViewerDatabase, SafeHtml> archivalDateColumn = new TooltipColumn<ViewerDatabase>() {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null && database.getMetadata() != null
? SafeHtmlUtils.fromString(database.getMetadata().getArchivalDate().substring(0, 10))
: null;
}
};

Column<ViewerDatabase, String> locationColumn = new ButtonColumn<ViewerDatabase>() {
@Override
public String getValue(ViewerDatabase database) {
return database != null && database.getMetadata() != null ? PathUtils.getFileName(database.getPath()) : null;
}
};
locationColumn.setFieldUpdater((index, object, value) -> {
if (ApplicationType.getType().equals(ViewerConstants.APPLICATION_ENV_DESKTOP)) {
JavascriptUtils.showItemInFolder(object.getPath());
} else {
SafeUri downloadUri = RestUtils.createFileResourceDownloadSIARDUri(object.getPath());
Window.Location.assign(downloadUri.asString());
}
});

Column<ViewerDatabase, SafeHtml> sizeColumn = new TooltipColumn<ViewerDatabase>() {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null ? SafeHtmlUtils.fromString(Humanize.readableFileSize(database.getSize()))
: SafeHtmlUtils.fromString("unknown");
}
};

Column<ViewerDatabase, SafeHtml> versionColumn = new TooltipColumn<ViewerDatabase>() {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null ? SafeHtmlUtils.fromString(database.getVersion()) : SafeHtmlUtils.fromString("unknown");
}
};

Column<ViewerDatabase, SafeHtml> validColumn = new Column<ViewerDatabase, SafeHtml>(new SafeHtmlCell()) {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null ? LabelUtils.getSIARDValidationStatus(database.getValidationStatus()) : null;
}
};

Column<ViewerDatabase, SafeHtml> statusColumn = new Column<ViewerDatabase, SafeHtml>(new SafeHtmlCell()) {
@Override
public SafeHtml getValue(ViewerDatabase database) {
return database != null ? LabelUtils.getDatabaseStatus(database.getStatus()) : null;
}
};

Column<ViewerDatabase, String> openColumn = new ButtonColumn<ViewerDatabase>() {
@Override
public String getValue(ViewerDatabase object) {
return messages.basicActionOpen();
}
};
openColumn.setFieldUpdater((index, object, value) -> HistoryManager.gotoSIARDInfo(object.getUuid()));

Column<ViewerDatabase, String> searchHitsColumn = new ButtonColumn<ViewerDatabase>() {
@Override
public String getValue(ViewerDatabase database) {
return database != null ? String.valueOf(database.getSearchHits()) : "unknown";
}
};

if (ApplicationType.getType().equals(ViewerConstants.APPLICATION_ENV_SERVER)) {
UserLogin.getInstance().getAuthenticatedUser(new DefaultAsyncCallback<User>() {
@Override
public void onSuccess(User user) {
addColumn(nameColumn, messages.managePageTableHeaderTextForDatabaseName(), true, TextAlign.NONE, 8);
addColumn(description, messages.managePageTableHeaderTextForDescription(), true, TextAlign.NONE, 15);
addColumn(dataOwnerColumn, messages.managePageTableHeaderTextForDataOwner(), true, TextAlign.NONE, 5);
addColumn(archivalDateColumn, messages.managePageTableHeaderTextForArchivalDate(), true, TextAlign.NONE, 5);
if (user.isAdmin()) {
addColumn(dbmsColumn, messages.managePageTableHeaderTextForProductName(), true, TextAlign.NONE, 10);
addColumn(sizeColumn, messages.managePageTableHeaderTextForSIARDSize(), true, TextAlign.NONE, 4);
addColumn(versionColumn, messages.managePageTableHeaderTextForSIARDVersion(), true, TextAlign.NONE, 4);
addColumn(validColumn, messages.managePageTableHeaderTextForSIARDValidationStatus(), true, TextAlign.NONE,
5);
addColumn(statusColumn, messages.managePageTableHeaderTextForDatabaseStatus(), true, TextAlign.NONE, 5);
}
addColumn(searchHitsColumn, "Hits", true, TextAlign.NONE, 5);
}
});
} else {
addColumn(nameColumn, messages.managePageTableHeaderTextForDatabaseName(), true, TextAlign.NONE, 8);
addColumn(description, messages.managePageTableHeaderTextForDescription(), true, TextAlign.NONE, 15);
addColumn(dataOwnerColumn, messages.managePageTableHeaderTextForDataOwner(), true, TextAlign.NONE, 5);
addColumn(archivalDateColumn, messages.managePageTableHeaderTextForArchivalDate(), true, TextAlign.NONE, 5);
addColumn(locationColumn, messages.managePageTableHeaderTextForSIARDLocation(), true, TextAlign.NONE, 8);
addColumn(dbmsColumn, messages.managePageTableHeaderTextForProductName(), true, TextAlign.NONE, 10);
addColumn(sizeColumn, messages.managePageTableHeaderTextForSIARDSize(), true, TextAlign.NONE, 4);
addColumn(versionColumn, messages.managePageTableHeaderTextForSIARDVersion(), true, TextAlign.NONE, 4);
addColumn(validColumn, messages.managePageTableHeaderTextForSIARDValidationStatus(), true, TextAlign.NONE, 5);
addColumn(statusColumn, messages.managePageTableHeaderTextForDatabaseStatus(), true, TextAlign.NONE, 5);
addColumn(openColumn, messages.managePageTableHeaderTextForActions(), true, TextAlign.NONE, 5);
addColumn(searchHitsColumn, messages.managePageTableHeaderTextForActions(), true, TextAlign.NONE, 5);
}

Alert alert = new Alert(Alert.MessageAlertType.LIGHT, messages.noItemsToDisplay());
display.setEmptyTableWidget(alert);
}

@Override
protected void getData(Sublist sublist, ColumnSortList columnSortList,
MethodCallback<IndexResult<ViewerDatabase>> callback) {
Filter filter = getFilter();

Map<Column<ViewerDatabase, ?>, List<String>> columnSortingKeyMap = new HashMap<>();
Sorter sorter = createSorter(columnSortList, columnSortingKeyMap);

FindRequest findRequest = new FindRequest(ViewerDatabase.class.getName(), filter, sorter, sublist, getFacets());

DatabaseService.Util.call(callback).findAll(findRequest, LocaleInfo.getCurrentLocale().getLocaleName());
}

@Override
public void exportClickHandler() {
// do nothing
}

@Override
protected void onAttach() {
super.onAttach();
refresh();
}
}
Loading

0 comments on commit 1bcbf76

Please sign in to comment.