diff --git a/beacon/src/main/java/io/xpipe/beacon/exchange/cli/StoreAddExchange.java b/beacon/src/main/java/io/xpipe/beacon/exchange/cli/StoreAddExchange.java index fc91d772..d0e4caff 100644 --- a/beacon/src/main/java/io/xpipe/beacon/exchange/cli/StoreAddExchange.java +++ b/beacon/src/main/java/io/xpipe/beacon/exchange/cli/StoreAddExchange.java @@ -20,7 +20,6 @@ public class StoreAddExchange implements MessageExchange { @Builder @Value public static class Request implements RequestMessage { - String input; DataStore storeInput; String type; diff --git a/core/src/main/java/io/xpipe/core/impl/FileStore.java b/core/src/main/java/io/xpipe/core/impl/FileStore.java index 4b5f0a9a..151c985a 100644 --- a/core/src/main/java/io/xpipe/core/impl/FileStore.java +++ b/core/src/main/java/io/xpipe/core/impl/FileStore.java @@ -59,7 +59,7 @@ public class FileStore extends JacksonizedValue implements FilenameStore, Stream @Override public void checkComplete() throws Exception { if (fileSystem == null) { - throw new IllegalStateException("Machine is missing"); + throw new IllegalStateException("File system is missing"); } if (file == null) { throw new IllegalStateException("File is missing"); diff --git a/core/src/main/java/io/xpipe/core/impl/PeekTableStreamReadConnection.java b/core/src/main/java/io/xpipe/core/impl/PeekTableStreamReadConnection.java new file mode 100644 index 00000000..17143ce8 --- /dev/null +++ b/core/src/main/java/io/xpipe/core/impl/PeekTableStreamReadConnection.java @@ -0,0 +1,66 @@ +package io.xpipe.core.impl; + +import io.xpipe.core.charsetter.StreamCharset; +import io.xpipe.core.data.node.DataStructureNodeAcceptor; +import io.xpipe.core.data.node.TupleNode; +import io.xpipe.core.data.type.TupleType; +import io.xpipe.core.source.TableReadConnection; +import io.xpipe.core.store.StreamDataStore; + +import java.util.concurrent.atomic.AtomicReference; + +public abstract class PeekTableStreamReadConnection extends StreamReadConnection implements TableReadConnection { + + private TupleNode first; + private TupleType type; + + public PeekTableStreamReadConnection(StreamDataStore store, StreamCharset charset) { + super(store, charset); + } + + @Override + public void init() throws Exception { + super.init(); + AtomicReference read = new AtomicReference<>(); + withRowsInternal(node -> { + read.set(node); + return false; + }); + if (read.get() == null) { + return; + } + + first = read.get().asTuple(); + type = convertType(first); + } + + protected TupleType convertType(TupleNode n) { + return n.determineDataType().asTuple(); + } + + @Override + public void close() throws Exception { + if (inputStream == null) { + throw new IllegalStateException("Not initialized"); + } + + inputStream.close(); + } + + @Override + public TupleType getDataType() { + return type; + } + + @Override + public final void withRows(DataStructureNodeAcceptor lineAcceptor) throws Exception { + if (first != null) { + lineAcceptor.accept(first); + first = null; + } + + withRowsInternal(lineAcceptor); + } + + protected abstract void withRowsInternal(DataStructureNodeAcceptor lineAcceptor) throws Exception; +} diff --git a/core/src/main/java/io/xpipe/core/source/StreamReadConnection.java b/core/src/main/java/io/xpipe/core/impl/StreamReadConnection.java similarity index 93% rename from core/src/main/java/io/xpipe/core/source/StreamReadConnection.java rename to core/src/main/java/io/xpipe/core/impl/StreamReadConnection.java index 0144cfc3..298e6fce 100644 --- a/core/src/main/java/io/xpipe/core/source/StreamReadConnection.java +++ b/core/src/main/java/io/xpipe/core/impl/StreamReadConnection.java @@ -1,7 +1,8 @@ -package io.xpipe.core.source; +package io.xpipe.core.impl; import io.xpipe.core.charsetter.Charsetter; import io.xpipe.core.charsetter.StreamCharset; +import io.xpipe.core.source.DataSourceReadConnection; import io.xpipe.core.store.StreamDataStore; import java.io.InputStream; diff --git a/core/src/main/java/io/xpipe/core/source/StreamWriteConnection.java b/core/src/main/java/io/xpipe/core/impl/StreamWriteConnection.java similarity index 94% rename from core/src/main/java/io/xpipe/core/source/StreamWriteConnection.java rename to core/src/main/java/io/xpipe/core/impl/StreamWriteConnection.java index b4b66a24..06db161c 100644 --- a/core/src/main/java/io/xpipe/core/source/StreamWriteConnection.java +++ b/core/src/main/java/io/xpipe/core/impl/StreamWriteConnection.java @@ -1,6 +1,7 @@ -package io.xpipe.core.source; +package io.xpipe.core.impl; import io.xpipe.core.charsetter.StreamCharset; +import io.xpipe.core.source.DataSourceConnection; import io.xpipe.core.store.StreamDataStore; import java.io.OutputStream; diff --git a/core/src/main/java/io/xpipe/core/impl/TextReadConnection.java b/core/src/main/java/io/xpipe/core/impl/TextReadConnection.java index a7a72c73..e0b2a26f 100644 --- a/core/src/main/java/io/xpipe/core/impl/TextReadConnection.java +++ b/core/src/main/java/io/xpipe/core/impl/TextReadConnection.java @@ -1,7 +1,5 @@ package io.xpipe.core.impl; -import io.xpipe.core.source.StreamReadConnection; - import java.io.BufferedReader; import java.util.stream.Stream; diff --git a/core/src/main/java/io/xpipe/core/impl/TextWriteConnection.java b/core/src/main/java/io/xpipe/core/impl/TextWriteConnection.java index 5c81e012..223b852d 100644 --- a/core/src/main/java/io/xpipe/core/impl/TextWriteConnection.java +++ b/core/src/main/java/io/xpipe/core/impl/TextWriteConnection.java @@ -1,7 +1,5 @@ package io.xpipe.core.impl; -import io.xpipe.core.source.StreamWriteConnection; - public class TextWriteConnection extends StreamWriteConnection implements io.xpipe.core.source.TextWriteConnection { private final TextSource source; diff --git a/core/src/main/java/io/xpipe/core/impl/XpbsReadConnection.java b/core/src/main/java/io/xpipe/core/impl/XpbsReadConnection.java index da7b93a4..d12e6d11 100644 --- a/core/src/main/java/io/xpipe/core/impl/XpbsReadConnection.java +++ b/core/src/main/java/io/xpipe/core/impl/XpbsReadConnection.java @@ -2,7 +2,6 @@ package io.xpipe.core.impl; import io.xpipe.core.data.generic.GenericDataStreamParser; import io.xpipe.core.data.node.DataStructureNode; -import io.xpipe.core.source.StreamReadConnection; import io.xpipe.core.source.StructureReadConnection; public class XpbsReadConnection extends StreamReadConnection implements StructureReadConnection { diff --git a/core/src/main/java/io/xpipe/core/impl/XpbsWriteConnection.java b/core/src/main/java/io/xpipe/core/impl/XpbsWriteConnection.java index 5cc13e55..95abc34c 100644 --- a/core/src/main/java/io/xpipe/core/impl/XpbsWriteConnection.java +++ b/core/src/main/java/io/xpipe/core/impl/XpbsWriteConnection.java @@ -2,7 +2,6 @@ package io.xpipe.core.impl; import io.xpipe.core.data.generic.GenericDataStreamWriter; import io.xpipe.core.data.node.DataStructureNode; -import io.xpipe.core.source.StreamWriteConnection; import io.xpipe.core.source.StructureWriteConnection; public class XpbsWriteConnection extends StreamWriteConnection implements StructureWriteConnection { diff --git a/core/src/main/java/io/xpipe/core/impl/XpbtReadConnection.java b/core/src/main/java/io/xpipe/core/impl/XpbtReadConnection.java index 8e491292..dbebe1cb 100644 --- a/core/src/main/java/io/xpipe/core/impl/XpbtReadConnection.java +++ b/core/src/main/java/io/xpipe/core/impl/XpbtReadConnection.java @@ -7,7 +7,6 @@ import io.xpipe.core.data.node.TupleNode; import io.xpipe.core.data.type.TupleType; import io.xpipe.core.data.typed.TypedDataStreamParser; import io.xpipe.core.data.typed.TypedDataStructureNodeReader; -import io.xpipe.core.source.StreamReadConnection; import io.xpipe.core.source.TableReadConnection; import io.xpipe.core.store.StreamDataStore; import io.xpipe.core.util.JacksonMapper; diff --git a/core/src/main/java/io/xpipe/core/impl/XpbtWriteConnection.java b/core/src/main/java/io/xpipe/core/impl/XpbtWriteConnection.java index 48e07107..a9d66f49 100644 --- a/core/src/main/java/io/xpipe/core/impl/XpbtWriteConnection.java +++ b/core/src/main/java/io/xpipe/core/impl/XpbtWriteConnection.java @@ -7,7 +7,6 @@ import io.xpipe.core.data.node.DataStructureNodeAcceptor; import io.xpipe.core.data.node.TupleNode; import io.xpipe.core.data.type.TupleType; import io.xpipe.core.data.typed.TypedDataStreamWriter; -import io.xpipe.core.source.StreamWriteConnection; import io.xpipe.core.source.TableMapping; import io.xpipe.core.util.JacksonMapper; import lombok.Getter; diff --git a/extension/src/main/java/io/xpipe/extension/DataStoreProvider.java b/extension/src/main/java/io/xpipe/extension/DataStoreProvider.java index b322da7b..ade94f8d 100644 --- a/extension/src/main/java/io/xpipe/extension/DataStoreProvider.java +++ b/extension/src/main/java/io/xpipe/extension/DataStoreProvider.java @@ -76,8 +76,6 @@ public interface DataStoreProvider { return getModuleName() + ":" + getId() + "_icon.png"; } - DataStore storeForString(String s); - default Dialog dialogForStore(DataStore store) { return null; } diff --git a/extension/src/main/java/io/xpipe/extension/DataStoreProviders.java b/extension/src/main/java/io/xpipe/extension/DataStoreProviders.java index 2dcda4bb..b68a3a18 100644 --- a/extension/src/main/java/io/xpipe/extension/DataStoreProviders.java +++ b/extension/src/main/java/io/xpipe/extension/DataStoreProviders.java @@ -1,10 +1,12 @@ package io.xpipe.extension; -import io.xpipe.core.dialog.Dialog; import io.xpipe.core.store.DataStore; import io.xpipe.extension.event.ErrorEvent; -import java.util.*; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.ServiceLoader; import java.util.stream.Collectors; public class DataStoreProviders { @@ -53,24 +55,6 @@ public class DataStoreProviders { .collect(Collectors.joining())); } - public static Optional byString(String s) { - if (ALL == null) { - throw new IllegalStateException("Not initialized"); - } - - return ALL.stream() - .map(d -> { - var store = d.storeForString(s); - if (store != null) { - return d.dialogForStore(store); - } else { - return null; - } - }) - .filter(Objects::nonNull) - .findAny(); - } - @SuppressWarnings("unchecked") public static T byStore(DataStore store) { return (T) byStoreClass(store.getClass()).orElseThrow(); diff --git a/extension/src/main/java/io/xpipe/extension/fxcomps/impl/ShellStoreChoiceComp.java b/extension/src/main/java/io/xpipe/extension/fxcomps/impl/ShellStoreChoiceComp.java index 0f1e37c6..ec04d71f 100644 --- a/extension/src/main/java/io/xpipe/extension/fxcomps/impl/ShellStoreChoiceComp.java +++ b/extension/src/main/java/io/xpipe/extension/fxcomps/impl/ShellStoreChoiceComp.java @@ -1,6 +1,5 @@ package io.xpipe.extension.fxcomps.impl; -import io.xpipe.core.impl.LocalStore; import io.xpipe.core.store.ShellStore; import io.xpipe.extension.DataStoreProviders; import io.xpipe.extension.I18n; @@ -17,7 +16,6 @@ import javafx.scene.layout.Region; import lombok.AllArgsConstructor; import java.util.function.Predicate; -import java.util.stream.Stream; /* TODO: Integrate store validation more into this comp. @@ -39,7 +37,7 @@ public class ShellStoreChoiceComp extends SimpleComp { .filter(e -> e.equals(s)) .findAny() .flatMap(store -> XPipeDaemon.getInstance().getStoreName(store)) - .orElse(I18n.get("localMachine")); + .orElse("?"); return new Label(name, imgView); } @@ -57,7 +55,7 @@ public class ShellStoreChoiceComp extends SimpleComp { .filter(e -> e.equals(n)) .findAny() .flatMap(store -> XPipeDaemon.getInstance().getStoreName(store)) - .orElse(I18n.get("localMachine")); + .orElse("?"); ErrorEvent.fromMessage(I18n.get("extension.namedHostNotActive", name)) .reportable(false) .handle(); @@ -77,12 +75,10 @@ public class ShellStoreChoiceComp extends SimpleComp { return true; }); - var available = Stream.concat( - Stream.of(new LocalStore()), - XPipeDaemon.getInstance().getNamedStores().stream() + var available = XPipeDaemon.getInstance().getNamedStores().stream() .filter(s -> s != self) .filter(s -> storeClass.isAssignableFrom(s.getClass()) && applicableCheck.test((T) s)) - .map(s -> (ShellStore) s)) + .map(s -> (ShellStore) s) .toList(); available.forEach(s -> comboBox.add((T) s)); ComboBox cb = comboBox.build(); diff --git a/gradle_scripts/java.gradle b/gradle_scripts/java.gradle index 83ec7e17..0ec1a423 100644 --- a/gradle_scripts/java.gradle +++ b/gradle_scripts/java.gradle @@ -5,6 +5,8 @@ tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' options.compilerArgs << "-Xlint:unchecked" options.compilerArgs << "--enable-preview" + + // These settings are explicitly specified as they can cause problems with annotation processors options.compilerArgs << "-implicit:none" options.incremental = false }