diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java index 3fdd4502a74557afc22b4d9b40b608d5cf31dbe0..2fc5334005ca8668cb73191f37292e4bbc11ef0f 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java @@ -297,16 +297,53 @@ public class MetaDataRepository { SearchRequest searchRequest = new SearchRequest(SearchRepositoryConstants.INDEX_METADATA); - BoolQueryBuilder emailQuery = QueryBuilders.boolQuery(); + BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); + + BoolQueryBuilder authorBuilder = QueryBuilders.boolQuery(); + if (email != null) + authorBuilder.should(QueryBuilders + .multiMatchQuery(email, + SearchRepositoryConstants.METADATA_CREATOR_EMAIL, SearchRepositoryConstants.METADATA_CONTRIBUTOR_EMAIL, + SearchRepositoryConstants.METADATA_PUBLISHER_EMAIL) + .type(MultiMatchQueryBuilder.Type.PHRASE_PREFIX)); + if(authorBuilder.hasClauses()) + queryBuilder.must(authorBuilder); + + + // Authorization restrictions + final MatchQueryBuilder publicQuery = QueryBuilders.matchQuery(SearchRepositoryConstants.PROJECT_VISIBILITY, "public") + .fuzzyTranspositions(false).autoGenerateSynonymsPhraseQuery(false).boost(0.0f); + if(user.isEmpty()) { + queryBuilder + .must(publicQuery); + } else { + + final Collection<GrantedAuthority> authorities = user.get().getAuthorities(); + final BoolQueryBuilder authQuery = QueryBuilders.boolQuery().boost(0.0f); + final Stream<QueryBuilder> prefixAuthQueries = authorities.stream() + .filter(auth -> !auth.getAuthority().startsWith("ROLE")) + .filter(auth -> !auth.getAuthority().startsWith("SCOPE")) + .map(auth -> QueryBuilders.prefixQuery(SearchRepositoryConstants.PROJECT_NAMESPACE, auth.getAuthority())); + prefixAuthQueries.forEach(pq -> authQuery.should(pq) ); + if(authQuery.hasClauses()) + queryBuilder.must(QueryBuilders.boolQuery().should(authQuery).should(publicQuery)); + else + queryBuilder.must(publicQuery); + } + + + // SearchRequest searchRequest = new SearchRequest(SearchRepositoryConstants.INDEX_METADATA); + + // BoolQueryBuilder emailQuery = QueryBuilders.boolQuery(); - emailQuery - .must(QueryBuilders.prefixQuery(SearchRepositoryConstants.METADATA_CREATOR_EMAIL, email)); + // emailQuery + // .must(QueryBuilders.prefixQuery(SearchRepositoryConstants.METADATA_CREATOR_EMAIL, email)); //addAuthorizationQuery(user, emailQuery); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); - sourceBuilder.query(emailQuery).size(pageSize) + sourceBuilder.query(queryBuilder).size(pageSize) .from(0); searchRequest.source(sourceBuilder); diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java index d2cee8b3a12f37d5c0584a9978b9fb56ffd31d45..da96a91bebb6f46cc90abfec78ad6faa2ebee281 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java @@ -24,7 +24,9 @@ public final class SearchRepositoryConstants { public static final String METADATA_CREATOR = "metadata.creator.name"; public static final String METADATA_CREATOR_EMAIL = "metadata.creator.email"; public static final String METADATA_CONTRIBUTOR = "metadata.contributor.name"; + public static final String METADATA_CONTRIBUTOR_EMAIL = "metadata.contributor.email"; public static final String METADATA_PUBLISHER = "metadata.publisher.name"; + public static final String METADATA_PUBLISHER_EMAIL = "metadata.publisher.email"; public static final String METADATA_LICENSE = "metadata.license"; public static final String METADATA_TYPE = "metadata.type"; diff --git a/src/main/java/at/ac/uibk/gitsearch/web/rest/SearchResource.java b/src/main/java/at/ac/uibk/gitsearch/web/rest/SearchResource.java index ae57e2c0e6753cb7d4983c5938004d0af144742b..42aa1c99dd008c9498eeecb39cf192cfb117e14d 100644 --- a/src/main/java/at/ac/uibk/gitsearch/web/rest/SearchResource.java +++ b/src/main/java/at/ac/uibk/gitsearch/web/rest/SearchResource.java @@ -83,7 +83,7 @@ public class SearchResource { SearchInputMetadataDTO metadata = new SearchInputMetadataDTO(); metadata.setAuthor(login); search.setMetadata(metadata); - SearchResultsDTO results = searchService.searchResultForAuthorEmail("Michael.Breu@uibk.ac.at", 1000); + SearchResultsDTO results = searchService.searchResultForAuthorEmail("michael.breu@uibk.ac.at", 1000); int totalAmountOfViews = 0; int totalAmountOfDownloads = 0; for (SearchResultDTO result : results.getSearchResult()) { diff --git a/src/main/webapp/app/account/achievements.component.html b/src/main/webapp/app/account/achievements.component.html index eda41b4d7e098ca96527acd7fce73481cd6c0862..0198fd08898768a25ec1d571f771016feed653c5 100644 --- a/src/main/webapp/app/account/achievements.component.html +++ b/src/main/webapp/app/account/achievements.component.html @@ -1,36 +1,36 @@ <h2>Achievements</h2> - <ul class="list-group"> + <ul class="list-group" *ngIf="statistics"> <li class="list-group-item d-flex justify-content-between align-items-center"> More than 500 views - <span *ngIf="statistics.views <= 500" class="badge badge-primary badge-pill">{{statistics.views}}</span> - <fa-icon icon="check" *ngIf="statistics.views > 500" class="greeniconcolor"></fa-icon> + <span *ngIf="statistics?.views <= 500" class="badge badge-primary badge-pill">{{statistics?.views}}</span> + <fa-icon icon="check" *ngIf="statistics?.views > 500" class="greeniconcolor"></fa-icon> </li> <li class="list-group-item d-flex justify-content-between align-items-center"> More than 100 views - <span *ngIf="statistics.views <= 100" class="badge badge-primary badge-pill">{{statistics.views}}</span> - <fa-icon icon="check" *ngIf="statistics.views > 100" class="greeniconcolor"></fa-icon> + <span *ngIf="statistics?.views <= 100" class="badge badge-primary badge-pill">{{statistics?.views}}</span> + <fa-icon icon="check" *ngIf="statistics?.views > 100" class="greeniconcolor"></fa-icon> </li> <li class="list-group-item d-flex justify-content-between align-items-center"> More than 10 views - <span *ngIf="statistics.views <= 10" class="badge badge-primary badge-pill">{{statistics.views}}</span> - <fa-icon icon="check" *ngIf="statistics.views > 10" class="greeniconcolor"></fa-icon> + <span *ngIf="statistics?.views <= 10" class="badge badge-primary badge-pill">{{statistics?.views}}</span> + <fa-icon icon="check" *ngIf="statistics?.views > 10" class="greeniconcolor"></fa-icon> </li> <li class="list-group-item d-flex justify-content-between align-items-center"> More than 500 downloads - <span *ngIf="statistics.downloads <= 500" class="badge badge-primary badge-pill">{{statistics.downloads}}</span> - <fa-icon icon="check" *ngIf="statistics.downloads > 500" class="greeniconcolor"></fa-icon> + <span *ngIf="statistics?.downloads <= 500" class="badge badge-primary badge-pill">{{statistics?.downloads}}</span> + <fa-icon icon="check" *ngIf="statistics?.downloads > 500" class="greeniconcolor"></fa-icon> </li> <li class="list-group-item d-flex justify-content-between align-items-center"> More than 100 downloads - <span *ngIf="statistics.downloads <= 100" class="badge badge-primary badge-pill">{{statistics.downloads}}</span> - <fa-icon icon="check" *ngIf="statistics.downloads > 100" class="greeniconcolor"></fa-icon> + <span *ngIf="statistics?.downloads <= 100" class="badge badge-primary badge-pill">{{statistics?.downloads}}</span> + <fa-icon icon="check" *ngIf="statistics?.downloads > 100" class="greeniconcolor"></fa-icon> </li> <li class="list-group-item d-flex justify-content-between align-items-center"> More than 10 downloads - <span *ngIf="statistics.downloads <= 10" class="badge badge-primary badge-pill">{{statistics.downloads}}</span> - <fa-icon icon="check" *ngIf="statistics.downloads > 10" class="greeniconcolor"></fa-icon> + <span *ngIf="statistics?.downloads <= 10" class="badge badge-primary badge-pill">{{statistics?.downloads}}</span> + <fa-icon icon="check" *ngIf="statistics?.downloads > 10" class="greeniconcolor"></fa-icon> </li> </ul> diff --git a/src/main/webapp/app/account/achievements.component.ts b/src/main/webapp/app/account/achievements.component.ts index 8996dad85d6a3df314ef047706cde58730b13b2d..78115b762099f8e7337603b8a7bedac759e37c8e 100644 --- a/src/main/webapp/app/account/achievements.component.ts +++ b/src/main/webapp/app/account/achievements.component.ts @@ -23,18 +23,21 @@ export class AchievementsComponent implements OnInit { console.log('I have been called'); this.searchService.getStatisticsForUser(this.account.firstName + ' ' + this.account.lastName).subscribe( (data: Statistics) => { - this.statistics = data; - // eslint-disable-next-line no-console - console.log( - 'Data: Number of Downloads: ' + - data.downloads + - ' Number of views: ' + - data.views + - ' for account ' + - this.account.firstName + - ' ' + - this.account.lastName - ); + if (data) { + this.statistics = data; + + // eslint-disable-next-line no-console + console.log( + 'Data: Number of Downloads: ' + + data.downloads + + ' Number of views: ' + + data.views + + ' for account ' + + this.account.firstName + + ' ' + + this.account.lastName + ); + } }, () => alert('Could not load statistics for User') );