Genesys Backend issueshttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues2019-03-28T10:09:35+01:00https://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/432Descriptor lists: Overview2019-03-28T10:09:35+01:00Matija ObrezaDescriptor lists: OverviewSimilar to Accession pages, we would like to add **Overview** page for `DescriptorLists` (including when filtered). This requires a new API endpoint.
Term summaries for:
- Data provider
- CropSimilar to Accession pages, we would like to add **Overview** page for `DescriptorLists` (including when filtered). This requires a new API endpoint.
Term summaries for:
- Data provider
- Crop2.4Viacheslav PavlovViacheslav Pavlovhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/430Improve caching2019-04-09T20:54:42+02:00Matija ObrezaImprove cachingFigure out best response for incoming HTTP headers that affect caching. At this moment resources cached by CloudFront seem to get refreshed:
![image](/uploads/acb1974d2aed815b0b66c5d587c75bd2/image.png) ![image](/uploads/aa88cfa2b1c5178...Figure out best response for incoming HTTP headers that affect caching. At this moment resources cached by CloudFront seem to get refreshed:
![image](/uploads/acb1974d2aed815b0b66c5d587c75bd2/image.png) ![image](/uploads/aa88cfa2b1c5178e3ea99b4e3082f425/image.png)
Update cache response headers so that resources stay cached longer in our AWS Cloudfront.
## TODO
Return `Not modified` when (see `#clientCacheValid()`).
- Client header `Etag` matches
- Header `If-Modified-Since` matches `lastModifiedDate`
- Other headers?
- Return `Not modified` HTTPS status as soon as possible in code
- Consider updating `maxage`
Start with code in `RepositoryDownloadController` **v1**, then check all server code that now returns cache headers and add better cache-handling when possible.2.4Viacheslav PavlovViacheslav Pavlovhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/429Massive subsets/datasets2019-03-20T08:20:43+01:00Matija ObrezaMassive subsets/datasetsCreating subsets (or datasets) with 100,000s accession refs is a performance issue for the backend, especially because the UI request will time out before the server is done processing. The user also cannot know that the server is proces...Creating subsets (or datasets) with 100,000s accession refs is a performance issue for the backend, especially because the UI request will time out before the server is done processing. The user also cannot know that the server is processing the request and will re-upload the 100,000 refs, using more server resources.
Update the processing of AccessionRef uploads so that they require the current `version` of the dataset (or subset) to be correct before adding refs to it.
The UI ticket is genesys-pgr/genesys-ui#2562.4Andrey GarnitskiyAndrey Garnitskiyhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/428MCPD coverage2019-03-17T12:03:29+01:00Matija ObrezaMCPD coveragePDCI is a mechanism to assess the coverage of accession passport data provided and it assigns different scores for fields for different types of accessions based on SAMPSTAT field.
We would like to see overall coverage of all passport d...PDCI is a mechanism to assess the coverage of accession passport data provided and it assigns different scores for fields for different types of accessions based on SAMPSTAT field.
We would like to see overall coverage of all passport data fields in Genesys database for a specified filter.
Add `missing` ES aggregation query for all fields of `Accession` that are serialized to JSON and stored to ES.
## Using JSON schema
1. Determine JSON schema for `Accession` and all related types
1. Take every field name (including nested properties) and find the `missing` value
The result will be a map of all JSON paths with their `missing` value. `totalCount` shows all records matching the filter.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/427Remove PublishValidationInterface2019-03-07T14:01:05+01:00Matija ObrezaRemove PublishValidationInterfaceRemove `PublishValidationInterface` as we're using javax validations.
CC @vpavlovRemove `PublishValidationInterface` as we're using javax validations.
CC @vpavlov2.4Viacheslav PavlovViacheslav Pavlovhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/426/geo and /iso31662019-03-04T18:29:46+01:00Matija Obreza/geo and /iso3166Make custom `X??` codes return 404 and exclude them from the country list.Make custom `X??` codes return 404 and exclude them from the country list.2.4Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/425Versioned Datasets: update2019-03-25T18:34:15+01:00Matija ObrezaVersioned Datasets: updateUpgrade versioned Datasets to the approach implemented in #421Upgrade versioned Datasets to the approach implemented in #4212.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/424AccessionUploader: delete operation2019-02-28T14:43:18+01:00Matija ObrezaAccessionUploader: delete operationThe `delete` operation in the AccessionUploader should be doing something very similar to `removeAccessions` in `GenesysServiceImpl`: it should copy the current `Accession` to `AccessionHistoric`.
I guess this function was forgotten whe...The `delete` operation in the AccessionUploader should be doing something very similar to `removeAccessions` in `GenesysServiceImpl`: it should copy the current `Accession` to `AccessionHistoric`.
I guess this function was forgotten when the new Uploader was implemented.
Please add a unit test.2.4Viacheslav PavlovViacheslav Pavlovhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/422Subsets: Partner as owner2019-02-26T09:23:31+01:00Matija ObrezaSubsets: Partner as ownerSubsets were designed and implemented before we had `Partner` in Genesys. This makes it very inconvenient for Administrators as users cannot see the subsets they've submitted (and we've rejected).
Please add `private Partner owner` to `...Subsets were designed and implemented before we had `Partner` in Genesys. This makes it very inconvenient for Administrators as users cannot see the subsets they've submitted (and we've rejected).
Please add `private Partner owner` to `Subset` in addition to the `institute` link. Permission checks should be done on `owner`, not on `institute`.
A user still should not be able to register a Subset on an `Institute` that they have no permission to `MANAGE` or `WRITE`. Best to have the UI render a dropdown with institutes belonging to a `Partner`.
Hopefully, this will allow people to see their subsets after they were modified by an Administrator. Check for permissions on `Partner` for listing the subsets.
**Note:** Requires changes to the frontend code. 2.4Viacheslav PavlovViacheslav Pavlovhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/421Versioned Subsets2019-03-05T22:24:56+01:00Matija ObrezaVersioned SubsetsWe'd like to implement *versioned subsets*: subset may be updated by the data provider and (when published) both versions should be available through Genesys.
1. Obsolete subsets should not be listed by default
1. Obsolete subset must p...We'd like to implement *versioned subsets*: subset may be updated by the data provider and (when published) both versions should be available through Genesys.
1. Obsolete subsets should not be listed by default
1. Obsolete subset must point to a new version of the subset
## Simple approach
The very simple approach is to add `private Subset nextVersion` to the `Subset` entity and then we know that a subset has been replaced if `nextVersion != null`. And we can display a link to the new version.
**Problem:** This would only work if the new subset would be immediately published. But it has to go through review, and until the updated version is in `PUBLISHED` state we do not have any mechanism to say that the old version is "current" (the latest).
## Dataset approach
We have this implemented for `Dataset` in `DatasetVersions` (but we are not using it at the moment). Subsets are much simpler than datasets, so I suggest we try it here. We will need to introduce `SubsetVersions` (similar to `DatasetVersions`) and implement service methods that allow for the following:
1. The owner of a subset can create a new Subset based on an existing `PUBLISHED` Subset
1. If the existing subset is not published, reject the request.
1. A new `Subset` is created in `DRAFT` mode and **all data is copied** to the new version
1. The old and the new `Subset` both link to `SubsetVersions` entity
1. When the new `Subset` is **published** the `SubsetVersions#currentVersion` is changed to point to this version.
1. Queries for listing Subsets must only return latest versions:
1. `select s from Subset s where s.current = true and s.state = 'PUBLISHED'`.
1. Users can still access a subset that is **not current**, but it is published: `loadSubset` should only check that `state = 'PUBLISHED'`.
1. We cannot inner join `SubsetVersions` because we will not store that in the Elasticsearch.
1. The service methods must update `subset.current` when the new version is `PUBLISHED`.
1. Only one `Subset` of all versions of `SubsetVersions` can be current. This is best achieved with a unique key on `subset.versions + subset.current`, but we have to set `subset.current = null` when the subset is not the current version.
1. This means that `subset.current = true` means it is the currently published version and `subset.current = null` means it is not a current version.
### New Subsets
1. A new subset is created as it is created now, but a `SubsetVersions` is created for as well.
1. The new subset has `subset.current = null` and `SubsetVersions#currentVersion = null`.
1. When the subset is published, both these values are updated: `subset.current = true` and `SubsetVersions#currentVersion = ¤tSubset`.
## Un-publishing Subsets
If a `PUBLISHED` subset is unpublished (by an Administrator) we have the case when:
1. The subset is **not current** and it **must not** be unpublished. Reject.
1. The subset **is current**: we need to pick a subset that is published and that can replace the current version
1. If there is no other version of a subset (this is the first published version): set `subset.current = null` and `SubsetVersions#currentVersion = null`
1. If there are other published versions of the subset (in `SubsetVersions#allVersions`) then make the youngest (by `createdDate`) the currently published version.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/419sitemap-INSTCODE.xml2019-02-11T11:53:41+01:00Matija Obrezasitemap-INSTCODE.xmlWe now generate the `sitemap-wiews.xml` that generates a sitemap to institute pages:
```java
for (FaoInstitute institute : instituteService.listActive(new PageRequest(0, Integer.MAX_VALUE))) {
writePage(response, sb, new SitemapPage("/...We now generate the `sitemap-wiews.xml` that generates a sitemap to institute pages:
```java
for (FaoInstitute institute : instituteService.listActive(new PageRequest(0, Integer.MAX_VALUE))) {
writePage(response, sb, new SitemapPage("/wiews/" + institute.getCode().toUpperCase()));
}
```
Instead it should reference another sitemap `sitemap-{INSTCODE}.xml` with the links to pages:
- `new SitemapPage("/wiews/" + institute.getCode().toUpperCase())`
- a `new SitemapPage("/a/...."` for every accession of that institute (use `AccessionProcessor`).2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/418Invalid handling of collCode, collNumb2019-02-17T16:04:54+01:00Matija ObrezaInvalid handling of collCode, collNumbGenesys partners sometimes submit `collCode` as an MCPD array string `COOD003;BEN089` instead of `["COOD003", "BEN089"]` array. Same for `collName`.
In API **v0** please add to `upgradeToV2` method some logic that will ensure these are ...Genesys partners sometimes submit `collCode` as an MCPD array string `COOD003;BEN089` instead of `["COOD003", "BEN089"]` array. Same for `collName`.
In API **v0** please add to `upgradeToV2` method some logic that will ensure these are converted to `String[]`.
Update `liquibase-changeLog.yml` with SQL that converts current incorrect data for `collCode` (e.g. `COOD003;BEN089`) to two records.
*Not sure how valid this SQL is, but it seems to work*
```yml
- sql:
drop table if exists t_collCode;
create table if not exists t_collCode as
select
@num_e := 1 + LENGTH(collCode) - LENGTH(REPLACE(collCode, ';', '')) AS num_e,
collectId, collCode,
SUBSTRING_INDEX(collCode,';',1) as coll1,
IF(@num_e > 1, SUBSTRING_INDEX(SUBSTRING_INDEX(collCode,';',2),';',-1), null) coll2,
IF(@num_e > 2, SUBSTRING_INDEX(SUBSTRING_INDEX(collCode,';',3),';',-1), null) coll3,
IF(@num_e > 3, SUBSTRING_INDEX(SUBSTRING_INDEX(collCode,';',3),';',-1), null) coll4
from accession_collect_code where collCode is not null and (LENGTH(collCode) - LENGTH(REPLACE(collCode, ';', ''))) > 0;
delete from accession_collect_code where collectId in (select distinct collectId from t_collCode);
insert into accession_collect_code (collectId,collCode)
(select distinct collectId, coll1 from
(select collectId, coll1 from t_collCode where coll1 is not null
union all select collectId, coll2 from t_collCode where coll2 is not null
union all select collectId, coll3 from t_collCode where coll3 is not null
union all select collectId, coll4 from t_collCode where coll4 is not null) Q);
drop table t_collCode;
```
Apparently we don't have any such problems in `accession_collect_name` table.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/417AccessionData @Validation2019-02-17T16:04:53+01:00Matija ObrezaAccessionData @ValidationUpdate validation rules on `AccessionData` entity:
- Add **regex pattern** `[A-Z]{3}\\d{3,4}` to `donorCode`
- Same to `usedBy` in `AccessionAlias`
- Same to `collCode` in `AccessionCollect`
Make sure validations are executed before `A...Update validation rules on `AccessionData` entity:
- Add **regex pattern** `[A-Z]{3}\\d{3,4}` to `donorCode`
- Same to `usedBy` in `AccessionAlias`
- Same to `collCode` in `AccessionCollect`
Make sure validations are executed before `AccessionUploader` uses them.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/416Update of Accession Aliases2019-02-17T16:04:52+01:00Matija ObrezaUpdate of Accession AliasesThe current code in `AccessionUploader` doesn't handle some cases very well.
There must be only one entry of type `DONORNUMB` with `donorNumb` and `donorCode` sourced from the incoming accession *JSON*. The code should simply update the...The current code in `AccessionUploader` doesn't handle some cases very well.
There must be only one entry of type `DONORNUMB` with `donorNumb` and `donorCode` sourced from the incoming accession *JSON*. The code should simply update the existing `AccessionAlias` of type `DONORNUMB` with the provided values (`usedBy = donorCode`, `name = donorNumb`).
There can be multiple entries of type `BREDNUMB`, `ACCENAME` and others.2.4Viacheslav PavlovViacheslav Pavlovhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/415Better exceptions2019-02-19T15:09:36+01:00Matija ObrezaBetter exceptionsWe are using both `org.genesys2.spring.ResourceNotFoundException` and the `NotFoundElement?Exception`. Please consolidate the code so that one of these is used (the `NotFound` one) because it already uses nice logging.
```
14:20:51,979 ...We are using both `org.genesys2.spring.ResourceNotFoundException` and the `NotFoundElement?Exception`. Please consolidate the code so that one of these is used (the `NotFound` one) because it already uses nice logging.
```
14:20:51,979 qtp2027961269-14 ERROR o.g.s.a.ApiExceptionHandler:211 - Wow! Such! Exception!
org.genesys2.spring.ResourceNotFoundException
at org.genesys2.server.service.impl.AccessionServiceImpl.getAccessionDetails(AccessionServiceImpl.java:162)
...
...
```
## Throw `InvalidApiUsageException` in:
```
java.lang.RuntimeException: Refusing to export more than 200000 entries
at org.genesys2.server.mvc.ExplorerController.kml(ExplorerController.java:775)
```
Check code where it makes sense to replace `RuntimeException` with `InvalidApiUsageException`, for example:
```
java.lang.RuntimeException: Could not render image
at org.genesys2.server.mvc.ExplorerController.tile(ExplorerController.java:830)
at org.genesys2.server.mvc.ExplorerController$$FastClassBySpringCGLIB$$827bbdf0.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
```
```
Caused by: java.lang.RuntimeException: Could not parse date yyyy-M-d from --
at org.genesys2.server.service.filter.AppliedFiltersConverter.parseDate(AppliedFiltersConverter.java:362)
at org.genesys2.server.service.filter.AppliedFiltersConverter.lambda$convertDateFilter$5(AppliedFiltersConverter.java:333)
at java.lang.Iterable.forEach(Iterable.java:75)
```
```
java.lang.RuntimeException: Could not convert filters
at org.genesys2.server.service.impl.FilterHandler$AppliedFilters.convert(FilterHandler.java:517)
at org.genesys2.server.mvc.ExplorerController.viewFiltered(ExplorerController.java:240)
at org.genesys2.server.mvc.ExplorerController$$FastClassBySpringCGLIB$$827bbdf0.invoke(<generated>)
```
## There's an NPE
```
13:00:51,218 qtp2027961269-2490 ERROR o.g.s.m.UserControllerAdvice:103 - null on GET http://www.genesys-pgr.org/expl
java.lang.NullPointerException
at org.genesys2.server.service.filter.AccessionFilter.buildQuery(AccessionFilter.java:286)
at org.genesys2.server.service.filter.AccessionFilter.buildPredicate(AccessionFilter.java:116)
```
## And this
```
Caused by:
javax.servlet.ServletException: java.lang.IllegalStateException: Page needs a session and none is available
at org.apache.jsp.WEB_002dINF.jsp.errors.error_jsp._jspService(error_jsp.java:235)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
```2.4Viacheslav PavlovViacheslav Pavlovhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/414Apache Mina logging2019-02-08T14:24:47+01:00Matija ObrezaApache Mina loggingPlease explore how we can reduce the verbosity of apache mina (FTP). The logs are filling up with:
```
10:02:50,349 pool-4-thread-19 ERROR o.a.f.i.DefaultFtpHandler:157 - Exception caught, closing session
javax.net.ssl.SSLHandshakeExce...Please explore how we can reduce the verbosity of apache mina (FTP). The logs are filling up with:
```
10:02:50,349 pool-4-thread-19 ERROR o.a.f.i.DefaultFtpHandler:157 - Exception caught, closing session
javax.net.ssl.SSLHandshakeException: SSL handshake failed.
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:519)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:947)
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:542)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:535)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:703)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:659)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:648)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1120)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at sun.security.ssl.EngineInputRecord.bytesInCompletePacket(EngineInputRecord.java:156)
at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:868)
at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
at org.apache.mina.filter.ssl.SslHandler.unwrap(SslHandler.java:754)
at org.apache.mina.filter.ssl.SslHandler.unwrapHandshake(SslHandler.java:689)
at org.apache.mina.filter.ssl.SslHandler.handshake(SslHandler.java:575)
at org.apache.mina.filter.ssl.SslHandler.messageReceived(SslHandler.java:360)
at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:500)
... 15 more
```
Can we just log the exception message?2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/412Scheduled GLIS update2019-02-07T14:32:32+01:00Matija ObrezaScheduled GLIS updateAdd a scheduled task that runs on **1** cluster node every 6 hours and updates GLIS with `addtarget` with new accessions **with DOI** that were modified in the last **8 hours**.
Use code from `glisUpdater` in `AccessionListenersConfig` ...Add a scheduled task that runs on **1** cluster node every 6 hours and updates GLIS with `addtarget` with new accessions **with DOI** that were modified in the last **8 hours**.
Use code from `glisUpdater` in `AccessionListenersConfig` and remove that listener from `AccessionListenersConfig`.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/411Bug: StartsWithFilter cannot be cast2019-02-01T08:21:26+01:00Matija ObrezaBug: StartsWithFilter cannot be castWhat's with `StartsWithFilter` cannot be cast to `LiteralValueFilter` in our converter?
```
Caused by: java.lang.ClassCastException: org.genesys2.server.service.impl.FilterHandler$StartsWithFilter cannot be cast to org.genesys2.server.s...What's with `StartsWithFilter` cannot be cast to `LiteralValueFilter` in our converter?
```
Caused by: java.lang.ClassCastException: org.genesys2.server.service.impl.FilterHandler$StartsWithFilter cannot be cast to org.genesys2.server.service.impl.FilterHandler$LiteralValueFilter
at org.genesys2.server.service.filter.AppliedFiltersConverter.take1String(AppliedFiltersConverter.java:258)
at org.genesys2.server.service.filter.AppliedFiltersConverter.apply(AppliedFiltersConverter.java:195)
at org.genesys2.server.service.filter.AppliedFiltersConverter.convert(AppliedFiltersConverter.java:179)
at org.genesys2.server.service.impl.FilterHandler$AppliedFilters.convert(FilterHandler.java:515)
```
Throw `InvalidApiUsageException` (extends RuntimeException) in:
```
21:25:39,611 qtp2027961269-15 ERROR o.g.s.m.UserControllerAdvice:103 - Could not convert filters on GET http://www.genesys-pgr.org/es/explore
java.lang.RuntimeException: Could not convert filters
at org.genesys2.server.service.impl.FilterHandler$AppliedFilters.convert(FilterHandler.java:517)
at org.genesys2.server.mvc.ExplorerController.viewFiltered(ExplorerController.java:240)
at org.genesys2.server.mvc.ExplorerController$$FastClassBySpringCGLIB$$827bbdf0.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:667)
at org.genesys2.server.mvc.ExplorerController$$EnhancerBySpringCGLIB$$590345b8.viewFiltered(<generated>)
```
also
```
Caused by: java.lang.RuntimeException: Unhandled Accession filter property=doi
at org.genesys2.server.service.filter.AppliedFiltersConverter.apply(AppliedFiltersConverter.java:252)
at org.genesys2.server.service.filter.AppliedFiltersConverter.convert(AppliedFiltersConverter.java:179)
at org.genesys2.server.service.impl.FilterHandler$AppliedFilters.convert(FilterHandler.java:515)
... 117 more
```2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/409ClimateDataController v12019-01-29T18:26:31+01:00Matija ObrezaClimateDataController v1Add a new `ClimateDataController` in API *v1* namespace at */api/v1/climate* as base URL, with the following methods:
```java
@GetMapping("/current/{latitude},{longitude}")
public TileClimate getCurrentClimate(@PathVariable("latitude") ...Add a new `ClimateDataController` in API *v1* namespace at */api/v1/climate* as base URL, with the following methods:
```java
@GetMapping("/current/{latitude},{longitude}")
public TileClimate getCurrentClimate(@PathVariable("latitude") double latitude, double longitude) {
Long tileIndex = WorldClimUtil.getWorldclim25Tile(longitude, latitude);
if (tileIndex == null) {
throw new NotFoundElement("No current climate data for specified (lat, lon)");
}
return climateDataService.climateForTile(tileIndex);
}
@GetMapping("/past/{latitude},{longitude}")
public TileClimate getPastClimate(@PathVariable("latitude") double latitude, double longitude) {
throw new NotFoundElement("Past climate data not available");
}
@GetMapping("/future/{latitude},{longitude}")
public TileClimate getPastClimate(@PathVariable("latitude") double latitude, double longitude) {
throw new NotFoundElement("Future climate data not available");
}
```2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/408KPI ExecutionRun totalValue2019-01-29T00:31:52+01:00Matija ObrezaKPI ExecutionRun totalValueAdd `private Double totalValue` to KPI `ExecutionRun` and fill it with the sum of all `observations.value` in `@PrePersist void prepersist() {}`.
Update liquibase:
- add column
- add SQL to fill `totalValue` with current sums for every...Add `private Double totalValue` to KPI `ExecutionRun` and fill it with the sum of all `observations.value` in `@PrePersist void prepersist() {}`.
Update liquibase:
- add column
- add SQL to fill `totalValue` with current sums for every execution run2.4Maxym BorodenkoMaxym Borodenko