You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ze...@apache.org on 2023/02/21 10:41:02 UTC
[streampipes] 01/01: [#1336] Add a builder to create SpQueryResult objects
This is an automated email from the ASF dual-hosted git repository.
zehnder pushed a commit to branch SP-1336
in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 7b9c4dcb63ecf5cadbdafe8550e0f4a79d6acce6
Author: Philipp Zehnder <te...@users.noreply.github.com>
AuthorDate: Tue Feb 21 11:40:43 2023 +0100
[#1336] Add a builder to create SpQueryResult objects
---
.../streampipes/model/datalake/DataSeries.java | 15 +++
.../{DataSeries.java => DataSeriesBuilder.java} | 52 ++++-----
.../model/datalake/SpQueryResultBuilder.java | 73 +++++++++++++
.../model/datalake/DataSeriesBuilderTest.java | 90 ++++++++++++++++
.../model/datalake/SpQueryResultBuilderTest.java | 116 +++++++++++++++++++++
5 files changed, 320 insertions(+), 26 deletions(-)
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeries.java b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeries.java
index 13693a633..8ddb5c99d 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeries.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeries.java
@@ -60,4 +60,19 @@ public class DataSeries {
return rows;
}
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public void setRows(List<List<Object>> rows) {
+ this.rows = rows;
+ }
+
+ public void setTags(Map<String, String> tags) {
+ this.tags = tags;
+ }
+
+ public void setHeaders(List<String> headers) {
+ this.headers = headers;
+ }
}
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeries.java b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeriesBuilder.java
similarity index 51%
copy from streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeries.java
copy to streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeriesBuilder.java
index 13693a633..66a3d6108 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeries.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/DataSeriesBuilder.java
@@ -18,46 +18,46 @@
package org.apache.streampipes.model.datalake;
-import org.apache.streampipes.model.shared.annotation.TsModel;
-
-import java.util.HashMap;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-@TsModel
-public class DataSeries {
-
- private int total;
- private List<List<Object>> rows;
- private Map<String, String> tags;
- private List<String> headers;
+public class DataSeriesBuilder {
+ private final DataSeries dataSeries;
+ private final List<List<Object>> rows;
- public DataSeries() {
- this.total = 0;
- this.tags = new HashMap<>();
+ private DataSeriesBuilder() {
+ this.dataSeries = new DataSeries();
+ this.rows = new ArrayList<>();
}
- public DataSeries(int total, List<List<Object>> rows, List<String> headers, Map<String, String> tags) {
- this.total = total;
- this.rows = rows;
- this.headers = headers;
- this.tags = tags;
+ public static DataSeriesBuilder create() {
+ return new DataSeriesBuilder();
}
- public int getTotal() {
- return total;
+ public DataSeries build() {
+ dataSeries.setRows(rows);
+ dataSeries.setTotal(rows.size());
+ return dataSeries;
}
- public Map<String, String> getTags() {
- return tags;
+ public DataSeriesBuilder withRow(List<Object> row) {
+ this.rows.add(row);
+ return this;
}
- public List<String> getHeaders() {
- return headers;
+ public DataSeriesBuilder withRows(List<List<Object>> rows) {
+ this.rows.addAll(rows);
+ return this;
}
- public List<List<Object>> getRows() {
- return rows;
+ public DataSeriesBuilder withHeaders(List<String> headers) {
+ dataSeries.setHeaders(headers);
+ return this;
}
+ public DataSeriesBuilder withTags(Map<String, String> tags) {
+ dataSeries.setTags(tags);
+ return this;
+ }
}
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/SpQueryResultBuilder.java b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/SpQueryResultBuilder.java
new file mode 100644
index 000000000..2f9adf3d9
--- /dev/null
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/SpQueryResultBuilder.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.model.datalake;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SpQueryResultBuilder {
+
+ private final SpQueryResult spQueryResult;
+ private final List<DataSeries> allDataSeries;
+
+ private SpQueryResultBuilder(List<String> headers) {
+ spQueryResult = new SpQueryResult();
+ allDataSeries = new ArrayList<>();
+ spQueryResult.setHeaders(headers);
+ }
+
+ public static SpQueryResultBuilder create(List<String> headers) {
+ return new SpQueryResultBuilder(headers);
+ }
+
+ public SpQueryResult build() {
+ // set the header of all data series
+ allDataSeries
+ .forEach(series -> series.setHeaders(spQueryResult.getHeaders()));
+ spQueryResult.setAllDataSeries(allDataSeries);
+ spQueryResult.setTotal(allDataSeries.size());
+ return spQueryResult;
+ }
+
+ public SpQueryResultBuilder withDataSeries(List<DataSeries> allDataSeries) {
+ this.allDataSeries.addAll(allDataSeries);
+ return this;
+ }
+
+ public SpQueryResultBuilder withDataSeries(DataSeries dataSeries) {
+ this.allDataSeries.add(dataSeries);
+ return this;
+ }
+
+ public SpQueryResultBuilder withSourceIndex(int sourceIndex) {
+ spQueryResult.setSourceIndex(sourceIndex);
+ return this;
+ }
+
+ public SpQueryResultBuilder withSpQueryStatus(SpQueryStatus spQueryStatus) {
+ spQueryResult.setSpQueryStatus(spQueryStatus);
+ return this;
+ }
+
+ public SpQueryResultBuilder withForId(String forId) {
+ spQueryResult.setForId(forId);
+ return this;
+ }
+
+}
diff --git a/streampipes-model/src/test/java/org/apache/streampipes/model/datalake/DataSeriesBuilderTest.java b/streampipes-model/src/test/java/org/apache/streampipes/model/datalake/DataSeriesBuilderTest.java
new file mode 100644
index 000000000..1b1111f43
--- /dev/null
+++ b/streampipes-model/src/test/java/org/apache/streampipes/model/datalake/DataSeriesBuilderTest.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.model.datalake;
+
+
+import org.junit.Test;
+
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+
+public class DataSeriesBuilderTest {
+
+ private static final List<Object> rowOne = List.of(1, "v1");
+ private static final List<Object> rowTwo = List.of(2, "v2");
+ @Test
+ public void withHeadersTest() {
+ var headers = List.of("h1", "h2");
+ var result = DataSeriesBuilder.create()
+ .withHeaders(headers)
+ .build();
+
+ assertEquals(2, result.getHeaders().size());
+ assertEquals(headers, result.getHeaders());
+ }
+
+
+ @Test
+ public void withRowTest() {
+
+ var result = DataSeriesBuilder.create()
+ .withRow(rowOne)
+ .build();
+
+ assertEquals(1, result.getRows().size());
+ assertEquals(1, result.getTotal());
+ assertEquals(List.of(rowOne), result.getRows());
+ }
+
+ @Test
+ public void withTwoRowsTest() {
+ var result = DataSeriesBuilder.create()
+ .withRow(rowOne)
+ .withRow(rowTwo)
+ .build();
+
+ assertEquals(2, result.getRows().size());
+ assertEquals(2, result.getTotal());
+ assertEquals(List.of(rowOne, rowTwo), result.getRows());
+ }
+
+ @Test
+ public void withRowsTest() {
+ var result = DataSeriesBuilder.create()
+ .withRows(List.of(rowOne, rowTwo))
+ .build();
+
+ assertEquals(2, result.getRows().size());
+ assertEquals(2, result.getTotal());
+ assertEquals(List.of(rowOne, rowTwo), result.getRows());
+ }
+
+ @Test
+ public void withTagsTest() {
+ Map<String, String> tags = Map.of("t1", "v1");
+
+ var result = DataSeriesBuilder.create()
+ .withTags(tags)
+ .build();
+
+ assertEquals(tags, result.getTags());
+ }
+}
\ No newline at end of file
diff --git a/streampipes-model/src/test/java/org/apache/streampipes/model/datalake/SpQueryResultBuilderTest.java b/streampipes-model/src/test/java/org/apache/streampipes/model/datalake/SpQueryResultBuilderTest.java
new file mode 100644
index 000000000..a453795c5
--- /dev/null
+++ b/streampipes-model/src/test/java/org/apache/streampipes/model/datalake/SpQueryResultBuilderTest.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.model.datalake;
+
+
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+public class SpQueryResultBuilderTest {
+
+ List<String> headers = List.of("h1", "h2");
+ @Test
+ public void withHeadersTest() {
+ var result = SpQueryResultBuilder.create(headers)
+ .build();
+
+ assertEquals(2, result.getHeaders().size());
+ assertEquals(headers, result.getHeaders());
+ }
+
+ @Test
+ public void withSourceIndexTest() {
+ var sourceIndex = 1;
+ var result = SpQueryResultBuilder.create(headers)
+ .withSourceIndex(sourceIndex)
+ .build();
+
+ assertEquals(sourceIndex, result.getSourceIndex());
+ }
+
+ @Test
+ public void withQueryStatusDefaultTest() {
+ var result = SpQueryResultBuilder.create(headers)
+ .build();
+
+ assertEquals(SpQueryStatus.OK, result.getSpQueryStatus());
+ }
+
+ @Test
+ public void withQueryStatusTooMuchDataTest() {
+ var result = SpQueryResultBuilder.create(headers)
+ .withSpQueryStatus(SpQueryStatus.TOO_MUCH_DATA)
+ .build();
+
+ assertEquals(SpQueryStatus.TOO_MUCH_DATA, result.getSpQueryStatus());
+ }
+
+ @Test
+ public void withForId() {
+ var forId = "id";
+ var result = SpQueryResultBuilder.create(headers)
+ .withForId(forId)
+ .build();
+
+ assertEquals(forId, result.getForId());
+ }
+
+ @Test
+ public void withDataSeriesTest() {
+ List<Object> row = List.of("v1", 1);
+
+ var result = SpQueryResultBuilder.create(headers)
+ .withDataSeries(
+ DataSeriesBuilder.create()
+ .withRow(row)
+ .build()
+ )
+ .build();
+
+ assertEquals(1, result.getAllDataSeries().size());
+ assertEquals(1, result.getAllDataSeries().get(0).getRows().size());
+ assertEquals(row, result.getAllDataSeries().get(0).getRows().get(0));
+ }
+
+ @Test
+ public void completeExampleTest() {
+
+ List<String> headers = List.of("timestamp", "id", "value");
+ List<List<Object>> rows = List.of(
+ List.of(1234L, "one", 1.1),
+ List.of(1235L, "two", 1.0)
+ );
+
+ var spQueryResult = SpQueryResultBuilder.create(headers)
+ .withDataSeries(
+ DataSeriesBuilder.create()
+ .withRows(rows)
+ .build()
+ )
+ .build();
+
+ assertEquals(1, spQueryResult.getTotal());
+ assertEquals(headers, spQueryResult.getAllDataSeries().get(0).getHeaders());
+ assertEquals(2, spQueryResult.getAllDataSeries().get(0).getRows().size());
+ assertEquals(rows, spQueryResult.getAllDataSeries().get(0).getRows());
+ }
+}
\ No newline at end of file