Genesys Backend issueshttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues2021-11-18T18:13:45+01:00https://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/618Cover images disappeared2021-11-18T18:13:45+01:00Christelle RabilCover images disappeared@mobreza I uploaded the AgResearch announcement post with a cover image, it worked, then cover images stopped showing.
![image](/uploads/fb99931c4badcf99e6d0ab999ed31586/image.png)@mobreza I uploaded the AgResearch announcement post with a cover image, it worked, then cover images stopped showing.
![image](/uploads/fb99931c4badcf99e6d0ab999ed31586/image.png)Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/617Bug: Previews with Amphibian2021-11-18T16:36:02+01:00Matija ObrezaBug: Previews with AmphibianPlease check what is wrong with Dataset previews:
> {"status":500,"statusText":"Internal Server Error","data":"{\"contentLength\":38355,\"createdDate\"}{\"error\":\"Type definition error: [simple type, class java.time.OffsetDateTime]; n...Please check what is wrong with Dataset previews:
> {"status":500,"statusText":"Internal Server Error","data":"{\"contentLength\":38355,\"createdDate\"}{\"error\":\"Type definition error: [simple type, class java.time.OffsetDateTime]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module \\\"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\\\" to enable handling (through reference chain: org.genesys.amphibian.client.model.Preview[\\\"createdDate\\\"])\
Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module \\\"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\\\" to enable handling (through reference chain: org.genesys.amphibian.client.model.Preview[\\\"createdDate\\\"])\",\"localizedError\":\"Type definition error: [simple type, class java.time.OffsetDateTime]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module \\\"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\\\" to enable handling (through reference chain: org.genesys.amphibian.client.model.Preview[\\\"createdDate\\\"])\"}","message":"{\"contentLength\":38355,\"createdDate\"}{\"error\":\"Type definition error: [simple type, class java.time.OffsetDateTime]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module \\\"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\\\" to enable handling (through reference chain: org.genesys.amphibian.client.model.Preview[\\\"createdDate\\\"])\
Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module \\\"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\\\" to enable handling (through reference chain: org.genesys.amphibian.client.model.Preview[\\\"createdDate\\\"])\",\"localizedError\":\"Type definition error: [simple type, class java.time.OffsetDateTime]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.OffsetDateTime` not supported by default: add Module \\\"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\\\" to enable handling (through reference chain: org.genesys.amphibian.client.model.Preview[\\\"createdDate\\\"])\"}"}2022.1Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/616Natural query syntax2021-11-16T12:25:16+01:00Matija ObrezaNatural query syntaxQuerying Genesys today requires a construction of a `Filter` object which is not something one could type up from scratch without deep understanding of the JSON model. Users must rely on the Genesys user interface to create queries.
@cr...Querying Genesys today requires a construction of a `Filter` object which is not something one could type up from scratch without deep understanding of the JSON model. Users must rely on the Genesys user interface to create queries.
@crabil demonstrated the use and utility of a more *natural query syntax* that is used by publication repositories. One of the main benefits of such approach is the ability to disconnect the querying syntax from the underlying implementation. This provides forward compatibility with the next implementations of Genesys and assures that user queries can still be executed (maybe not 100%) the same way as with the previous versions.
Examples of natural queries:
- `cassava[crop]` equals `{ "crop": [ "cassava" ] }`
- `(cassava[crop]) OR (banana[crop])`: `{ "crop": [ "cassava", "banana" ] }`
- `((cassava[crop]) OR (banana[crop])) AND (cimmyt[holder])`: `{ "crop": [ "cassava", "banana" ], "institute": { "code": [ "MEX002" ] } }`
- `amarill*`: `{ "_text": "amarill*" }`
- `cass*[cropName]`: `{ "cropName": { "sw": [ "cass" ] } }` (`filter.crop` would need `StringFilter` support)
- `TMp[accessionNumber]`: `{ "accessionNumber": { "sw": [ "TMp" ] } }`
- `2020:2021[created]` is an example of a date range: `{ "createdDate": { "ge": "2020-01-01T...", "lt": "2021-01-01T..." } }`
- `13.4:44.8[Latitude]`
## Syntax
Query syntax supports parentheses, OR, AND and NOT keywords. Each expression is either targeting a specific field (by label) or is a general full-text search.
Date and number expressions are range expressions and use `fromValue : toValue` format.
```
query := oneQuery | orQuery | andQuery | notQuery;
orQuery := "(" orQuery ")" | query "OR" query
andQuery := "(" andQuery ")" | query "AND" query;
notQuery := "(" notQuery ")" | "NOT" query;
oneQuery := "(" oneQuery ")" | termQuery; -- unwrap ()
termQuery := fulltextQuery | (dateQuery | numberQuery | stringQuery) termField; -- single term query
stringQuery := "\"" stringQuery "\"" | string;
string := keyword | keyword " " keyword; -- e.g. 123, abc, 1ab3, 123 abc defg
keyword := alphaNum; -- no whitespace
fulltextQuery := stringQuery; -- e.g. "This is a test", This is a test
dateQuery := dateStr ":" dateStr; -- e.g. "2021":"3000"
dateStr := ("\"" dateVal "\"") | dateVal; -- e.g. "2021-01-01" or 2021-01-01, "2021-JAN", "1991-07", ...
dateVal := year ("-" month ("-" day)?)?;
year := integer;
month := integer[1-12] | "JAN" | "FEB" ...;
day := integer[1-31];
numberQuery := number ":" number; -- e.g. 300:800
number := integer | float;
float := integer ("." integer);
termField := "[" fieldLabel "]"; -- e.g. [Holding Institute]
fieldLabel := /[a-z]([a-z ]*)/; -- alphanum and space
```
## Field labels and translation to filters
*Field labels* in queries correspond to `Filter` fields. This allows for declaring field aliases, e.g. `Holding institute`, `Genebank code`, `Institute code` and `WIEWS code` can all map to the same filter field `institute.code` while `Genebank` can map to `institute.name`.
It is also possible to determine the target filter field by the query "value" itself. When the query value is in *WIEWS code format*, we can automatically switch from the default `institute.name` to `institute.code` field. Similarly, a search for `CIMMYT` may be converted to `MEX002` for more precise results when applicable, or `CGIAR` may expand into all institute codes of that network.
More appropriate fields may be automatically targeted when user provides a query that we detect as a *Country name* (or ISO3166 code). This may map to the country of provenance of accession instead of just a general full-text search if no field is provided. Country names may also expand into their current and past ISO codes.
## Providing "parsed" query to the user
Since the query is now a user-provided string, the server needs to parse the incoming query and provide sensible feedback to the user when the query syntax is misunderstood.
Luckily, antlr supports parsing warnings/errors that can be returned to the user and the query maybe still "understood" by the system.
## UI changes
The implementation requires a change in the underlying filtering implementation (#615) and will no longer neatly map to UI filtering elements.
"Filters" in a similar portal are implemented with a very simple filtering by **tags** and are purely boolean. In Genesys, comparable "filters" are the `BooleanFilters` (i.e. `georeferenced`, `inMls`, `available`, `historical` etc.)https://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/615Filters with OR support2022-03-18T15:29:47+01:00Matija ObrezaFilters with OR supportOur current filters implementation supports proper `NOT` filtering and is designed as an `AND` operation (all specified criteria must be `true`). This covers two of the three core boolean operations. By adding support for `OR` filtering,...Our current filters implementation supports proper `NOT` filtering and is designed as an `AND` operation (all specified criteria must be `true`). This covers two of the three core boolean operations. By adding support for `OR` filtering, we have the full coverage of all possible filtering combinations, since all boolean operations can be broken down to the core `AND`, `OR` and `NOT`.
`filter1 AND filter2` can be achieved by simply merging all properties of the two filters, while our `NOT` implementation fully embeds the *`not` filter* as a separate object.
In this ticket we extend `SuperModelFilter<T>` with
```java
class SuperModelFilter<T> {
// @JsonIgnoreProperties({ "NOT", "NULL", "NOTNULL" }) // we do not allow nesting in JSON!
@JsonIgnoreProperties({ "NOT", "NULL", "NOTNULL", "AND", "OR" })
public T NOT;
// New!
public T OR;
public T AND; // maybe
}
```
Multiple `OR` operations `f1 OR f2 OR f3` can be achieved by `f1.OR(f2.OR(f3))`. `f1 AND f2 AND f3` operations are implemented as `f1.AND(f2.AND(f3))`.
It appears that only an update to `SuperModelFilter::collectPredicates` method will be required. It appears that `ElasticQueryBuilder` already handles `or`, `and` and `not` operations, since those are part of regular JPA conversion to ES query.
It is unlikely that we would be serializing complex filter expression to JSON, we already prevent deep serialization of the current `public T NOT` expression. Implementing UI support for such nested queries would be quite complicated.
## Uses
The primary use of this update is to allow the backend to use advanced JPA and ES queries.Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/614Admin MVC to API2022-10-17T17:24:04+02:00Matija ObrezaAdmin MVC to APIGenesys has multiple *admin* controllers that are MVC only (except `AdminController` with some functions). Please add REST API controllers that will allow to interact with Genesys internals using JSON APIs.
Controllers in `org.genesys2....Genesys has multiple *admin* controllers that are MVC only (except `AdminController` with some functions). Please add REST API controllers that will allow to interact with Genesys internals using JSON APIs.
Controllers in `org.genesys2.server.mvc.admin` need conversion to JSON API and should be in `org.genesys2.server.api.admin.v1`.2022.5Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/613Firehose2022-05-18T17:18:38+02:00Matija ObrezaFirehoseBring firehose and firehose ES processing from GG-CE to Genesys.Bring firehose and firehose ES processing from GG-CE to Genesys.2022.3Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/611StringFilter on accessionNumber2021-11-12T16:52:10+01:00Matija ObrezaStringFilter on accessionNumberhttps://www.genesys-pgr.org/a/v2eKKeejmwy tries to filter for specific `accessionNumbers`, but does not produce results
![image](/uploads/88f28573de21e661dd6c99b9b7516861/image.png)
while those accessions are definitely there:
![image...https://www.genesys-pgr.org/a/v2eKKeejmwy tries to filter for specific `accessionNumbers`, but does not produce results
![image](/uploads/88f28573de21e661dd6c99b9b7516861/image.png)
while those accessions are definitely there:
![image](/uploads/59bc5640bd77947e4f3e21148f56329e/image.png)2022.1Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/610Error updating passport data2022-05-16T16:44:56+02:00Matija ObrezaError updating passport dataThere's an issue updating existing data in Genesys.
```
exception is org.hibernate.exception.ConstraintViolationException: could not execute batch data={"instituteCode":"TWN001","accessionNumber":"VI002470A-G","historic":false,"origCty"...There's an issue updating existing data in Genesys.
```
exception is org.hibernate.exception.ConstraintViolationException: could not execute batch data={"instituteCode":"TWN001","accessionNumber":"VI002470A-G","historic":false,"origCty":"PHL","storage":[],"duplSite":["NOR051","KOR011"],"taxonomy":{"genus":"Vigna","species":"radiata","spAuthor":"(L.) R. Wilczek","subtaxa":"var. radiata","subtAuthor":null},"coll":{"collDate":null,"collSite":null,"collNumb":null,"collSrc":null,"collMissId":null,"collCode":[],"collName":[],"collInstAddress":[]},"breederCode":[],"breederName":[],"cropName":"Mungbean","acquisitionDate":"19750930","sampStat":null,"available":true,"mlsStatus":null,"acceName":["(CES 28 X ML-18)"],"otherNumb":[],"donorCode":null,"donorName":null,"donorNumb":"PI 425827","ancest":null,"latitude":null,"longitude":null,"elevation":null,"coordinateUncertainty":null,"coordinateDatum":null,"georeferenceMethod":null}
org.springframework.dao.DataIntegrityViolationException: could not execute batch; SQL [delete from accession_collect where id=? and version=?]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch
...
at org.genesys2.server.service.worker.AccessionUploader$$EnhancerBySpringCGLIB$$91b07599.upsertAccessions(<generated>)
at org.genesys2.server.api.v1.AccessionUploadController.upsert1By1(AccessionUploadController.java:146)
...
Caused by: java.sql.BatchUpdateException: (conn=1573286) Cannot delete or update a parent row: a foreign key constraint fails (`genesys`.`accession_collect_name`, CONSTRAINT `FK_g6h5uuvq16105ljx8r1jjxojr` FOREIGN KEY (`collectId`) REFERENCES `accession_collect` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
```
Need a unit test and a fix!Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/608Genesys API v22021-11-12T17:29:03+01:00Matija ObrezaGenesys API v2Please bring FilteredCRUD, CRUD and other abstract controllers/services from GG-CE to Genesys.
We will base the **API v2** controllers on what we developed for GG-CE.
1. Commit 1: Remove **all** existing `...api.v2` controllers.
1. Add...Please bring FilteredCRUD, CRUD and other abstract controllers/services from GG-CE to Genesys.
We will base the **API v2** controllers on what we developed for GG-CE.
1. Commit 1: Remove **all** existing `...api.v2` controllers.
1. Add new controllers for: `Partner`, `Country`, `FaoInstitute`, including new Unit tests and updating the Services. We will begin migrating the UI at this stage.
1. ~~Add new controllers for admin: `User`, `OAuthClient`, `MaterialRequest`~~2022.1Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/607ActivityPost cover image2021-11-04T09:41:14+01:00Matija ObrezaActivityPost cover imageWe need to add support for a cover image of an activity post. Ideally I should be able to select one of the existing `RepositoryImage` or upload a new one on the activity post form.
Any suggestions about the implementation?We need to add support for a cover image of an activity post. Ideally I should be able to select one of the existing `RepositoryImage` or upload a new one on the activity post form.
Any suggestions about the implementation?2022.1Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/606Subset types2021-09-22T09:28:31+02:00Matija ObrezaSubset typesWe would like to classify the Subsets with a set of tags applied to each subset. The set of allowed values is
- `CORE` *Core collection*
- `REFERENCE_SET` *Reference set*
- `SUSCEPTIBILITY` *Stress susceptibility*
- `TOLERANCE` *Stress ...We would like to classify the Subsets with a set of tags applied to each subset. The set of allowed values is
- `CORE` *Core collection*
- `REFERENCE_SET` *Reference set*
- `SUSCEPTIBILITY` *Stress susceptibility*
- `TOLERANCE` *Stress tolerance*
- `GENOMIC` *Genomic data*
- `TRAIT` *Trait selection*
- `LIST` *Germplasm list*
Add a `String tags` to `Subset`.
```
@Column(length = 20, nullable = true)
private SubsetType subsetType;
@Column(length = 200, nullable = true)
private String primaryTrait;
```
We should introduce an `enum SubsetType` to control the incoming values. Only one option is possible.2022.1Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/605Issue with CSVMessageConverter2021-09-20T18:23:50+02:00Matija ObrezaIssue with CSVMessageConverterOur `CSVMessageConverter` relies on Jackson serialization to JSON before producing the `text/csv` response.
The current implementation does not properly handle cases where Jackson serializes just the `id` of the referenced object it has...Our `CSVMessageConverter` relies on Jackson serialization to JSON before producing the `text/csv` response.
The current implementation does not properly handle cases where Jackson serializes just the `id` of the referenced object it has serialized before:
![image](/uploads/834ca916dbfb78671dc2bf4734b4eb40/image.png)
Please update the unit tests to ensure referenced entities (`countryOfOrigin`, `taxonomy`, `taxonomy.grinTaxonomy`, ...) are fully serialized in CSV.
Genesys website is not affected by this, it is able to handle these references.2021.3Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/604HTTP CSP headers2021-09-20T18:23:49+02:00Matija ObrezaHTTP CSP headersPlease update Genesys to CSP headers, especially:
- `Content-Security-Policy: frame-src 'none'`Please update Genesys to CSP headers, especially:
- `Content-Security-Policy: frame-src 'none'`2021.3Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/603Embedded ES node2021-09-28T06:42:57+02:00Matija ObrezaEmbedded ES nodePlease bring the changes for Embedded ES node from GG-CE to Genesys.Please bring the changes for Embedded ES node from GG-CE to Genesys.2022.1Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/602Uploader: Clearing accessionId.coll2021-09-20T18:23:49+02:00Matija ObrezaUploader: Clearing accessionId.collWhile testing integration with GG-CE I stumbled upon an error where
the existing record in the database has some collecting data, including one value in `accession.accessionId.coll.collName` list and a date in `accession.accessionId.coll...While testing integration with GG-CE I stumbled upon an error where
the existing record in the database has some collecting data, including one value in `accession.accessionId.coll.collName` list and a date in `accession.accessionId.coll.collDate`. The new upload sets:
```json
...
"coll": {
"collDate": null,
"collSite": null,
"collNumb": null,
"collSrc": null,
"collMissId": null,
"collCode": [],
"collName": [],
"collInstAddress": []
},
...
```
This should effectively remove the `AccessionCollect` record from the database in `AccessionUploader` at:
![image](/uploads/a3da6ef56c801996594b9a7754d2a608/image.png)
It results in **Cannot delete or update a parent row:** *(`sandbox`.`accession_collect_name`, CONSTRAINT `FK_g6h5uuvq16105ljx8r1jjxojr` FOREIGN KEY (`collectId`) REFERENCES `accession_collect` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)*:
```
Upload resulted in: ERROR instCode=MEX002 doi=10.18730/G8G4B acceNumb=CIMMYTMA 71 genus=Zea
error=could not execute batch; SQL [delete from accession_collect where id=? and version=?]; constraint [null];
nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch
could not execute batch
(conn=266448) Cannot delete or update a parent row:
a foreign key constraint fails
(`sandbox`.`accession_collect_name`, CONSTRAINT `FK_g6h5uuvq16105ljx8r1jjxojr` FOREIGN KEY (`collectId`) REFERENCES `accession_collect` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
```
Please add a unit test and figure this out.2021.3Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/601Google Identity Services2023-01-23T20:13:06+01:00Matija ObrezaGoogle Identity ServicesGoogle sign-in needs upgrading.
> One or more of your web applications uses the legacy Google Sign-In JavaScript library. Please migrate your project(s) to the new Google Identity Services SDK before March 31, 2023.
>
> At your earlies...Google sign-in needs upgrading.
> One or more of your web applications uses the legacy Google Sign-In JavaScript library. Please migrate your project(s) to the new Google Identity Services SDK before March 31, 2023.
>
> At your earliest convenience, migrate to the new Google Identity Services by following the migration guide https://notifications.google.com/g/p/AD-FnEyIyeoYKdydXaPAMcuuzaawjP3y0gM7TwzpXChLgx3X2Xz4SKTR-4wEhry1iZ1DxJ4TaD504ntuXzcMkE50nh3Y20YQr1X23dvUHS_LznssfohzZm3M_eP9gsCLv_MJaQ0V6Q.
>
> Be sure to read through the Sign-In With Google resources guide.Viacheslav PavlovViacheslav Pavlovhttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/600Extra localizations of country names2021-09-20T18:23:49+02:00Matija ObrezaExtra localizations of country namesGenesys sources country names in different languages from geonames. It happens that a country name is not available for a specific language.
E.g. `zh-TW` translation for `USA` is not available and I need to be able to register it.
We n...Genesys sources country names in different languages from geonames. It happens that a country name is not available for a specific language.
E.g. `zh-TW` translation for `USA` is not available and I need to be able to register it.
We need to be able to store a JSON of customized translations in `Country.nameJCustom` field and this JSON is then merged to the incoming `nameJ` string. `nameJCustom` adds or overwrites values for `nameJ`.
We will also need a `CRUDController<Country>` for ADMINISTRATORS. I don't think we have one.2021.3Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/599Set the secret for an OAuthClient2021-09-20T18:23:49+02:00Maxym BorodenkoSet the secret for an OAuthClientAdd an endpoint to **set** the secret for an `OAuthClient`. Can be applied to GG-CE as well.Add an endpoint to **set** the secret for an `OAuthClient`. Can be applied to GG-CE as well.2021.3Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/598Admin: Audit logs API2021-09-20T18:23:49+02:00Maxym BorodenkoAdmin: Audit logs APIhttps://gitlab.croptrust.org/genesys-pgr/genesys-ui/-/issues/822 requires CRUD API for audit logs.https://gitlab.croptrust.org/genesys-pgr/genesys-ui/-/issues/822 requires CRUD API for audit logs.2021.3Maxym BorodenkoMaxym Borodenkohttps://gitlab.croptrust.org/genesys-pgr/genesys-server/-/issues/597Finding similar accessions2021-06-29T13:39:09+02:00Matija ObrezaFinding similar accessionsFinding "Similar accessions" of https://sandbox.genesys-pgr.org/a/4c669455-02b0-421b-a5be-80fa3111fa94 throws
```
java.lang.NullPointerException
at org.genesys2.server.service.worker.dupe.AccessionDuplicateFinder.getCandidates(Accessio...Finding "Similar accessions" of https://sandbox.genesys-pgr.org/a/4c669455-02b0-421b-a5be-80fa3111fa94 throws
```
java.lang.NullPointerException
at org.genesys2.server.service.worker.dupe.AccessionDuplicateFinder.getCandidates(AccessionDuplicateFinder.java:219)
at org.genesys2.server.service.worker.dupe.AccessionDuplicateFinder.getCandidates(AccessionDuplicateFinder.java:44)
at org.genesys2.server.service.worker.dupe.DuplicateFinder.findSimilar(DuplicateFinder.java:124)
```2021.2Maxym BorodenkoMaxym Borodenko