Skip to content

Commit

Permalink
Activity log details page - Strategy #148 [skip ci]
Browse files Browse the repository at this point in the history
  • Loading branch information
hmiguim committed Jan 2, 2020
1 parent a939025 commit 1b97881
Show file tree
Hide file tree
Showing 32 changed files with 974 additions and 131 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
package com.databasepreservation.common.api.v1;

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

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
Expand All @@ -13,10 +8,6 @@
import org.roda.core.data.exceptions.NotFoundException;
import org.roda.core.data.exceptions.RequestNotValidException;
import org.roda.core.data.utils.JsonUtils;
import org.roda.core.data.v2.index.filter.Filter;
import org.roda.core.data.v2.index.filter.FilterParameter;
import org.roda.core.data.v2.index.filter.SimpleFilterParameter;
import org.roda.core.data.v2.index.sublist.Sublist;
import org.roda.core.data.v2.user.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -26,16 +17,12 @@
import com.databasepreservation.common.client.exceptions.RESTException;
import com.databasepreservation.common.client.index.FindRequest;
import com.databasepreservation.common.client.index.IndexResult;
import com.databasepreservation.common.client.index.facets.Facets;
import com.databasepreservation.common.client.index.sort.Sorter;
import com.databasepreservation.common.client.models.activity.logs.ActivityLogEntry;
import com.databasepreservation.common.client.models.activity.logs.ActivityLogWrapper;
import com.databasepreservation.common.client.models.activity.logs.LogEntryState;
import com.databasepreservation.common.client.models.structure.ViewerColumn;
import com.databasepreservation.common.client.models.structure.ViewerDatabase;
import com.databasepreservation.common.client.models.structure.ViewerMetadata;
import com.databasepreservation.common.client.services.ActivityLogService;
import com.databasepreservation.common.server.ViewerFactory;
import com.databasepreservation.common.server.activity.log.strategies.ActivityLogStrategy;
import com.databasepreservation.common.utils.ControllerAssistant;
import com.databasepreservation.common.utils.I18nUtility;
import com.databasepreservation.common.utils.UserUtility;
Expand Down Expand Up @@ -69,7 +56,8 @@ public IndexResult<ActivityLogEntry> find(FindRequest findRequest, String locale
} finally {
// register action
controllerAssistant.registerAction(user, state, ViewerConstants.CONTROLLER_FILTER_PARAM,
JsonUtils.getJsonFromObject(findRequest.filter));
JsonUtils.getJsonFromObject(findRequest.filter), ViewerConstants.CONTROLLER_FACET_PARAM,
JsonUtils.getJsonFromObject(findRequest.facets));
}
}

Expand All @@ -82,87 +70,16 @@ public ActivityLogWrapper retrieve(String logUUID) {
controllerAssistant.checkRoles(user);

try {

final ActivityLogEntry retrieve = ViewerFactory.getSolrManager().retrieve(ActivityLogEntry.class, logUUID);
final ViewerDatabase viewerDatabase = getViewerDatabase(retrieve.getParameters());
if (viewerDatabase != null) {
retrieve.setParameters(replaceColumnSolrName(viewerDatabase.getMetadata(), retrieve.getParameters()));
}
return new ActivityLogWrapper(retrieve);
} catch (GenericException | NotFoundException | RequestNotValidException e) {
final ActivityLogStrategy strategy = ViewerFactory.getActivityLogStrategyFactory()
.getStrategy(retrieve.getActionComponent(), retrieve.getActionMethod());
return strategy.apply(new ActivityLogWrapper(retrieve));
} catch (GenericException | NotFoundException e) {
state = LogEntryState.FAILURE;
throw new RESTException(e);
} finally {
// register action
controllerAssistant.registerAction(user, state, ViewerConstants.CONTROLLER_LOG_ID_PARAM, logUUID);
}
}

private ViewerDatabase getViewerDatabase(Map<String, String> parameters)
throws GenericException, RequestNotValidException {

final String databaseUuid = parameters.get(ViewerConstants.CONTROLLER_DATABASE_ID_PARAM);

if (databaseUuid == null)
return null;

List<String> fieldsToReturn = Collections.singletonList(ViewerConstants.SOLR_DATABASES_METADATA);
Filter filterParam = new Filter(new SimpleFilterParameter(ViewerConstants.INDEX_ID, databaseUuid));
final IndexResult<ViewerDatabase> viewerDatabase = ViewerFactory.getSolrManager().find(ViewerDatabase.class,
filterParam, Sorter.NONE, new Sublist(), Facets.NONE, fieldsToReturn);

if (viewerDatabase.getTotalCount() == 0)
return null;

return viewerDatabase.getResults().get(0);
}

private Map<String, String> replaceColumnSolrName(ViewerMetadata metadata, Map<String, String> parameters)
throws GenericException {

final String jsonFilter = parameters.get(ViewerConstants.CONTROLLER_FILTER_PARAM);
final Filter filter = JsonUtils.getObjectFromJson(jsonFilter, Filter.class);

final Map<String, String> mapperSolrToDisplayName = getDisplayNameColumn(metadata, filter);

for (FilterParameter filterParameter : filter.getParameters()) {
if (filterParameter.getName().startsWith(ViewerConstants.SOLR_INDEX_ROW_COLUMN_NAME_PREFIX)) {
filterParameter.setName(mapperSolrToDisplayName.get(filterParameter.getName()));
}
}

final String jsonFromObject = JsonUtils.getJsonFromObject(filter);
parameters.put(ViewerConstants.CONTROLLER_FILTER_PARAM, jsonFromObject);

return parameters;
}

private String getTableIdFromFilter(Filter filter) {
for (FilterParameter filterParameter : filter.getParameters()) {
if (filterParameter.getName().equals(ViewerConstants.SOLR_ROWS_TABLE_ID)
&& filterParameter instanceof SimpleFilterParameter) {
return ((SimpleFilterParameter) filterParameter).getValue();
}
}
return null;
}

private Map<String, String> getDisplayNameColumn(ViewerMetadata metadata, Filter filter) {
Map<String, String> solrNameToDisplayName = new HashMap<>();

String tableId = getTableIdFromFilter(filter);

for (FilterParameter filterParameter : filter.getParameters()) {
if (filterParameter.getName().startsWith(ViewerConstants.SOLR_INDEX_ROW_COLUMN_NAME_PREFIX)) {
final List<ViewerColumn> columns = metadata.getTableById(tableId).getColumns();

for (ViewerColumn column : columns) {
if (column.getSolrName().equals(filterParameter.getName())) {
solrNameToDisplayName.put(column.getSolrName(), column.getDisplayName());
}
}
}
}
return solrNameToDisplayName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -128,29 +128,39 @@ public IndexResult<ViewerDatabase> findDatabases(FindRequest findRequest, String

private IndexResult<ViewerDatabase> getViewerDatabaseIndexResult(FindRequest findRequest,
ControllerAssistant controllerAssistant, User user, LogEntryState state) {
long count = 0;
try {
return ViewerFactory.getSolrManager().find(ViewerDatabase.class, findRequest.filter, findRequest.sorter,
findRequest.sublist, findRequest.facets);
final IndexResult<ViewerDatabase> result = ViewerFactory.getSolrManager().find(ViewerDatabase.class,
findRequest.filter, findRequest.sorter, findRequest.sublist, findRequest.facets);
count = result.getTotalCount();
return result;
} catch (GenericException | RequestNotValidException e) {
state = LogEntryState.FAILURE;
throw new RESTException(e);
} finally {
// register action
controllerAssistant.registerAction(user, state);
controllerAssistant.registerAction(user, state, ViewerConstants.CONTROLLER_FILTER_PARAM,
JsonUtils.getJsonFromObject(findRequest.filter), ViewerConstants.CONTROLLER_SUBLIST_PARAM,
JsonUtils.getJsonFromObject(findRequest.sublist), ViewerConstants.CONTROLLER_RETRIEVE_COUNT, count);
}
}

private IndexResult<ViewerDatabase> getViewerDatabaseIndexResult(FindRequest findRequest, List<String> fieldsToReturn,
ControllerAssistant controllerAssistant, User user, LogEntryState state) {
long count = 0;
try {
return ViewerFactory.getSolrManager().find(ViewerDatabase.class, findRequest.filter, findRequest.sorter,
findRequest.sublist, findRequest.facets, fieldsToReturn);
final IndexResult<ViewerDatabase> result = ViewerFactory.getSolrManager().find(ViewerDatabase.class, findRequest.filter, findRequest.sorter,
findRequest.sublist, findRequest.facets, fieldsToReturn);
count = result.getTotalCount();
return result;
} catch (GenericException | RequestNotValidException e) {
state = LogEntryState.FAILURE;
throw new RESTException(e);
} finally {
// register action
controllerAssistant.registerAction(user, state);
controllerAssistant.registerAction(user, state, ViewerConstants.CONTROLLER_FILTER_PARAM,
JsonUtils.getJsonFromObject(findRequest.filter), ViewerConstants.CONTROLLER_SUBLIST_PARAM,
JsonUtils.getJsonFromObject(findRequest.sublist), ViewerConstants.CONTROLLER_RETRIEVE_COUNT, count);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.databasepreservation.common.api.v1;

import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
Expand All @@ -19,6 +23,7 @@
import com.databasepreservation.common.client.models.structure.ViewerDatabaseValidationStatus;
import com.databasepreservation.common.client.models.structure.ViewerMetadata;
import com.databasepreservation.common.client.services.SIARDService;
import com.databasepreservation.common.server.ViewerConfiguration;
import com.databasepreservation.common.server.ViewerFactory;
import com.databasepreservation.common.server.controller.SIARDController;
import com.databasepreservation.common.utils.ControllerAssistant;
Expand All @@ -39,7 +44,7 @@ public String uploadSIARD(String databaseUUID, String path) throws RESTException
final User user = UserUtility.getUser(request);

LogEntryState state = LogEntryState.SUCCESS;
controllerAssistant.checkRoles(UserUtility.getUser(request));
controllerAssistant.checkRoles(user);
try {
return SIARDController.loadFromLocal(path, databaseUUID);
} catch (GenericException e) {
Expand All @@ -57,7 +62,7 @@ public String uploadMetadataSIARDServer(String path) {
final User user = UserUtility.getUser(request);

LogEntryState state = LogEntryState.SUCCESS;
controllerAssistant.checkRoles(UserUtility.getUser(request));
controllerAssistant.checkRoles(user);
try {
return SIARDController.loadMetadataFromLocal(path);
} catch (GenericException e) {
Expand All @@ -74,7 +79,7 @@ public String uploadMetadataSIARD(String databaseUUID, String path) {
final User user = UserUtility.getUser(request);

LogEntryState state = LogEntryState.SUCCESS;
controllerAssistant.checkRoles(UserUtility.getUser(request));
controllerAssistant.checkRoles(user);
try {
return SIARDController.loadMetadataFromLocal(databaseUUID, path);
} catch (GenericException e) {
Expand Down Expand Up @@ -166,7 +171,7 @@ public ViewerMetadata updateMetadataInformation(String databaseUUID, String path
final User user = UserUtility.getUser(request);

LogEntryState state = LogEntryState.SUCCESS;
controllerAssistant.checkRoles(UserUtility.getUser(request));
controllerAssistant.checkRoles(user);
try {
return SIARDController.updateMetadataInformation(databaseUUID, path, parameters);
} catch (GenericException e) {
Expand All @@ -186,9 +191,11 @@ public Boolean validateSIARD(String databaseUUID, String SIARDPath, String valid
final User user = UserUtility.getUser(request);

LogEntryState state = LogEntryState.SUCCESS;
controllerAssistant.checkRoles(UserUtility.getUser(request));
controllerAssistant.checkRoles(user);
String result = null;
try {
return SIARDController.validateSIARD(databaseUUID, SIARDPath, validationReportPath, allowedTypePath,
result = getValidationReportPath(validationReportPath, SIARDPath);
return SIARDController.validateSIARD(databaseUUID, SIARDPath, result, allowedTypePath,
skipAdditionalChecks);
} catch (GenericException e) {
state = LogEntryState.FAILURE;
Expand All @@ -197,7 +204,7 @@ public Boolean validateSIARD(String databaseUUID, String SIARDPath, String valid
// register action
controllerAssistant.registerAction(user, state, ViewerConstants.CONTROLLER_DATABASE_ID_PARAM, databaseUUID,
ViewerConstants.CONTROLLER_SIARD_PATH_PARAM, SIARDPath, ViewerConstants.CONTROLLER_REPORT_PATH_PARAM,
validationReportPath, ViewerConstants.CONTROLLER_SKIP_ADDITIONAL_CHECKS_PARAM, skipAdditionalChecks);
result, ViewerConstants.CONTROLLER_SKIP_ADDITIONAL_CHECKS_PARAM, skipAdditionalChecks);
}
}

Expand All @@ -217,7 +224,7 @@ public void updateStatusValidate(String databaseUUID, ViewerDatabaseValidationSt
final User user = UserUtility.getUser(request);

LogEntryState state = LogEntryState.SUCCESS;
controllerAssistant.checkRoles(UserUtility.getUser(request));
controllerAssistant.checkRoles(user);
try {
SIARDController.updateStatusValidate(databaseUUID, status);
} finally {
Expand All @@ -233,7 +240,7 @@ public void deleteSIARDFile(String databaseUUID, String path) {
final User user = UserUtility.getUser(request);

LogEntryState state = LogEntryState.SUCCESS;
controllerAssistant.checkRoles(UserUtility.getUser(request));
controllerAssistant.checkRoles(user);
try {
SIARDController.deleteSIARDFileFromPath(path, databaseUUID);
} catch (GenericException e) {
Expand All @@ -252,7 +259,7 @@ public void deleteSIARDValidatorReportFile(String databaseUUID, String path) {
final User user = UserUtility.getUser(request);

LogEntryState state = LogEntryState.SUCCESS;
controllerAssistant.checkRoles(UserUtility.getUser(request));
controllerAssistant.checkRoles(user);
try {
SIARDController.deleteValidatorReportFileFromPath(path, databaseUUID);
} catch (GenericException e) {
Expand All @@ -265,4 +272,15 @@ public void deleteSIARDValidatorReportFile(String databaseUUID, String path) {
}
}

private String getValidationReportPath(String validationReportPath, String siardPath) {
if (validationReportPath == null) {
String filename = Paths.get(siardPath).getFileName().toString().replaceFirst("[.][^.]+$", "") + "-"
+ new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + ".txt";
validationReportPath = Paths
.get(ViewerConfiguration.getInstance().getSIARDReportValidationPath().toString(), filename).toAbsolutePath()
.toString();
}

return validationReportPath;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ public IndexResult<SavedSearch> find(String databaseUUID, FindRequest findReques
// register action
controllerAssistant.registerAction(user, databaseUUID, state, ViewerConstants.CONTROLLER_DATABASE_ID_PARAM,
databaseUUID,
ViewerConstants.CONTROLLER_FILTER_PARAM, JsonUtils.getJsonFromObject(findRequest));
ViewerConstants.CONTROLLER_FILTER_PARAM, JsonUtils.getJsonFromObject(findRequest.filter),
ViewerConstants.CONTROLLER_SUBLIST_PARAM, JsonUtils.getJsonFromObject(findRequest.sublist));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,8 +422,9 @@ public class ViewerConstants {
public static final String CONTROLLER_ROW_ID_PARAM = "rowUUID";
public static final String CONTROLLER_COLUMN_ID_PARAM = "columnID";
public static final String CONTROLLER_LOG_ID_PARAM = "logID";
public static final String CONTROLLER_FILENAME_PARAM = "rowUUID";
public static final String CONTROLLER_FILENAME_PARAM = "filename";
public static final String CONTROLLER_FILTER_PARAM = "filter";
public static final String CONTROLLER_FACET_PARAM = "facets";
public static final String CONTROLLER_EXPORT_PARAM = "export";
public static final String CONTROLLER_SUBLIST_PARAM = "sublist";
public static final String CONTROLLER_SKIP_ADDITIONAL_CHECKS_PARAM = "additional-checks";
Expand All @@ -439,7 +440,9 @@ public class ViewerConstants {
*/
public static final String CONTROLLER_ACTIVITY_LOG_RESOURCE = "com.databasepreservation.common.api.v1.ActivityLogResource";
public static final String CONTROLLER_DATABASE_RESOURCE = "com.databasepreservation.common.api.v1.DatabaseResource";
public static final String CONTROLLER_EXPORT_RESOURCE = "com.databasepreservation.common.api.v1.ExportsResource";
public static final String CONTROLLER_FILE_RESOURCE = "com.databasepreservation.common.api.v1.FileResource";
public static final String CONTROLLER_LOB_RESOURCE = "com.databasepreservation.common.api.v1.LobsResource";
public static final String CONTROLLER_SIARD_RESOURCE = "com.databasepreservation.common.api.v1.SIARDResource";
public static final String CONTROLLER_SEARCH_RESOURCE = "com.databasepreservation.common.api.v1.SearchResource";
public static final String CONTROLLER_USER_LOGIN_CONTROLLER = "com.databasepreservation.common.server.controller.UserLoginController";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ interface ActivityLogDetailedPanelUiBinder extends UiBinder<Widget, ActivityLogD
FlowPanel content;

private static Map<String, ActivityLogDetailedPanel> instances = new HashMap<>();
private ActivityLogEntry activityLogEntry;
private ActivityLogWrapper activityLogWrapper;

public static ActivityLogDetailedPanel getInstance(String logUUID) {
return instances.computeIfAbsent(logUUID, k -> new ActivityLogDetailedPanel(logUUID));
Expand All @@ -61,7 +61,7 @@ private ActivityLogDetailedPanel(String logUUID) {
initWidget(uiBinder.createAndBindUi(this));

ActivityLogService.Util.call((ActivityLogWrapper wrapper) -> {
activityLogEntry = wrapper.getActivityLogEntry();
activityLogWrapper = wrapper;
init();
}).retrieve(logUUID);
}
Expand All @@ -70,6 +70,8 @@ private void init() {
logHeader.setWidget(CommonClientUtils.getHeader(FontAwesomeIconManager.getTag(FontAwesomeIconManager.ACTIVITY_LOG),
messages.activityLogDetailedHeaderText(), "h1"));

ActivityLogEntry activityLogEntry = activityLogWrapper.getActivityLogEntry();

RowField dataField = RowField.createInstance(messages.activityLogTextForDate(),
new HTML(Humanize.formatDateTime(activityLogEntry.getDatetime(), true)));
RowField componentField = RowField.createInstance(messages.activityLogTextForComponent(),
Expand Down
Loading

0 comments on commit 1b97881

Please sign in to comment.