Skip to content

Commit

Permalink
Merge pull request #3169 from dzhw/moellerth/issue3150
Browse files Browse the repository at this point in the history
#3150 Ordering Data Packages as a Data Provider
  • Loading branch information
moellerth committed Dec 14, 2022
2 parents 69c6f45 + 9ad0432 commit 16b6420
Show file tree
Hide file tree
Showing 34 changed files with 390 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

/**
* REST resource for getting previous versions of a {@link DataAcquisitionProject}.
*
*
* @author René Reitmann
*/
@RestController
Expand All @@ -29,15 +29,16 @@ public class DataAcquisitionProjectReleasesResource {

/**
* Get the last 100 releases of the data acquisition project.
*
*
* @param id The id of the project
*
*
* @return the last 100 releases of the data acquisition project.
*/
@GetMapping("/data-acquisition-projects/{id}/releases")
public ResponseEntity<?> findPreviousDataAcquisitionVersions(@PathVariable String id,
@RequestParam(name = "noBeta", defaultValue = "true") Boolean noBetaReleases) {
List<Release> releases = this.projectVersionsService.findAllReleases(id, noBetaReleases);
@RequestParam(name = "noBeta", defaultValue = "true") Boolean noBetaReleases,
@RequestParam(name = "onlyNotHidden", defaultValue = "false") Boolean onlyNotHiddenVersions) {
List<Release> releases = this.projectVersionsService.findAllReleases(id, noBetaReleases, onlyNotHiddenVersions);

return ResponseEntity.ok().cacheControl(CacheControl.noStore()).body(releases);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public void initJaversForDataAcquisitionProjects() {

/**
* Get the last saved release for the given project id.
*
*
* @param id the id of the data acquisition project.
* @return the last saved release or null
*/
Expand All @@ -73,7 +73,7 @@ public Release findLastRelease(String id) {

/**
* Get the previous release of a data acquisition project. The release before currentRelease.
*
*
* @param id the id of the data acquisition project.
* @param currentRelease get the release saved before this release, if null will return the
* current release
Expand Down Expand Up @@ -111,7 +111,7 @@ public Release findPreviousRelease(String id, Release currentRelease) {
* @param noBeta boolean indicating if beta release shall be skipped or not
* @return List of all releases (max 100 entries).
*/
public List<Release> findAllReleases(String id, boolean noBeta) {
public List<Release> findAllReleases(String id, boolean noBeta, boolean onlyNotHiddenVersions) {
// Find all version changes
List<Shadow<Release>> shadows =
javers.findShadows(QueryBuilder.byValueObjectId(id, DataAcquisitionProject.class, "release")
Expand All @@ -120,16 +120,27 @@ public List<Release> findAllReleases(String id, boolean noBeta) {
if (shadows.isEmpty()) {
return new ArrayList<>();
} else {
return shadows.stream().map(shadow -> shadow.get())
.filter(release -> isAvailable(id, release) && (!noBeta || Version
.valueOf(release.getVersion()).greaterThanOrEqualTo(Version.valueOf("1.0.0"))))
if (onlyNotHiddenVersions) {
// return only not-hidden versions (for all users)
return shadows.stream().map(shadow -> shadow.get())
.filter(release -> checkNotHidden(id, release) && (!noBeta || Version
.valueOf(release.getVersion()).greaterThanOrEqualTo(Version.valueOf("1.0.0"))))
.collect(Collectors.toList());
}

// return all hidden and not-hidden versions for authenticated users and
// only not-hidden versions for public users
return shadows.stream().map(shadow -> shadow.get())
.filter(release -> isAvailable(id, release) && (!noBeta || Version
.valueOf(release.getVersion()).greaterThanOrEqualTo(Version.valueOf("1.0.0"))))
.collect(Collectors.toList());

}
}

/**
* Check if the released shadow has not been hidden for public users.
*
*
* @param id masterId of the project
* @param release the release containing the version of the shadow
* @return false if the shadow is hidden and the current user is a public user
Expand All @@ -141,4 +152,16 @@ private boolean isAvailable(String id, Release release) {
}
return true;
}

/**
* Check if the released shadow is hidden. Only return not hidden shadows.
*
* @param id masterId of the project
* @param release the release containing the version of the shadow
* @return false if the shadow is hidden
*/
private boolean checkNotHidden(String id, Release release) {
return super.repository.exists(QDataAcquisitionProject.dataAcquisitionProject.id
.eq(id + "-" + release.getVersion()).and(projectNotHidden));
}
}
1 change: 1 addition & 0 deletions src/main/webapp/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,7 @@
<script src="/scripts/datapackagemanagement/views/data-package-detail.controller.js"></script>
<script src="/scripts/datapackagemanagement/views/data-package-edit-or-create.controller.js"></script>
<script src="/scripts/datapackagemanagement/views/create-overview-dialog.controller.js"></script>

<script src="/scripts/datapackagemanagement/components/attachment-component.js"></script>
<script src="/scripts/common/details/detail.component.js"></script>
<script src="/scripts/common/details/related-objects.component.js"></script>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ angular.module('metadatamanagementApp').config(
'beta-release-no-doi': 'Dieses Analysepaket hat noch keine DOI.',
'publications-for-data-package': 'Publikationen zu diesem Analysepaket',
'page-description': '{{ description }}',
'title': 'Analysepaket (Skripte): {{ title }}'
'title': 'Analysepaket (Skripte): {{ title }}',
'order-analysispackage-tooltip': 'Klicken, um dieses Analysepaket zu bestellen.'
},
'edit': {
'add-analysis-data-tooltip': 'Klicken, um weitere Analysedaten zu diesem Analysepaket hinzuzufügen.',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ angular.module('metadatamanagementApp').config(
'beta-release-no-doi': 'This analysis package has no DOI yet.',
'publications-for-analysis-package': 'Publications related to this Analysis Package',
'page-description': '{{ description }}',
'title': 'Analysis Package (Scripts): {{ title }}'
'title': 'Analysis Package (Scripts): {{ title }}',
'order-analysispackage-tooltip': 'click to order this analysis package.'
},
'edit': {
'add-analysis-data-tooltip': 'Click to add analysis data to this analysis package.',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ angular.module('metadatamanagementApp')
return deferred;
};

// searches for shadow copy by id and version
var findShadowByIdAndVersion = function(id, version, excludes) {
var query = {};
_.extend(query, createQueryObject(),
Expand All @@ -88,6 +89,27 @@ angular.module('metadatamanagementApp')
return deferred;
};

// searches for master of analysis package with given id
var findAnalysisPackageById = function(id, excludes) {
var query = {};
_.extend(query, createQueryObject(),
SearchHelperService.createMasterByIdQuery(id));
if (excludes) {
query.body._source = {
'excludes': excludes
};
}
var deferred = $q.defer();
ElasticSearchClient.search(query).then(function(result) {
if (result.hits.hits.length === 1) {
deferred.resolve(result.hits.hits[0]._source);
} else {
return deferred.resolve(null);
}
}, deferred.reject);
return deferred;
};

var findAnalysisPackageTitles = function(searchText, filter, type,
queryterm,
dataAcquisitionProjectId) {
Expand Down Expand Up @@ -520,6 +542,7 @@ angular.module('metadatamanagementApp')
return {
findOneById: findOneById,
findShadowByIdAndVersion: findShadowByIdAndVersion,
findAnalysisPackageById: findAnalysisPackageById,
findSponsors: findSponsors,
findInstitutions: findInstitutions,
findAnalysisPackageTitles: findAnalysisPackageTitles,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ angular.module('metadatamanagementApp')
var ctrl = this;
var activeProject;
var bowser = $rootScope.bowser;
ctrl.hasBeenReleasedBefore = false;

ctrl.dataPackageList = {
dataPackage: {
Expand Down Expand Up @@ -144,16 +145,23 @@ angular.module('metadatamanagementApp')
ctrl.projectIsCurrentlyReleased = (project.release != null);
ctrl.assigneeGroup = project.assigneeGroup;
activeProject = project;
ctrl.hasBeenReleasedBefore = project.hasBeenReleasedBefore;
});
}
ctrl.onlyQualitativeData = ContainsOnlyQualitativeDataChecker
.check(result);

// trigger MessageBus for showing ordering options in the sidenav
if (!Principal.isAuthenticated()) {
MessageBus.set('onAnalysisPackageChange',
{
masterId: result.masterId
});
MessageBus.set('onDetailViewLoaded', {type: 'analysisPackage'});
} else {
MessageBus.set('onAnalysisPackageChange',
{
masterId: result.masterId,
version: result.release.version
projectId: result.dataAcquisitionProjectId
});
MessageBus.set('onDetailViewLoaded', {type: 'analysisPackage'});
}
Expand Down Expand Up @@ -212,4 +220,9 @@ angular.module('metadatamanagementApp')
ctrl.toggleSidenav = function() {
$mdSidenav('SideNavBar').toggle();
};

ctrl.showOrderButton = function() {
return ctrl.hasBeenReleasedBefore &&
ctrl.analysisPackage.release !== undefined;
};
});
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
</div>

<div class="fdz-fab-button-container" layout="column" layout-align="center end">
<report-publications-component ng-if="!ctrl.isAuthenticated()" analysis-package="true"></report-publications-component>
<report-publications-component ng-if="!ctrl.isAuthenticated()" analysis-package="true"></report-publications-component>
<md-button class="md-fab md-raised md-accent" data-has-any-authority="ROLE_PUBLISHER, ROLE_DATA_PROVIDER"
ng-click="ctrl.analysisPackageEdit()" ng-if="!ctrl.projectIsCurrentlyReleased">
<md-tooltip md-autohide="true" md-direction="left"
Expand All @@ -91,7 +91,8 @@
</md-tooltip>
<md-icon md-font-set="material-icons">mode_edit</md-icon>
</md-button>
<md-button hide-gt-md class="md-fab md-raised md-accent" ng-if="!ctrl.isAuthenticated()"
<!-- Ordering button moves here if in mobile view -->
<md-button hide-gt-md class="md-fab md-raised md-accent"
ng-click="ctrl.toggleSidenav()">
<md-tooltip md-autohide="true" md-direction="left"
md-z-index="bowser.mobile || bowser.tablet ? -100 : 100001">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,11 @@ angular.module('metadatamanagementApp').config(
'apidocs': 'API',
'database': 'Database'
},
'order-menu': {
'data-package': 'Datenpaket bestellen',
'analysis-package': 'Analysepaket bestellen',
'tooltip': 'Klicken, um die Bestellansicht zu öffnen'
},
'skip-navigation': 'Zum Inhalt springen',
'skip-navigation-tooltip': 'Klicken zum Überspringen des Menüs',
'back-to-search': 'Klicken, um zur Suche zu gelangen',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,11 @@ angular.module('metadatamanagementApp').config(
'apidocs': 'API',
'database': 'Database'
},
'order-menu': {
'data-package': 'Order Data Package',
'analysis-package': 'Order Analysis Package',
'tooltip': 'Click to show ordering options'
},
'skip-navigation': 'Skip to Content',
'skip-navigation-tooltip': 'Click to skip the menu',
'back-to-search': 'Click to show the search page',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ angular
var stateParamsCopy = angular.copy(stateParams);
stateParamsCopy.id = stateParamsCopy.id.slice(
0, stateParams.id.length - 1);
state.go(stateName, stateParamsCopy, {supercede: true});
state.go(stateName, stateParamsCopy, {reload: true, supercede: true});
return $q.reject('Redirect to state without $');
}
return $q.resolve();
Expand Down
21 changes: 21 additions & 0 deletions src/main/webapp/scripts/common/sidenav/sidenav.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ angular.module('metadatamanagementApp').controller('SidenavController',
$scope.isProjectMenuOpen = false;
$scope.isAdminMenuOpen = false;
$scope.isAccountMenuOpen = false;
$scope.isOrderMenuOpen = false;
$scope.logoutButtonDisabled = false;
$scope.sidebarContent = $rootScope.sidebarContent;
$scope.detailViewLoaded = MessageBus;
$scope.onCloseOrderMenu = MessageBus;
$scope.detailViewType = '';
$scope.show = false;

Expand All @@ -40,6 +42,10 @@ angular.module('metadatamanagementApp').controller('SidenavController',
$scope.isAdminMenuOpen = !$scope.isAdminMenuOpen;
};

$scope.toggleOrderMenu = function() {
$scope.isOrderMenuOpen = !$scope.isOrderMenuOpen;
};

$scope.close = function(timeout) {
$timeout(function() {
if (!$mdSidenav('SideNavBar').isLockedOpen()) {
Expand Down Expand Up @@ -113,7 +119,22 @@ angular.module('metadatamanagementApp').controller('SidenavController',
function() {
var data = $scope.detailViewLoaded.get('onDetailViewLoaded', true);
if (data) {
// close order menu if the detail view type changed
if ($scope.detailViewType !== data.type) {
$scope.isOrderMenuOpen = false;
}
$scope.detailViewType = data.type;
}
}, true);

$scope.$watch(function() {
// listen for close triggers
return $scope.onCloseOrderMenu;
},
function() {
var data = $scope.onCloseOrderMenu.get('onCloseOrderMenu', true);
if (data) {
$scope.isOrderMenuOpen = data.open;
}
}, true);
});
52 changes: 43 additions & 9 deletions src/main/webapp/scripts/common/sidenav/sidenav.html.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<fdz-data-package-configurator
ng-if="sidebarContent.configurator && detailViewType === 'dataPackage'"></fdz-data-package-configurator>
<md-content ng-switch="isAuthenticated()" flex layout="column" role="navigation">
<ul ng-if="isAuthenticated()" class="pa0 ma0 overflow-hidden">
<ul ng-if="isAuthenticated()" class="pa0 ma0">
<li class="fdz-navbar-menu">
<md-button class="fdz-navbar-menu-toggle" ng-click="toggleAccountMenu()" id="account-menu-toggle">
<md-icon md-font-set="material-icons">supervisor_account</md-icon>
Expand Down Expand Up @@ -69,6 +69,40 @@
</md-button>
<md-divider></md-divider>
</li>
<!-- order option for data packages -->
<li class="fdz-navbar-menu" ng-switch-when="true" data-has-any-authority="ROLE_DATA_PROVIDER" ng-if="detailViewType === 'dataPackage'">
<md-button class="fdz-navbar-menu-toggle" ui-sref-active="fdz-navbar-button-active" ng-click="toggleOrderMenu()">
<md-icon md-font-set="material-icons">add_shopping_cart</md-icon>
<span data-translate="global.menu.order-menu.data-package"></span>
<md-icon ng-if="!isOrderMenuOpen" md-font-set="material-icons">keyboard_arrow_down</md-icon>
<md-icon ng-if="isOrderMenuOpen" md-font-set="material-icons">keyboard_arrow_up</md-icon>
<md-tooltip md-direction="right" md-autohide="true" md-z-index="bowser.mobile || bowser.tablet ? -100 : 100001">
{{'global.menu.order-menu.tooltip' | translate}}
</md-tooltip>
</md-button>
<md-divider ng-show="!isOrderMenuOpen"></md-divider>
<li ng-show="isOrderMenuOpen" ng-if="detailViewType === 'dataPackage'">
<fdz-data-package-configurator></fdz-data-package-configurator>
</li>
<md-divider ng-show="isOrderMenuOpen"></md-divider>
</li>
<!-- order option for analysis packages -->
<li class="fdz-navbar-menu" ng-switch-when="true" data-has-any-authority="ROLE_DATA_PROVIDER" ng-if="detailViewType === 'analysisPackage'">
<md-button class="fdz-navbar-menu-toggle" ui-sref-active="fdz-navbar-button-active" ng-click="toggleOrderMenu()">
<md-icon md-font-set="material-icons">add_shopping_cart</md-icon>
<span data-translate="global.menu.order-menu.analysis-package"></span>
<md-icon ng-if="!isOrderMenuOpen" md-font-set="material-icons">keyboard_arrow_down</md-icon>
<md-icon ng-if="isOrderMenuOpen" md-font-set="material-icons">keyboard_arrow_up</md-icon>
<md-tooltip md-direction="right" md-autohide="true" md-z-index="bowser.mobile || bowser.tablet ? -100 : 100001">
{{'global.menu.order-menu.tooltip' | translate}}
</md-tooltip>
</md-button>
<md-divider ng-show="!isOrderMenuOpen"></md-divider>
<li ng-show="isOrderMenuOpen" ng-if="detailViewType === 'analysisPackage'">
<fdz-analysis-package-configurator></fdz-analysis-package-configurator>
</li>
<md-divider ng-show="isOrderMenuOpen"></md-divider>
</li>
<li class="fdz-navbar-menu" ng-switch-when="true" data-has-any-authority="ROLE_PUBLISHER, ROLE_ADMIN, ROLE_DATA_PROVIDER">
<md-button class="fdz-navbar-button" ui-sref-active="fdz-navbar-button-active" ui-sref="project-overview" ng-click="close()">
<md-icon md-svg-src="assets/images/icons/format-list-checks.svg"></md-icon>
Expand Down Expand Up @@ -119,13 +153,13 @@
<md-divider></md-divider>
</li>
</ul>
<div layout="column" layout-align="start baseline" flex layout-padding>
<a ng-if="ENV === 'dev' || ENV === 'local'" href="https://saucelabs.com/u/rreitmann" target="_blank">
<img alt="Testing Powered by Sauce Labs" src="./assets/images/sauce_labs.svg" class="saucelabs_logo"/>
<md-tooltip md-direction="right" md-autohide="true" md-z-index="bowser.mobile || bowser.tablet ? -100 : 100001">
Testing powered by Sauce Labs
</md-tooltip>
</a>
</div>
</md-content>
<div layout="column" layout-align="start baseline" layout-padding>
<a ng-if="ENV === 'dev' || ENV === 'local'" href="https://saucelabs.com/u/rreitmann" target="_blank">
<img alt="Testing Powered by Sauce Labs" src="./assets/images/sauce_labs.svg" class="saucelabs_logo"/>
<md-tooltip md-direction="right" md-autohide="true" md-z-index="bowser.mobile || bowser.tablet ? -100 : 100001">
Testing powered by Sauce Labs
</md-tooltip>
</a>
</div>
</md-sidenav>

0 comments on commit 16b6420

Please sign in to comment.