Skip to content

Commit

Permalink
Fix #166 - add option to test custom view query [skip ci]
Browse files Browse the repository at this point in the history
  • Loading branch information
hmiguim committed Sep 11, 2019
1 parent 8014fe1 commit 6e63263
Show file tree
Hide file tree
Showing 14 changed files with 432 additions and 67 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

<!-- Convenience properties to set versions -->
<version.gwt>2.8.2</version.gwt>
<version.dbptk>2.5.0-RC-2</version.dbptk>
<version.dbptk>2.6.0-SNAPSHOT</version.dbptk>
<version.roda>3.0.2</version.roda>

<version.jersey>2.27</version.jersey>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ ViewerDatabase uploadSIARDStatus(String databaseUUID)

boolean testConnection(String databaseUUID, ConnectionParameters parameters) throws GenericException;

List<List<String>> validateCustomViewQuery(String databaseUUID, ConnectionParameters parameters, String query) throws GenericException;

boolean createSIARD(String UUID, ConnectionParameters connectionParameters,
TableAndColumnsParameters tableAndColumnsParameters, CustomViewsParameters customViewsParameters,
ExportOptionsParameters exportOptionsParameters, MetadataExportOptionsParameters metadataExportOptionsParameters)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ void editSearch(String databaseUUID, String savedSearchUUID, String name, String

void testConnection(String databaseUUID, ConnectionParameters parameters, AsyncCallback<Boolean> async);

void validateCustomViewQuery(String databaseUUID, ConnectionParameters parameters, String query, AsyncCallback<List<List<String>>> async);

void createSIARD(String UUID, ConnectionParameters connectionParameters, TableAndColumnsParameters tableAndColumnsParameters,
CustomViewsParameters customViewsParameters, ExportOptionsParameters exportOptionsParameters,
MetadataExportOptionsParameters metadataExportOptionsParameters, AsyncCallback<Boolean> async);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,11 @@ public boolean testConnection(String databaseUUID, ConnectionParameters paramete
return SIARDController.testConnection(databaseUUID, parameters);
}

@Override
public List<List<String>> validateCustomViewQuery(String databaseUUID, ConnectionParameters parameters, String query) throws GenericException {
return SIARDController.validateCustomViewQuery(databaseUUID, parameters, query);
}

@Override
public boolean createSIARD(String UUID, ConnectionParameters connectionParameters,
TableAndColumnsParameters tableAndColumnsParameters, CustomViewsParameters customViewsParameters,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import java.util.Map;
import java.util.Set;

import com.google.gwt.core.client.GWT;
import config.i18n.client.ClientMessages;
import org.apache.commons.io.IOUtils;
import org.roda.core.data.exceptions.GenericException;
import org.roda.core.data.exceptions.NotFoundException;
Expand All @@ -41,6 +43,7 @@
import com.databasepreservation.main.common.shared.ViewerStructure.ViewerDatabaseFromToolkit;
import com.databasepreservation.main.common.shared.ViewerStructure.ViewerMetadata;
import com.databasepreservation.main.common.shared.ViewerStructure.ViewerSIARDBundle;
import com.databasepreservation.main.common.shared.exceptions.ViewerException;
import com.databasepreservation.main.desktop.shared.models.DBPTKModule;
import com.databasepreservation.main.desktop.shared.models.ExternalLobDBPTK;
import com.databasepreservation.main.desktop.shared.models.PreservationParameter;
Expand Down Expand Up @@ -90,6 +93,32 @@ public static String getReportFileContents(String databaseUUID) throws NotFoundE
return result;
}

public static List<List<String>> validateCustomViewQuery(String databaseUUID, ConnectionParameters parameters, String query)
throws GenericException {
Reporter reporter = getReporter(databaseUUID);
List<List<String>> results = new ArrayList<>();
final DatabaseMigration databaseMigration = initializeDatabaseMigration(reporter);

setupJDBCConnection(databaseMigration, parameters);

try {
DatabaseImportModule importModule = databaseMigration.getImportModule();
importModule.setOnceReporter(reporter);
if (importModule instanceof JDBCImportModule) {
JDBCImportModule jdbcImportModule = (JDBCImportModule) importModule;
try {
results = jdbcImportModule.testCustomViewQuery(query);
} catch (ModuleException e) {
throw new GenericException(e.getMessage());
}
}
} catch (ModuleException e) {
throw new GenericException(e.getMessage());
}

return results;
}

public static boolean testConnection(String databaseUUID, ConnectionParameters parameters)
throws GenericException {
Reporter reporter = getReporter(databaseUUID);
Expand Down Expand Up @@ -268,21 +297,30 @@ public static ViewerMetadata getDatabaseMetadata(String databaseUUID, Connection
final Reporter reporter = getReporter(databaseUUID);
final DatabaseMigration databaseMigration = initializeDatabaseMigration(reporter);
setupJDBCConnection(databaseMigration, parameters);

DatabaseImportModule importModule;
DatabaseStructure schemaInformation = null;
try {
DatabaseImportModule importModule = databaseMigration.getImportModule();
importModule = databaseMigration.getImportModule();
importModule.setOnceReporter(reporter);

if (importModule instanceof JDBCImportModule) {
JDBCImportModule jdbcImportModule = (JDBCImportModule) importModule;
DatabaseStructure schemaInformation = jdbcImportModule.getSchemaInformation();
schemaInformation = jdbcImportModule.getSchemaInformation();
jdbcImportModule.closeConnection();
ViewerDatabaseFromToolkit database = ToolkitStructure2ViewerStructure.getDatabase(schemaInformation);
return database.getMetadata();
}

} catch (ModuleException e) {
throw new GenericException(e.getMessage());
}
ViewerDatabaseFromToolkit database = null;
try {
database = ToolkitStructure2ViewerStructure.getDatabase(schemaInformation);
} catch (ViewerException e) {
LOGGER.debug(e.getMessage());
}

if (database != null)
return database.getMetadata();

return null;
}
Expand Down Expand Up @@ -360,7 +398,7 @@ public static String loadMetadataFromLocal(String databaseUUID, String localPath
}

private static void convertSIARDMetadataToSolr(Path siardPath, String databaseUUID) throws GenericException {
LOGGER.info("starting to import metadata database " + siardPath.toAbsolutePath().toString());
LOGGER.info("starting to import metadata from " + siardPath.toAbsolutePath().toString());

Path reporterPath = ViewerConfiguration.getInstance().getReportPath(databaseUUID).toAbsolutePath();
try (Reporter reporter = new Reporter(reporterPath.getParent().toString(), reporterPath.getFileName().toString())) {
Expand Down Expand Up @@ -730,7 +768,7 @@ private static String constructCustomViews(CustomViewsParameters customViewsPara
outputStream.close();
}
} catch (IOException e) {
throw new GenericException("Could not close the custom views temporary file", e);
// DO NOTHING
}
}
}
Expand All @@ -739,7 +777,6 @@ private static String constructCustomViews(CustomViewsParameters customViewsPara
* For Java 8 or below: check
* http://robertmaldon.blogspot.com/2007/11/dynamically-add-to-eclipse-junit.html
* (last access: 22-07-2019)
*
*/
private static void addURL(URL url) throws Exception {
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@
*/
package com.databasepreservation.main.common.shared.client.common.dialogs;

import java.util.ArrayList;
import java.util.List;

import com.databasepreservation.main.common.shared.client.common.NoAsyncCallback;
import com.databasepreservation.main.common.shared.client.common.lists.IndexedColumn;
import com.databasepreservation.main.common.shared.client.widgets.MyCellTableResources;
import com.databasepreservation.main.desktop.client.common.ComboBoxField;
import com.databasepreservation.main.desktop.client.common.FileUploadField;
import com.databasepreservation.main.desktop.client.common.GenericField;
Expand All @@ -23,18 +28,89 @@
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.regexp.shared.RegExp;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy;
import com.google.gwt.user.cellview.client.TextHeader;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.view.client.ListDataProvider;

import config.i18n.client.ClientMessages;

public class Dialogs {
private static final ClientMessages messages = GWT.create(ClientMessages.class);

public static void showQueryResult(String title, String closeButtonText, List<List<String>> rows) {

final DialogBox dialogBox = new DialogBox(false, true);
dialogBox.setText(title);

FlowPanel layout = new FlowPanel();
Button closeButton = new Button(closeButtonText);
FlowPanel footer = new FlowPanel();

footer.add(closeButton);

dialogBox.setWidget(layout);

CellTable<List<String>> table = new CellTable<>(Integer.MAX_VALUE,
(MyCellTableResources) GWT.create(MyCellTableResources.class));
table.setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.DISABLED);
table.setLoadingIndicator(new HTML(SafeHtmlUtils.fromSafeConstant(
"<div class='spinner'><div class='double-bounce1'></div><div class='double-bounce2'></div></div>")));
table.addStyleName("table-info my-asyncdatagrid-display");

int nrows = rows.size();
int ncols = rows.get(0).size();
ArrayList<List<String>> rowsL = new ArrayList<>(nrows);

for (int irow = 1; irow < nrows; irow++) {
List<String> rowL = rows.get(irow);
GWT.log("" + rowL.toString());
rowsL.add(rowL);
}

// Create table columns
for (int icol = 0; icol < ncols; icol++) {
table.addColumn(new IndexedColumn(icol), new TextHeader(rows.get(0).get(icol)));
}

// Create a list data provider.
final ListDataProvider<List<String>> dataProvider = new ListDataProvider<List<String>>(rowsL);

// Add the table to the dataProvider.
dataProvider.addDataDisplay(table);

layout.add(table);
layout.add(footer);

dialogBox.setGlassEnabled(true);
dialogBox.setAnimationEnabled(false);

closeButton.addClickHandler(event -> {
dialogBox.hide();
});

dialogBox.addStyleName("dialog-custom-view-test-result");
layout.addStyleName("dialog-custom-view-test-result-layout");
footer.addStyleName("dialog-custom-view-test-result-layout-footer");
FlowPanel btnItemCloseButton = new FlowPanel();
btnItemCloseButton.addStyleName("btn-item");
btnItemCloseButton.add(closeButton);
closeButton.addStyleName("btn btn-link");
footer.add(btnItemCloseButton);

dialogBox.setWidget(layout);
dialogBox.center();
dialogBox.show();
}

public static void showExternalLobsSetupDialog(String title, ComboBoxField referencesType, GenericField genericField,
String cancelButtonText, String confirmButtonText, boolean toDelete,
final AsyncCallback<ExternalLobsDialogBoxResult> callback) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.databasepreservation.main.common.shared.client.common.lists;

import java.util.List;

import com.google.gwt.cell.client.TextCell;
import com.google.gwt.user.cellview.client.Column;

/**
* Column used for dynamic table
*
* @author Miguel Guimarães <[email protected]>
*/
public class IndexedColumn extends Column<List<String>, String> {
private final int index;

public IndexedColumn(int index) {
super(new TextCell());
this.index = index;
}

@Override
public String getValue(List<String> object) {
return object.get(index);
}

public int getIndex() {
return this.index;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ private void handleTableAndColumnsPanel() {
tableAndColumnsParameters = (TableAndColumnsParameters) wizardInstances.get(position).getValues();
wizardContent.clear();
position = 2;
CustomViews customViews = CustomViews.getInstance(tableAndColumnsParameters.getSelectedSchemas(), btnNext);
CustomViews customViews = CustomViews.getInstance(tableAndColumnsParameters.getSelectedSchemas(), btnNext, connectionParameters, databaseUUID);
customViews.refreshCustomButtons();
wizardInstances.add(position, customViews);
wizardContent.add(customViews);
Expand All @@ -209,19 +209,34 @@ private void handleCustomViewsPanel() {
final boolean valid = wizardInstances.get(position).validate();

if (!valid) {
Dialogs.showConfirmDialog(messages.customViewsDialogTitle(), messages.customViewsDialogMessage(), messages.customViewsDialogCancel(), messages.customViewsDialogConfirm(), new DefaultAsyncCallback<Boolean>() {
Dialogs.showConfirmDialog(messages.customViewsDialogTitle(), messages.customViewsDialogMessage(), messages.basicActionDiscard(), messages.basicActionConfirm(), new DefaultAsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
if (result) {
customViewsParameters = (CustomViewsParameters) wizardInstances.get(position).getValues();
wizardContent.clear();
position = 3;
SIARDExportOptions exportOptions = SIARDExportOptions.getInstance();
wizardInstances.add(position, exportOptions);
wizardContent.add(exportOptions);
updateButtons();
updateBreadcrumb();
customButtons.clear();
if (wizardInstances.get(position) instanceof CustomViews) {
final CustomViews customViewInstance = (CustomViews) wizardInstances.get(position);

BrowserService.Util.getInstance().validateCustomViewQuery(databaseUUID, connectionParameters, customViewInstance.getCustomViewParameter().getCustomViewQuery(), new DefaultAsyncCallback<List<List<String>>>() {
@Override
public void onSuccess(List<List<String>> result) {

customViewsParameters = customViewInstance.getValues();
wizardContent.clear();
position = 3;
SIARDExportOptions exportOptions = SIARDExportOptions.getInstance();
wizardInstances.add(position, exportOptions);
wizardContent.add(exportOptions);
updateButtons();
updateBreadcrumb();
customButtons.clear();
}

@Override
public void onFailure(Throwable caught) {
Toast.showError(messages.customViewToastErrorTitle(), caught.getMessage());
}
});
}
} else {
customViewsParameters = (CustomViewsParameters) wizardInstances.get(position).getValues();
customViewsParameters.getCustomViewsParameter().remove(customViewsParameters.getCustomViewsParameter().size()-1); // DISCARD THE LAST
Expand Down
Loading

0 comments on commit 6e63263

Please sign in to comment.