summaryrefslogtreecommitdiff
path: root/DNPMPlugins/src/main/java/ATCCodes/services/FileBasedAgentCodeService.java
diff options
context:
space:
mode:
authorBusfreak2023-03-10 00:30:42 +0100
committerBusfreak2023-03-10 00:30:42 +0100
commit9d66c42460dda63a6380ba0f30004fcd92a4f5c4 (patch)
tree9eb63a707d1747574bc18cbcd8e66d1c51551e5a /DNPMPlugins/src/main/java/ATCCodes/services/FileBasedAgentCodeService.java
parent89153c391eb60d6aea6ea72fb93f04406a7b0b48 (diff)
erste Version
Diffstat (limited to 'DNPMPlugins/src/main/java/ATCCodes/services/FileBasedAgentCodeService.java')
-rw-r--r--DNPMPlugins/src/main/java/ATCCodes/services/FileBasedAgentCodeService.java63
1 files changed, 63 insertions, 0 deletions
diff --git a/DNPMPlugins/src/main/java/ATCCodes/services/FileBasedAgentCodeService.java b/DNPMPlugins/src/main/java/ATCCodes/services/FileBasedAgentCodeService.java
new file mode 100644
index 0000000..17ba389
--- /dev/null
+++ b/DNPMPlugins/src/main/java/ATCCodes/services/FileBasedAgentCodeService.java
@@ -0,0 +1,63 @@
+package ATCCodes.services;
+
+import ATCCodes.AgentCode;
+import org.apache.commons.lang.SystemUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.io.ResourceLoader;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Abstract {@link AgentCodeService} for use with files that will load information into memory
+ *
+ * @author Paul-Christian Volkmer
+ * @since 0.1.0
+ */
+public abstract class FileBasedAgentCodeService implements AgentCodeService {
+
+ protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ protected final List<AgentCode> codeList = new ArrayList<>();
+
+ FileBasedAgentCodeService(final ResourceLoader resourceLoader) {
+ this.codeList.addAll(parseFile(resourceLoader));
+ }
+
+ static String getFilePath(final String filename) {
+ String pluginPathPart = "onkostar/files/onkostar/plugins/onkostar-plugin-atccodes";
+
+ if (SystemUtils.IS_OS_WINDOWS) {
+ return String.format("file:///c:/%s/%s", pluginPathPart, filename);
+ } else if (SystemUtils.IS_OS_LINUX) {
+ return String.format("file:///opt/%s/%s", pluginPathPart, filename);
+ }
+ return filename;
+ }
+
+ protected abstract List<AgentCode> parseFile(final ResourceLoader resourceLoader);
+
+ /**
+ * 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());
+ }
+
+} \ No newline at end of file