From f19c75cbe2871ff8bc1d7c0e10fff8298f955a4e Mon Sep 17 00:00:00 2001 From: mguimaraes Date: Thu, 24 Oct 2019 18:51:08 +0100 Subject: [PATCH] Fix #141 [skip ci] --- .../common/api/utils/StreamResponse.java | 9 + .../api/utils/ViewerStreamingOutput.java | 27 ++ .../common/api/v1/ExportsResource.java | 35 +- .../IterableIndexResultsCSVOutputStream.java | 62 +++ .../api/v1/utils/ResultsCSVOutputStream.java | 25 +- .../server/index/DatabaseRowsSolrManager.java | 42 +- .../schema/collections/RowsCollection.java | 10 +- .../index/utils/IndexResultIterator.java | 165 ++++++++ .../index/utils/IterableIndexResult.java | 69 ++++ .../common/server/index/utils/SolrUtils.java | 70 ++-- .../common/shared/ViewerConstants.java | 8 + .../shared/ViewerStructure/ViewerCell.java | 6 + .../ViewerStructure/ViewerMetadata.java | 7 + .../shared/ViewerStructure/ViewerRow.java | 32 +- .../shared/ViewerStructure/ViewerTable.java | 14 + .../common/helpers/HelperExportTableData.java | 81 ++++ .../client/common/lists/AsyncTableCell.java | 20 +- .../client/common/lists/TableRowList.java | 58 ++- .../client/common/utils/JavascriptUtils.java | 4 +- .../browse/DatabaseSearchesPanel.java | 2 +- .../visualization/browse/ReferencesPanel.java | 9 - .../browse/SchemaStructurePanel.java | 5 - .../browse/SchemaViewsPanel.java | 153 -------- .../browse/SchemaViewsPanel.ui.xml | 10 - .../DataPanel.java} | 17 +- .../DataPanel.ui.xml} | 0 .../DatabaseInformationPanel.java | 8 +- .../DatabaseInformationPanel.ui.xml | 0 .../browse/{ => information}/ErDiagram.java | 4 +- .../browse/{ => information}/ErDiagram.ui.xml | 0 .../table/TableSavedSearchEditPanel.java | 13 +- .../browse/table/TableSavedSearchPanel.java | 7 - .../ReportPanel.java} | 16 +- .../ReportPanel.ui.xml} | 0 .../RoutinesPanel.java} | 16 +- .../RoutinesPanel.ui.xml} | 0 .../UsersPanel.java} | 16 +- .../UsersPanel.ui.xml} | 0 .../browse/view/ViewPanelStructure.java | 7 - .../client/tools/BreadcrumbManager.java | 370 +++++------------- .../shared/client/tools/HistoryManager.java | 24 -- .../shared/client/tools/ViewerJsonUtils.java | 1 + .../ToolkitStructure2ViewerStructure.java | 6 +- .../client/common/dialogs/Dialogs.java | 39 ++ .../desktop/client/dbptk/SIARDMainPage.java | 46 ++- .../desktop/client/main/MainPanelDesktop.java | 14 +- .../modules/viewer/DbvtkExportModule.java | 33 +- .../server/client/main/MainPanel.java | 11 +- .../config/i18n/client/ClientMessages.java | 19 + .../i18n/client/ClientMessages.properties | 12 + .../client/ClientMessages_pt_PT.properties | 13 + 51 files changed, 936 insertions(+), 679 deletions(-) create mode 100644 src/main/java/com/databasepreservation/common/api/utils/ViewerStreamingOutput.java create mode 100644 src/main/java/com/databasepreservation/common/api/v1/utils/IterableIndexResultsCSVOutputStream.java create mode 100644 src/main/java/com/databasepreservation/common/server/index/utils/IndexResultIterator.java create mode 100644 src/main/java/com/databasepreservation/common/server/index/utils/IterableIndexResult.java create mode 100644 src/main/java/com/databasepreservation/common/shared/client/common/helpers/HelperExportTableData.java delete mode 100644 src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaViewsPanel.java delete mode 100644 src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaViewsPanel.ui.xml rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{SchemaDataPanel.java => information/DataPanel.java} (91%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{SchemaDataPanel.ui.xml => information/DataPanel.ui.xml} (100%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{ => information}/DatabaseInformationPanel.java (93%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{ => information}/DatabaseInformationPanel.ui.xml (100%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{ => information}/ErDiagram.java (99%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{ => information}/ErDiagram.ui.xml (100%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{DatabaseReportPanel.java => technicalInformation/ReportPanel.java} (78%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{DatabaseReportPanel.ui.xml => technicalInformation/ReportPanel.ui.xml} (100%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{SchemaRoutinesPanel.java => technicalInformation/RoutinesPanel.java} (94%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{SchemaRoutinesPanel.ui.xml => technicalInformation/RoutinesPanel.ui.xml} (100%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{DatabaseUsersPanel.java => technicalInformation/UsersPanel.java} (93%) rename src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/{DatabaseUsersPanel.ui.xml => technicalInformation/UsersPanel.ui.xml} (100%) diff --git a/src/main/java/com/databasepreservation/common/api/utils/StreamResponse.java b/src/main/java/com/databasepreservation/common/api/utils/StreamResponse.java index 8d8a275a4..8b2af3cf2 100644 --- a/src/main/java/com/databasepreservation/common/api/utils/StreamResponse.java +++ b/src/main/java/com/databasepreservation/common/api/utils/StreamResponse.java @@ -7,6 +7,8 @@ import com.databasepreservation.common.api.common.ConsumesOutputStream; import com.databasepreservation.common.api.common.EntityResponse; +import javax.ws.rs.core.StreamingOutput; + /** * @author Bruno Ferreira */ @@ -15,6 +17,13 @@ public class StreamResponse implements EntityResponse { private String mediaType; private ConsumesOutputStream stream; + public StreamResponse(ConsumesOutputStream stream) { + this.filename = stream.getFileName(); + this.mediaType = stream.getMediaType(); + this.mediaType = stream.getMediaType(); + this.stream = stream; + } + public StreamResponse(String filename, String mediaType, ConsumesOutputStream stream) { super(); this.filename = filename; diff --git a/src/main/java/com/databasepreservation/common/api/utils/ViewerStreamingOutput.java b/src/main/java/com/databasepreservation/common/api/utils/ViewerStreamingOutput.java new file mode 100644 index 000000000..40e501c89 --- /dev/null +++ b/src/main/java/com/databasepreservation/common/api/utils/ViewerStreamingOutput.java @@ -0,0 +1,27 @@ +package com.databasepreservation.common.api.utils; + +import com.databasepreservation.common.api.common.ConsumesOutputStream; + +import javax.ws.rs.core.StreamingOutput; +import java.io.IOException; +import java.io.OutputStream; + +/** + * @author Miguel Guimarães + */ +public class ViewerStreamingOutput implements StreamingOutput { + private final ConsumesOutputStream outputHandler; + + public ViewerStreamingOutput(final ConsumesOutputStream outputHandler) { + this.outputHandler = outputHandler; + } + + @Override + public void write(final OutputStream output) throws IOException { + outputHandler.consumeOutputStream(output); + } + + public StreamResponse toStreamResponse() { + return new StreamResponse(outputHandler); + } +} diff --git a/src/main/java/com/databasepreservation/common/api/v1/ExportsResource.java b/src/main/java/com/databasepreservation/common/api/v1/ExportsResource.java index ddc345d2d..f7c1fcfa1 100644 --- a/src/main/java/com/databasepreservation/common/api/v1/ExportsResource.java +++ b/src/main/java/com/databasepreservation/common/api/v1/ExportsResource.java @@ -1,6 +1,5 @@ package com.databasepreservation.common.api.v1; -import java.io.InputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -16,6 +15,7 @@ import org.apache.commons.lang3.StringUtils; import org.roda.core.data.exceptions.RODAException; import org.roda.core.data.utils.JsonUtils; +import org.roda.core.data.v2.index.IndexResult; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.index.sublist.Sublist; @@ -23,12 +23,17 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import com.databasepreservation.common.server.ViewerFactory; import com.databasepreservation.common.api.utils.ApiUtils; -import com.databasepreservation.common.api.utils.DownloadUtils; -import com.databasepreservation.common.api.utils.StreamResponse; +import com.databasepreservation.common.api.utils.ViewerStreamingOutput; +import com.databasepreservation.common.api.v1.utils.IterableIndexResultsCSVOutputStream; +import com.databasepreservation.common.api.v1.utils.ResultsCSVOutputStream; +import com.databasepreservation.common.server.ViewerFactory; import com.databasepreservation.common.server.index.DatabaseRowsSolrManager; +import com.databasepreservation.common.server.index.utils.IterableIndexResult; import com.databasepreservation.common.shared.ViewerConstants; +import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabase; +import com.databasepreservation.common.shared.ViewerStructure.ViewerRow; +import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; import com.databasepreservation.common.utils.UserUtility; import io.swagger.annotations.Api; @@ -59,7 +64,10 @@ public Response getCSVResultsPost(@PathParam(ViewerConstants.API_PATH_PARAM_DATA @QueryParam(ViewerConstants.API_QUERY_PARAM_FILTER) String filterParam, @QueryParam(ViewerConstants.API_QUERY_PARAM_FIELDS) String fieldsListParam, @QueryParam(ViewerConstants.API_QUERY_PARAM_SORTER) String sorterParam, - @QueryParam(ViewerConstants.API_QUERY_PARAM_SUBLIST) String subListParam) throws RODAException { + @QueryParam(ViewerConstants.API_QUERY_PARAM_SUBLIST) String subListParam, + @QueryParam(ViewerConstants.API_PATH_PARAM_FILENAME) String filename, + @QueryParam(ViewerConstants.API_PATH_PARAM_EXPORT_DESCRIPTION) Boolean exportDescriptions, + @QueryParam(ViewerConstants.API_PATH_PARAM_TABLE_UUID) String tableUUID) throws RODAException { DatabaseRowsSolrManager solrManager = ViewerFactory.getSolrManager(); Filter filter = JsonUtils.getObjectFromJson(filterParam, Filter.class); @@ -72,9 +80,20 @@ public Response getCSVResultsPost(@PathParam(ViewerConstants.API_PATH_PARAM_DATA UserUtility.Authorization.checkDatabaseAccessPermission(this.request, databaseUUID); - InputStream rowsCSV = solrManager.findRowsCSV(databaseUUID, filter, sorter, sublist, fields); + final ViewerDatabase database = solrManager.retrieve(ViewerDatabase.class, databaseUUID); + final ViewerTable table = database.getMetadata().getTable(tableUUID); - return ApiUtils - .okResponse(new StreamResponse("file.csv", MediaType.APPLICATION_OCTET_STREAM, DownloadUtils.stream(rowsCSV))); + if (sublist == null) { + final IterableIndexResult allRows = solrManager.findAllRows(databaseUUID, filter, sorter, fields); + return ApiUtils.okResponse(new ViewerStreamingOutput( + new IterableIndexResultsCSVOutputStream(allRows, table, fields, filename, exportDescriptions, ',')) + .toStreamResponse()); + } else { + final IndexResult rows = solrManager.findRows(databaseUUID, filter, sorter, sublist, null, fields); + + return ApiUtils.okResponse( + new ViewerStreamingOutput(new ResultsCSVOutputStream(rows, table, fields, filename, exportDescriptions, ',')) + .toStreamResponse()); + } } } diff --git a/src/main/java/com/databasepreservation/common/api/v1/utils/IterableIndexResultsCSVOutputStream.java b/src/main/java/com/databasepreservation/common/api/v1/utils/IterableIndexResultsCSVOutputStream.java new file mode 100644 index 000000000..844fe0801 --- /dev/null +++ b/src/main/java/com/databasepreservation/common/api/v1/utils/IterableIndexResultsCSVOutputStream.java @@ -0,0 +1,62 @@ +package com.databasepreservation.common.api.v1.utils; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.Iterator; +import java.util.List; + +import com.databasepreservation.common.server.index.utils.IterableIndexResult; +import org.apache.commons.csv.CSVPrinter; +import org.roda.core.data.v2.index.IndexResult; + +import com.databasepreservation.common.shared.ViewerStructure.ViewerRow; +import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; + +/** + * @author Miguel Guimarães + */ +public class IterableIndexResultsCSVOutputStream extends CSVOutputStream { + /** The results to write to output stream. */ + private final IterableIndexResult results; + private final ViewerTable table; + private final List fieldsToReturn; + private final boolean exportDescription; + /** + * Constructor. + * + * @param results + * the results to write to output stream. + * @param filename + * the filename. + * @param delimiter + * the CSV field delimiter. + */ + public IterableIndexResultsCSVOutputStream(final IterableIndexResult results, final ViewerTable table, final List fieldsToReturn, final String filename, + final boolean exportDescription, final char delimiter) { + super(filename, delimiter); + this.results = results; + this.table = table; + this.fieldsToReturn = fieldsToReturn; + this.exportDescription = exportDescription; + } + + @Override + public void consumeOutputStream(final OutputStream out) throws IOException { + final OutputStreamWriter writer = new OutputStreamWriter(out); + CSVPrinter printer = null; + boolean isFirst = true; + + for (ViewerRow row : results) { + if (isFirst) { + printer = getFormat().withHeader(table.getCSVHeaders(fieldsToReturn, exportDescription).toArray(new String[0])).print(writer); + isFirst = false; + } + + printer.printRecord(row.getCellValues(fieldsToReturn)); + + } + + writer.flush(); + } +} diff --git a/src/main/java/com/databasepreservation/common/api/v1/utils/ResultsCSVOutputStream.java b/src/main/java/com/databasepreservation/common/api/v1/utils/ResultsCSVOutputStream.java index 256979158..d93d83046 100644 --- a/src/main/java/com/databasepreservation/common/api/v1/utils/ResultsCSVOutputStream.java +++ b/src/main/java/com/databasepreservation/common/api/v1/utils/ResultsCSVOutputStream.java @@ -3,19 +3,23 @@ import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.util.List; import org.apache.commons.csv.CSVPrinter; import org.roda.core.data.v2.index.IndexResult; -import com.databasepreservation.common.shared.ViewerStructure.IsIndexed; +import com.databasepreservation.common.shared.ViewerStructure.ViewerRow; +import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; /** * @author Miguel Guimarães */ -public class ResultsCSVOutputStream extends CSVOutputStream { +public class ResultsCSVOutputStream extends CSVOutputStream { /** The results to write to output stream. */ - private final IndexResult results; - + private final IndexResult results; + private final ViewerTable table; + private final List fieldsToReturn; + private final boolean exportDescription; /** * Constructor. * @@ -26,9 +30,13 @@ public class ResultsCSVOutputStream extends CSVOutputStream * @param delimiter * the CSV field delimiter. */ - public ResultsCSVOutputStream(final IndexResult results, final String filename, final char delimiter) { + public ResultsCSVOutputStream(final IndexResult results, final ViewerTable table, final List fieldsToReturn, final String filename, + final boolean exportDescription, final char delimiter) { super(filename, delimiter); this.results = results; + this.table = table; + this.fieldsToReturn = fieldsToReturn; + this.exportDescription = exportDescription; } @Override @@ -36,12 +44,13 @@ public void consumeOutputStream(final OutputStream out) throws IOException { final OutputStreamWriter writer = new OutputStreamWriter(out); CSVPrinter printer = null; boolean isFirst = true; - for (final T result : this.results.getResults()) { + for (final ViewerRow row : this.results.getResults()) { if (isFirst) { - printer = getFormat().withHeader(result.toCsvHeaders().toArray(new String[0])).print(writer); + printer = getFormat().withHeader(table.getCSVHeaders(fieldsToReturn, exportDescription).toArray(new String[0])).print(writer); isFirst = false; } - printer.printRecord(result.toCsvValues()); + + printer.printRecord(row.getCellValues(fieldsToReturn)); } writer.flush(); } diff --git a/src/main/java/com/databasepreservation/common/server/index/DatabaseRowsSolrManager.java b/src/main/java/com/databasepreservation/common/server/index/DatabaseRowsSolrManager.java index 27a35e2ba..2ddcec301 100644 --- a/src/main/java/com/databasepreservation/common/server/index/DatabaseRowsSolrManager.java +++ b/src/main/java/com/databasepreservation/common/server/index/DatabaseRowsSolrManager.java @@ -1,13 +1,12 @@ package com.databasepreservation.common.server.index; import java.io.IOException; -import java.io.InputStream; import java.nio.file.InvalidPathException; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import com.databasepreservation.common.server.index.schema.collections.DatabasesCollection; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; @@ -28,10 +27,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.databasepreservation.common.exceptions.ViewerException; import com.databasepreservation.common.server.index.schema.SolrCollection; import com.databasepreservation.common.server.index.schema.SolrDefaultCollectionRegistry; import com.databasepreservation.common.server.index.schema.SolrRowsCollectionRegistry; import com.databasepreservation.common.server.index.schema.collections.RowsCollection; +import com.databasepreservation.common.server.index.utils.IterableIndexResult; import com.databasepreservation.common.server.index.utils.JsonTransformer; import com.databasepreservation.common.server.index.utils.Pair; import com.databasepreservation.common.server.index.utils.SolrUtils; @@ -43,7 +44,6 @@ import com.databasepreservation.common.shared.ViewerStructure.ViewerRow; import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; import com.databasepreservation.common.shared.client.common.search.SavedSearch; -import com.databasepreservation.common.exceptions.ViewerException; import com.databasepreservation.utils.FileUtils; /** @@ -77,10 +77,10 @@ public void addDatabaseMetadata(ViewerDatabase database) throws ViewerException insertDocument(ViewerDatabase.class, database); } - public void addDatabaseRowCollection(ViewerDatabase database) throws ViewerException { - updateValidationFields(database.getUUID(), + public void addDatabaseRowCollection(final String databaseUUID) throws ViewerException { + updateValidationFields(databaseUUID, Pair.of(ViewerConstants.SOLR_DATABASES_STATUS, ViewerDatabase.Status.INGESTING.toString())); - RowsCollection collection = new RowsCollection(database.getUUID()); + RowsCollection collection = new RowsCollection(databaseUUID); collection.createRowsCollection(); } @@ -133,6 +133,17 @@ public void removeDatabase(ViewerDatabase database, Path lobFolder) throws Viewe public void addTable(ViewerTable table) throws ViewerException { } + public void addRow(String databaseUUID, ViewerRow row) throws ViewerException { + + RowsCollection collection = SolrRowsCollectionRegistry.get(databaseUUID); + + try { + insertDocument(collection.getIndexName(), collection.toSolrDocument(row)); + } catch (RequestNotValidException | GenericException | NotFoundException | AuthorizationDeniedException e) { + throw new ViewerException(e); + } + } + public void addRow(ViewerDatabaseFromToolkit viewerDatabase, ViewerRow row) throws ViewerException { RowsCollection collection = SolrRowsCollectionRegistry.get(viewerDatabase.getUUID()); @@ -146,7 +157,8 @@ public void addRow(ViewerDatabaseFromToolkit viewerDatabase, ViewerRow row) thro public IndexResult find(Class classToReturn, Filter filter, Sorter sorter, Sublist sublist, Facets facets) throws GenericException, RequestNotValidException { - return SolrUtils.find(client, SolrDefaultCollectionRegistry.get(classToReturn), filter, sorter, sublist, facets); + return SolrUtils.find(client, SolrDefaultCollectionRegistry.get(classToReturn), filter, sorter, sublist, facets, + new ArrayList<>()); } public Long count(Class classToReturn, Filter filter) @@ -164,10 +176,14 @@ public IndexResult findRows(String databaseUUID, Filter filter, Sorte return SolrUtils.findRows(client, databaseUUID, filter, sorter, sublist, facets); } - public InputStream findRowsCSV(String databaseUUID, Filter filter, Sorter sorter, Sublist sublist, - List fields) throws GenericException, RequestNotValidException { - return SolrUtils.findCSV(client, SolrRowsCollectionRegistry.get(databaseUUID).getIndexName(), filter, sorter, - sublist, fields); + public IndexResult findRows(String databaseUUID, Filter filter, Sorter sorter, Sublist sublist, + Facets facets, List fieldsToReturn) throws GenericException, RequestNotValidException { + return SolrUtils.findRows(client, databaseUUID, filter, sorter, sublist, facets, fieldsToReturn); + } + + public IterableIndexResult findAllRows(String databaseUUID, final Filter filter, final Sorter sorter, + final List fieldsToReturn) { + return new IterableIndexResult(client, databaseUUID, filter, sorter, fieldsToReturn); } public Long countRows(String databaseUUID, Filter filter) @@ -300,8 +316,8 @@ public void markDatabaseCollection(final String databaseUUID, ViewerDatabase.Sta updateDatabaseFields(databaseUUID, Pair.of(ViewerConstants.SOLR_DATABASES_STATUS, status.toString())); } - public void markDatabaseAsReady(ViewerDatabaseFromToolkit viewerDatabase) throws ViewerException { - updateDatabaseFields(viewerDatabase.getUUID(), + public void markDatabaseAsReady(final String databaseUUID) throws ViewerException { + updateDatabaseFields(databaseUUID, Pair.of(ViewerConstants.SOLR_DATABASES_STATUS, ViewerDatabase.Status.AVAILABLE.toString())); } diff --git a/src/main/java/com/databasepreservation/common/server/index/schema/collections/RowsCollection.java b/src/main/java/com/databasepreservation/common/server/index/schema/collections/RowsCollection.java index 6f8f240e1..9cd06c133 100644 --- a/src/main/java/com/databasepreservation/common/server/index/schema/collections/RowsCollection.java +++ b/src/main/java/com/databasepreservation/common/server/index/schema/collections/RowsCollection.java @@ -9,11 +9,12 @@ import static com.databasepreservation.common.shared.ViewerConstants.SOLR_INDEX_ROW_COLLECTION_NAME_PREFIX; import static com.databasepreservation.common.shared.ViewerConstants.SOLR_ROWS_TABLE_ID; +import static com.databasepreservation.common.shared.ViewerConstants.SOLR_ROWS_TABLE_UUID; import java.util.ArrayList; import java.util.Collections; import java.util.Date; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -28,6 +29,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.databasepreservation.common.exceptions.ViewerException; import com.databasepreservation.common.server.index.factory.SolrClientFactory; import com.databasepreservation.common.server.index.schema.AbstractSolrCollection; import com.databasepreservation.common.server.index.schema.CopyField; @@ -39,7 +41,6 @@ import com.databasepreservation.common.shared.ViewerConstants; import com.databasepreservation.common.shared.ViewerStructure.ViewerCell; import com.databasepreservation.common.shared.ViewerStructure.ViewerRow; -import com.databasepreservation.common.exceptions.ViewerException; import com.databasepreservation.utils.JodaUtils; public class RowsCollection extends AbstractSolrCollection { @@ -75,6 +76,7 @@ public List getFields() { List fields = new ArrayList<>(super.getFields()); fields.add(new Field(SOLR_ROWS_TABLE_ID, Field.TYPE_STRING).setIndexed(true).setStored(true)); + fields.add(new Field(SOLR_ROWS_TABLE_UUID, Field.TYPE_STRING).setIndexed(true).setStored(true)); return fields; } @@ -90,6 +92,7 @@ public SolrInputDocument toSolrDocument(ViewerRow row) throws ViewerException, R SolrInputDocument doc = super.toSolrDocument(row); doc.setField(ViewerConstants.SOLR_ROWS_TABLE_ID, row.getTableId()); + doc.setField(SOLR_ROWS_TABLE_UUID, row.getTableUUID()); for (Map.Entry cellEntry : row.getCells().entrySet()) { String solrColumnName = cellEntry.getKey(); String cellValue = cellEntry.getValue().getValue(); @@ -105,8 +108,9 @@ public ViewerRow fromSolrDocument(SolrDocument doc) throws ViewerException { ViewerRow viewerRow = super.fromSolrDocument(doc); viewerRow.setTableId(SolrUtils.objectToString(doc.get(ViewerConstants.SOLR_ROWS_TABLE_ID), null)); + viewerRow.setTableUUID(SolrUtils.objectToString(doc.get(ViewerConstants.SOLR_ROWS_TABLE_UUID), null)); - Map cells = new HashMap<>(); + Map cells = new LinkedHashMap<>(); for (Map.Entry entry : doc) { String columnName = entry.getKey(); Object value = entry.getValue(); diff --git a/src/main/java/com/databasepreservation/common/server/index/utils/IndexResultIterator.java b/src/main/java/com/databasepreservation/common/server/index/utils/IndexResultIterator.java new file mode 100644 index 000000000..dde400176 --- /dev/null +++ b/src/main/java/com/databasepreservation/common/server/index/utils/IndexResultIterator.java @@ -0,0 +1,165 @@ +package com.databasepreservation.common.server.index.utils; + +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; + +import org.apache.solr.client.solrj.SolrClient; +import org.apache.solr.common.params.CursorMarkParams; +import org.roda.core.data.exceptions.GenericException; +import org.roda.core.data.exceptions.RequestNotValidException; +import org.roda.core.data.v2.index.IndexResult; +import org.roda.core.data.v2.index.filter.Filter; +import org.roda.core.data.v2.index.sort.Sorter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.databasepreservation.common.shared.ViewerStructure.ViewerRow; + +/** + * @author Miguel Guimarães + */ +public class IndexResultIterator implements Iterator { + + private static final Logger LOGGER = LoggerFactory.getLogger(IndexResultIterator.class); + + public static final int DEFAULT_PAGE_SIZE = 1000; + public static final int DEFAULT_RETRIES = 100; + public static final int DEFAULT_SLEEP_BETWEEN_RETRIES = 10000; + + private int pageSize = DEFAULT_PAGE_SIZE; + private int retries = DEFAULT_RETRIES; + private int sleepBetweenRetries = DEFAULT_SLEEP_BETWEEN_RETRIES; + + private IndexResult result = null; + private int indexInResult = 0; + private String cursorMark = CursorMarkParams.CURSOR_MARK_START; + private String nextCursorMark = CursorMarkParams.CURSOR_MARK_START; + + private final SolrClient index; + private final Filter filter; + private final Sorter sorter; + private final String databaseUUID; + private final List fieldsToReturn; + + private ViewerRow next = null; + + public IndexResultIterator(SolrClient index, String databaseUUID, Filter filter, Sorter sorter, List fieldsToReturn) { + this.index = index; + this.filter = filter; + this.sorter = sorter; + this.databaseUUID = databaseUUID; + this.fieldsToReturn = fieldsToReturn; + + getCurrentAndPrepareNext(); + } + + private ViewerRow getCurrentAndPrepareNext() { + ViewerRow current = next; + + // ensure index result is renewed + if (result == null || result.getResults().size() == indexInResult) { + indexInResult = 0; + + cursorMark = nextCursorMark; + result = null; + nextCursorMark = null; + int availableRetries = retries; + + do { + try { + Pair, String> page = SolrUtils.findRows(index, databaseUUID, filter, sorter, pageSize, + cursorMark, fieldsToReturn); + result = page.getFirst(); + nextCursorMark = page.getSecond(); + + } catch (GenericException | RequestNotValidException e) { + if (availableRetries > 0) { + availableRetries--; + LOGGER.warn("Error getting next page from Solr, retrying in {}ms...", sleepBetweenRetries); + try { + Thread.sleep(sleepBetweenRetries); + } catch (InterruptedException e1) { + // do nothing + } + } else { + LOGGER.error("Error getting next page from Solr, no more retries.", e); + throw new NoSuchElementException("Error getting next item in list: " + e.getMessage()); + } + } + } while (result == null); + } + + if (indexInResult < result.getResults().size()) { + this.next = result.getResults().get(indexInResult++); + } else { + this.next = null; + } + + return current; + } + + @Override + public boolean hasNext() { + return next != null; + } + + @Override + public ViewerRow next() { + return getCurrentAndPrepareNext(); + } + + /** + * @return the pageSize + */ + public int getPageSize() { + return pageSize; + } + + /** + * @param pageSize + * the pageSize to set + */ + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + /** + * @return the retries + */ + public int getRetries() { + return retries; + } + + /** + * @param retries + * the retries to set + */ + public void setRetries(int retries) { + this.retries = retries; + } + + /** + * @return the sleepBetweenRetries + */ + public int getSleepBetweenRetries() { + return sleepBetweenRetries; + } + + /** + * @param sleepBetweenRetries + * the sleepBetweenRetries to set + */ + public void setSleepBetweenRetries(int sleepBetweenRetries) { + this.sleepBetweenRetries = sleepBetweenRetries; + } + + /** + * Gets the total count of objects as reported by underlying Solr requests. + * + * @return + */ + public long getTotalCount() { + return result != null ? result.getTotalCount() : -1; + } +} diff --git a/src/main/java/com/databasepreservation/common/server/index/utils/IterableIndexResult.java b/src/main/java/com/databasepreservation/common/server/index/utils/IterableIndexResult.java new file mode 100644 index 000000000..cb228a1f4 --- /dev/null +++ b/src/main/java/com/databasepreservation/common/server/index/utils/IterableIndexResult.java @@ -0,0 +1,69 @@ +package com.databasepreservation.common.server.index.utils; + +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +import org.apache.solr.client.solrj.SolrClient; +import org.roda.core.data.v2.index.filter.Filter; + +import com.databasepreservation.common.shared.ViewerStructure.ViewerRow; +import com.databasepreservation.common.utils.CloseableIterable; +import org.roda.core.data.v2.index.sort.Sorter; + +/** + * @author Miguel Guimarães + */ +public class IterableIndexResult implements CloseableIterable { + private static int PAGE_SIZE = -1; + private static int RETRIES = -1; + private static int SLEEP_BETWEEN_RETRIES = -1; + + private final IndexResultIterator iterator; + + public IterableIndexResult(final SolrClient solrClient, String databaseUUID, final Filter filter, final Sorter sorter, + final List fieldsToReturn) { + iterator = new IndexResultIterator(solrClient, databaseUUID, filter, sorter, fieldsToReturn); + + if (PAGE_SIZE > 0) { + iterator.setPageSize(PAGE_SIZE); + } + + if (RETRIES > 0) { + iterator.setRetries(RETRIES); + } + + if (SLEEP_BETWEEN_RETRIES > 0) { + iterator.setSleepBetweenRetries(SLEEP_BETWEEN_RETRIES); + } + } + + @Override + public Iterator iterator() { + return iterator; + } + + @Override + public void close() throws IOException { + // do nothing + } + + public static void injectSearchPageSize(int pageSize) { + PAGE_SIZE = pageSize; + } + + public static void injectNumberOfRetries(int retries) { + RETRIES = retries; + } + + public static void injectSleepBetweenRetries(int sleepTime) { + SLEEP_BETWEEN_RETRIES = sleepTime; + } + + /** + * @see IndexResultIterator#getTotalCount() + */ + public long getTotalCount() { + return iterator.getTotalCount(); + } +} diff --git a/src/main/java/com/databasepreservation/common/server/index/utils/SolrUtils.java b/src/main/java/com/databasepreservation/common/server/index/utils/SolrUtils.java index fe5144f38..b474ecc1d 100644 --- a/src/main/java/com/databasepreservation/common/server/index/utils/SolrUtils.java +++ b/src/main/java/com/databasepreservation/common/server/index/utils/SolrUtils.java @@ -19,6 +19,7 @@ import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -39,10 +40,12 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrException; +import org.apache.solr.common.params.CursorMarkParams; import org.apache.solr.common.params.FacetParams; import org.roda.core.data.common.RodaConstants; import org.roda.core.data.exceptions.GenericException; import org.roda.core.data.exceptions.NotFoundException; +import org.roda.core.data.exceptions.NotSupportedException; import org.roda.core.data.exceptions.RequestNotValidException; import org.roda.core.data.v2.index.IndexResult; import org.roda.core.data.v2.index.facet.FacetFieldResult; @@ -68,6 +71,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.databasepreservation.common.exceptions.ViewerException; import com.databasepreservation.common.server.index.schema.SolrCollection; import com.databasepreservation.common.server.index.schema.SolrRowsCollectionRegistry; import com.databasepreservation.common.server.index.schema.collections.RowsCollection; @@ -76,7 +80,6 @@ import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabase; import com.databasepreservation.common.shared.ViewerStructure.ViewerRow; import com.databasepreservation.common.shared.client.common.search.SavedSearch; -import com.databasepreservation.common.exceptions.ViewerException; /** * @author Bruno Ferreira @@ -119,7 +122,7 @@ private static String getHumanFriendlyName(Class resultClass) throws Gene public static IndexResult find(SolrClient index, SolrCollection collection, Filter filter, Sorter sorter, Sublist sublist) throws GenericException, RequestNotValidException { - return find(index, collection, filter, sorter, sublist, null); + return find(index, collection, filter, sorter, sublist, Facets.NONE, new ArrayList<>()); } public static String findSIARDFile(SolrClient index, String collectionName, Filter filter) @@ -140,13 +143,17 @@ public static String findSIARDFile(SolrClient index, String collectionName, Filt } public static IndexResult find(SolrClient index, SolrCollection collection, Filter filter, - Sorter sorter, Sublist sublist, Facets facets) throws GenericException, RequestNotValidException { + Sorter sorter, Sublist sublist, Facets facets, List fieldsToReturn) + throws GenericException, RequestNotValidException { IndexResult ret; SolrQuery query = new SolrQuery(); query.setQuery(parseFilter(filter)); query.setSorts(parseSorter(sorter)); query.setStart(sublist.getFirstElementIndex()); query.setRows(sublist.getMaximumElementCount()); + if (!fieldsToReturn.isEmpty()) { + query.setFields(fieldsToReturn.toArray(new String[0])); + } parseAndConfigureFacets(facets, query); try { @@ -176,45 +183,56 @@ public static IndexResult find(SolrClient index, SolrCo public static IndexResult findRows(SolrClient index, String databaseUUID, Filter filter, Sorter sorter, Sublist sublist) throws GenericException, RequestNotValidException { - return findRows(index, databaseUUID, filter, sorter, sublist, null); + return findRows(index, databaseUUID, filter, sorter, sublist, Facets.NONE); } public static IndexResult findRows(SolrClient index, String databaseUUID, Filter filter, Sorter sorter, Sublist sublist, Facets facets) throws GenericException, RequestNotValidException { - return find(index, SolrRowsCollectionRegistry.get(databaseUUID), filter, sorter, sublist, facets); + return find(index, SolrRowsCollectionRegistry.get(databaseUUID), filter, sorter, sublist, facets, + new ArrayList<>()); + } + + public static IndexResult findRows(SolrClient index, String databaseUUID, Filter filter, Sorter sorter, + Sublist sublist, Facets facets, List fieldsToReturn) throws GenericException, RequestNotValidException { + return find(index, SolrRowsCollectionRegistry.get(databaseUUID), filter, sorter, sublist, facets, fieldsToReturn); } - public static InputStream findCSV(SolrClient index, String collection, Filter filter, Sorter sorter, Sublist sublist, - List fields) throws GenericException, RequestNotValidException { + public static Pair, String> findRows(SolrClient index, String databaseUUID, Filter filter, Sorter sorter, int pageSize, String cursorMark, List fieldsToReturn) + throws GenericException, RequestNotValidException { + + Pair, String> ret; SolrQuery query = new SolrQuery(); + query.setParam("q.op", DEFAULT_QUERY_PARSER_OPERATOR); query.setQuery(parseFilter(filter)); - query.setSorts(parseSorter(sorter)); - if (sublist != null) { - query.setStart(sublist.getFirstElementIndex()); - query.setRows(sublist.getMaximumElementCount()); + + query.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); + query.setRows(pageSize); + final List sortClauses = parseSorter(sorter); + sortClauses.add(SolrQuery.SortClause.asc(RodaConstants.INDEX_UUID)); + query.setSorts(sortClauses); + + if (!fieldsToReturn.isEmpty()) { + query.setFields(fieldsToReturn.toArray(new String[0])); } - query.setFields(fields.toArray(new String[0])); - LOGGER.debug("CSV export query object: " + query.toString()); - LOGGER.debug("CSV export query: " + query.toQueryString()); + final RowsCollection collection = SolrRowsCollectionRegistry.get(databaseUUID); try { - QueryRequest queryRequest = new QueryRequest(query); - queryRequest.setResponseParser(new InputStreamResponseParser("csv")); - QueryResponse response = queryRequest.process(index, collection); - - Object stream = response.getResponse().get("stream"); - if (stream instanceof InputStream) { - return (InputStream) stream; - } else { - throw new GenericException( - "Result was not an input stream. Its string representation was: " + stream.toString()); - } - } catch (SolrServerException | SolrException | IOException e) { + QueryResponse response = index.query(collection.getIndexName(), query); + final IndexResult result = queryResponseToIndexResult(response, collection, Facets.NONE); + ret = Pair.of(result, response.getNextCursorMark()); + } catch (SolrServerException | IOException e) { throw new GenericException("Could not query index", e); + } catch (SolrException e) { + throw new RequestNotValidException(e); + } catch (RuntimeException e) { + throw new GenericException("Unexpected exception while querying index", e); } + + return ret; } + public static List parseSorter(Sorter sorter) { List ret = new ArrayList(); if (sorter != null) { diff --git a/src/main/java/com/databasepreservation/common/shared/ViewerConstants.java b/src/main/java/com/databasepreservation/common/shared/ViewerConstants.java index 6d8748ef2..ebe0eccef 100644 --- a/src/main/java/com/databasepreservation/common/shared/ViewerConstants.java +++ b/src/main/java/com/databasepreservation/common/shared/ViewerConstants.java @@ -115,6 +115,7 @@ public class ViewerConstants { * ROW FIELDS */ public static final String SOLR_ROWS_TABLE_ID = "tableId"; + public static final String SOLR_ROWS_TABLE_UUID = "tableUUID"; /* * DYNAMIC FIELD TYPES (suffixes) @@ -201,6 +202,8 @@ public class ViewerConstants { public static final String API_SERVLET = "api"; public static final String API_V1_EXPORT_RESOURCE = "/v1/exports"; public static final String API_PATH_PARAM_DATABASE_UUID = "databaseUUID"; + public static final String API_PATH_PARAM_EXPORT_DESCRIPTION = "description"; + public static final String API_PATH_PARAM_FILENAME = "fn"; public static final String API_PATH_PARAM_TABLE_UUID = "tableUUID"; public static final String API_QUERY_PARAM_FIELDS = "fl"; public static final String API_QUERY_PARAM_FILTER = "f"; @@ -316,6 +319,11 @@ public class ViewerConstants { public static final String SIARD_SPECIFICATION_LINK = "https://dilcis.eu/content-types/siard/"; public static final String ADDITIONAL_CHECKS_SPECIFICATIONLINK = "https://github.com/keeps/db-preservation-toolkit/wiki/Validation#additional-checks"; + /** + * FILE EXTENSIONS + */ + public static final String CSV_EXTENSION = ".csv"; + /** * private constructor */ diff --git a/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerCell.java b/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerCell.java index 2b38d5630..e83576d02 100644 --- a/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerCell.java +++ b/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerCell.java @@ -27,4 +27,10 @@ public String getValue() { public void setValue(String value) { this.value = value; } + + + @Override + public String toString() { + return value; + } } diff --git a/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerMetadata.java b/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerMetadata.java index 74033dd85..ca57db8a4 100644 --- a/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerMetadata.java +++ b/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerMetadata.java @@ -210,6 +210,13 @@ public ViewerTable getTable(String tableUUID) { return tables.get(tableUUID); } + public ViewerTable getTableById(String tableId) { + for (ViewerTable value : tables.values()) { + if (value.getId().equals(tableId)) return value; + } + return null; + } + public ViewerView getView(String viewUUID) { return views.get(viewUUID); } diff --git a/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerRow.java b/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerRow.java index abf7c1568..806b1c2c3 100644 --- a/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerRow.java +++ b/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerRow.java @@ -1,6 +1,10 @@ package com.databasepreservation.common.shared.ViewerStructure; -import java.util.HashMap; +import com.databasepreservation.common.shared.ViewerConstants; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; /** @@ -8,11 +12,12 @@ */ public class ViewerRow extends IsIndexed { private String UUID; + private String tableUUID; private String tableId; private Map cells; public ViewerRow() { - cells = new HashMap<>(); + cells = new LinkedHashMap<>(); } @Override @@ -46,4 +51,27 @@ public String getTableId() { public void setTableId(String tableId) { this.tableId = tableId; } + + public String getTableUUID() { + return tableUUID; + } + + public void setTableUUID(String tableUUID) { + this.tableUUID = tableUUID; + } + + public List getCellValues(List fieldsToReturn) { + List values = new ArrayList<>(); + fieldsToReturn.remove(ViewerConstants.SOLR_ROWS_TABLE_ID); + fieldsToReturn.remove(ViewerConstants.SOLR_ROWS_TABLE_UUID); + for (String solrColumnName : fieldsToReturn) { + if (cells.get(solrColumnName) == null) { + values.add(""); + } else { + values.add(cells.get(solrColumnName).getValue()); + } + } + + return values; + } } diff --git a/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerTable.java b/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerTable.java index fcfb07470..045e2c910 100644 --- a/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerTable.java +++ b/src/main/java/com/databasepreservation/common/shared/ViewerStructure/ViewerTable.java @@ -142,4 +142,18 @@ public void setId(String id) { public List getCandidateKeys() { return candidateKeys; } + + public List getCSVHeaders(List fieldsToReturn, boolean exportDescriptions) { + List values = new ArrayList<>(); + for (ViewerColumn column : columns) { + if (fieldsToReturn.contains(column.getSolrName())) { + if (exportDescriptions) { + values.add(column.getDisplayName() + "\r\n" + column.getDescription() ); + } else { + values.add(column.getDisplayName()); + } + } + } + return values; + } } diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/helpers/HelperExportTableData.java b/src/main/java/com/databasepreservation/common/shared/client/common/helpers/HelperExportTableData.java new file mode 100644 index 000000000..eeed9df38 --- /dev/null +++ b/src/main/java/com/databasepreservation/common/shared/client/common/helpers/HelperExportTableData.java @@ -0,0 +1,81 @@ +package com.databasepreservation.common.shared.client.common.helpers; + +import com.databasepreservation.common.shared.ViewerConstants; +import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; +import com.databasepreservation.common.shared.client.common.desktop.GenericField; +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.CheckBox; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.InlineHTML; +import com.google.gwt.user.client.ui.RadioButton; +import com.google.gwt.user.client.ui.TextBox; + +import config.i18n.client.ClientMessages; + +/** + * @author Miguel Guimarães + */ +public class HelperExportTableData { + private static final ClientMessages messages = GWT.create(ClientMessages.class); + private TextBox filenameTextBox; + private RadioButton radioButtonExportAll; + private CheckBox checkBoxExportDescription; + + public HelperExportTableData(ViewerTable table) { + this.filenameTextBox = new TextBox(); + filenameTextBox.setText(table.getSchemaName() + "_" + table.getName() + ViewerConstants.CSV_EXTENSION); + } + + public String getFilename() { + return filenameTextBox.getText(); + } + + public boolean exportAll() { + return radioButtonExportAll.getValue(); + } + + public boolean exportDescription() { + return checkBoxExportDescription.getValue(); + } + + public FlowPanel getWidget() { + FlowPanel panel = new FlowPanel(); + GenericField genericFieldFilename = GenericField.createInstance(messages.csvExportDialogLabelForFilename(), + filenameTextBox); + filenameTextBox.addStyleName("form-textbox"); + radioButtonExportAll = new RadioButton("export-size"); + radioButtonExportAll.setText(messages.csvExportDialogLabelForExportAllRadioButton()); + RadioButton radioButtonExportVisible = new RadioButton("export-size"); + radioButtonExportVisible.setText(messages.csvExportDialogLabelForExportVisibleRadioButton()); + radioButtonExportVisible.setValue(true); + FlowPanel radioButtonsPanel = new FlowPanel(); + radioButtonsPanel.add(radioButtonExportAll); + radioButtonsPanel.add(radioButtonExportVisible); + GenericField genericFieldExportAll = GenericField.createInstance("Export Rows:", radioButtonsPanel); + checkBoxExportDescription = new CheckBox(); + checkBoxExportDescription.setText(messages.csvExportDialogLabelForExportHeaderWithDescriptions()); + checkBoxExportDescription.addStyleName("form-checkbox"); + GenericField genericFieldExportDescription = GenericField.createInstance(checkBoxExportDescription); + + panel.add(wrapHelperText(genericFieldFilename, messages.csvExportDialogHelpTextForFilename())); + panel.add(wrapHelperText(genericFieldExportAll, messages.csvExportDialogHelpTextForExportSize())); + panel.add(wrapHelperText(genericFieldExportDescription, messages.csvExportDialogHelpTextForDescription())); + panel.addStyleName("content"); + + return panel; + } + + private FlowPanel wrapHelperText(GenericField genericField, String helpText) { + FlowPanel helper = new FlowPanel(); + helper.addStyleName("form-helper"); + InlineHTML span = new InlineHTML(); + genericField.setCSSMetadata("form-row", "form-label-spaced"); + span.addStyleName("form-text-helper-checkbox text-muted"); + span.setText(helpText); + genericField.addHelperText(span); + helper.add(genericField); + helper.add(span); + + return helper; + } +} diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/lists/AsyncTableCell.java b/src/main/java/com/databasepreservation/common/shared/client/common/lists/AsyncTableCell.java index b1cbfb752..044852cbd 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/lists/AsyncTableCell.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/lists/AsyncTableCell.java @@ -174,13 +174,13 @@ protected void fireChangeEvent(IndexResult result) { exportButtons.setCellPadding(0); exportButtons.setCellSpacing(0); - exportVisibleButton = new Anchor(messages.exportVisible()); - exportVisibleButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - AsyncTableCell.this.exportVisibleClickHandler(); - } - }); + //exportVisibleButton = new Anchor(messages.exportVisible()); + //exportVisibleButton.addClickHandler(new ClickHandler() { + // @Override + // public void onClick(ClickEvent event) { + // AsyncTableCell.this.exportVisibleClickHandler(); + // } + //}); exportAllButton = new Anchor(messages.exportAll()); exportAllButton.addClickHandler(new ClickHandler() { @@ -190,9 +190,9 @@ public void onClick(ClickEvent event) { } }); - exportButtons.setWidget(0, 0, exportVisibleButton); - exportButtons.setText(0, 1, " | "); - exportButtons.setWidget(0, 2, exportAllButton); + // exportButtons.setWidget(0, 0, exportVisibleButton); + // exportButtons.setText(0, 1, " | "); + exportButtons.setWidget(0, 0, exportAllButton); } resultsPager = new AccessibleSimplePager(AccessibleSimplePager.TextLocation.LEFT, diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/lists/TableRowList.java b/src/main/java/com/databasepreservation/common/shared/client/common/lists/TableRowList.java index 2929fd7e4..a85c4610d 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/lists/TableRowList.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/lists/TableRowList.java @@ -2,13 +2,12 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import com.databasepreservation.common.shared.client.common.utils.CommonClientUtils; -import com.google.gwt.user.client.ui.FlowPanel; import org.roda.core.data.v2.common.Pair; import org.roda.core.data.v2.index.IndexResult; import org.roda.core.data.v2.index.facet.Facets; @@ -24,11 +23,15 @@ import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; import com.databasepreservation.common.shared.ViewerStructure.ViewerType; import com.databasepreservation.common.shared.client.ClientLogger; +import com.databasepreservation.common.shared.client.common.DefaultAsyncCallback; +import com.databasepreservation.common.shared.client.common.helpers.HelperExportTableData; +import com.databasepreservation.common.shared.client.common.utils.CommonClientUtils; import com.databasepreservation.common.shared.client.common.utils.UriQueryUtils; import com.databasepreservation.common.shared.client.tools.FilterUtils; import com.databasepreservation.common.shared.client.tools.FontAwesomeIconManager; import com.databasepreservation.common.shared.client.tools.ViewerJsonUtils; import com.databasepreservation.common.shared.client.tools.ViewerStringUtils; +import com.databasepreservation.desktop.client.common.dialogs.Dialogs; import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.SafeHtmlCell; import com.google.gwt.core.shared.GWT; @@ -59,10 +62,12 @@ public class TableRowList extends AsyncTableCell(database, table)); + this.viewerTable = table; } public void setColumnVisibility(Map columnDisplayNameToVisibleState) { @@ -193,7 +198,7 @@ protected void getData(Sublist sublist, ColumnSortList columnSortList, ViewerColumn viewerColumn = entry.getKey(); Column column = entry.getValue(); - columnSortingKeyMap.put(column, Arrays.asList(viewerColumn.getSolrName())); + columnSortingKeyMap.put(column, Collections.singletonList(viewerColumn.getSolrName())); } currentSorter = createSorter(columnSortList, columnSortingKeyMap); @@ -210,6 +215,11 @@ protected void onLoad() { this.getSelectionModel().clear(); } + @Override + public void exportVisibleClickHandler() { + // do nothing + } + public void refreshColumnVisibility() { int count = display.getColumnCount(); for (int i = 0; i < count; i++) { @@ -237,7 +247,7 @@ private void addColumn(ViewerColumn viewerColumn, Column displayCo } } - public String getExportURL(boolean all) { + private String getExportURL(String filename, boolean exportAll, boolean description) { ViewerDatabase database = getObject().getFirst(); ViewerTable table = getObject().getSecond(); @@ -278,30 +288,46 @@ public String getExportURL(boolean all) { // add parameter: subList String paramSubList; - if (!all) { + if (!exportAll) { paramSubList = ViewerJsonUtils.getSubListMapper().write(currentSubList); - } else { - paramSubList = ViewerJsonUtils.getSubListMapper().write(new Sublist(0, Integer.MAX_VALUE)); + urlBuilder.append(ViewerConstants.API_QUERY_PARAM_SUBLIST).append("=").append(UriQueryUtils.encodeQuery(paramSubList)) + .append("&"); } - urlBuilder.append(ViewerConstants.API_QUERY_PARAM_SUBLIST).append("=").append(UriQueryUtils.encodeQuery(paramSubList)) - .append("&"); // add parameter: sorter String paramSorter = ViewerJsonUtils.getSorterMapper().write(currentSorter); - urlBuilder.append(ViewerConstants.API_QUERY_PARAM_SORTER).append("=").append(UriQueryUtils.encodeQuery(paramSorter)); + urlBuilder.append(ViewerConstants.API_QUERY_PARAM_SORTER).append("=").append(UriQueryUtils.encodeQuery(paramSorter)) + .append("&"); + + urlBuilder.append(ViewerConstants.API_PATH_PARAM_FILENAME).append("=").append(UriQueryUtils.encodeQuery(filename)) + .append("&"); + + urlBuilder.append(ViewerConstants.API_PATH_PARAM_EXPORT_DESCRIPTION).append("=").append(description).append("&"); + + urlBuilder.append(ViewerConstants.API_PATH_PARAM_TABLE_UUID).append("=").append(table.getUUID()); GWT.log(urlBuilder.toString()); return urlBuilder.toString(); } - @Override - public void exportVisibleClickHandler() { - Window.Location.assign(getExportURL(false)); - } - @Override public void exportAllClickHandler() { - Window.Location.assign(getExportURL(true)); + HelperExportTableData helperExportTableData = new HelperExportTableData(viewerTable); + Dialogs.showCSVSetupDialog(messages.csvExportDialogTitle(), helperExportTableData, messages.basicActionCancel(), messages.basicActionConfirm(), + new DefaultAsyncCallback() { + + @Override + public void onSuccess(Boolean result) { + if (result) { + String filename = helperExportTableData.getFilename(); + boolean exportAll = helperExportTableData.exportAll(); + boolean exportDescription = helperExportTableData.exportDescription(); + + Window.Location.assign(getExportURL(filename, exportAll, exportDescription)); + } + } + }); } + } diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/utils/JavascriptUtils.java b/src/main/java/com/databasepreservation/common/shared/client/common/utils/JavascriptUtils.java index 71d97e05b..4d3a24ecd 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/utils/JavascriptUtils.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/utils/JavascriptUtils.java @@ -155,8 +155,8 @@ public static native void runMiniUploadForm(String layout) /*-{ path = data.jqXHR.responseJSON.message; } var id = data.context[0].id; - var instance = @com.databasepreservation.server.client.browse.upload.SIARDUpload::getInstance()(); - instance.@com.databasepreservation.server.client.browse.upload.SIARDUpload::loadSIARDAfterUpload(Ljava/lang/String;Ljava/lang/String;)(path, id); + //var instance = @com.databasepreservation.server.client.browse.upload.SIARDUpload::getInstance()(); + //instance.@com.databasepreservation.server.client.browse.upload.SIARDUpload::loadSIARDAfterUpload(Ljava/lang/String;Ljava/lang/String;)(path, id); }, // Callback for uploads start. start: function (e) { diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseSearchesPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseSearchesPanel.java index 4b948eda0..8ed08827b 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseSearchesPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseSearchesPanel.java @@ -55,7 +55,7 @@ private DatabaseSearchesPanel(ViewerDatabase database) { @Override public void handleBreadcrumb(BreadcrumbPanel breadcrumb) { BreadcrumbManager.updateBreadcrumb(breadcrumb, - BreadcrumbManager.forDatabaseSavedSearches(database.getUUID(), database.getMetadata().getName())); + BreadcrumbManager.forDatabaseSavedSearches(database.getMetadata().getName(), database.getUUID())); } private void init() { diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ReferencesPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ReferencesPanel.java index 52ef49f72..77eba5ace 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ReferencesPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ReferencesPanel.java @@ -8,8 +8,6 @@ import java.util.Objects; import java.util.TreeMap; -import com.databasepreservation.common.shared.ViewerConstants; -import com.databasepreservation.common.shared.client.common.utils.ApplicationType; import org.roda.core.data.v2.index.filter.EmptyKeyFilterParameter; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.FilterParameter; @@ -111,17 +109,10 @@ record = result; @Override public void handleBreadcrumb(BreadcrumbPanel breadcrumb) { - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - BreadcrumbManager.updateBreadcrumb(breadcrumb, - BreadcrumbManager.forDesktopReferences(database.getMetadata().getName(), database.getUUID(), table.getSchemaName(), - table.getSchemaUUID(), table.getName(), table.getUUID(), recordUUID, columnName, - columnIndexInTable.toString())); - } else { BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager.forReferences(database.getMetadata().getName(), database.getUUID(), table.getSchemaName(), table.getSchemaUUID(), table.getName(), table.getUUID(), recordUUID, columnName, columnIndexInTable.toString())); - } } private void init() { diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaStructurePanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaStructurePanel.java index aebc5437c..fb75872fa 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaStructurePanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaStructurePanel.java @@ -83,13 +83,8 @@ private SchemaStructurePanel(ViewerDatabase database, final String schemaUUID) { @Override public void handleBreadcrumb(BreadcrumbPanel breadcrumb) { - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager - .forDesktopSchemaStructure(database.getMetadata().getName(), database.getUUID(), schema.getName(), schema.getUUID())); - } else { BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager .forSchemaStructure(database.getMetadata().getName(), database.getUUID(), schema.getName(), schema.getUUID())); - } } private void init() { diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaViewsPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaViewsPanel.java deleted file mode 100644 index 8d0aa1288..000000000 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaViewsPanel.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.databasepreservation.common.shared.client.common.visualization.browse; - -import java.util.HashMap; -import java.util.Map; - -import com.databasepreservation.common.shared.ViewerConstants; -import com.databasepreservation.common.shared.ViewerStructure.ViewerColumn; -import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabase; -import com.databasepreservation.common.shared.ViewerStructure.ViewerSchema; -import com.databasepreservation.common.shared.ViewerStructure.ViewerView; -import com.databasepreservation.common.shared.client.breadcrumb.BreadcrumbPanel; -import com.databasepreservation.common.shared.client.common.RightPanel; -import com.databasepreservation.common.shared.client.common.lists.BasicTablePanel; -import com.databasepreservation.common.shared.client.common.utils.ApplicationType; -import com.databasepreservation.common.shared.client.common.utils.CommonClientUtils; -import com.databasepreservation.common.shared.client.common.utils.JavascriptUtils; -import com.databasepreservation.common.shared.client.tools.BreadcrumbManager; -import com.databasepreservation.common.shared.client.tools.ViewerStringUtils; -import com.google.gwt.core.client.GWT; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.safehtml.shared.SafeHtmlUtils; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.cellview.client.TextColumn; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.Widget; - -import config.i18n.client.ClientMessages; - -/** - * @author Bruno Ferreira - */ -public class SchemaViewsPanel extends RightPanel { - private static final ClientMessages messages = GWT.create(ClientMessages.class); - private static Map instances = new HashMap<>(); - - public static SchemaViewsPanel getInstance(ViewerDatabase database, String schemaUUID) { - String separator = "/"; - String code = database.getUUID() + separator + schemaUUID; - - SchemaViewsPanel instance = instances.get(code); - if (instance == null) { - instance = new SchemaViewsPanel(database, schemaUUID); - instances.put(code, instance); - } - return instance; - } - - interface SchemaViewsPanelUiBinder extends UiBinder { - } - - private static SchemaViewsPanelUiBinder uiBinder = GWT.create(SchemaViewsPanelUiBinder.class); - - private ViewerDatabase database; - private ViewerSchema schema; - - @UiField - FlowPanel contentItems; - - private SchemaViewsPanel(ViewerDatabase viewerDatabase, final String schemaUUID) { - database = viewerDatabase; - schema = database.getMetadata().getSchema(schemaUUID); - - initWidget(uiBinder.createAndBindUi(this)); - init(); - } - - @Override - public void handleBreadcrumb(BreadcrumbPanel breadcrumb) { - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager.forDesktopSchemaViews(database.getMetadata().getName(), - database.getUUID(), schema.getName(), schema.getUUID())); - } else { - BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager.forSchemaViews(database.getMetadata().getName(), - database.getUUID(), schema.getName(), schema.getUUID())); - } - } - - private void init() { - CommonClientUtils.addSchemaInfoToFlowPanel(contentItems, schema); - - for (ViewerView viewerView : schema.getViews()) { - contentItems.add(getBasicTablePanelForViewColumns(viewerView)); - } - - JavascriptUtils.runHighlighter(contentItems.getElement()); - } - - private BasicTablePanel getBasicTablePanelForViewColumns(ViewerView view) { - FlowPanel header = CommonClientUtils.getSchemaAndViewHeader(database.getUUID(), schema, view, "h3"); - - SafeHtmlBuilder infoBuilder = new SafeHtmlBuilder(); - infoBuilder.append(CommonClientUtils.getFieldHTML(messages.description(), view.getDescription())); - - if (ViewerStringUtils.isNotBlank(view.getQueryOriginal())) { - infoBuilder.append(CommonClientUtils.getFieldHTML(messages.originalQuery(), SafeHtmlUtils - .fromSafeConstant("
" + SafeHtmlUtils.htmlEscape(view.getQueryOriginal()) + "
"))); - } - - if (ViewerStringUtils.isNotBlank(view.getQuery())) { - infoBuilder.append(CommonClientUtils.getFieldHTML(messages.query(), - SafeHtmlUtils.fromSafeConstant("
" + SafeHtmlUtils.htmlEscape(view.getQuery()) + "
"))); - } - - // create and return the table panel - return new BasicTablePanel(header, infoBuilder.toSafeHtml(), view.getColumns().iterator(), - - new BasicTablePanel.ColumnInfo<>(messages.columnName(), 15, new TextColumn() { - @Override - public String getValue(ViewerColumn column) { - return column.getDisplayName(); - } - }), - - new BasicTablePanel.ColumnInfo<>(messages.typeName(), 15, new TextColumn() { - @Override - public String getValue(ViewerColumn column) { - return column.getType().getTypeName(); - } - }), - - new BasicTablePanel.ColumnInfo<>(messages.originalTypeName(), 15, new TextColumn() { - @Override - public String getValue(ViewerColumn column) { - return column.getType().getOriginalTypeName(); - } - }), - - new BasicTablePanel.ColumnInfo<>(messages.nullable(), 8, new TextColumn() { - @Override - public String getValue(ViewerColumn column) { - if (column.getNillable()) { - return "Yes"; - } else { - return "No"; - } - } - }), - - new BasicTablePanel.ColumnInfo<>(messages.description(), 35, new TextColumn() { - @Override - public String getValue(ViewerColumn column) { - if (ViewerStringUtils.isNotBlank(column.getDescription())) { - return column.getDescription(); - } else { - return ""; - } - } - }) - - ); - } -} diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaViewsPanel.ui.xml b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaViewsPanel.ui.xml deleted file mode 100644 index 90efb9315..000000000 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaViewsPanel.ui.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaDataPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DataPanel.java similarity index 91% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaDataPanel.java rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DataPanel.java index 71eff7cd5..67610f8ef 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaDataPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DataPanel.java @@ -1,4 +1,4 @@ -package com.databasepreservation.common.shared.client.common.visualization.browse; +package com.databasepreservation.common.shared.client.common.visualization.browse.information; import java.util.ArrayList; import java.util.Collections; @@ -13,7 +13,6 @@ import com.databasepreservation.common.shared.ViewerStructure.ViewerSchema; import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; import com.databasepreservation.common.shared.client.common.lists.BasicTablePanel; -import com.databasepreservation.common.shared.client.common.utils.CommonClientUtils; import com.databasepreservation.common.shared.client.tools.HistoryManager; import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeHtmlUtils; @@ -31,23 +30,23 @@ /** * @author Bruno Ferreira */ -public class SchemaDataPanel extends Composite { +public class DataPanel extends Composite { private static final ClientMessages messages = GWT.create(ClientMessages.class); - private static Map instances = new HashMap<>(); + private static Map instances = new HashMap<>(); - public static SchemaDataPanel getInstance(ViewerDatabase database, String schemaUUID) { + public static DataPanel getInstance(ViewerDatabase database, String schemaUUID) { String separator = "/"; String code = database.getUUID() + separator + schemaUUID; - SchemaDataPanel instance = instances.get(code); + DataPanel instance = instances.get(code); if (instance == null) { - instance = new SchemaDataPanel(database, schemaUUID); + instance = new DataPanel(database, schemaUUID); instances.put(code, instance); } return instance; } - interface SchemaDataPanelUiBinder extends UiBinder { + interface SchemaDataPanelUiBinder extends UiBinder { } private static SchemaDataPanelUiBinder uiBinder = GWT.create(SchemaDataPanelUiBinder.class); @@ -59,7 +58,7 @@ interface SchemaDataPanelUiBinder extends UiBinder { @UiField FlowPanel contentItems, tableContent; - private SchemaDataPanel(ViewerDatabase viewerDatabase, final String schemaUUID) { + private DataPanel(ViewerDatabase viewerDatabase, final String schemaUUID) { database = viewerDatabase; schema = database.getMetadata().getSchema(schemaUUID); diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaDataPanel.ui.xml b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DataPanel.ui.xml similarity index 100% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaDataPanel.ui.xml rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DataPanel.ui.xml diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseInformationPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DatabaseInformationPanel.java similarity index 93% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseInformationPanel.java rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DatabaseInformationPanel.java index b49db3719..66a4cdbcf 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseInformationPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DatabaseInformationPanel.java @@ -1,16 +1,14 @@ -package com.databasepreservation.common.shared.client.common.visualization.browse; +package com.databasepreservation.common.shared.client.common.visualization.browse.information; import java.util.HashMap; import java.util.Map; -import com.databasepreservation.common.shared.ViewerConstants; import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabase; import com.databasepreservation.common.shared.ViewerStructure.ViewerMetadata; import com.databasepreservation.common.shared.ViewerStructure.ViewerSchema; import com.databasepreservation.common.shared.client.breadcrumb.BreadcrumbPanel; import com.databasepreservation.common.shared.client.common.MetadataField; import com.databasepreservation.common.shared.client.common.RightPanel; -import com.databasepreservation.common.shared.client.common.utils.ApplicationType; import com.databasepreservation.common.shared.client.tools.BreadcrumbManager; import com.databasepreservation.common.shared.client.tools.ViewerStringUtils; import com.google.gwt.core.client.GWT; @@ -92,14 +90,14 @@ private void init() { private void initDataContent() { if (database.getMetadata().getSchemas().size() == 1) { - final SchemaDataPanel instance = SchemaDataPanel.getInstance(database, database.getMetadata().getSchemas().get(0).getUUID()); + final DataPanel instance = DataPanel.getInstance(database, database.getMetadata().getSchemas().get(0).getUUID()); instance.reload(advancedMode); dataContent.add(instance); } else { TabPanel tabPanel = new TabPanel(); for (ViewerSchema schema : database.getMetadata().getSchemas()) { tabPanel.addStyleName("browseItemMetadata"); - final SchemaDataPanel instance = SchemaDataPanel.getInstance(database, schema.getUUID()); + final DataPanel instance = DataPanel.getInstance(database, schema.getUUID()); instance.reload(advancedMode); tabPanel.add(instance, schema.getName()); diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseInformationPanel.ui.xml b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DatabaseInformationPanel.ui.xml similarity index 100% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseInformationPanel.ui.xml rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/DatabaseInformationPanel.ui.xml diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ErDiagram.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/ErDiagram.java similarity index 99% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ErDiagram.java rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/ErDiagram.java index d1ea49cbf..a9a0e4a8d 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ErDiagram.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/ErDiagram.java @@ -1,4 +1,4 @@ -package com.databasepreservation.common.shared.client.common.visualization.browse; +package com.databasepreservation.common.shared.client.common.visualization.browse.information; import java.util.ArrayList; import java.util.HashMap; @@ -10,7 +10,6 @@ import com.databasepreservation.common.shared.ViewerStructure.ViewerSchema; import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; import com.databasepreservation.common.shared.client.common.utils.ApplicationType; -import com.databasepreservation.common.shared.client.common.utils.CommonClientUtils; import com.databasepreservation.common.shared.client.tools.ViewerStringUtils; import com.github.nmorel.gwtjackson.client.ObjectMapper; import com.google.gwt.core.client.GWT; @@ -19,7 +18,6 @@ import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ErDiagram.ui.xml b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/ErDiagram.ui.xml similarity index 100% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/ErDiagram.ui.xml rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/information/ErDiagram.ui.xml diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/table/TableSavedSearchEditPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/table/TableSavedSearchEditPanel.java index b5c3918d9..6469aff6d 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/table/TableSavedSearchEditPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/table/TableSavedSearchEditPanel.java @@ -1,7 +1,6 @@ package com.databasepreservation.common.shared.client.common.visualization.browse.table; import com.databasepreservation.common.client.BrowserService; -import com.databasepreservation.common.shared.ViewerConstants; import com.databasepreservation.common.shared.ViewerStructure.IsIndexed; import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabase; import com.databasepreservation.common.shared.client.breadcrumb.BreadcrumbPanel; @@ -9,9 +8,7 @@ import com.databasepreservation.common.shared.client.common.RightPanel; import com.databasepreservation.common.shared.client.common.search.SavedSearch; import com.databasepreservation.common.shared.client.common.search.SearchInfo; -import com.databasepreservation.common.shared.client.common.utils.ApplicationType; import com.databasepreservation.common.shared.client.common.utils.CommonClientUtils; -import com.databasepreservation.common.shared.client.tools.BreadcrumbManager; import com.databasepreservation.common.shared.client.tools.HistoryManager; import com.databasepreservation.common.shared.client.tools.ViewerJsonUtils; import com.google.gwt.core.client.GWT; @@ -88,13 +85,9 @@ public void onSuccess(IsIndexed result) { */ @Override public void handleBreadcrumb(BreadcrumbPanel breadcrumb) { - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager - .forDesktopDatabaseSavedSearchEdit(database.getMetadata().getName(), database.getUUID(), savedSearchUUID)); - } else { - BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager - .forDatabaseSavedSearchEdit(database.getMetadata().getName(), database.getUUID(), savedSearchUUID)); - } + // BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager + // .forDatabaseSavedSearchEdit(database.getMetadata().getName(), + // database.getUUID(), savedSearchUUID)); } /** diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/table/TableSavedSearchPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/table/TableSavedSearchPanel.java index 3dda23305..68dd4d2a9 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/table/TableSavedSearchPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/table/TableSavedSearchPanel.java @@ -1,7 +1,6 @@ package com.databasepreservation.common.shared.client.common.visualization.browse.table; import com.databasepreservation.common.client.BrowserService; -import com.databasepreservation.common.shared.ViewerConstants; import com.databasepreservation.common.shared.ViewerStructure.IsIndexed; import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabase; import com.databasepreservation.common.shared.client.breadcrumb.BreadcrumbPanel; @@ -10,7 +9,6 @@ import com.databasepreservation.common.shared.client.common.search.SavedSearch; import com.databasepreservation.common.shared.client.common.search.SearchInfo; import com.databasepreservation.common.shared.client.common.search.TableSearchPanel; -import com.databasepreservation.common.shared.client.common.utils.ApplicationType; import com.databasepreservation.common.shared.client.common.utils.CommonClientUtils; import com.databasepreservation.common.shared.client.tools.BreadcrumbManager; import com.databasepreservation.common.shared.client.tools.ViewerJsonUtils; @@ -80,13 +78,8 @@ public void onSuccess(IsIndexed result) { */ @Override public void handleBreadcrumb(BreadcrumbPanel breadcrumb) { - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager - .forDesktopDatabaseSavedSearch(database.getMetadata().getName(), database.getUUID(), savedSearchUUID)); - } else { BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager .forDatabaseSavedSearch(database.getMetadata().getName(), database.getUUID(), savedSearchUUID)); - } } /** diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseReportPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/ReportPanel.java similarity index 78% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseReportPanel.java rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/ReportPanel.java index 5e5bd42d6..c712b9069 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseReportPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/ReportPanel.java @@ -1,4 +1,4 @@ -package com.databasepreservation.common.shared.client.common.visualization.browse; +package com.databasepreservation.common.shared.client.common.visualization.browse.technicalInformation; import java.util.HashMap; import java.util.Map; @@ -19,22 +19,22 @@ /** * @author Bruno Ferreira */ -public class DatabaseReportPanel extends RightPanel { +public class ReportPanel extends RightPanel { private static final ClientMessages messages = GWT.create(ClientMessages.class); - private static Map instances = new HashMap<>(); + private static Map instances = new HashMap<>(); - public static DatabaseReportPanel getInstance(ViewerDatabase database) { + public static ReportPanel getInstance(ViewerDatabase database) { String code = database.getUUID(); - DatabaseReportPanel instance = instances.get(code); + ReportPanel instance = instances.get(code); if (instance == null) { - instance = new DatabaseReportPanel(database); + instance = new ReportPanel(database); instances.put(code, instance); } return instance; } - interface ReportPanelUiBinder extends UiBinder { + interface ReportPanelUiBinder extends UiBinder { } private static ReportPanelUiBinder uiBinder = GWT.create(ReportPanelUiBinder.class); @@ -47,7 +47,7 @@ interface ReportPanelUiBinder extends UiBinder { @UiField(provided = true) MarkdownWidgetWrapper contentItems; - private DatabaseReportPanel(ViewerDatabase database) { + private ReportPanel(ViewerDatabase database) { this.database = database; this.contentItems = new MarkdownWidgetWrapper(database.getUUID()); diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseReportPanel.ui.xml b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/ReportPanel.ui.xml similarity index 100% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseReportPanel.ui.xml rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/ReportPanel.ui.xml diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaRoutinesPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/RoutinesPanel.java similarity index 94% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaRoutinesPanel.java rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/RoutinesPanel.java index 91abcbc55..2a1c7d1f0 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaRoutinesPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/RoutinesPanel.java @@ -1,4 +1,4 @@ -package com.databasepreservation.common.shared.client.common.visualization.browse; +package com.databasepreservation.common.shared.client.common.visualization.browse.technicalInformation; import java.util.ArrayList; import java.util.Comparator; @@ -34,20 +34,20 @@ /** * @author Bruno Ferreira */ -public class SchemaRoutinesPanel extends RightPanel { +public class RoutinesPanel extends RightPanel { private static final ClientMessages messages = GWT.create(ClientMessages.class); - private static Map instances = new HashMap<>(); + private static Map instances = new HashMap<>(); - public static SchemaRoutinesPanel getInstance(ViewerDatabase database) { - SchemaRoutinesPanel instance = instances.get(database.getUUID()); + public static RoutinesPanel getInstance(ViewerDatabase database) { + RoutinesPanel instance = instances.get(database.getUUID()); if (instance == null) { - instance = new SchemaRoutinesPanel(database); + instance = new RoutinesPanel(database); instances.put(database.getUUID(), instance); } return instance; } - interface SchemaRoutinesUiBinder extends UiBinder { + interface SchemaRoutinesUiBinder extends UiBinder { } private static SchemaRoutinesUiBinder uiBinder = GWT.create(SchemaRoutinesUiBinder.class); @@ -60,7 +60,7 @@ interface SchemaRoutinesUiBinder extends UiBinder { @UiField Label title; - private SchemaRoutinesPanel(ViewerDatabase database) { + private RoutinesPanel(ViewerDatabase database) { this.database = database; initWidget(uiBinder.createAndBindUi(this)); init(); diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaRoutinesPanel.ui.xml b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/RoutinesPanel.ui.xml similarity index 100% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/SchemaRoutinesPanel.ui.xml rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/RoutinesPanel.ui.xml diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseUsersPanel.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/UsersPanel.java similarity index 93% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseUsersPanel.java rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/UsersPanel.java index d9db7d193..b6f96f40b 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseUsersPanel.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/UsersPanel.java @@ -1,4 +1,4 @@ -package com.databasepreservation.common.shared.client.common.visualization.browse; +package com.databasepreservation.common.shared.client.common.visualization.browse.technicalInformation; import java.util.HashMap; import java.util.List; @@ -27,17 +27,17 @@ /** * @author Bruno Ferreira */ -public class DatabaseUsersPanel extends RightPanel { +public class UsersPanel extends RightPanel { private static final ClientMessages messages = com.google.gwt.core.shared.GWT.create(ClientMessages.class); - private static Map instances = new HashMap<>(); + private static Map instances = new HashMap<>(); - public static DatabaseUsersPanel getInstance(ViewerDatabase database) { + public static UsersPanel getInstance(ViewerDatabase database) { String code = database.getUUID(); - instances.computeIfAbsent(code, k -> new DatabaseUsersPanel(database)); + instances.computeIfAbsent(code, k -> new UsersPanel(database)); return instances.get(code); } - interface DatabaseUsersPanelUiBinder extends UiBinder { + interface DatabaseUsersPanelUiBinder extends UiBinder { } private static DatabaseUsersPanelUiBinder uiBinder = GWT.create(DatabaseUsersPanelUiBinder.class); @@ -50,7 +50,7 @@ interface DatabaseUsersPanelUiBinder extends UiBinder getBasicTablePanelForUsers(ViewerMetadata metadata) { diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseUsersPanel.ui.xml b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/UsersPanel.ui.xml similarity index 100% rename from src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/DatabaseUsersPanel.ui.xml rename to src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/technicalInformation/UsersPanel.ui.xml diff --git a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/view/ViewPanelStructure.java b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/view/ViewPanelStructure.java index a2413aa87..ee1f86556 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/view/ViewPanelStructure.java +++ b/src/main/java/com/databasepreservation/common/shared/client/common/visualization/browse/view/ViewPanelStructure.java @@ -3,7 +3,6 @@ import java.util.HashMap; import java.util.Map; -import com.databasepreservation.common.shared.ViewerConstants; import com.databasepreservation.common.shared.ViewerStructure.ViewerColumn; import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabase; import com.databasepreservation.common.shared.ViewerStructure.ViewerSchema; @@ -11,7 +10,6 @@ import com.databasepreservation.common.shared.client.breadcrumb.BreadcrumbPanel; import com.databasepreservation.common.shared.client.common.RightPanel; import com.databasepreservation.common.shared.client.common.lists.BasicTablePanel; -import com.databasepreservation.common.shared.client.common.utils.ApplicationType; import com.databasepreservation.common.shared.client.common.utils.CommonClientUtils; import com.databasepreservation.common.shared.client.common.utils.JavascriptUtils; import com.databasepreservation.common.shared.client.tools.BreadcrumbManager; @@ -86,13 +84,8 @@ private ViewPanelStructure(ViewerDatabase viewerDatabase, final String viewUUID) @Override public void handleBreadcrumb(BreadcrumbPanel breadcrumb) { - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager.forDesktopSchemaViews( - database.getMetadata().getName(), database.getUUID(), schema.getName(), schema.getUUID())); - } else { BreadcrumbManager.updateBreadcrumb(breadcrumb, BreadcrumbManager.forSchemaViews(database.getMetadata().getName(), database.getUUID(), schema.getName(), schema.getUUID())); - } } private void init() { diff --git a/src/main/java/com/databasepreservation/common/shared/client/tools/BreadcrumbManager.java b/src/main/java/com/databasepreservation/common/shared/client/tools/BreadcrumbManager.java index eda553dc6..838c2cad6 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/tools/BreadcrumbManager.java +++ b/src/main/java/com/databasepreservation/common/shared/client/tools/BreadcrumbManager.java @@ -122,66 +122,53 @@ public void execute() { } public static List forDatabaseInformation(final String databaseUUID, final String databaseName) { - List items; - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - items = forSIARDMainPage(databaseUUID, databaseName); - } else { - items = forDatabase(databaseName, databaseUUID); - } - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant( - FontAwesomeIconManager.getTag(FontAwesomeIconManager.DATABASE_INFORMATION) + SafeHtmlUtils.htmlEscape(" " + messages.databaseInformationTextForTitle())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoDatabase(databaseUUID); - } - })); - - return items; - } - - public static List forDesktopDatabaseSavedSearches(final String databaseUUID, final String databaseName) { - List items = forSIARDMainPage(databaseUUID, databaseName); + List items; + if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { + items = forSIARDMainPage(databaseUUID, databaseName); + } else { + items = forDatabase(databaseName, databaseUUID); + } items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.DATABASE_SEARCH) - + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForDesktopDatabaseSavedSearches())), new Command(){ - @Override - public void execute() { - HistoryManager.gotoSavedSearches(databaseUUID); - } - }) - ); + SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.DATABASE_INFORMATION) + + SafeHtmlUtils.htmlEscape(" " + messages.databaseInformationTextForTitle())), + new Command() { + @Override + public void execute() { + HistoryManager.gotoDatabase(databaseUUID); + } + })); + return items; } public static List forDatabaseSearchPanel(final String databaseUUID, final String databaseName) { List items; if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - items = forSIARDMainPage(databaseUUID, databaseName); + items = forSIARDMainPage(databaseUUID, databaseName); } else { - items = forDatabase(databaseName, databaseUUID); + items = forDatabase(databaseName, databaseUUID); } items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.DATABASE_SEARCH) + SafeHtmlUtils.htmlEscape(" " + messages.search())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoDatabaseSearch(databaseUUID); - } - })); + SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.DATABASE_SEARCH) + + SafeHtmlUtils.htmlEscape(" " + messages.search())), + new Command() { + @Override + public void execute() { + HistoryManager.gotoDatabaseSearch(databaseUUID); + } + })); return items; } public static List forDatabaseReport(final String databaseUUID, final String databaseName) { - List items; - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - items = forSIARDMainPage(databaseUUID, databaseName); - } else { - items = forDatabase(databaseName, databaseUUID); - } + List items; + if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { + items = forSIARDMainPage(databaseUUID, databaseName); + } else { + items = forDatabase(databaseName, databaseUUID); + } items.add(new BreadcrumbItem( SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.DATABASE_REPORT) @@ -195,22 +182,13 @@ public void execute() { return items; } - public static List forDesktopDatabaseUsers(final String databaseName, final String databaseUUID) { - List items = forSIARDMainPage(databaseUUID, databaseName); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.DATABASE_USERS) - + SafeHtmlUtils.htmlEscape(" " + messages.titleUsers())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoDesktopDatabaseUsers(databaseUUID); - } - })); - return items; - } - public static List forDatabaseUsers(final String databaseName, final String databaseUUID) { - List items = forDatabase(databaseName, databaseUUID); + List items; + if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { + items = forSIARDMainPage(databaseUUID, databaseName); + } else { + items = forDatabase(databaseName, databaseUUID); + } items.add(new BreadcrumbItem( SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.DATABASE_USERS) + SafeHtmlUtils.htmlEscape(" " + messages.titleUsers())), @@ -224,12 +202,12 @@ public void execute() { } public static List forDatabaseSavedSearches(final String databaseName, final String databaseUUID) { - List items; - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - items = forSIARDMainPage(databaseUUID, databaseName); + List items; + if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { + items = forSIARDMainPage(databaseUUID, databaseName); } else { - items = forDatabase(databaseName, databaseUUID); - } + items = forDatabase(databaseName, databaseUUID); + } items.add(new BreadcrumbItem( SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SAVED_SEARCH) + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_savedSearches())), @@ -257,51 +235,6 @@ public void execute() { return items; } - public static List forDesktopDatabaseSavedSearch(final String databaseName, final String databaseUUID, - final String savedSearchUUID) { - List items = forDesktopDatabaseSavedSearches(databaseUUID, databaseName); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SAVED_SEARCH) - + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_savedSearch())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoSavedSearch(databaseUUID, savedSearchUUID); - } - })); - return items; - } - - public static List forDatabaseSavedSearchEdit(final String databaseName, final String databaseUUID, - final String savedSearchUUID) { - List items = forDatabaseSavedSearches(databaseName, databaseUUID); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SAVED_SEARCH) - + SafeHtmlUtils.htmlEscape(" " + messages.editingSavedSearch())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoEditSavedSearch(databaseUUID, savedSearchUUID); - } - })); - return items; - } - - public static List forDesktopDatabaseSavedSearchEdit(final String databaseName, final String databaseUUID, - final String savedSearchUUID) { - List items = forDesktopDatabaseSavedSearches(databaseUUID, databaseName); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SAVED_SEARCH) - + SafeHtmlUtils.htmlEscape(" " + messages.editingSavedSearch())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoEditSavedSearch(databaseUUID, savedSearchUUID); - } - })); - return items; - } - public static List forSchema(final String databaseName, final String databaseUUID, final String schemaName, final String schemaUUID) { List items = forDatabase(databaseName, databaseUUID); @@ -317,36 +250,6 @@ public void execute() { return items; } - public static List forDesktopSchema(final String databaseName, final String databaseUUID, - final String schemaName, final String schemaUUID) { - List items = forSIARDMainPage(databaseUUID, databaseName); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant( - FontAwesomeIconManager.getTag(FontAwesomeIconManager.SCHEMA) + SafeHtmlUtils.htmlEscape(" " + schemaName)), - new Command() { - @Override - public void execute() { - HistoryManager.gotoDesktopSchema(databaseUUID, schemaUUID); - } - })); - return items; - } - - public static List forDesktopSchemaStructure(final String databaseName, final String databaseUUID, - final String schemaName, final String schemaUUID) { - List items = forSIARDMainPage(databaseUUID, databaseName); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SCHEMA_STRUCTURE) - + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_structure())), - new Command() { - @Override - public void execute() { - //HistoryManager.gotoSchemaStructure(databaseUUID, schemaUUID); - } - })); - return items; - } - public static List forSchemaStructure(final String databaseName, final String databaseUUID, final String schemaName, final String schemaUUID) { List items = forSchema(databaseName, databaseUUID, schemaName, schemaUUID); @@ -365,19 +268,19 @@ public void execute() { public static List forSchemaRoutines(final String databaseUUID, final String databaseName) { List items; if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - items = forDatabase(databaseName, databaseUUID); + items = forSIARDMainPage(databaseUUID, databaseName); } else { - items = forSIARDMainPage(databaseUUID, databaseName); + items = forDatabase(databaseName, databaseUUID); } items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SCHEMA_ROUTINES) - + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_routines())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoSchemaRoutines(databaseUUID); - } - })); + SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SCHEMA_ROUTINES) + + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_routines())), + new Command() { + @Override + public void execute() { + HistoryManager.gotoSchemaRoutines(databaseUUID); + } + })); return items; } @@ -396,39 +299,9 @@ public void execute() { return items; } - public static List forDesktopSchemaTriggers(final String databaseName, final String databaseUUID, - final String schemaName, final String schemaUUID) { - List items = forSIARDMainPage(databaseUUID, databaseName); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SCHEMA_TRIGGERS) - + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_triggers())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoSchemaTriggers(databaseUUID, schemaUUID); - } - })); - return items; - } - public static List forSchemaCheckConstraints(final String databaseName, final String databaseUUID, - final String schemaName, final String schemaUUID) { - List items = forSchema(databaseName, databaseUUID, schemaName, schemaUUID); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SCHEMA_CHECK_CONSTRAINTS) - + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_checkConstraints())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoSchemaCheckConstraints(databaseUUID, schemaUUID); - } - })); - return items; - } - - public static List forDesktopSchemaCheckConstraints(final String databaseName, final String databaseUUID, final String schemaName, final String schemaUUID) { - List items = forSIARDMainPage(databaseUUID, databaseName); + List items = forSchema(databaseName, databaseUUID, schemaName, schemaUUID); items.add(new BreadcrumbItem( SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SCHEMA_CHECK_CONSTRAINTS) + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_checkConstraints())), @@ -456,21 +329,6 @@ public void execute() { return items; } - public static List forDesktopSchemaViews(final String databaseName, final String databaseUUID, - final String schemaName, final String schemaUUID) { - List items = forSIARDMainPage(databaseUUID, databaseName); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SCHEMA_VIEWS) - + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_views())), - new Command() { - @Override - public void execute() { - HistoryManager.gotoSchemaViews(databaseUUID, schemaUUID); - } - })); - return items; - } - public static List forSchemaData(final String databaseName, final String databaseUUID, final String schemaName, final String schemaUUID) { List items = forDatabase(databaseName, databaseUUID); @@ -486,29 +344,14 @@ public void execute() { return items; } - public static List forDesktopTable(final String databaseName, final String databaseUUID, - final String schemaName, final String schemaUUID, final String tableName, final String tableUUID) { - List items = forDesktopSchema(databaseName, databaseUUID, schemaName, schemaUUID); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant( - FontAwesomeIconManager.getTag(FontAwesomeIconManager.TABLE) + SafeHtmlUtils.htmlEscape(" " + tableName)), - new Command() { - @Override - public void execute() { - HistoryManager.gotoDesktopTable(databaseUUID, tableUUID); - } - })); - return items; - } - public static List forTable(final String databaseName, final String databaseUUID, - final String tableName, final String tableUUID) { - List items; - if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { - items = forSIARDMainPage(databaseUUID, databaseName); - } else { - items = forDatabase(databaseName, databaseUUID); - } + final String tableName, final String tableUUID) { + List items; + if (ApplicationType.getType().equals(ViewerConstants.DESKTOP)) { + items = forSIARDMainPage(databaseUUID, databaseName); + } else { + items = forDatabase(databaseName, databaseUUID); + } items.add(new BreadcrumbItem( SafeHtmlUtils.fromSafeConstant( FontAwesomeIconManager.getTag(FontAwesomeIconManager.TABLE) + SafeHtmlUtils.htmlEscape(" " + tableName)), @@ -521,8 +364,8 @@ public void execute() { return items; } - public static List forRecord(final String databaseName, final String databaseUUID, final String tableName, final String tableUUID, - final String recordUUID) { + public static List forRecord(final String databaseName, final String databaseUUID, + final String tableName, final String tableUUID, final String recordUUID) { List items = forTable(databaseName, databaseUUID, tableName, tableUUID); items.add( new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.RECORD) @@ -535,26 +378,10 @@ public void execute() { return items; } - public static List forDesktopRecord(final String databaseName, final String databaseUUID, - final String schemaName, final String schemaUUID, final String tableName, final String tableUUID, - final String recordUUID) { - List items = forDesktopTable(databaseName, databaseUUID, schemaName, schemaUUID, tableName, tableUUID); - items.add( - new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.RECORD) - + SafeHtmlUtils.htmlEscape(" " + messages.menusidebar_record())), new Command() { - @Override - public void execute() { - HistoryManager.gotoRecord(databaseUUID, tableUUID, recordUUID); - } - })); - return items; - } - public static List forReferences(final String databaseName, final String databaseUUID, final String schemaName, final String schemaUUID, final String tableName, final String tableUUID, final String recordUUID, final String columnNameInTable, final String columnIndexInTable) { - List items = forRecord(databaseName, databaseUUID, tableName, tableUUID, - recordUUID); + List items = forRecord(databaseName, databaseUUID, tableName, tableUUID, recordUUID); items.add( new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.REFERENCE) + SafeHtmlUtils.htmlEscape(messages.menusidebar_referencesForColumn(columnNameInTable))), new Command() { @@ -566,22 +393,6 @@ public void execute() { return items; } - public static List forDesktopReferences(final String databaseName, final String databaseUUID, - final String schemaName, final String schemaUUID, final String tableName, final String tableUUID, - final String recordUUID, final String columnNameInTable, final String columnIndexInTable) { - List items = forDesktopRecord(databaseName, databaseUUID, schemaName, schemaUUID, tableName, tableUUID, - recordUUID); - items.add( - new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.REFERENCE) - + SafeHtmlUtils.htmlEscape(messages.menusidebar_referencesForColumn(columnNameInTable))), new Command() { - @Override - public void execute() { - HistoryManager.gotoReferences(databaseUUID, tableUUID, recordUUID, columnIndexInTable); - } - })); - return items; - } - public static List loadingDatabase(final String databaseUUID) { List items = forDatabases(); items.add( @@ -611,10 +422,9 @@ public void execute() { public static List forSIARDIngesting(final String databaseUUID, final String databaseName) { List items = forSIARDMainPage(databaseUUID, databaseName); - items.add(new BreadcrumbItem( - SafeHtmlUtils.fromSafeConstant( - FontAwesomeIconManager.getTag(FontAwesomeIconManager.WRITE) + SafeHtmlUtils.htmlEscape(messages.breadcrumbTextForSIARDIngesting())), - new Command() { + items + .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WRITE) + + SafeHtmlUtils.htmlEscape(messages.breadcrumbTextForSIARDIngesting())), new Command() { @Override public void execute() { HistoryManager.gotoIngestSIARDData(databaseUUID, databaseName); @@ -625,8 +435,8 @@ public void execute() { public static List forSIARDValidatorPage(final String databaseUUID, final String databaseName) { List items = forSIARDMainPage(databaseUUID, databaseName); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SIARD_VALIDATIONS) + items.add(new BreadcrumbItem( + SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.SIARD_VALIDATIONS) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForSIARDValidator())))); return items; } @@ -646,40 +456,40 @@ public void execute() { public static List forCreateConnection() { List items = forHome(); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardCreateSIARDConnection())))); return items; } public static List forTableAndColumns() { List items = forHome(); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardCreateSIARDTableAndColumns())))); return items; } public static List forSIARDExportOptions() { List items = forHome(); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardCreateSIARDExportOptions())))); return items; } public static List forMetadataExportOptions() { List items = forHome(); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardCreateSIARDMetadataOptions())))); return items; } public static List forCustomViews() { List items = forHome(); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardCreateSIARDCustomViews())))); return items; } @@ -699,23 +509,23 @@ public void execute() { public static List forCreateSIARD() { List items = forHome(); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForCreateSIARD())))); + items.add(new BreadcrumbItem( + SafeHtmlUtils.fromSafeConstant(SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForCreateSIARD())))); return items; } public static List forTableAndColumnsSendToWM(final String databaseUUID, final String databaseName) { List items = forSIARDMainPage(databaseUUID, databaseName); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardSendToTableAndColumns())))); return items; } public static List forDBMSConnectionSendToWM(final String databaseUUID, final String databaseName) { List items = forSIARDMainPage(databaseUUID, databaseName); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardSendToDBMSConnection())))); return items; } @@ -723,8 +533,8 @@ public static List forDBMSConnectionSendToWM(final String databa public static List forSIARDExportOptionsSenToWM(final String databaseUUID, final String databaseName) { List items = forSIARDMainPage(databaseUUID, databaseName); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardSendToSIARDExportOptions())))); return items; } @@ -732,16 +542,16 @@ public static List forSIARDExportOptionsSenToWM(final String dat public static List forMetadataExportOptionsSendToWM(final String databaseUUID, final String databaseName) { List items = forSIARDMainPage(databaseUUID, databaseName); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardSendToMetadataExportOptions())))); return items; } public static List forProgressBarPanelSendToWM(final String databaseUUID, final String databaseName) { List items = forSIARDMainPage(databaseUUID, databaseName); - items - .add(new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + items.add( + new BreadcrumbItem(SafeHtmlUtils.fromSafeConstant(FontAwesomeIconManager.getTag(FontAwesomeIconManager.WIZARD) + SafeHtmlUtils.htmlEscape(" " + messages.breadcrumbTextForWizardSendToProgressPanel())))); return items; } diff --git a/src/main/java/com/databasepreservation/common/shared/client/tools/HistoryManager.java b/src/main/java/com/databasepreservation/common/shared/client/tools/HistoryManager.java index 9a175b870..c29e00d1a 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/tools/HistoryManager.java +++ b/src/main/java/com/databasepreservation/common/shared/client/tools/HistoryManager.java @@ -122,22 +122,10 @@ public static void gotoDatabase(String databaseUUID) { newHistory(Arrays.asList(ROUTE_DATABASE, databaseUUID)); } - public static void gotoDesktopDatabase() { - newHistory(Collections.singletonList(ROUTE_DESKTOP_DATABASE)); - } - - public static void gotoDesktopDatabase(String databaseUUID) { - newHistory(Arrays.asList(ROUTE_DESKTOP_DATABASE, databaseUUID)); - } - public static void gotoDatabaseUsers(String databaseUUID) { newHistory(Arrays.asList(ROUTE_DATABASE, databaseUUID, ROUTE_DATABASE_USERS)); } - public static void gotoDesktopDatabaseUsers(String databaseUUID) { - newHistory(Arrays.asList(ROUTE_DESKTOP_DATABASE, databaseUUID, ROUTE_DATABASE_USERS)); - } - public static void gotoDatabaseSearch(String databaseUUID) { newHistory(Arrays.asList(ROUTE_DATABASE, databaseUUID, ROUTE_DATABASE_SEARCH)); } @@ -146,18 +134,10 @@ public static void gotoDatabaseReport(String databaseUUID) { newHistory(Arrays.asList(ROUTE_DATABASE, databaseUUID, ROUTE_DATABASE_REPORT)); } - public static void gotoDesktopDatabaseReport(String databaseUUID) { - newHistory(Arrays.asList(ROUTE_DESKTOP_DATABASE, databaseUUID, ROUTE_DATABASE_REPORT)); - } - public static void gotoSchema(String databaseUUID, String schemaUUID) { newHistory(Arrays.asList(ROUTE_SCHEMA, databaseUUID, schemaUUID)); } - public static void gotoDesktopSchema(String databaseUUID, String schemaUUID) { - newHistory(Arrays.asList(ROUTE_DESKTOP_SCHEMA, databaseUUID, schemaUUID)); - } - public static void gotoSchemaStructure(String databaseUUID, String schemaUUID) { newHistory(Arrays.asList(ROUTE_SCHEMA, databaseUUID, schemaUUID, ROUTE_SCHEMA_STRUCTURE)); } @@ -232,10 +212,6 @@ public static void gotoViewOptions(String databaseUUID, String tableUUID) { newHistory(Arrays.asList(ROUTE_VIEW, databaseUUID, tableUUID, ROUTE_TABLE_OPTIONS)); } - public static void gotoDesktopTable(String databaseUUID, String tableUUID) { - newHistory(Arrays.asList(ROUTE_DESKTOP_TABLE, databaseUUID, tableUUID)); - } - public static void gotoRecord(String databaseUUID, String tableUUID, String recordUUID) { newHistory(Arrays.asList(ROUTE_RECORD, databaseUUID, tableUUID, recordUUID)); } diff --git a/src/main/java/com/databasepreservation/common/shared/client/tools/ViewerJsonUtils.java b/src/main/java/com/databasepreservation/common/shared/client/tools/ViewerJsonUtils.java index d2d7eda04..3d0ce4cba 100644 --- a/src/main/java/com/databasepreservation/common/shared/client/tools/ViewerJsonUtils.java +++ b/src/main/java/com/databasepreservation/common/shared/client/tools/ViewerJsonUtils.java @@ -1,6 +1,7 @@ package com.databasepreservation.common.shared.client.tools; import java.util.List; +import java.util.Map; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; diff --git a/src/main/java/com/databasepreservation/common/transformers/ToolkitStructure2ViewerStructure.java b/src/main/java/com/databasepreservation/common/transformers/ToolkitStructure2ViewerStructure.java index 55e2c9fb1..95d125f31 100644 --- a/src/main/java/com/databasepreservation/common/transformers/ToolkitStructure2ViewerStructure.java +++ b/src/main/java/com/databasepreservation/common/transformers/ToolkitStructure2ViewerStructure.java @@ -7,6 +7,7 @@ import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -599,8 +600,9 @@ private static ViewerType getType(Type type) throws ViewerException { public static ViewerRow getRow(ViewerAbstractConfiguration configuration, String databaseUUID, ViewerTable table, Row row, long rowIndex) throws ViewerException { ViewerRow result = new ViewerRow(); - String rowUUID = SolrUtils.UUIDFromString(table.getId() + "." + rowIndex); + String rowUUID = SolrUtils.UUIDFromString(table.getUUID() + "." + rowIndex); result.setTableId(table.getId()); + result.setTableUUID(table.getUUID()); result.setUUID(rowUUID); result.setCells(getCells(configuration, databaseUUID, table, row, rowIndex, rowUUID)); return result; @@ -608,7 +610,7 @@ public static ViewerRow getRow(ViewerAbstractConfiguration configuration, String private static Map getCells(ViewerAbstractConfiguration configuration, String databaseUUID, ViewerTable table, Row row, long rowIndex, String rowUUID) throws ViewerException { - HashMap result = new HashMap<>(); + Map result = new LinkedHashMap<>(); int colIndex = 0; List toolkitCells = row.getCells(); diff --git a/src/main/java/com/databasepreservation/desktop/client/common/dialogs/Dialogs.java b/src/main/java/com/databasepreservation/desktop/client/common/dialogs/Dialogs.java index 56059296e..8578b5c85 100644 --- a/src/main/java/com/databasepreservation/desktop/client/common/dialogs/Dialogs.java +++ b/src/main/java/com/databasepreservation/desktop/client/common/dialogs/Dialogs.java @@ -12,6 +12,7 @@ import com.databasepreservation.common.shared.client.common.NoAsyncCallback; import com.databasepreservation.common.shared.client.common.desktop.GenericField; +import com.databasepreservation.common.shared.client.common.helpers.HelperExportTableData; import com.databasepreservation.common.shared.client.common.lists.IndexedColumn; import com.databasepreservation.common.shared.client.widgets.MyCellTableResources; import com.databasepreservation.desktop.client.common.helper.HelperValidator; @@ -170,6 +171,44 @@ public static void showQueryResult(String title, String closeButtonText, List
  • callback) { + final DialogBox dialogBox = new DialogBox(false, true); + final Button cancelButton = new Button(cancelButtonText); + final Button confirmButton = new Button(confirmButtonText); + + FlowPanel layout = new FlowPanel(); + FlowPanel footer = new FlowPanel(); + + footer.add(cancelButton); + footer.add(confirmButton); + footer.addStyleName("wui-dialog-layout-footer"); + layout.add(helper.getWidget()); + layout.addStyleName("wui-dialog-layout"); + layout.add(footer); + + cancelButton.addStyleName("btn btn-link"); + cancelButton.addClickHandler(event -> { + dialogBox.hide(); + callback.onSuccess(false); + }); + + confirmButton.addStyleName("btn btn-play"); + confirmButton.addClickHandler(event -> { + dialogBox.hide(); + callback.onSuccess(true); + }); + + dialogBox.setText(title); + dialogBox.setWidget(layout); + dialogBox.setWidth("360px"); + dialogBox.setGlassEnabled(true); + dialogBox.setAnimationEnabled(false); + dialogBox.addStyleName("wui-dialog-information"); + + dialogBox.center(); + dialogBox.show(); + } + public static void showExternalLobsSetupDialog(String title, FlowPanel referencesType, GenericField genericField, String cancelButtonText, String confirmButtonText, boolean toDelete, final AsyncCallback callback) { diff --git a/src/main/java/com/databasepreservation/desktop/client/dbptk/SIARDMainPage.java b/src/main/java/com/databasepreservation/desktop/client/dbptk/SIARDMainPage.java index 8f8e4e1ab..e91d1fe11 100644 --- a/src/main/java/com/databasepreservation/desktop/client/dbptk/SIARDMainPage.java +++ b/src/main/java/com/databasepreservation/desktop/client/dbptk/SIARDMainPage.java @@ -86,7 +86,16 @@ public static SIARDMainPage getInstance(String databaseUUID) { } @UiField - FlowPanel container, panel, metadataInformation, navigationPanels; + FlowPanel container; + + @UiField + FlowPanel panel; + + @UiField + FlowPanel metadataInformation; + + @UiField + FlowPanel navigationPanels; @UiField BreadcrumbPanel breadcrumb; @@ -95,7 +104,10 @@ public static SIARDMainPage getInstance(String databaseUUID) { SimplePanel description; @UiField - Button btnBack, btnExclude; + Button btnBack; + + @UiField + Button btnExclude; private SIARDMainPage(final String databaseUUID) { @@ -371,7 +383,7 @@ public void onFailure(Throwable caught) { @Override public void onSuccess(String databaseUUID) { - HistoryManager.gotoDesktopDatabase(databaseUUID); + HistoryManager.gotoDatabase(databaseUUID); Dialogs.showInformationDialog(messages.SIARDHomePageDialogTitleForBrowsing(), messages.SIARDHomePageTextForIngestSuccess(), messages.basicActionClose(), "btn btn-link"); } @@ -646,16 +658,22 @@ private void setupFooterButtons() { }); btnExclude.addClickHandler(event -> { - CommonDialogs.showConfirmDialog(messages.SIARDHomePageDialogTitleForDelete(), - messages.SIARDHomePageTextForDeleteAll(), messages.basicActionCancel(), messages.basicActionConfirm(), - CommonDialogs.Level.DANGER, "500px", new DefaultAsyncCallback() { - @Override - public void onSuccess(Boolean result) { - if (result) { - deleteAll(); + if (ViewerDatabase.Status.AVAILABLE.equals(database.getStatus()) + || ViewerDatabase.Status.ERROR.equals(database.getStatus()) + || ViewerDatabase.Status.METADATA_ONLY.equals(database.getStatus())) { + CommonDialogs.showConfirmDialog(messages.SIARDHomePageDialogTitleForDelete(), + messages.SIARDHomePageTextForDeleteAll(), messages.basicActionCancel(), messages.basicActionConfirm(), + CommonDialogs.Level.DANGER, "500px", new DefaultAsyncCallback() { + @Override + public void onSuccess(Boolean result) { + if (result) { + deleteAll(); + } } - } - }); + }); + } else if (ViewerDatabase.Status.INGESTING.equals(database.getStatus())) { + Dialogs.showInformationDialog("c", "c", messages.basicActionClose(), "btn btn-link"); + } }); } @@ -695,7 +713,7 @@ public void onFailure(Throwable caught) { @Override public void onSuccess(Boolean result) { - HistoryManager.gotoDesktopDatabase(); + HistoryManager.gotoDatabase(); } }); } else { @@ -707,7 +725,7 @@ public void onFailure(Throwable caught) { @Override public void onSuccess(Boolean result) { - HistoryManager.gotoDesktopDatabase(); + HistoryManager.gotoDatabase(); } }); } diff --git a/src/main/java/com/databasepreservation/desktop/client/main/MainPanelDesktop.java b/src/main/java/com/databasepreservation/desktop/client/main/MainPanelDesktop.java index 582dafd25..bf3855a78 100644 --- a/src/main/java/com/databasepreservation/desktop/client/main/MainPanelDesktop.java +++ b/src/main/java/com/databasepreservation/desktop/client/main/MainPanelDesktop.java @@ -9,21 +9,21 @@ import com.databasepreservation.common.shared.client.common.RightPanel; import com.databasepreservation.common.shared.client.common.utils.JavascriptUtils; import com.databasepreservation.common.shared.client.common.utils.RightPanelLoader; -import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseInformationPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.DatabasePanel; -import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseReportPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseSearchPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseSearchesPanel; -import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseUsersPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.ReferencesPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.RowPanel; -import com.databasepreservation.common.shared.client.common.visualization.browse.SchemaRoutinesPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.foreignKey.ForeignKeyPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.foreignKey.ForeignKeyPanelOptions; +import com.databasepreservation.common.shared.client.common.visualization.browse.information.DatabaseInformationPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.table.TablePanel; import com.databasepreservation.common.shared.client.common.visualization.browse.table.TablePanelOptions; import com.databasepreservation.common.shared.client.common.visualization.browse.table.TableSavedSearchEditPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.table.TableSavedSearchPanel; +import com.databasepreservation.common.shared.client.common.visualization.browse.technicalInformation.ReportPanel; +import com.databasepreservation.common.shared.client.common.visualization.browse.technicalInformation.RoutinesPanel; +import com.databasepreservation.common.shared.client.common.visualization.browse.technicalInformation.UsersPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.view.ViewPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.view.ViewPanelStructure; import com.databasepreservation.common.shared.client.tools.HistoryManager; @@ -104,7 +104,7 @@ public RightPanel load(ViewerDatabase database) { setContent(databaseUUID, currentHistoryPath.get(2), new RightPanelLoader() { @Override public RightPanel load(ViewerDatabase database) { - return DatabaseReportPanel.getInstance(database); + return ReportPanel.getInstance(database); } }); } else if (currentHistoryPath.size() == 3 @@ -114,7 +114,7 @@ public RightPanel load(ViewerDatabase database) { setContent(databaseUUID, currentHistoryPath.get(2), new RightPanelLoader() { @Override public RightPanel load(ViewerDatabase database) { - return DatabaseUsersPanel.getInstance(database); + return UsersPanel.getInstance(database); } }); } else if (currentHistoryPath.size() == 3 @@ -134,7 +134,7 @@ public RightPanel load(ViewerDatabase database) { setContent(databaseUUID, currentHistoryPath.get(2), new RightPanelLoader() { @Override public RightPanel load(ViewerDatabase database) { - return SchemaRoutinesPanel.getInstance(database); + return RoutinesPanel.getInstance(database); } }); } diff --git a/src/main/java/com/databasepreservation/modules/viewer/DbvtkExportModule.java b/src/main/java/com/databasepreservation/modules/viewer/DbvtkExportModule.java index e230fa5a3..95fc4c4f1 100644 --- a/src/main/java/com/databasepreservation/modules/viewer/DbvtkExportModule.java +++ b/src/main/java/com/databasepreservation/modules/viewer/DbvtkExportModule.java @@ -3,14 +3,15 @@ import java.nio.file.Path; import java.util.Set; +import org.roda.core.data.exceptions.GenericException; +import org.roda.core.data.exceptions.NotFoundException; + import com.databasepreservation.common.server.ViewerFactory; import com.databasepreservation.common.server.index.DatabaseRowsSolrManager; -import com.databasepreservation.common.shared.ViewerConstants; import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabase; -import com.databasepreservation.common.shared.client.common.utils.ApplicationType; -import com.databasepreservation.common.transformers.ToolkitStructure2ViewerStructure; import com.databasepreservation.common.shared.ViewerStructure.ViewerDatabaseFromToolkit; import com.databasepreservation.common.shared.ViewerStructure.ViewerTable; +import com.databasepreservation.common.transformers.ToolkitStructure2ViewerStructure; import com.databasepreservation.model.Reporter; import com.databasepreservation.model.data.Row; import com.databasepreservation.model.exception.ModuleException; @@ -32,9 +33,11 @@ public class DbvtkExportModule implements DatabaseExportModule { private ViewerDatabaseFromToolkit viewerDatabase; + private ViewerDatabase retrieved; + private ViewerTable currentTable; - private String preSetDatabaseUUID; + private String databaseUUID; private long rowIndex = 0; @@ -46,7 +49,12 @@ public DbvtkExportModule(Path lobFolder) { public DbvtkExportModule(String databaseUUID, Path lobFolder) { solrManager = ViewerFactory.getSolrManager(); - preSetDatabaseUUID = databaseUUID; + try { + retrieved = solrManager.retrieve(ViewerDatabase.class, databaseUUID); + } catch (NotFoundException | GenericException e) { + retrieved = null; + } + this.databaseUUID = databaseUUID; configuration = DbvtkModuleConfiguration.getInstance(lobFolder); } @@ -96,12 +104,7 @@ public void setIgnoredSchemas(Set ignoredSchemas) { @Override public void handleStructure(DatabaseStructure structure) throws ModuleException { this.structure = structure; - this.viewerDatabase = ToolkitStructure2ViewerStructure.getDatabase(structure, preSetDatabaseUUID); - if(System.getProperty("env", "server").equals(ViewerConstants.SERVER)){ - viewerDatabase.setValidationStatus(ViewerDatabase.ValidationStatus.NOT_VALIDATED); - solrManager.addDatabaseMetadata(viewerDatabase); - } - solrManager.addDatabaseRowCollection(viewerDatabase); + solrManager.addDatabaseRowCollection(databaseUUID); } /** @@ -129,7 +132,7 @@ public void handleDataOpenSchema(String schemaName) throws ModuleException { */ @Override public void handleDataOpenTable(String tableId) throws ModuleException { - currentTable = viewerDatabase.getTable(tableId); + currentTable = retrieved.getMetadata().getTableById(tableId); solrManager.addTable(currentTable); rowIndex = 0; } @@ -144,8 +147,8 @@ public void handleDataOpenTable(String tableId) throws ModuleException { */ @Override public void handleDataRow(Row row) throws ModuleException { - solrManager.addRow(viewerDatabase, - ToolkitStructure2ViewerStructure.getRow(configuration, viewerDatabase.getUUID(), currentTable, row, rowIndex++)); + solrManager.addRow(retrieved.getUUID(), + ToolkitStructure2ViewerStructure.getRow(configuration, databaseUUID, currentTable, row, rowIndex++)); } /** @@ -182,7 +185,7 @@ public void handleDataCloseSchema(String schemaName) throws ModuleException { */ @Override public void finishDatabase() throws ModuleException { - solrManager.markDatabaseAsReady(viewerDatabase); + solrManager.markDatabaseAsReady(databaseUUID); } /** diff --git a/src/main/java/com/databasepreservation/server/client/main/MainPanel.java b/src/main/java/com/databasepreservation/server/client/main/MainPanel.java index c4e7e921b..7465c0050 100644 --- a/src/main/java/com/databasepreservation/server/client/main/MainPanel.java +++ b/src/main/java/com/databasepreservation/server/client/main/MainPanel.java @@ -12,21 +12,20 @@ import com.databasepreservation.common.shared.client.common.RightPanel; import com.databasepreservation.common.shared.client.common.utils.JavascriptUtils; import com.databasepreservation.common.shared.client.common.utils.RightPanelLoader; -import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseInformationPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseListPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.DatabasePanel; -import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseReportPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseSearchPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseSearchesPanel; -import com.databasepreservation.common.shared.client.common.visualization.browse.DatabaseUsersPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.ReferencesPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.RowPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.SchemaStructurePanel; - import com.databasepreservation.common.shared.client.common.visualization.browse.foreignKey.ForeignKeyPanel; +import com.databasepreservation.common.shared.client.common.visualization.browse.information.DatabaseInformationPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.table.TablePanel; import com.databasepreservation.common.shared.client.common.visualization.browse.table.TableSavedSearchEditPanel; import com.databasepreservation.common.shared.client.common.visualization.browse.table.TableSavedSearchPanel; +import com.databasepreservation.common.shared.client.common.visualization.browse.technicalInformation.ReportPanel; +import com.databasepreservation.common.shared.client.common.visualization.browse.technicalInformation.UsersPanel; import com.databasepreservation.common.shared.client.tools.FontAwesomeIconManager; import com.databasepreservation.common.shared.client.tools.HistoryManager; import com.databasepreservation.common.shared.client.widgets.wcag.AccessibleFocusPanel; @@ -183,7 +182,7 @@ public RightPanel load(ViewerDatabase database) { setContent(databaseUUID, new RightPanelLoader() { @Override public RightPanel load(ViewerDatabase database) { - return DatabaseReportPanel.getInstance(database); + return ReportPanel.getInstance(database); } }); @@ -194,7 +193,7 @@ public RightPanel load(ViewerDatabase database) { setContent(databaseUUID, new RightPanelLoader() { @Override public RightPanel load(ViewerDatabase database) { - return DatabaseUsersPanel.getInstance(database); + return UsersPanel.getInstance(database); } }); diff --git a/src/main/java/config/i18n/client/ClientMessages.java b/src/main/java/config/i18n/client/ClientMessages.java index d63ee13fd..238100b5e 100644 --- a/src/main/java/config/i18n/client/ClientMessages.java +++ b/src/main/java/config/i18n/client/ClientMessages.java @@ -1018,4 +1018,23 @@ public interface ClientMessages extends Messages { String newUploadPanelTextForUploadButton(); String uploadSIARDTextForDoneUpload(); + + /********************************************* + * CSV Export Dialog + *********************************************/ + String csvExportDialogTitle(); + + String csvExportDialogLabelForFilename(); + + String csvExportDialogLabelForExportAllRadioButton(); + + String csvExportDialogLabelForExportVisibleRadioButton(); + + String csvExportDialogLabelForExportHeaderWithDescriptions(); + + String csvExportDialogHelpTextForFilename(); + + String csvExportDialogHelpTextForExportSize(); + + String csvExportDialogHelpTextForDescription(); } diff --git a/src/main/resources/config/i18n/client/ClientMessages.properties b/src/main/resources/config/i18n/client/ClientMessages.properties index 637d60aa5..fca0b8beb 100644 --- a/src/main/resources/config/i18n/client/ClientMessages.properties +++ b/src/main/resources/config/i18n/client/ClientMessages.properties @@ -696,6 +696,18 @@ validatorPageTextForDialogFailureInformation=Validation completed with {1,number validatorPageTextForDialogFailureInformation[\=1]=Validation completed with 1 error for database "{0}" validatorPageTextForErrorDetails=For more details about the error, open the report. +############################################################################# +# CSV Export Dialog # +############################################################################## +csvExportDialogTitle=Export to CSV +csvExportDialogLabelForFilename=Filename: +csvExportDialogLabelForExportAllRadioButton=All +csvExportDialogLabelForExportVisibleRadioButton=Visible +csvExportDialogLabelForExportHeaderWithDescriptions=Include descriptions +csvExportDialogHelpTextForFilename=name of the file +csvExportDialogHelpTextForExportSize=choose between exporting all rows or only the visibles +csvExportDialogHelpTextForDescription=select to include the description in the header + #checks validationRequirements= validationRequirements[G_4.1-1]=The SIARD file is stored as a single, ZIP archive in accordance with the specification published by the company PkWare, version 6.3.2. diff --git a/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties b/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties index 5a2a455f6..77516a963 100644 --- a/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties +++ b/src/main/resources/config/i18n/client/ClientMessages_pt_PT.properties @@ -681,3 +681,16 @@ validatorPageTextForDialogSuccessInformation=Validação concluída com sucesso validatorPageTextForDialogFailureInformation=Validação concluída com {1,number} erros para o base de dados "{0}" validatorPageTextForDialogFailureInformation[\=1]=Validação concluída com 1 erro para o base de dados "{0}" validatorPageTextForErrorDetails=Para mais detalhes sobre o erro, abra o relatório + + +############################################################################# +# CSV Export Dialog # +############################################################################## +csvExportDialogTitle=Exportar para CSV +csvExportDialogLabelForFilename=Nome de ficheiro: +csvExportDialogLabelForExportAllRadioButton=Tudo +csvExportDialogLabelForExportVisibleRadioButton=Visíveis +csvExportDialogLabelForExportHeaderWithDescriptions=Incluir descrições +csvExportDialogHelpTextForFilename=o nome do ficheiro +csvExportDialogHelpTextForExportSize=escolha entre exportar todos os registos ou apenas os visíveis +csvExportDialogHelpTextForDescription=selecione para incluir a descrição das colunas no cabeçalho \ No newline at end of file