From eefbaf06074428fe8f5fdc024e06b47efa156748 Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Tue, 26 Jan 2021 13:34:39 +0100 Subject: [PATCH] reset ReadCount --- .../controller/AbstractDnetController.java | 40 +++++++++++++++++++ .../manager/controller/MDStoreController.java | 9 ++++- .../mdstore/manager/utils/DatabaseUtils.java | 28 ++++++++++--- .../src/main/resources/static/index.html | 7 +++- .../resources/static/js/mdstoremanager.js | 37 ++++++++++------- 5 files changed, 98 insertions(+), 23 deletions(-) create mode 100644 apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/controller/AbstractDnetController.java diff --git a/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/controller/AbstractDnetController.java b/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/controller/AbstractDnetController.java new file mode 100644 index 00000000..68086c6b --- /dev/null +++ b/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/controller/AbstractDnetController.java @@ -0,0 +1,40 @@ +package eu.dnetlib.data.mdstore.manager.controller; + +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +public abstract class AbstractDnetController { + + @ExceptionHandler(Exception.class) + @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) + public @ResponseBody ErrorMessage handleException(final Exception e) { + return new ErrorMessage(e); + } + + public class ErrorMessage { + + private final String message; + private final String stacktrace; + + public ErrorMessage(final Exception e) { + this(e.getMessage(), ExceptionUtils.getStackTrace(e)); + } + + public ErrorMessage(final String message, final String stacktrace) { + this.message = message; + this.stacktrace = stacktrace; + } + + public String getMessage() { + return this.message; + } + + public String getStacktrace() { + return this.stacktrace; + } + + } +} diff --git a/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/controller/MDStoreController.java b/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/controller/MDStoreController.java index fccce482..ea4a33a6 100644 --- a/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/controller/MDStoreController.java +++ b/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/controller/MDStoreController.java @@ -25,7 +25,7 @@ import io.swagger.annotations.ApiParam; @Api(tags = { "Metadata Stores" }) -public class MDStoreController { +public class MDStoreController extends AbstractDnetController { @Autowired private DatabaseUtils databaseUtils; @@ -121,6 +121,13 @@ public class MDStoreController { return databaseUtils.endReading(versionId); } + @ApiOperation("Reset the read count of a mdstore version") + @GetMapping("/version/{versionId}/resetReading") + public MDStoreVersion resetReading(@ApiParam("the id of the version") @PathVariable final String versionId) + throws MDStoreManagerException { + return databaseUtils.resetReading(versionId); + } + @ApiOperation("Delete multiple mdstore versions") @PostMapping("/versions/deleteList") public StatusResponse deleteVersions(@ApiParam("the list of ids of the versions that have to be deleted") @RequestBody final String[] versions, diff --git a/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/utils/DatabaseUtils.java b/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/utils/DatabaseUtils.java index f85e04ea..ae15a818 100644 --- a/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/utils/DatabaseUtils.java +++ b/apps/dhp-mdstore-manager/src/main/java/eu/dnetlib/data/mdstore/manager/utils/DatabaseUtils.java @@ -6,9 +6,11 @@ import java.util.stream.Collectors; import javax.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import eu.dnetlib.data.mdstore.manager.common.model.MDStore; import eu.dnetlib.data.mdstore.manager.common.model.MDStoreCurrentVersion; @@ -20,7 +22,7 @@ import eu.dnetlib.data.mdstore.manager.repository.MDStoreRepository; import eu.dnetlib.data.mdstore.manager.repository.MDStoreVersionRepository; import eu.dnetlib.data.mdstore.manager.repository.MDStoreWithInfoRepository; -@Component +@Service public class DatabaseUtils { @Autowired @@ -34,6 +36,8 @@ public class DatabaseUtils { @Autowired private JdbcTemplate jdbcTemplate; + private static final Logger log = LoggerFactory.getLogger(DatabaseUtils.class); + public Iterable listMdStores() { return mdstoreWithInfoRepository.findAll(); } @@ -80,14 +84,19 @@ public class DatabaseUtils { @Transactional public void deleteMdStore(final String mdId) throws MDStoreManagerException { - if (!mdstoreRepository.existsById(mdId)) { throw new MDStoreManagerException("On delete MDStore not found " + "[" + mdId + "]"); } + if (!mdstoreRepository.existsById(mdId)) { + log.error("MDStore not found: " + mdId); + throw new MDStoreManagerException("MDStore not found: " + mdId); + } if (mdstoreVersionRepository.countByMdstoreAndReadCountGreaterThan(mdId, 0) > 0) { - throw new MDStoreManagerException("Read transactions found on mdstore : " + mdId); + log.error("Read transactions found on mdstore: " + mdId); + throw new MDStoreManagerException("Read transactions found on mdstore: " + mdId); } if (mdstoreVersionRepository.countByMdstoreAndWriting(mdId, true) > 0) { - throw new MDStoreManagerException("Write transactions found on mdstore : " + mdId); + log.error("Write transactions found on mdstore: " + mdId); + throw new MDStoreManagerException("Write transactions found on mdstore: " + mdId); } mdstoreCurrentVersionRepository.deleteById(mdId); @@ -109,7 +118,14 @@ public class DatabaseUtils { @Transactional public MDStoreVersion endReading(final String versionId) throws MDStoreManagerException { final MDStoreVersion v = mdstoreVersionRepository.findById(versionId).orElseThrow(() -> new MDStoreManagerException("Version not found")); - v.setReadCount(v.getReadCount() - 1); + v.setReadCount(Math.max(0, v.getReadCount() - 1)); + return v; + } + + @Transactional + public MDStoreVersion resetReading(final String versionId) throws MDStoreManagerException { + final MDStoreVersion v = mdstoreVersionRepository.findById(versionId).orElseThrow(() -> new MDStoreManagerException("Version not found")); + v.setReadCount(0); return v; } diff --git a/apps/dhp-mdstore-manager/src/main/resources/static/index.html b/apps/dhp-mdstore-manager/src/main/resources/static/index.html index eb7abfff..6a3c65a6 100644 --- a/apps/dhp-mdstore-manager/src/main/resources/static/index.html +++ b/apps/dhp-mdstore-manager/src/main/resources/static/index.html @@ -144,11 +144,14 @@ {{v.id}} - {{v.readCount}} + + {{v.readCount}} + + {{v.lastUpdate | date:"MMM dd, yyyy 'at' HH:mm"}} {{v.size}} - + diff --git a/apps/dhp-mdstore-manager/src/main/resources/static/js/mdstoremanager.js b/apps/dhp-mdstore-manager/src/main/resources/static/js/mdstoremanager.js index b92c7876..234e9e73 100644 --- a/apps/dhp-mdstore-manager/src/main/resources/static/js/mdstoremanager.js +++ b/apps/dhp-mdstore-manager/src/main/resources/static/js/mdstoremanager.js @@ -11,8 +11,8 @@ app.controller('mdstoreManagerController', function($scope, $http) { $scope.reload = function() { $http.get('/mdstores/?' + $.now()).success(function(data) { $scope.mdstores = data; - }).error(function() { - alert("error"); + }).error(function(err) { + alert('ERROR: ' + err.message); }); }; @@ -23,8 +23,8 @@ app.controller('mdstoreManagerController', function($scope, $http) { } $http.get(url).success(function(data) { $scope.reload(); - }).error(function() { - alert("error"); + }).error(function(err) { + alert('ERROR: ' + err.message); }); }; @@ -32,8 +32,8 @@ app.controller('mdstoreManagerController', function($scope, $http) { if (confirm("Are you sure ?")) { $http.delete('/mdstores/mdstore/' + mdId).success(function(data) { $scope.reload(); - }).error(function() { - alert("error"); + }).error(function(err) { + alert('ERROR: ' + err.message); }); } }; @@ -43,8 +43,8 @@ app.controller('mdstoreManagerController', function($scope, $http) { $http.get('/mdstores/mdstore/' + mdId + '/newVersion?' + $.now()).success(function(data) { $scope.reload(); $scope.listVersions(mdId, currentVersion); - }).error(function() { - alert("error"); + }).error(function(err) { + alert('ERROR: ' + err.message); }); }; @@ -55,12 +55,21 @@ app.controller('mdstoreManagerController', function($scope, $http) { $scope.reload(); $scope.openCurrentVersion = versionId; $scope.refreshVersions(); - }).error(function() { - alert("error"); + }).error(function(err) { + alert('ERROR: ' + err.message); }); } }; + $scope.resetReading = function(versionId) { + $http.get("/mdstores/version/" + versionId + "/resetReading" + '?' + $.now()).success(function(data) { + $scope.reload(); + $scope.refreshVersions(); + }).error(function(err) { + alert('ERROR: ' + err.message); + }); + }; + $scope.listVersions = function(mdId, current) { $scope.openMdstore = mdId; $scope.openCurrentVersion = current; @@ -74,8 +83,8 @@ app.controller('mdstoreManagerController', function($scope, $http) { value.current = (value.id == $scope.openCurrentVersion); }); $scope.versions = data; - }).error(function() { - alert("error"); + }).error(function(err) { + alert('ERROR: ' + err.message); }); }; @@ -87,8 +96,8 @@ app.controller('mdstoreManagerController', function($scope, $http) { $http.delete(url).success(function(data) { $scope.reload(); $scope.refreshVersions(); - }).error(function() { - alert("error"); + }).error(function(err) { + alert('ERROR: ' + err.message); }); } };