NONRTRIC - Implement DMaaP mediator producer service in Java
[nonrtric.git] / dmaap-adaptor-java / src / main / java / org / oran / dmaapadapter / repository / Job.java
index 690e465..fbeb9cb 100644 (file)
 
 package org.oran.dmaapadapter.repository;
 
+import java.time.Duration;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import lombok.Getter;
 
+import org.immutables.gson.Gson;
+import org.oran.dmaapadapter.clients.AsyncRestClient;
+
 public class Job {
 
+    @Gson.TypeAdapters
+    public static class Parameters {
+        @Getter
+        private String filter;
+        @Getter
+        private BufferTimeout bufferTimeout;
+
+        public Parameters() {}
+
+        public Parameters(String filter, BufferTimeout bufferTimeout) {
+            this.filter = filter;
+            this.bufferTimeout = bufferTimeout;
+        }
+    }
+
+    @Gson.TypeAdapters
+    public static class BufferTimeout {
+        public BufferTimeout(int maxSize, int maxTimeMiliseconds) {
+            this.maxSize = maxSize;
+            this.maxTimeMiliseconds = maxTimeMiliseconds;
+        }
+
+        public BufferTimeout() {}
+
+        @Getter
+        private int maxSize;
+
+        private int maxTimeMiliseconds;
+
+        public Duration getMaxTime() {
+            return Duration.ofMillis(maxTimeMiliseconds);
+        }
+    }
+
     @Getter
     private final String id;
 
@@ -33,10 +74,47 @@ public class Job {
     @Getter
     private final InfoType type;
 
-    public Job(String id, String callbackUrl, InfoType type) {
+    @Getter
+    private final String owner;
+
+    @Getter
+    private final Parameters parameters;
+
+    @Getter
+    private final String lastUpdated;
+
+    private final Pattern jobDataFilter;
+
+    @Getter
+    private final AsyncRestClient consumerRestClient;
+
+    public Job(String id, String callbackUrl, InfoType type, String owner, String lastUpdated, Parameters parameters,
+            AsyncRestClient consumerRestClient) {
         this.id = id;
         this.callbackUrl = callbackUrl;
         this.type = type;
+        this.owner = owner;
+        this.lastUpdated = lastUpdated;
+        this.parameters = parameters;
+        if (parameters != null && parameters.filter != null) {
+            jobDataFilter = Pattern.compile(parameters.filter);
+        } else {
+            jobDataFilter = null;
+        }
+        this.consumerRestClient = consumerRestClient;
+    }
+
+    public boolean isFilterMatch(String data) {
+        if (jobDataFilter == null) {
+            return true;
+        }
+        Matcher matcher = jobDataFilter.matcher(data);
+        return matcher.find();
+    }
+
+    public boolean isBuffered() {
+        return parameters != null && parameters.bufferTimeout != null && parameters.bufferTimeout.maxSize > 0
+                && parameters.bufferTimeout.maxTimeMiliseconds > 0;
     }
 
 }