Genesys Backend issueshttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues2019-01-24T15:04:13+01:00https://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/406Audited Subset2019-01-24T15:04:13+01:00Matija ObrezaAudited SubsetMake `Subset` an audited entity.Make `Subset` an audited entity.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/404Frontend URL2019-01-27T17:19:18+01:00Matija ObrezaFrontend URLThe server "public URL" is configured in `.properties`:
```
host.name=localhost
host.nameAndPort=${host.name}
base.url=http://${host.name}:8080
```
and these values are used as the base url in emails, redirects, sitemap controller, etc...The server "public URL" is configured in `.properties`:
```
host.name=localhost
host.nameAndPort=${host.name}
base.url=http://${host.name}:8080
```
and these values are used as the base url in emails, redirects, sitemap controller, etc. With the new website, we need another setting `frontend.url` where we can configure the URL to be used.
```
frontend.url=http://localhost:3000
```
Find references to `base.url` in code and replace with `frontend.url` as appropriate.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 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/397AppliedFiltersConverter for sciName2019-01-31T12:07:33+01:00Matija ObrezaAppliedFiltersConverter for sciNameShould filter on full name in Taxonomy2.
```
Caused by: java.lang.RuntimeException: Unhandled Taxonomy filter property=sciName
at org.genesys2.server.service.filter.AppliedFiltersConverter.apply(AppliedFiltersConverter.java:405)
at...Should filter on full name in Taxonomy2.
```
Caused by: java.lang.RuntimeException: Unhandled Taxonomy filter property=sciName
at org.genesys2.server.service.filter.AppliedFiltersConverter.apply(AppliedFiltersConverter.java:405)
at org.genesys2.server.service.filter.AppliedFiltersConverter.convert(AppliedFiltersConverter.java:156)
at org.genesys2.server.service.filter.AccessionFilter.convert(AccessionFilter.java:195)
```2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/395Google Sign-in authentication system2019-01-31T12:07:33+01:00Matija ObrezaGoogle Sign-in authentication systemMigrate from the **Google+ Sign-In** feature to the more comprehensive **Google Sign-in authentication system**. The Google+ Sign-In will be deprecated in late January 2019.
This affects the user logins on Genesys. Please update the bac...Migrate from the **Google+ Sign-In** feature to the more comprehensive **Google Sign-in authentication system**. The Google+ Sign-In will be deprecated in late January 2019.
This affects the user logins on Genesys. Please update the backend code in `GoogleOAuthUtil`.2.4Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/407RequestRejectedException logging2019-01-31T12:07:34+01:00Matija ObrezaRequestRejectedException loggingAdd `RequestRejectedException` to `UserControllerAdvice` as `@ResponseStatus(HttpStatus.BAD_REQUEST)`.
Our logs are filling up with log entires on invalid requests like `/zh%20https://dx.doi.org/10.18730/J69RS`:
```
2019-01-22T21:44:49...Add `RequestRejectedException` to `UserControllerAdvice` as `@ResponseStatus(HttpStatus.BAD_REQUEST)`.
Our logs are filling up with log entires on invalid requests like `/zh%20https://dx.doi.org/10.18730/J69RS`:
```
2019-01-22T21:44:49.178472275Z 2019-01-22 21:44:49.174:WARN:oejs.HttpChannel:qtp2027961269-136: /zh%20https://dx.doi.org/10.18730/J69RS
2019-01-22T21:44:49.178523532Z org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.
2019-01-22T21:44:49.178536170Z at org.springframework.security.web.firewall.StrictHttpFirewall.getFirewalledRequest(StrictHttpFirewall.java:123)
2019-01-22T21:44:49.178544339Z at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:193)
2019-01-22T21:44:49.178552584Z at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
2019-01-22T21:44:49.178559971Z at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
2019-01-22T21:44:49.178566143Z at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
2019-01-22T21:44:49.178572666Z at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
2019-01-22T21:44:49.178578859Z at org.genesys2.server.servlet.filter.LocaleURLFilter.doFilter(LocaleURLFilter.java:179)
2019-01-22T21:44:49.178585336Z at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
2019-01-22T21:44:49.178592151Z at com.hazelcast.web.WebFilter.doFilter(WebFilter.java:293)
2019-01-22T21:44:49.178598490Z at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
2019-01-22T21:44:49.178604983Z at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263)
2019-01-22T21:44:49.178613303Z at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
2019-01-22T21:44:49.178620417Z at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
2019-01-22T21:44:49.178627557Z at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
2019-01-22T21:44:49.178633984Z at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
2019-01-22T21:44:49.178640652Z at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
```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/367@Scheduled KPI execution2019-02-04T10:13:32+01:00Matija Obreza@Scheduled KPI executionImplement a method in KPIServiceImpl that executes all existing Executions once every day at **03:00** using `@Scheduled`.
## Details
Production servers run in a cluster and this method must only execute on one node every day. Use htt...Implement a method in KPIServiceImpl that executes all existing Executions once every day at **03:00** using `@Scheduled`.
## Details
Production servers run in a cluster and this method must only execute on one node every day. Use https://github.com/lukas-krecan/ShedLock with a **Hazelcast** lock.2.4Viacheslav PavlovViacheslav Pavlovhttps://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/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/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/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/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/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/365Using javax.validation2019-02-18T16:20:45+01:00Matija ObrezaUsing javax.validationThe code has reference to `net.sf.oval` validators that are not used by the services.
64a8e983 demonstrates use of Bean Validation 1.1.0 API in services:
```
import javax.validation.Valid;
import org.springframework.validation.annotati...The code has reference to `net.sf.oval` validators that are not used by the services.
64a8e983 demonstrates use of Bean Validation 1.1.0 API in services:
```
import javax.validation.Valid;
import org.springframework.validation.annotation.Validated;
...
@Validated
public <T extends Dimension<?>> T save(@Valid T dimension) {
LOG.debug("Persisting dimension {}", dimension);
return dimensionRepository.save(dimension);
}
```
When implementing new service methods please use `@Valid` on model arguments where applicable.
Models use
```
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
...
@NotNull
@Size(max = 100)
@Column(length = 100, unique = true, nullable = false)
private String name;
```
2.4Matija ObrezaMatija Obrezahttps://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/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/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/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 Obreza