diff --git a/.classpath b/.classpath index ccc0156a897a85224341fea9fd94fe7820a6f65b..31241a58a2d6f267db435b5a462f4466f2994fec 100644 --- a/.classpath +++ b/.classpath @@ -32,7 +32,6 @@ </classpathentry> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"> <attributes> - <attribute name="module" value="true"/> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> diff --git a/.externalToolBuilders/mvnw clean generate-sources.launch b/.externalToolBuilders/mvnw clean generate-sources.launch new file mode 100644 index 0000000000000000000000000000000000000000..b62026656baf3b7c682922706ed85d0947c554e3 --- /dev/null +++ b/.externalToolBuilders/mvnw clean generate-sources.launch @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> + <stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <resources> <item path="/gitsearch/target/generated-sources" type="2"/> <item path="/gitsearch/target/generated-test-sources" type="2"/> </resources>}"/> + <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> + <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/gitsearch/mvnw.cmd}"/> + <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/> + <stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="generate-sources"/> + <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> + <stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/gitsearch}"/> +</launchConfiguration> diff --git a/.gitignore b/.gitignore index d69fe7afe398ddfab81c0b56cd7aad7a4769746d..eb314f1436cf4862f5d1403630118baaf2a2470c 100644 --- a/.gitignore +++ b/.gitignore @@ -33,11 +33,6 @@ local.properties .loadpath .factorypath -# External tool builders -.externalToolBuilders/** - -# Locally stored "Eclipse launch configurations" -*.launch # CDT-specific .cproject diff --git a/.project b/.project index 952dd9d4e3e4a45c2ebd57a521c331075a915ff6..1b4a4eb108290395d77debd5e395d53dd3576679 100644 --- a/.project +++ b/.project @@ -7,7 +7,7 @@ <buildSpec> <buildCommand> <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> - <triggers>auto,full,incremental,</triggers> + <triggers>full,incremental,</triggers> <arguments> <dictionary> <key>LaunchConfigHandle</key> diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 9473f98a3bac422998565c357b4ed94cba33569f..35dba3ec363f099ccef5253d545e39a9f8768b6d 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -5,4 +5,7 @@ encoding//src/main/webapp/i18n/de/global.json=UTF-8 encoding//src/main/webapp/i18n/de/search.json=UTF-8 encoding//src/test/java=UTF-8 encoding//src/test/resources=UTF-8 +encoding//src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json=UTF-8 +encoding//src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json=UTF-8 +encoding//src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json=UTF-8 encoding/<project>=UTF-8 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 c8d471d9c3e65e48e9478799d53b2a2d3a7e198f..97afa652de1637efd7381da609154109af162c2a 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 @@ -46,13 +46,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import at.ac.uibk.gitsearch.config.ApplicationProperties; -import at.ac.uibk.gitsearch.service.StatisticsService; import at.ac.uibk.gitsearch.service.dto.AutoCompleteEntry; import at.ac.uibk.gitsearch.service.dto.SearchInputDTO; import at.ac.uibk.gitsearch.service.dto.SearchResultDTO; import at.ac.uibk.gitsearch.service.dto.SearchResultsDTO; import at.ac.uibk.gitsearch.service.dto.UserProvidedMetadataDTO.Person; -import at.ac.uibk.gitsearch.service.impl.StatisticsServiceImpl; @Repository public class MetaDataRepository { @@ -65,13 +63,9 @@ public class MetaDataRepository { private static final int FRAGMENT_SIZE = 5000; - private final StatisticsService statisticsService; - - - public MetaDataRepository(RestHighLevelClient elasticsearchClient, ApplicationProperties properties, StatisticsService statisticsService) { + public MetaDataRepository(RestHighLevelClient elasticsearchClient, ApplicationProperties properties) { this.elasticsearchClient = elasticsearchClient; this.properties = properties; - this.statisticsService = statisticsService; } @@ -312,37 +306,45 @@ public class MetaDataRepository { .multiMatchQuery(term, SearchRepositoryConstants.METADATA_DESCRIPTION, SearchRepositoryConstants.METADATA_KEYWORDS, SearchRepositoryConstants.METADATA_TITLE) .type(MultiMatchQueryBuilder.Type.PHRASE_PREFIX))); - queryBuilder.must(fullTextBuilder); + if(fullTextBuilder.hasClauses()) + queryBuilder.must(fullTextBuilder); BoolQueryBuilder plBuilder = QueryBuilders.boolQuery(); - forEachTerm(searchInputDTO.getMetadata().getProgrammingLanguage(), term -> queryBuilder + forEachTerm(searchInputDTO.getMetadata().getProgrammingLanguage(), term -> plBuilder .should(QueryBuilders.prefixQuery(SearchRepositoryConstants.METADATA_PROGRAMMING_LANGUAGES, term))); - queryBuilder.must(plBuilder); + if(plBuilder.hasClauses()) + queryBuilder.must(plBuilder); BoolQueryBuilder keywordBuilder = QueryBuilders.boolQuery(); - forEachTerm(searchInputDTO.getMetadata().getKeyword(), term -> queryBuilder + forEachTerm(searchInputDTO.getMetadata().getKeyword(), term -> keywordBuilder .should(QueryBuilders.prefixQuery(SearchRepositoryConstants.METADATA_KEYWORDS, term))); - queryBuilder.must(keywordBuilder); + if(keywordBuilder.hasClauses()) + queryBuilder.must(keywordBuilder); BoolQueryBuilder authorBuilder = QueryBuilders.boolQuery(); if (searchInputDTO.getMetadata().getAuthor() != null) - queryBuilder.should(QueryBuilders + authorBuilder.should(QueryBuilders .multiMatchQuery(searchInputDTO.getMetadata().getAuthor(), SearchRepositoryConstants.METADATA_CREATOR, SearchRepositoryConstants.METADATA_CONTRIBUTOR, SearchRepositoryConstants.METADATA_PUBLISHER) .type(MultiMatchQueryBuilder.Type.PHRASE_PREFIX)); - queryBuilder.must(authorBuilder); + if(authorBuilder.hasClauses()) + queryBuilder.must(authorBuilder); if (searchInputDTO.getMetadata().getTypes()!=null && !searchInputDTO.getMetadata().getTypes().isEmpty()) { BoolQueryBuilder typeBuilder = QueryBuilders.boolQuery(); searchInputDTO.getMetadata().getTypes().forEach( type -> typeBuilder.should(QueryBuilders.matchQuery(SearchRepositoryConstants.METADATA_TYPE, type.getExternalName()))); - queryBuilder.must(typeBuilder); + if(typeBuilder.hasClauses()) + queryBuilder.must(typeBuilder); } - + + forEachTerm(searchInputDTO.getMetadata().getLicense(), + term -> queryBuilder.must(QueryBuilders.prefixQuery(SearchRepositoryConstants.METADATA_LICENSE, term))); + // Authorization restrictions final MatchQueryBuilder publicQuery = QueryBuilders.matchQuery(SearchRepositoryConstants.PROJECT_VISIBILITY, "public") - .fuzzyTranspositions(false).autoGenerateSynonymsPhraseQuery(false); + .fuzzyTranspositions(false).autoGenerateSynonymsPhraseQuery(false).boost(0.0f); if(user.isEmpty()) { queryBuilder .must(publicQuery); @@ -351,19 +353,18 @@ public class MetaDataRepository { // TODO: this is not yet perfect :-( prefix query on namespace is not correct. We need to check for the longest prefix // better: Make a gitlab api call to all my project I have read access (and that are not public) final Collection<GrantedAuthority> authorities = user.get().getAuthorities(); - final BoolQueryBuilder authQuery = QueryBuilders.boolQuery(); + 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);}); - - queryBuilder.must(QueryBuilders.boolQuery().should(authQuery).should(publicQuery)); + if(authQuery.hasClauses()) + queryBuilder.must(QueryBuilders.boolQuery().should(authQuery).should(publicQuery)); + else + queryBuilder.must(publicQuery); } - forEachTerm(searchInputDTO.getMetadata().getLicense(), - term -> queryBuilder.must(QueryBuilders.prefixQuery(SearchRepositoryConstants.METADATA_LICENSE, term))); - char[] boundaryChars = { '\n' }; HighlightBuilder highlightBuilder = new HighlightBuilder().highlighterType("plain") @@ -391,7 +392,7 @@ public class MetaDataRepository { float maxScore = searchResponse.getHits().getMaxScore(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); final List<SearchResultDTO> searchResults = new ArrayList<>(); for (SearchHit searchHit : searchResponse.getHits().getHits()) { diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index 5ab2710ef8894958d77c93f31a179258fac8428d..1b933ff69b3d7c142ba4370017a9eff85e71793d 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -79,7 +79,7 @@ spring: issuer-uri: https://sharing.codeability-austria.uibk.ac.at registration: gitlabOidc: - client-id: ${gitsearch.oauthToken} + client-id: 149276ac11138d9ba72fb3cd12815e3fa2f372866df0eac0f7d1aae5fdffea24 client-secret: 6f480635241f420a361581f4837594ea6f48f5ee6f515c1aa89f325dd922dbb0 server: @@ -147,4 +147,4 @@ application: - "http://localhost:8082/api/sharingPluginConfig" gitlab: url: https://sharing.codeability-austria.uibk.ac.at/ - generalAccessToken: L8971ypHA-A84Rh6k2GS \ No newline at end of file + generalAccessToken: zPxPmJE3UXAZJpBzxqej \ No newline at end of file diff --git a/src/main/webapp/content/scss/global.scss b/src/main/webapp/content/scss/global.scss index 364d0a15869c7dc1974d99ca9b1d0a6670b5bf4c..a7235b928817118b56c5d9931e2da00dead855be 100644 --- a/src/main/webapp/content/scss/global.scss +++ b/src/main/webapp/content/scss/global.scss @@ -1,3 +1,6 @@ @import 'bootstrap4.5.2.min'; @import 'navbar'; +.dropdown-item.active, .dropdown-item:active { + background-color: #aaaaaa; +} diff --git a/src/test/java/at/ac/uibk/gitsearch/service/SearchServiceIT.java b/src/test/java/at/ac/uibk/gitsearch/service/SearchServiceIT.java index 99cac016e1a09388db6381962ae94584eeda4434..c800878df5c5ee836f0ed22e218144cc2058f29c 100644 --- a/src/test/java/at/ac/uibk/gitsearch/service/SearchServiceIT.java +++ b/src/test/java/at/ac/uibk/gitsearch/service/SearchServiceIT.java @@ -91,7 +91,7 @@ public class SearchServiceIT { @Test public void testProgrammingLanguageSearch() throws Exception { - final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO("JAVA", null, null, null, null); + final SearchInputMetadataDTO searchMetadata = new SearchInputMetadataDTO("Java".toLowerCase(), null, null, null, null); SearchInputDTO searchQuery = new SearchInputDTO(null, searchMetadata, null, null, null, 0); SearchResultsDTO searchResultPage = searchService.searchResultPage(searchQuery, 0, SearchInputDTO.PAGE_SIZE); diff --git a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json index b3683d92fa3a73b23ae8a124cc3e95da085e8282..c936ac6eaf94a176a00b83c593ef092b1ce83e01 100644 --- a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json +++ b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content1.json @@ -33,14 +33,14 @@ "version" : "1.0", "status" : "final", "title" : "Meta Test Data 76", - "description" : "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", + "description" : "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", "programmingLanguage" : [ "Java" ], "language" : [ "de" ], - "educationLevel" : "Anfänger, (to be detailed)", + "educationLevel" : "Anfänger, (to be detailed)", "audience" : "Anfaenger", "keyword" : [ "Java", diff --git a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json index 5dff8747ea7707d8b0c3e8e189344446ab854b03..a1eb515efe8dc405aa1726541ae4ed11ecdf5028 100644 --- a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json +++ b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content2.json @@ -33,14 +33,14 @@ "version" : "1.0", "status" : "final", "title" : "Meta Test Data 76", - "description" : "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", + "description" : "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", "programmingLanguage" : [ "Java" ], "language" : [ "de" ], - "educationLevel" : "Anfänger, (to be detailed)", + "educationLevel" : "Anfänger, (to be detailed)", "audience" : "Anfaenger", "keyword" : [ "Java", diff --git a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json index 288050dbb1d99e116da91c7d104ca0aed4e97491..719cb9b63bde7e531d35a830209c59ec020ecf1d 100644 --- a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json +++ b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/content3.json @@ -33,14 +33,14 @@ "version" : "1.0", "status" : "final", "title" : "Meta Test Data 76", - "description" : "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", + "description" : "Dies sind Teile des Einführungskurses an der TU Wien. Momentan hier genutzt zum Testen der Metadateninfrastruktur. Version 1.xxx 3. Zeile", "programmingLanguage" : [ "Java" ], "language" : [ "de" ], - "educationLevel" : "Anfänger, (to be detailed)", + "educationLevel" : "Anfänger, (to be detailed)", "audience" : "Anfaenger", "keyword" : [ "Java", diff --git a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/es_metadata.schema.json b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/es_metadata.schema.json index 6e567c18e789636dbe4a1d227c105bc90b3afd04..6922d5b091ccc5ad8f7f3a88720bb657a7cda053 100644 --- a/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/es_metadata.schema.json +++ b/src/test/resources/at/ac/uibk/gitsearch/repository/search/testData/es_metadata.schema.json @@ -12,6 +12,7 @@ }, "mappings" : { "_doc" : { + "properties" : { "file" : { "properties" : { @@ -196,5 +197,4 @@ } } } - - } + }