summaryrefslogtreecommitdiff
path: root/src/main/java/dev/dnpm/oshelper/atc
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2026-09-03 14:35:10 +0200
committerGitHub2026-09-03 14:35:10 +0200
commitfb91356b7777dfa5b6088bcc3a48b43924c1c0fd (patch)
treea3d384390e388395953865a286f15292aaa04a86 /src/main/java/dev/dnpm/oshelper/atc
parent59daf77a63bd17bb14248cf9881046dd6b331e2a (diff)
build: apply Spotless plugin (#293)
Diffstat (limited to 'src/main/java/dev/dnpm/oshelper/atc')
-rw-r--r--src/main/java/dev/dnpm/oshelper/atc/AgentCode.java8
-rw-r--r--src/main/java/dev/dnpm/oshelper/atc/AtcCode.java143
-rw-r--r--src/main/java/dev/dnpm/oshelper/atc/CodeSystem.java6
-rw-r--r--src/main/java/dev/dnpm/oshelper/atc/UnregisteredCode.java86
-rw-r--r--src/main/java/dev/dnpm/oshelper/atc/services/AgentCodeService.java126
-rw-r--r--src/main/java/dev/dnpm/oshelper/atc/services/CsvAgentCodeService.java119
-rw-r--r--src/main/java/dev/dnpm/oshelper/atc/services/OnkostarAgentCodeService.java79
7 files changed, 284 insertions, 283 deletions
diff --git a/src/main/java/dev/dnpm/oshelper/atc/AgentCode.java b/src/main/java/dev/dnpm/oshelper/atc/AgentCode.java
index 4f969bc..1606d66 100644
--- a/src/main/java/dev/dnpm/oshelper/atc/AgentCode.java
+++ b/src/main/java/dev/dnpm/oshelper/atc/AgentCode.java
@@ -26,11 +26,11 @@ package dev.dnpm.oshelper.atc;
* @since 2.0.0
*/
public interface AgentCode extends Comparable<AgentCode> {
- String getCode();
+ String getCode();
- String getName();
+ String getName();
- CodeSystem getSystem();
+ CodeSystem getSystem();
- String getVersion();
+ String getVersion();
}
diff --git a/src/main/java/dev/dnpm/oshelper/atc/AtcCode.java b/src/main/java/dev/dnpm/oshelper/atc/AtcCode.java
index 61685d6..beff5bf 100644
--- a/src/main/java/dev/dnpm/oshelper/atc/AtcCode.java
+++ b/src/main/java/dev/dnpm/oshelper/atc/AtcCode.java
@@ -29,75 +29,76 @@ import java.util.Objects;
*/
public class AtcCode implements AgentCode {
- private final String code;
- private final String name;
- private final String synonyms;
-
- private final String version;
-
- public AtcCode(String code, String name) {
- this(code, name, null);
- }
-
- public AtcCode(String code, String name, String version) {
- this(code, name, version, "");
- }
-
- public AtcCode(String code, String name, String version, String synonyms) {
- this.code = code;
- this.name = name;
- this.synonyms = synonyms;
- this.version = version;
- }
-
- public String getCode() {
- return code;
- }
-
- public String getName() {
- return name;
- }
-
- public String getSynonyms() {
- return this.synonyms;
- }
-
- public CodeSystem getSystem() {
- return CodeSystem.ATC;
- }
-
- public String getVersion() {
- return version;
- }
-
- @Override
- public int compareTo(final AgentCode agentCode) {
- return this.name.toLowerCase().compareTo(agentCode.getName().toLowerCase());
- }
-
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- AgentCode otherAgentCode = (AgentCode) o;
- return Objects.equals(code.toLowerCase(), otherAgentCode.getCode().toLowerCase())
- && Objects.equals(name.toLowerCase(), otherAgentCode.getName().toLowerCase())
- && Objects.equals(version, otherAgentCode.getVersion());
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(code.toLowerCase(), name.toLowerCase());
- }
-
- /**
- * Checks for usable ATC code starting at level 2
- * @param code Code to be checked
- * @return Will return <code>true</code> if code matches ATC code scheme
- */
- public static boolean isAtcCode(String code) {
- return null != code
- && ! code.isBlank()
- && code.matches("[ABCDGHJLMNPRSV][0-2][1-9]([A-Z]([A-Z](\\d{2})?)?)?");
- }
+ private final String code;
+ private final String name;
+ private final String synonyms;
+
+ private final String version;
+
+ public AtcCode(String code, String name) {
+ this(code, name, null);
+ }
+
+ public AtcCode(String code, String name, String version) {
+ this(code, name, version, "");
+ }
+
+ public AtcCode(String code, String name, String version, String synonyms) {
+ this.code = code;
+ this.name = name;
+ this.synonyms = synonyms;
+ this.version = version;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getSynonyms() {
+ return this.synonyms;
+ }
+
+ public CodeSystem getSystem() {
+ return CodeSystem.ATC;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ @Override
+ public int compareTo(final AgentCode agentCode) {
+ return this.name.toLowerCase().compareTo(agentCode.getName().toLowerCase());
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ AgentCode otherAgentCode = (AgentCode) o;
+ return Objects.equals(code.toLowerCase(), otherAgentCode.getCode().toLowerCase())
+ && Objects.equals(name.toLowerCase(), otherAgentCode.getName().toLowerCase())
+ && Objects.equals(version, otherAgentCode.getVersion());
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(code.toLowerCase(), name.toLowerCase());
+ }
+
+ /**
+ * Checks for usable ATC code starting at level 2
+ *
+ * @param code Code to be checked
+ * @return Will return <code>true</code> if code matches ATC code scheme
+ */
+ public static boolean isAtcCode(String code) {
+ return null != code
+ && !code.isBlank()
+ && code.matches("[ABCDGHJLMNPRSV][0-2][1-9]([A-Z]([A-Z](\\d{2})?)?)?");
+ }
}
diff --git a/src/main/java/dev/dnpm/oshelper/atc/CodeSystem.java b/src/main/java/dev/dnpm/oshelper/atc/CodeSystem.java
index 2fc974c..f292371 100644
--- a/src/main/java/dev/dnpm/oshelper/atc/CodeSystem.java
+++ b/src/main/java/dev/dnpm/oshelper/atc/CodeSystem.java
@@ -26,6 +26,6 @@ package dev.dnpm.oshelper.atc;
* @since 2.0.0
*/
public enum CodeSystem {
- ATC,
- UNREGISTERED
-} \ No newline at end of file
+ ATC,
+ UNREGISTERED
+}
diff --git a/src/main/java/dev/dnpm/oshelper/atc/UnregisteredCode.java b/src/main/java/dev/dnpm/oshelper/atc/UnregisteredCode.java
index 8c7df54..9300b01 100644
--- a/src/main/java/dev/dnpm/oshelper/atc/UnregisteredCode.java
+++ b/src/main/java/dev/dnpm/oshelper/atc/UnregisteredCode.java
@@ -29,58 +29,58 @@ import java.util.Objects;
*/
public class UnregisteredCode implements AgentCode {
- private final String code;
- private final String name;
+ private final String code;
+ private final String name;
- private final String synonyms;
+ private final String synonyms;
- public UnregisteredCode(String code, String name) {
- this(code, name, "");
- }
+ public UnregisteredCode(String code, String name) {
+ this(code, name, "");
+ }
- public UnregisteredCode(String code, String name, String synonyms) {
- this.code = code;
- this.name = name;
- this.synonyms = synonyms;
- }
+ public UnregisteredCode(String code, String name, String synonyms) {
+ this.code = code;
+ this.name = name;
+ this.synonyms = synonyms;
+ }
- public String getCode() {
- return code;
- }
+ public String getCode() {
+ return code;
+ }
- public String getName() {
- return name;
- }
+ public String getName() {
+ return name;
+ }
- public String getSynonyms() {
- return synonyms;
- }
+ public String getSynonyms() {
+ return synonyms;
+ }
- public CodeSystem getSystem() {
- return CodeSystem.UNREGISTERED;
- }
+ public CodeSystem getSystem() {
+ return CodeSystem.UNREGISTERED;
+ }
- public String getVersion() {
- return null;
- }
+ public String getVersion() {
+ return null;
+ }
- @Override
- public int compareTo(final AgentCode agentCode) {
- return this.name.toLowerCase().compareTo(agentCode.getName().toLowerCase());
- }
+ @Override
+ public int compareTo(final AgentCode agentCode) {
+ return this.name.toLowerCase().compareTo(agentCode.getName().toLowerCase());
+ }
- @Override
- public boolean equals(final Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- AgentCode otherAgentCode = (AgentCode) o;
- return Objects.equals(code.toLowerCase(), otherAgentCode.getCode().toLowerCase())
- && Objects.equals(name.toLowerCase(), otherAgentCode.getName().toLowerCase())
- && Objects.equals(this.getVersion(), otherAgentCode.getVersion());
- }
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ AgentCode otherAgentCode = (AgentCode) o;
+ return Objects.equals(code.toLowerCase(), otherAgentCode.getCode().toLowerCase())
+ && Objects.equals(name.toLowerCase(), otherAgentCode.getName().toLowerCase())
+ && Objects.equals(this.getVersion(), otherAgentCode.getVersion());
+ }
- @Override
- public int hashCode() {
- return Objects.hash(code.toLowerCase(), name.toLowerCase());
- }
+ @Override
+ public int hashCode() {
+ return Objects.hash(code.toLowerCase(), name.toLowerCase());
+ }
}
diff --git a/src/main/java/dev/dnpm/oshelper/atc/services/AgentCodeService.java b/src/main/java/dev/dnpm/oshelper/atc/services/AgentCodeService.java
index b074364..f1dc2e2 100644
--- a/src/main/java/dev/dnpm/oshelper/atc/services/AgentCodeService.java
+++ b/src/main/java/dev/dnpm/oshelper/atc/services/AgentCodeService.java
@@ -19,17 +19,15 @@
package dev.dnpm.oshelper.atc.services;
+import static java.util.stream.Collectors.groupingBy;
import dev.dnpm.oshelper.atc.AgentCode;
-import org.jspecify.annotations.NullMarked;
-
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
-
-import static java.util.stream.Collectors.groupingBy;
+import org.jspecify.annotations.NullMarked;
/**
* Common interface for agent code services
@@ -39,69 +37,67 @@ import static java.util.stream.Collectors.groupingBy;
*/
public interface AgentCodeService {
- /**
- * Filters the provided list of AgentCodes to include only the latest available versions
- * for each unique code name and, if required, code.
- * If the input list is empty or null, an empty list will be returned.
- *
- * @param agentCodes A list of {@link AgentCode} objects to be filtered. Each object in the list
- * should contain information about the agent's code, name, system, and version.
- * @param classifier A function that returns a string value to be used as a key for grouping agent codes.
- * @return A list of {@link AgentCode} objects representing the latest available versions of unique agent codes.
- * If no valid inputs are provided, an empty list is returned.
- */
- @NullMarked
- static List<AgentCode> latestAgentCodeVersions(List<AgentCode> agentCodes, Function<AgentCode, String> classifier) {
- return latestAvailable(agentCodes, classifier);
- }
-
- /**
- * Function that extracts the name of an {@link AgentCode} object.
- * This function is used as a classifier for grouping agent codes by their name.
- */
- Function<AgentCode, String> byCodeOnly = AgentCode::getName;
+ /**
+ * Filters the provided list of AgentCodes to include only the latest available versions for each
+ * unique code name and, if required, code. If the input list is empty or null, an empty list will
+ * be returned.
+ *
+ * @param agentCodes A list of {@link AgentCode} objects to be filtered. Each object in the list
+ * should contain information about the agent's code, name, system, and version.
+ * @param classifier A function that returns a string value to be used as a key for grouping agent
+ * codes.
+ * @return A list of {@link AgentCode} objects representing the latest available versions of
+ * unique agent codes. If no valid inputs are provided, an empty list is returned.
+ */
+ @NullMarked
+ static List<AgentCode> latestAgentCodeVersions(
+ List<AgentCode> agentCodes, Function<AgentCode, String> classifier) {
+ return latestAvailable(agentCodes, classifier);
+ }
- /**
- * Function that extracts the name and code of an {@link AgentCode} object.
- * This function is used as a classifier for grouping agent codes by their name and code.
- */
- Function<AgentCode, String> byNameAndCode = (agentCode ->
- String.format("%s_%s", agentCode.getCode(), agentCode.getName())
- );
+ /**
+ * Function that extracts the name of an {@link AgentCode} object. This function is used as a
+ * classifier for grouping agent codes by their name.
+ */
+ Function<AgentCode, String> byCodeOnly = AgentCode::getName;
+ /**
+ * Function that extracts the name and code of an {@link AgentCode} object. This function is used
+ * as a classifier for grouping agent codes by their name and code.
+ */
+ Function<AgentCode, String> byNameAndCode =
+ (agentCode -> String.format("%s_%s", agentCode.getCode(), agentCode.getName()));
- @NullMarked
- private static List<AgentCode> latestAvailable(
- List<AgentCode> agentCodes,
- Function<AgentCode, String> classifier
- ) {
- return agentCodes.stream()
- .collect(groupingBy(classifier)).values().stream()
- .map(list ->
- list.stream()
- .sorted(Comparator.comparing(AgentCode::getCode))
- .max((ac1, ac2) -> {
- if (null == ac1.getVersion()) {
- return -1;
- } else if (null == ac2.getVersion()) {
- return 1;
- }
- return ac1.getVersion().compareTo(ac2.getVersion());
- })
- .orElse(null)
- )
- .filter(Objects::nonNull)
- .distinct()
- .collect(Collectors.toList());
- }
+ @NullMarked
+ private static List<AgentCode> latestAvailable(
+ List<AgentCode> agentCodes, Function<AgentCode, String> classifier) {
+ return agentCodes.stream().collect(groupingBy(classifier)).values().stream()
+ .map(
+ list ->
+ list.stream()
+ .sorted(Comparator.comparing(AgentCode::getCode))
+ .max(
+ (ac1, ac2) -> {
+ if (null == ac1.getVersion()) {
+ return -1;
+ } else if (null == ac2.getVersion()) {
+ return 1;
+ }
+ return ac1.getVersion().compareTo(ac2.getVersion());
+ })
+ .orElse(null))
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+ }
- /**
- * Queries source for agents with name and code starting with query string.
- * If size is zero, all available results will be returned.
- *
- * @param query The query string
- * @param size Maximal amount of responses
- * @return A list with agent codes
- */
- List<AgentCode> findAgentCodes(String query, int size);
+ /**
+ * Queries source for agents with name and code starting with query string. If size is zero, all
+ * available results will be returned.
+ *
+ * @param query The query string
+ * @param size Maximal amount of responses
+ * @return A list with agent codes
+ */
+ List<AgentCode> findAgentCodes(String query, int size);
}
diff --git a/src/main/java/dev/dnpm/oshelper/atc/services/CsvAgentCodeService.java b/src/main/java/dev/dnpm/oshelper/atc/services/CsvAgentCodeService.java
index cf80738..abb006b 100644
--- a/src/main/java/dev/dnpm/oshelper/atc/services/CsvAgentCodeService.java
+++ b/src/main/java/dev/dnpm/oshelper/atc/services/CsvAgentCodeService.java
@@ -22,17 +22,15 @@ package dev.dnpm.oshelper.atc.services;
import dev.dnpm.oshelper.atc.AgentCode;
import dev.dnpm.oshelper.atc.AtcCode;
import dev.dnpm.oshelper.exceptions.FileParsingException;
-import org.apache.commons.csv.CSVFormat;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
+import org.apache.commons.csv.CSVFormat;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Service to query for agent codes based on ATC codes file
@@ -42,65 +40,72 @@ import java.util.stream.Collectors;
*/
public class CsvAgentCodeService implements AgentCodeService {
- protected final Logger logger = LoggerFactory.getLogger(this.getClass());
- protected final List<AgentCode> codeList = new ArrayList<>();
+ protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+ protected final List<AgentCode> codeList = new ArrayList<>();
- private static final String ATC_CODE_COLUMN = "ATC-Code";
- private static final String ATC_NAME_COLUMN = "ATC-Bedeutung";
- private static final String ATC_VERSION_COLUMN = "Version";
+ private static final String ATC_CODE_COLUMN = "ATC-Code";
+ private static final String ATC_NAME_COLUMN = "ATC-Bedeutung";
+ private static final String ATC_VERSION_COLUMN = "Version";
- public CsvAgentCodeService() {
- this.codeList.addAll(parseFile());
- }
+ public CsvAgentCodeService() {
+ this.codeList.addAll(parseFile());
+ }
- /**
- * Queries source for agents code starting with or name containing query string.
- * If size is zero, all available results will be returned.
- *
- * @param query The query string
- * @param size Maximal amount of responses
- * @return A list with agent codes
- */
- @Override
- public List<AgentCode> findAgentCodes(final String query, final int size) {
- var resultStream = this.codeList.stream().filter(agentCode ->
- agentCode.getCode().toLowerCase().startsWith(query.toLowerCase())
- || agentCode.getName().toLowerCase().contains(query.toLowerCase())
- );
+ /**
+ * Queries source for agents code starting with or name containing query string. If size is zero,
+ * all available results will be returned.
+ *
+ * @param query The query string
+ * @param size Maximal amount of responses
+ * @return A list with agent codes
+ */
+ @Override
+ public List<AgentCode> findAgentCodes(final String query, final int size) {
+ var resultStream =
+ this.codeList.stream()
+ .filter(
+ agentCode ->
+ agentCode.getCode().toLowerCase().startsWith(query.toLowerCase())
+ || agentCode.getName().toLowerCase().contains(query.toLowerCase()));
- if (size > 0) {
- return resultStream.limit(size).collect(Collectors.toList());
- }
- return resultStream.collect(Collectors.toList());
+ if (size > 0) {
+ return resultStream.limit(size).collect(Collectors.toList());
}
+ return resultStream.collect(Collectors.toList());
+ }
- protected List<AgentCode> parseFile() {
- var result = new ArrayList<AgentCode>();
+ protected List<AgentCode> parseFile() {
+ var result = new ArrayList<AgentCode>();
- try {
- var inputStream = Objects.requireNonNull(this.getClass().getClassLoader().getResourceAsStream("atc.csv"));
- var parser = CSVFormat.RFC4180
- .withHeader()
- .withDelimiter('\t')
- .withIgnoreEmptyLines()
- .withSkipHeaderRecord()
- .parse(new InputStreamReader(inputStream));
- for (var row : parser) {
- if (!row.isMapped(ATC_CODE_COLUMN) || !row.isMapped(ATC_NAME_COLUMN)) {
- throw new FileParsingException("No CSV column for ATC code or name found");
- }
- if (row.isMapped(ATC_VERSION_COLUMN)) {
- result.add(new AtcCode(row.get(ATC_CODE_COLUMN).trim(), row.get(ATC_NAME_COLUMN), row.get(ATC_VERSION_COLUMN)));
- } else {
- result.add(new AtcCode(row.get(ATC_CODE_COLUMN).trim(), row.get(ATC_NAME_COLUMN)));
- }
- }
- return result;
- } catch (IOException | FileParsingException e) {
- logger.warn("Error reading information from ATC codes");
+ try {
+ var inputStream =
+ Objects.requireNonNull(this.getClass().getClassLoader().getResourceAsStream("atc.csv"));
+ var parser =
+ CSVFormat.RFC4180
+ .withHeader()
+ .withDelimiter('\t')
+ .withIgnoreEmptyLines()
+ .withSkipHeaderRecord()
+ .parse(new InputStreamReader(inputStream));
+ for (var row : parser) {
+ if (!row.isMapped(ATC_CODE_COLUMN) || !row.isMapped(ATC_NAME_COLUMN)) {
+ throw new FileParsingException("No CSV column for ATC code or name found");
}
- logger.info("Found {} ATC codes", result.size());
- return result;
+ if (row.isMapped(ATC_VERSION_COLUMN)) {
+ result.add(
+ new AtcCode(
+ row.get(ATC_CODE_COLUMN).trim(),
+ row.get(ATC_NAME_COLUMN),
+ row.get(ATC_VERSION_COLUMN)));
+ } else {
+ result.add(new AtcCode(row.get(ATC_CODE_COLUMN).trim(), row.get(ATC_NAME_COLUMN)));
+ }
+ }
+ return result;
+ } catch (IOException | FileParsingException e) {
+ logger.warn("Error reading information from ATC codes");
}
-
+ logger.info("Found {} ATC codes", result.size());
+ return result;
+ }
}
diff --git a/src/main/java/dev/dnpm/oshelper/atc/services/OnkostarAgentCodeService.java b/src/main/java/dev/dnpm/oshelper/atc/services/OnkostarAgentCodeService.java
index 306563d..0dfb1e6 100644
--- a/src/main/java/dev/dnpm/oshelper/atc/services/OnkostarAgentCodeService.java
+++ b/src/main/java/dev/dnpm/oshelper/atc/services/OnkostarAgentCodeService.java
@@ -22,10 +22,9 @@ package dev.dnpm.oshelper.atc.services;
import dev.dnpm.oshelper.atc.AgentCode;
import dev.dnpm.oshelper.atc.AtcCode;
import dev.dnpm.oshelper.atc.UnregisteredCode;
-import org.springframework.jdbc.core.JdbcTemplate;
-
-import javax.sql.DataSource;
import java.util.List;
+import javax.sql.DataSource;
+import org.springframework.jdbc.core.JdbcTemplate;
/**
* Implementation of {@link AgentCodeService} that uses database to query for unregistered agents
@@ -35,45 +34,45 @@ import java.util.List;
*/
public class OnkostarAgentCodeService implements AgentCodeService {
- private final JdbcTemplate jdbcTemplate;
-
- public OnkostarAgentCodeService(final DataSource dataSource) {
- this.jdbcTemplate = new JdbcTemplate(dataSource);
- }
+ private final JdbcTemplate jdbcTemplate;
- /**
- * Queries source for agents code starting with or name containing query string.
- * If size is zero, all available results will be returned.
- *
- * @param query The query string
- * @param size Maximal amount of responses
- * @return A list with agent codes
- */
- @Override
- public List<AgentCode> findAgentCodes(final String query, final int size) {
- var sql = "SELECT code, shortdesc, synonyms\n" +
- " FROM property_catalogue\n" +
- " JOIN property_catalogue_version ON (property_catalogue_version.datacatalog_id = property_catalogue.id)\n" +
- " JOIN property_catalogue_version_entry p ON (p.property_version_id = property_catalogue_version.id)\n" +
- " WHERE name = 'OS.Substanzen'\n" +
- " AND (LOWER(code) LIKE ? OR LOWER(shortdesc) LIKE ? OR LOWER(synonyms) LIKE ?)";
+ public OnkostarAgentCodeService(final DataSource dataSource) {
+ this.jdbcTemplate = new JdbcTemplate(dataSource);
+ }
- if (size > 0) {
- sql = sql + " LIMIT " + size;
- }
+ /**
+ * Queries source for agents code starting with or name containing query string. If size is zero,
+ * all available results will be returned.
+ *
+ * @param query The query string
+ * @param size Maximal amount of responses
+ * @return A list with agent codes
+ */
+ @Override
+ public List<AgentCode> findAgentCodes(final String query, final int size) {
+ var sql =
+ "SELECT code, shortdesc, synonyms\n"
+ + " FROM property_catalogue\n"
+ + " JOIN property_catalogue_version ON (property_catalogue_version.datacatalog_id = property_catalogue.id)\n"
+ + " JOIN property_catalogue_version_entry p ON (p.property_version_id = property_catalogue_version.id)\n"
+ + " WHERE name = 'OS.Substanzen'\n"
+ + " AND (LOWER(code) LIKE ? OR LOWER(shortdesc) LIKE ? OR LOWER(synonyms) LIKE ?)";
- return jdbcTemplate.query(
- sql,
- new Object[]{query + "%", "%" + query + "%", "%" + query + "%"},
- (resultSet, i) -> {
- var code = resultSet.getString("code");
- var shortdesc = resultSet.getString("shortdesc");
- var synonyms = resultSet.getString("synonyms");
- if (AtcCode.isAtcCode(code)) {
- return new AtcCode(code, shortdesc);
- }
- return new UnregisteredCode(code, shortdesc, synonyms);
- }
- );
+ if (size > 0) {
+ sql = sql + " LIMIT " + size;
}
+
+ return jdbcTemplate.query(
+ sql,
+ new Object[] {query + "%", "%" + query + "%", "%" + query + "%"},
+ (resultSet, i) -> {
+ var code = resultSet.getString("code");
+ var shortdesc = resultSet.getString("shortdesc");
+ var synonyms = resultSet.getString("synonyms");
+ if (AtcCode.isAtcCode(code)) {
+ return new AtcCode(code, shortdesc);
+ }
+ return new UnregisteredCode(code, shortdesc, synonyms);
+ });
+ }
}