You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ri...@apache.org on 2022/08/17 07:38:22 UTC
[incubator-streampipes] branch STREAMPIPES-577 updated: [STREAMPIPES-577] More adapters support preview, improve preview appearance
This is an automated email from the ASF dual-hosted git repository.
riemer pushed a commit to branch STREAMPIPES-577
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git
The following commit(s) were added to refs/heads/STREAMPIPES-577 by this push:
new 1dede1727 [STREAMPIPES-577] More adapters support preview, improve preview appearance
1dede1727 is described below
commit 1dede1727e16ec92d1a5393dbe2c283bea1c07a1
Author: Dominik Riemer <do...@gmail.com>
AuthorDate: Wed Aug 17 09:38:12 2022 +0200
[STREAMPIPES-577] More adapters support preview, improve preview appearance
---
.../connect/adapter/format/csv/CsvParser.java | 40 ++++++++++++++++++----
.../adapter/format/json/AbstractJsonFormat.java | 3 --
.../connect/iiot/protocol/set/FileProtocol.java | 11 +++---
.../iiot/protocol/stream/FileStreamProtocol.java | 11 +++---
.../event-property-row.component.html | 10 +++---
.../event-property-row.component.scss | 12 +++++--
.../event-schema-preview.component.ts | 10 +++++-
7 files changed, 71 insertions(+), 26 deletions(-)
diff --git a/streampipes-connect/src/main/java/org/apache/streampipes/connect/adapter/format/csv/CsvParser.java b/streampipes-connect/src/main/java/org/apache/streampipes/connect/adapter/format/csv/CsvParser.java
index 4f6b87323..a5e4f3841 100644
--- a/streampipes-connect/src/main/java/org/apache/streampipes/connect/adapter/format/csv/CsvParser.java
+++ b/streampipes-connect/src/main/java/org/apache/streampipes/connect/adapter/format/csv/CsvParser.java
@@ -19,11 +19,13 @@
package org.apache.streampipes.connect.adapter.format.csv;
-import org.apache.streampipes.connect.api.EmitBinaryEvent;
import org.apache.streampipes.connect.adapter.model.generic.Parser;
import org.apache.streampipes.connect.adapter.sdk.ParameterExtractor;
+import org.apache.streampipes.connect.api.EmitBinaryEvent;
import org.apache.streampipes.connect.api.exception.ParseException;
import org.apache.streampipes.model.connect.grounding.FormatDescription;
+import org.apache.streampipes.model.connect.guess.AdapterGuessInfo;
+import org.apache.streampipes.model.connect.guess.GuessTypeInfo;
import org.apache.streampipes.model.schema.EventPropertyPrimitive;
import org.apache.streampipes.model.schema.EventSchema;
import org.apache.streampipes.vocabulary.XSD;
@@ -33,6 +35,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
@@ -81,7 +84,13 @@ public class CsvParser extends Parser {
}
@Override
- public EventSchema getEventSchema(List<byte[]> oneEvent) {
+ public boolean supportsPreview() {
+ return true;
+ }
+
+ @Override
+ public AdapterGuessInfo getSchemaAndSample(List<byte[]> oneEvent) {
+ var sample = new HashMap<String, GuessTypeInfo>();
String[] keys;
String[] data;
@@ -101,26 +110,45 @@ public class CsvParser extends Parser {
EventPropertyPrimitive p = new EventPropertyPrimitive();
p.setRuntimeName(keys[i]);
p.setRuntimeType(getTypeString(data[i]));
+ sample.put(keys[i], new GuessTypeInfo(getTypeString(data[i]), data[i]));
resultSchema.addEventProperty(p);
}
- return resultSchema;
+ return new AdapterGuessInfo(resultSchema, sample);
+ }
+
+ @Override
+ public EventSchema getEventSchema(List<byte[]> oneEvent) {
+ return getSchemaAndSample(oneEvent).getEventSchema();
}
private String getTypeString(String o) {
+ String typeClass = getTypeClass(o);
+
+ if (Float.class.getCanonicalName().equals(typeClass)) {
+ return XSD._float.toString();
+ } else if (Boolean.class.getCanonicalName().equals(typeClass)) {
+ return XSD._boolean.toString();
+ } else {
+ return XSD._string.toString();
+ }
+ }
+
+ private String getTypeClass(String o) {
+
try {
Double.parseDouble(o);
- return XSD._float.toString();
+ return Float.class.getCanonicalName();
} catch (NumberFormatException e) {
}
if (o.equalsIgnoreCase("true") || o.equalsIgnoreCase("false")) {
- return XSD._boolean.toString();
+ return Boolean.class.getCanonicalName();
}
- return XSD._string.toString();
+ return String.class.getCanonicalName();
}
diff --git a/streampipes-connect/src/main/java/org/apache/streampipes/connect/adapter/format/json/AbstractJsonFormat.java b/streampipes-connect/src/main/java/org/apache/streampipes/connect/adapter/format/json/AbstractJsonFormat.java
index a7116aecd..1da9b1696 100644
--- a/streampipes-connect/src/main/java/org/apache/streampipes/connect/adapter/format/json/AbstractJsonFormat.java
+++ b/streampipes-connect/src/main/java/org/apache/streampipes/connect/adapter/format/json/AbstractJsonFormat.java
@@ -21,7 +21,6 @@ import org.apache.streampipes.commons.exceptions.SpRuntimeException;
import org.apache.streampipes.connect.api.IFormat;
import org.apache.streampipes.connect.api.exception.ParseException;
import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition;
-import org.apache.streampipes.model.schema.EventSchema;
import java.util.Map;
@@ -30,8 +29,6 @@ public abstract class AbstractJsonFormat implements IFormat {
@Override
public Map<String, Object> parse(byte[] object) throws ParseException {
- EventSchema resultSchema = new EventSchema();
-
JsonDataFormatDefinition jsonDefinition = new JsonDataFormatDefinition();
Map<String, Object> result = null;
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/FileProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/FileProtocol.java
index 31d4fc5bf..8dcb342c4 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/FileProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/set/FileProtocol.java
@@ -121,11 +121,12 @@ public class FileProtocol extends Protocol {
InputStream targetStream = FileProtocolUtils.getFileInputStream(this.selectedFilename);
List<byte[]> dataByte = parser.parseNEvents(targetStream, 20);
- EventSchema eventSchema = parser.getEventSchema(dataByte);
-
- GuessSchema result = SchemaGuesser.guessSchema(eventSchema);
-
- return result;
+ if (parser.supportsPreview()) {
+ return SchemaGuesser.guessSchema(parser.getSchemaAndSample(dataByte));
+ } else {
+ EventSchema eventSchema = parser.getEventSchema(dataByte);
+ return SchemaGuesser.guessSchema(eventSchema);
+ }
} catch (FileNotFoundException e) {
throw new ParseException("Could not read local file");
}
diff --git a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/FileStreamProtocol.java b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/FileStreamProtocol.java
index d82d28ce9..f88f5c538 100644
--- a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/FileStreamProtocol.java
+++ b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/protocol/stream/FileStreamProtocol.java
@@ -211,11 +211,12 @@ public class FileStreamProtocol extends Protocol {
List<byte[]> dataByte = parser.parseNEvents(dataInputStream, 2);
- EventSchema eventSchema = parser.getEventSchema(dataByte);
-
- GuessSchema result = SchemaGuesser.guessSchema(eventSchema);
-
- return result;
+ if (parser.supportsPreview()) {
+ return SchemaGuesser.guessSchema(parser.getSchemaAndSample(dataByte));
+ } else {
+ EventSchema eventSchema = parser.getEventSchema(dataByte);
+ return SchemaGuesser.guessSchema(eventSchema);
+ }
}
@Override
diff --git a/ui/src/app/connect/components/new-adapter/schema-editor/event-property-row/event-property-row.component.html b/ui/src/app/connect/components/new-adapter/schema-editor/event-property-row/event-property-row.component.html
index 88a49c3e4..cf07a44ba 100644
--- a/ui/src/app/connect/components/new-adapter/schema-editor/event-property-row/event-property-row.component.html
+++ b/ui/src/app/connect/components/new-adapter/schema-editor/event-property-row/event-property-row.component.html
@@ -43,12 +43,14 @@
</mat-icon>
<span style="margin-left: -5px;">marked as timestamp</span>
</div>
- <div fxLayoutAlign="end center" *ngIf="runtimeType" class="runtime-type-info-outer">
+ <div fxLayoutAlign="end center" class="runtime-type-info-outer">
+ <div fxLayout="row" fxLayoutAlign="start center" fxFlex="100" *ngIf="runtimeType" >
<span class="runtime-info runtime-type-info">{{originalRuntimeType}}</span>
- <span fxLayoutAlign="center center"><i class="material-icons">arrow_right</i></span>
- <span class="runtime-info runtime-type-info">{{runtimeType}}</span>
+ <span fxLayoutAlign="center center" *ngIf="originalRuntimeType !== runtimeType"><i class="material-icons">arrow_right</i></span>
+ <span class="runtime-info runtime-type-info" *ngIf="originalRuntimeType !== runtimeType">{{runtimeType}}</span>
+ </div>
</div>
- <div fxLayoutAlign="end center">
+ <div fxLayoutAlign="end center" class="status-outer">
<span *ngIf="showFieldStatus"
[ngClass]="'status status-' +fieldStatusInfo[originalRuntimeName].fieldStatus.toLowerCase()"
[matTooltip]="fieldStatusInfo[originalRuntimeName].additionalInfo">{{fieldStatusInfo[originalRuntimeName].fieldStatus}}</span>
diff --git a/ui/src/app/connect/components/new-adapter/schema-editor/event-property-row/event-property-row.component.scss b/ui/src/app/connect/components/new-adapter/schema-editor/event-property-row/event-property-row.component.scss
index 9e4191930..ec2466197 100644
--- a/ui/src/app/connect/components/new-adapter/schema-editor/event-property-row/event-property-row.component.scss
+++ b/ui/src/app/connect/components/new-adapter/schema-editor/event-property-row/event-property-row.component.scss
@@ -60,6 +60,11 @@
border-radius: 5px;
}
+.status-outer {
+ width: 70px;
+ min-width: 70px;
+}
+
.runtime-info {
border-radius: 5px;
color: var(--color-default-text);
@@ -70,15 +75,18 @@
.runtime-type-info {
border-radius: 5px;
color: var(--color-default-text);
- width: 60px;
font-size: 10pt;
+ width: 70px;
+ border: 1px solid var(--color-bg-3);
text-align: center;
}
.runtime-type-info-outer {
padding: 3px;
border-radius: 5px;
- background: var(--color-bg-3);
+ width: 170px;
+ text-align: center;
+
}
diff --git a/ui/src/app/connect/components/new-adapter/schema-editor/event-schema-preview/event-schema-preview.component.ts b/ui/src/app/connect/components/new-adapter/schema-editor/event-schema-preview/event-schema-preview.component.ts
index 11823a586..d7dc13cc1 100644
--- a/ui/src/app/connect/components/new-adapter/schema-editor/event-schema-preview/event-schema-preview.component.ts
+++ b/ui/src/app/connect/components/new-adapter/schema-editor/event-schema-preview/event-schema-preview.component.ts
@@ -43,11 +43,19 @@ export class EventSchemaPreviewComponent implements OnInit {
}
toSimpleMap(event: Record<string, GuessTypeInfo>): Record<string, any> {
- const result = {};
+ let result: Record<string, any> = {};
+
for (const key in event) {
result[key] = event[key].value;
}
+ result = Object.keys(result).sort().reduce(
+ (obj, key) => {
+ obj[key] = result[key];
+ return obj;
+ },
+ {}
+ );
return result;
}