From 02fdd5f9b53a4f6deee4a26d89355dcedbb89283 Mon Sep 17 00:00:00 2001 From: crschnick Date: Sat, 4 Feb 2023 09:58:02 +0000 Subject: [PATCH] Readd private files --- ext/jdbcx/build.gradle | 35 +- .../xpipe/ext/jdbcx/JdbcxJacksonModule.java | 14 - .../xpipe/ext/jdbcx/mssql/MssqlAddress.java | 21 -- .../xpipe/ext/jdbcx/mssql/MssqlDialect.java | 301 ------------------ .../ext/jdbcx/mssql/MssqlSimpleStore.java | 50 --- .../io/xpipe/ext/jdbcx/mssql/MssqlStore.java | 13 - .../ext/jdbcx/mssql/MssqlStoreProvider.java | 201 ------------ .../xpipe/ext/jdbcx/mssql/MssqlUrlStore.java | 34 -- .../xpipe/ext/jdbcx/oracle/OracleInstall.java | 40 --- .../ext/jdbcx/oracle/OracleStandardStore.java | 47 --- .../ext/jdbcx/oracle/OracleStoreProvider.java | 220 ------------- .../ext/jdbcx/oracle/OracleUrlStore.java | 35 -- ext/jdbcx/src/main/java/module-info.java | 36 +-- ext/office/build.gradle | 40 +-- .../xpipe/ext/office/docx/DocxProvider.java | 71 ----- .../ext/office/docx/DocxReadConnection.java | 43 --- .../ext/office/docx/DocxWriteConnection.java | 14 - .../xpipe/ext/office/excel/ExcelDetector.java | 132 -------- .../xpipe/ext/office/excel/ExcelHelper.java | 78 ----- .../ext/office/excel/ExcelReadConnection.java | 138 -------- .../xpipe/ext/office/excel/ExcelSource.java | 53 --- .../office/excel/ExcelSourceOpenAction.java | 56 ---- .../ext/office/excel/ExcelSourceProvider.java | 166 ---------- .../office/excel/ExcelWriteConnection.java | 121 ------- .../office/excel/model/ExcelCellLocation.java | 37 --- .../office/excel/model/ExcelHeaderState.java | 86 ----- .../excel/model/ExcelJacksonModule.java | 78 ----- .../ext/office/excel/model/ExcelRange.java | 24 -- .../excel/model/ExcelSheetIdentifier.java | 15 - ext/office/src/main/java/module-info.java | 32 +- .../ext/office/resources/extension.properties | 1 - .../ext/office/resources/img/docx_icon.png | Bin 10713 -> 0 bytes .../ext/office/resources/img/excel_icon.png | Bin 26169 -> 0 bytes .../resources/lang/translations_en.properties | 14 - ext/office/src/test/java/module-info.java | 10 - ext/office/src/test/java/tests/ExcelTest.java | 112 ------- .../src/test/resources/Financial Sample.xlsx | Bin 84373 -> 0 bytes ext/office/src/test/resources/empty.xlsx | Bin 8323 -> 0 bytes ext/office/src/test/resources/images.xlsx | Bin 97629 -> 0 bytes .../src/test/resources/two-sheets-empty.xlsx | Bin 8993 -> 0 bytes private_extensions.txt | 2 + 41 files changed, 6 insertions(+), 2364 deletions(-) delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/JdbcxJacksonModule.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlAddress.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlDialect.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlSimpleStore.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlStore.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlStoreProvider.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlUrlStore.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleInstall.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleStandardStore.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleStoreProvider.java delete mode 100644 ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleUrlStore.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/docx/DocxProvider.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/docx/DocxReadConnection.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/docx/DocxWriteConnection.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelDetector.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelHelper.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelReadConnection.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSource.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSourceOpenAction.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSourceProvider.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelWriteConnection.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelCellLocation.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelHeaderState.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelJacksonModule.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelRange.java delete mode 100644 ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelSheetIdentifier.java delete mode 100644 ext/office/src/main/resources/io/xpipe/ext/office/resources/extension.properties delete mode 100644 ext/office/src/main/resources/io/xpipe/ext/office/resources/img/docx_icon.png delete mode 100644 ext/office/src/main/resources/io/xpipe/ext/office/resources/img/excel_icon.png delete mode 100644 ext/office/src/main/resources/io/xpipe/ext/office/resources/lang/translations_en.properties delete mode 100644 ext/office/src/test/java/module-info.java delete mode 100644 ext/office/src/test/java/tests/ExcelTest.java delete mode 100644 ext/office/src/test/resources/Financial Sample.xlsx delete mode 100644 ext/office/src/test/resources/empty.xlsx delete mode 100644 ext/office/src/test/resources/images.xlsx delete mode 100644 ext/office/src/test/resources/two-sheets-empty.xlsx create mode 100644 private_extensions.txt diff --git a/ext/jdbcx/build.gradle b/ext/jdbcx/build.gradle index d0d01af8..fce335e8 100644 --- a/ext/jdbcx/build.gradle +++ b/ext/jdbcx/build.gradle @@ -1,34 +1 @@ -plugins { - id 'java' - id "org.moditect.gradleplugin" version "1.0.0-rc3" -} - -apply from: "$rootDir/gradle/gradle_scripts/lombok.gradle" -apply from: "$rootDir/gradle/gradle_scripts/extension.gradle" - -compileJava { - doFirst { - options.compilerArgs += [ - '--module-path', classpath.asPath - ] - classpath = files() - } -} - -jar.destinationDirectory = project(':jdbc').jar.destinationDirectory - -configurations { - compileOnly.extendsFrom(dep) - testImplementation.extendsFrom(dep) -} - -dependencies { - compileOnly project(':app') - compileOnly project(':jdbc') - compileOnly 'net.synedra:validatorfx:0.3.1' - implementation 'com.microsoft.sqlserver:mssql-jdbc:11.2.1.jre17' - implementation 'org.rauschig:jarchivelib:1.2.0' - testImplementation project(':base') - testCompileOnly project(':app') -} - +plugins { id 'java' } diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/JdbcxJacksonModule.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/JdbcxJacksonModule.java deleted file mode 100644 index 0502dc15..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/JdbcxJacksonModule.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.xpipe.ext.jdbcx; - -import com.fasterxml.jackson.databind.jsontype.NamedType; -import com.fasterxml.jackson.databind.module.SimpleModule; -import io.xpipe.ext.jdbcx.mssql.MssqlAddress; - -public class JdbcxJacksonModule extends SimpleModule { - - @Override - public void setupModule(SetupContext context) { - context.registerSubtypes( - new NamedType(MssqlAddress.class)); - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlAddress.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlAddress.java deleted file mode 100644 index fa5eefa4..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlAddress.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.xpipe.ext.jdbcx.mssql; - -import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.ext.jdbc.address.JdbcBasicAddress; -import lombok.Getter; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -@JsonTypeName("mssqlInstance") -@SuperBuilder -@Jacksonized -@Getter -public class MssqlAddress extends JdbcBasicAddress { - - String instance; - - @Override - public String toAddressString() { - return getHostname() + (instance != null ? "\\" + instance : "") + (getPort() != null ? ":" + getPort() : ""); - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlDialect.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlDialect.java deleted file mode 100644 index fb2e69c4..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlDialect.java +++ /dev/null @@ -1,301 +0,0 @@ -package io.xpipe.ext.jdbcx.mssql; - -import com.microsoft.sqlserver.jdbc.Geography; -import com.microsoft.sqlserver.jdbc.Geometry; -import com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement; -import com.microsoft.sqlserver.jdbc.SQLServerResultSet; -import io.xpipe.core.charsetter.Charsetter; -import io.xpipe.core.data.node.DataStructureNode; -import io.xpipe.core.data.node.TupleNode; -import io.xpipe.core.data.node.ValueNode; -import io.xpipe.ext.jdbc.JdbcDataTypeCategory; -import io.xpipe.ext.jdbc.JdbcDialect; -import io.xpipe.ext.jdbc.JdbcHelper; -import io.xpipe.ext.jdbc.source.JdbcTableParameterMap; -import microsoft.sql.Types; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class MssqlDialect implements JdbcDialect { - - @Override - public boolean matches(Connection connection) throws SQLException { - return connection.getMetaData().getDatabaseProductName().equals("Microsoft SQL Server"); - } - - private static final List ADDITIONAL_CATEGORIES = List.of( - new JdbcDataTypeCategory.UserDefinedCategory(Types.GEOMETRY) { - @Override - public ValueNode getValue(ResultSet result, int jdbcDataType, int index) throws SQLException { - SQLServerResultSet sqlServerResultSet = (SQLServerResultSet) result; - var geometry = sqlServerResultSet.getGeometry(index); - return geometry != null ? ValueNode.of(geometry.STAsText()) : ValueNode.nullValue(); - } - - @Override - public void setValueNonNull( - PreparedStatement statement, int jdbcDataType, int index, DataStructureNode value) - throws SQLException { - SQLServerPreparedStatement p = (SQLServerPreparedStatement) statement; - Geometry geometry = Geometry.parse(value.asString()); - p.setGeometry(index, geometry); - } - }, - new JdbcDataTypeCategory.UserDefinedCategory(Types.GEOGRAPHY) { - @Override - public ValueNode getValue(ResultSet result, int jdbcDataType, int index) throws SQLException { - SQLServerResultSet sqlServerResultSet = (SQLServerResultSet) result; - var geography = sqlServerResultSet.getGeography(index); - return geography != null ? ValueNode.of(geography.STAsText()) : ValueNode.nullValue(); - } - - @Override - public void setValueNonNull( - PreparedStatement statement, int jdbcDataType, int index, DataStructureNode value) - throws SQLException { - SQLServerPreparedStatement p = (SQLServerPreparedStatement) statement; - Geography geography = Geography.parse(value.asString()); - p.setGeography(index, geography); - } - }); - - @Override - public List getAdditionalCategories() { - return ADDITIONAL_CATEGORIES; - } - - @Override - public String createTableLikeSql(String newTable, String oldTable, List columns, List identifiers) { - var select = columns != null ? String.join(",", columns) : "*"; - return String.format( - """ - SELECT %s - into %s - FROM %s - where 0=1 - union all - SELECT %s - FROM %s - where 0=1""", - select, newTable, oldTable, select, oldTable); - } - - @Override - public PreparedStatement createTableMergeStatement( - Connection connection, String source, String target, JdbcTableParameterMap parameterMap) - throws SQLException { - var memoryOptimized = "1" - .equals(JdbcHelper.executeSingletonQueryStatement( - connection, - String.format("SELECT OBJECTPROPERTY(OBJECT_ID('%s'),'TableIsMemoryOptimized')", target))); - - var equalJoinCheck = parameterMap.getInformation().getIdentifiers().stream() - .map(s -> "T." + s + " = " + "S." + s) - .collect(Collectors.joining(",")); - var insert = String.join(",", parameterMap.getInformation().getUpdateTableColumns()); - var columnList = parameterMap.getInformation().getUpdateTableColumns().stream() - .map(s -> "S." + s) - .collect(Collectors.joining(",")); - var update = parameterMap.getInformation().getUpdateTableColumns().stream() - .map(s -> "T." + s + " = " + "S." + s) - .collect(Collectors.joining(",")); - - if (memoryOptimized) { - var unequalJoinedCheck = parameterMap.getInformation().getIdentifiers().stream() - .map(s -> "T." + s + " <> " + "S." + s) - .collect(Collectors.joining(",")); - var query = String.format( - """ - UPDATE T - SET %s - FROM %s AS S, %s AS T - WHERE %s - - INSERT INTO %s (%s) - SELECT %s - FROM %s S INNER JOIN %s T - ON %s""", - update, - source, - target, - equalJoinCheck, - target, - insert, - columnList, - source, - target, - unequalJoinedCheck); - return connection.prepareStatement(query); - } - - var query = String.format( - """ - MERGE %s AS T - USING %s AS S - ON %s - WHEN NOT MATCHED BY TARGET THEN - INSERT (%s) - VALUES (%s) - WHEN MATCHED THEN UPDATE SET - %s - WHEN NOT MATCHED BY SOURCE THEN - DELETE;""", - target, source, equalJoinCheck, insert, columnList, update); - return connection.prepareStatement(query); - } - - @Override - public PreparedStatement createUpsertStatement(Connection connection, String table, JdbcTableParameterMap map) - throws SQLException { - var values = map.getInsertTableColumns().stream().map(s -> "?").collect(Collectors.joining(",")); - var equalJoinCheck = map.hasIdentifiers() - ? map.getInformation().getIdentifiers().stream() - .map(s -> "" + s + " = " + "?") - .collect(Collectors.joining(",")) - : "0=1"; - var insert = String.join(",", map.getInsertTableColumns()); - var update = map.getInformation().getUpdateTableColumns().stream() - .map(s -> "" + s + " = " + "?") - .collect(Collectors.joining(",")); - - var insertStatement = String.format("INSERT INTO %s (%s)\nVALUES (%s)", table, insert, values); - var upsertStatement = String.format( - """ - UPDATE %s - SET %s - WHERE %s - IF @@ROWCOUNT = 0 - %s""", - table, update, equalJoinCheck, insertStatement); - - if (map.isCanPerformUpdates()) { - return connection.prepareStatement(upsertStatement); - } else { - return connection.prepareStatement(insertStatement); - } - } - - @Override - public void disableConstraints(Connection connection) throws SQLException { - JdbcHelper.execute(connection, "EXEC sp_MSforeachtable \"ALTER TABLE ? NOCHECK CONSTRAINT ALL\""); - } - - @Override - public void enableConstraints(Connection connection) throws SQLException { - JdbcHelper.execute(connection, "EXEC sp_MSforeachtable \"ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL\""); - } - - @Override - public PreparedStatement fillUpsertStatement( - PreparedStatement statement, - TupleNode tuple, - JdbcTableParameterMap parameterMap, - Charsetter.FailableConsumer filler) - throws SQLException { - if (parameterMap.isCanPerformUpdates()) { - for (int i = 0; i < tuple.getNodes().size(); i++) { - if (parameterMap.map(i).isEmpty() - || !parameterMap - .getInformation() - .getUpdateTableColumns() - .contains(parameterMap - .getInformation() - .getAllTableColumns() - .get(parameterMap.map(i).getAsInt()))) { - continue; - } - - filler.accept(i); - } - - for (String primaryKey : parameterMap.getInformation().getIdentifiers()) { - var tupleIndex = parameterMap.getTupleIndexOfColumnName(primaryKey); - filler.accept(tupleIndex); - } - } - - for (int i = 0; i < tuple.getNodes().size(); i++) { - if (parameterMap.map(i).isEmpty() - || !parameterMap - .getInsertTableColumns() - .contains(parameterMap - .getInformation() - .getAllTableColumns() - .get(parameterMap.map(i).getAsInt()))) { - continue; - } - - filler.accept(i); - } - - return statement; - } - - @Override - public List determineStandardTables(Connection connection, List tables) throws SQLException { - var alteredTables = new ArrayList<>(tables); - try (PreparedStatement statement = connection.prepareStatement( - """ - SELECT - OBJECT_SCHEMA_NAME(object_id) AS 'Table Schema', - OBJECT_NAME(object_id) AS 'Temporal Table', - OBJECT_NAME(history_table_id) AS 'History Table' - FROM sys.tables - WHERE temporal_type = 2""")) { - var result = JdbcHelper.executeQueryStatement(statement); - while (result.next()) { - var schema = result.getString(1); - var temporal = schema + "." + result.getString(3); - alteredTables.remove(temporal); - } - } - - alteredTables.removeIf(s -> s.startsWith("sys.")); - return alteredTables; - } - - @Override - public List determineAdditionalGeneratedColumns(Connection connection, String table, List columns) - throws SQLException { - var alwaysGenerated = getColumnProperty(connection, table, columns, "GeneratedAlwaysType"); - var isIdentity = getColumnProperty(connection, table, columns, "IsIdentity"); - - var list = new ArrayList(); - - for (int i = 0; i < columns.size(); i++) { - var remove = false; - if (!"0".equals(alwaysGenerated.get(i))) { - remove = true; - } - if (!"0".equals(isIdentity.get(i))) { - remove = true; - } - if (remove) { - list.add(columns.get(i)); - } - } - return list; - } - - public List getColumnProperty(Connection connection, String table, List columns, String name) - throws SQLException { - PreparedStatement s = connection.prepareStatement(String.format( - """ - SELECT COLUMNPROPERTY(id, name, '%s') - FROM sys.syscolumns - WHERE id=OBJECT_ID('%s') - ORDER BY colid""", - name, table)); - var list = new ArrayList(); - try (ResultSet resultSet = JdbcHelper.executeQueryStatement(s)) { - list.addAll(JdbcHelper.readSingleColumnResultSet(resultSet)); - } - return list; - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlSimpleStore.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlSimpleStore.java deleted file mode 100644 index ca5c7b8a..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlSimpleStore.java +++ /dev/null @@ -1,50 +0,0 @@ -package io.xpipe.ext.jdbcx.mssql; - -import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.core.store.ShellStore; -import io.xpipe.ext.jdbc.JdbcDatabaseServerStore; -import io.xpipe.ext.jdbc.address.JdbcAddress; -import io.xpipe.ext.jdbc.auth.AuthMethod; -import io.xpipe.ext.jdbc.auth.SimpleAuthMethod; -import io.xpipe.ext.jdbc.auth.WindowsAuth; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -import java.util.HashMap; -import java.util.Map; - -@JsonTypeName("mssqlSimple") -@SuperBuilder -@Jacksonized -public class MssqlSimpleStore extends JdbcDatabaseServerStore implements MssqlStore { - - public MssqlSimpleStore(ShellStore proxy, JdbcAddress address, AuthMethod auth) { - super(proxy, address, auth); - } - - @Override - public String toUrl() { - var base = - "jdbc:sqlserver://" + address.toAddressString() + ";encrypt=false;" + "trustServerCertificate=false;"; - if (auth instanceof WindowsAuth) { - base = base + "integratedSecurity=true;"; - } - return base; - } - - @Override - public Map createProperties() { - var p = new HashMap(); - - switch (auth) { - case SimpleAuthMethod s -> { - p.put("user", s.getUsername()); - p.put("password", s.getPassword().getSecretValue()); - } - case WindowsAuth a -> {} - default -> {} - } - - return p; - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlStore.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlStore.java deleted file mode 100644 index f1b51b61..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlStore.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.xpipe.ext.jdbcx.mssql; - -import io.xpipe.ext.jdbc.JdbcBaseStore; - -import java.util.Map; - -public interface MssqlStore extends JdbcBaseStore { - - @Override - default Map createDefaultProperties() { - return Map.of("applicationName", "X-Pipe", "loginTimeout", "5"); - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlStoreProvider.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlStoreProvider.java deleted file mode 100644 index eac98134..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlStoreProvider.java +++ /dev/null @@ -1,201 +0,0 @@ -package io.xpipe.ext.jdbcx.mssql; - -import io.xpipe.core.store.DataStore; -import io.xpipe.ext.jdbc.JdbcGuiHelper; -import io.xpipe.ext.jdbc.JdbcStoreProvider; -import io.xpipe.ext.jdbc.auth.AuthMethod; -import io.xpipe.ext.jdbc.auth.SimpleAuthMethod; -import io.xpipe.ext.jdbc.auth.WindowsAuth; -import io.xpipe.extension.GuiDialog; -import io.xpipe.extension.I18n; -import io.xpipe.extension.fxcomps.Comp; -import io.xpipe.extension.fxcomps.impl.ChoicePaneComp; -import io.xpipe.extension.fxcomps.impl.TabPaneComp; -import io.xpipe.extension.fxcomps.impl.VerticalComp; -import io.xpipe.extension.util.*; -import javafx.beans.binding.Bindings; -import javafx.beans.property.Property; -import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.value.ObservableValue; -import javafx.scene.layout.Region; - -import java.util.List; -import java.util.Map; - -public class MssqlStoreProvider extends JdbcStoreProvider { - - public static final String PROTOCOL = "sqlserver"; - public static final int DEFAULT_PORT = 1433; - public static final String DEFAULT_USERNAME = "sa"; - - public MssqlStoreProvider() { - super("com.microsoft.sqlserver.jdbc.SQLServerDriver"); - } - - @Override - public GuiDialog guiDialog(Property store) { - var wizValue = new SimpleObjectProperty( - store.getValue() instanceof MssqlSimpleStore ? store.getValue() : defaultStore()); - var wizardDialog = wizard(wizValue); - var wizard = new TabPaneComp.Entry(I18n.observable("jdbc.connectionWizard"), null, wizardDialog.getComp()); - - var urlVal = new SimpleValidator(); - var urlValue = new SimpleObjectProperty<>(store.getValue() instanceof MssqlUrlStore ? store.getValue() : null); - var url = new TabPaneComp.Entry(I18n.observable("jdbc.connectionUrl"), null, url(urlValue, urlVal)); - - var stringVal = new SimpleValidator(); - var stringValue = new SimpleObjectProperty<>(store.getValue()); - var string = - new TabPaneComp.Entry(I18n.observable("jdbc.connectionString"), null, string(stringValue, stringVal)); - - var selected = new SimpleObjectProperty<>(store.getValue() instanceof MssqlUrlStore ? url : wizard); - - var map = Map.of( - wizard, wizardDialog.getValidator(), - url, urlVal, - string, stringVal); - var orVal = new ExclusiveValidator<>(map, selected); - - var propMap = Map.of( - wizard, wizValue, - url, urlValue, - string, stringValue); - PropertiesHelper.bindExclusive(selected, propMap, store); - - var pane = new TabPaneComp(selected, List.of(wizard, url)); - return new GuiDialog(pane, orVal); - } - - private Comp string(Property store, Validator val) { - return Comp.of(() -> new Region()); - } - - private Comp url(Property store, Validator val) { - return JdbcGuiHelper.url(PROTOCOL, MssqlUrlStore.class, store, val); - } - - private GuiDialog wizard(Property store) { - MssqlSimpleStore st = (MssqlSimpleStore) store.getValue(); - Property addrProp = - new SimpleObjectProperty<>(st != null ? (MssqlAddress) st.getAddress() : null); - - var host = new SimpleStringProperty( - addrProp.getValue() != null ? addrProp.getValue().getHostname() : null); - var port = new SimpleObjectProperty<>( - addrProp.getValue() != null ? addrProp.getValue().getPort() : null); - var instance = new SimpleStringProperty( - addrProp.getValue() != null ? addrProp.getValue().getInstance() : null); - var addressValidator = new SimpleValidator(); - var addrQ = new DynamicOptionsBuilder(I18n.observable("jdbc.connection")) - .addString(I18n.observable("jdbc.host"), host) - .nonNull(addressValidator) - .addInteger(I18n.observable("jdbc.port"), port) - .addString(I18n.observable("jdbc.instance"), instance) - .bind( - () -> { - return MssqlAddress.builder() - .hostname(host.get()) - .port(port.get()) - .instance(instance.get()) - .build(); - }, - addrProp) - .buildComp(); - - Property authProp = new SimpleObjectProperty<>(st != null ? st.getAuth() : null); - Property passwordAuthProp = new SimpleObjectProperty<>( - authProp.getValue() instanceof SimpleAuthMethod ? (SimpleAuthMethod) authProp.getValue() : null); - var passwordAuthenticationValidator = new SimpleValidator(); - var passwordAuthQ = Comp.of(() -> { - var user = new SimpleStringProperty( - passwordAuthProp.getValue() != null - ? passwordAuthProp.getValue().getUsername() - : DEFAULT_USERNAME); - var pass = new SimpleObjectProperty<>( - passwordAuthProp.getValue() != null - ? passwordAuthProp.getValue().getPassword() - : null); - return new DynamicOptionsBuilder(false) - .addString(I18n.observable("jdbc.username"), user) - .nonNull(passwordAuthenticationValidator) - .addSecret(I18n.observable("jdbc.password"), pass) - .nonNull(passwordAuthenticationValidator) - .bind( - () -> { - return new SimpleAuthMethod(user.get(), pass.get()); - }, - passwordAuthProp) - .build(); - }); - - var passwordEntry = new ChoicePaneComp.Entry(I18n.observable("jdbc.passwordAuth"), passwordAuthQ); - var windowsAuthenticationValidator = new SimpleValidator(); - var windowsEntry = new ChoicePaneComp.Entry(I18n.observable("jdbc.windowsAuth"), Comp.of(Region::new)); - var entries = List.of(passwordEntry, windowsEntry); - var authSelected = new SimpleObjectProperty( - authProp.getValue() == null || authProp.getValue() instanceof SimpleAuthMethod - ? passwordEntry - : windowsEntry); - var map = Map.of( - passwordEntry, passwordAuthenticationValidator, - windowsEntry, windowsAuthenticationValidator); - var authenticationValidator = new ExclusiveValidator<>(map, authSelected); - - var authChoice = new ChoicePaneComp(entries, authSelected); - var authQ = new DynamicOptionsBuilder(I18n.observable("jdbc.authentication")) - .addComp((ObservableValue) null, authChoice, authSelected) - .bindChoice( - () -> { - if (entries.indexOf(authSelected.get()) == 0) { - return passwordAuthProp; - } - if (entries.indexOf(authSelected.get()) == 1) { - return new SimpleObjectProperty(new WindowsAuth()); - } - return null; - }, - authProp) - .buildComp(); - - store.bind(Bindings.createObjectBinding( - () -> { - return MssqlSimpleStore.builder() - .address(addrProp.getValue()) - .auth(authProp.getValue()) - .build(); - }, - addrProp, - authProp)); - - return new GuiDialog( - new VerticalComp(List.of(addrQ, authQ)), - new ChainedValidator(List.of(addressValidator, authenticationValidator))); - } - - @Override - public String getDisplayIconFileName() { - return "jdbc:mssql_icon.svg"; - } - - @Override - public DataStore defaultStore() { - return MssqlSimpleStore.builder() - .address(MssqlAddress.builder() - .hostname("localhost") - .port(DEFAULT_PORT) - .build()) - .auth(new SimpleAuthMethod(DEFAULT_USERNAME, null)) - .build(); - } - - @Override - public List getPossibleNames() { - return List.of("mssql", "sqlserver", "microsoft sql", "microsoft sql server"); - } - - @Override - public List> getStoreClasses() { - return List.of(MssqlSimpleStore.class, MssqlUrlStore.class); - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlUrlStore.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlUrlStore.java deleted file mode 100644 index e287ee78..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/mssql/MssqlUrlStore.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.xpipe.ext.jdbcx.mssql; - -import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.core.store.ShellStore; -import io.xpipe.ext.jdbc.JdbcUrlStore; -import lombok.Builder; -import lombok.Getter; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -@JsonTypeName("mssqlUrl") -@SuperBuilder -@Jacksonized -@Getter -public class MssqlUrlStore extends JdbcUrlStore implements MssqlStore { - - @Builder.Default - protected ShellStore proxy = ShellStore.local(); - - public MssqlUrlStore(ShellStore proxy, String url) { - super(url); - this.proxy = proxy; - } - - @Override - public String getAddress() { - return getUrl().substring(0, getUrl().indexOf(";")); - } - - @Override - protected String getProtocol() { - return MssqlStoreProvider.PROTOCOL; - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleInstall.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleInstall.java deleted file mode 100644 index f776a6a5..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleInstall.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.xpipe.ext.jdbcx.oracle; - -import io.xpipe.extension.DownloadModuleInstall; -import io.xpipe.extension.util.HttpHelper; -import org.rauschig.jarchivelib.Archiver; -import org.rauschig.jarchivelib.ArchiverFactory; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import java.util.List; - -public class OracleInstall extends DownloadModuleInstall { - - public OracleInstall() { - super( - "oracle", - "io.xpipe.ext.jdbc", - "oracle_license.txt", - "https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html", - List.of("mysql-connector-j-8.0.31.jar")); - } - - @Override - public void installInternal(Path directory) throws Exception { - var file = HttpHelper.downloadFile( - "https://download.oracle.com/otn-pub/otn_software/jdbc/218/ojdbc11-full.tar.gz"); - Archiver archiver = ArchiverFactory.createArchiver("tar", "gz"); - var temp = Files.createTempDirectory(null); - archiver.extract(file.toFile(), temp.toFile()); - - var content = temp.resolve("ojdbc11-full"); - Files.delete(content.resolve("ojdbc11_g.jar")); - Files.delete(content.resolve("ojdbc11dms.jar")); - Files.delete(content.resolve("ojdbc11dms_g.jar")); - Files.delete(content.resolve("xmlparserv2_sans_jaxp_services.jar")); - - Files.move(content, directory, StandardCopyOption.REPLACE_EXISTING); - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleStandardStore.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleStandardStore.java deleted file mode 100644 index 1a57c46a..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleStandardStore.java +++ /dev/null @@ -1,47 +0,0 @@ -package io.xpipe.ext.jdbcx.oracle; - -import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.core.store.ShellStore; -import io.xpipe.ext.jdbc.JdbcBaseStore; -import io.xpipe.ext.jdbc.JdbcDatabaseStore; -import io.xpipe.ext.jdbc.address.JdbcAddress; -import io.xpipe.ext.jdbc.auth.AuthMethod; -import io.xpipe.ext.jdbc.auth.SimpleAuthMethod; -import io.xpipe.ext.jdbc.auth.WindowsAuth; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -import java.util.HashMap; -import java.util.Map; - -@JsonTypeName("oracleStandard") -@SuperBuilder -@Jacksonized -public class OracleStandardStore extends JdbcDatabaseStore implements JdbcBaseStore { - - public OracleStandardStore(ShellStore proxy, JdbcAddress address, AuthMethod auth, String database) { - super(proxy, address, auth, database); - } - - @Override - public String toUrl() { - var base = "jdbc:oracle://" + address.toAddressString() + "/" + database; - return base; - } - - @Override - public Map createProperties() { - var p = new HashMap(); - - switch (auth) { - case SimpleAuthMethod s -> { - p.put("user", s.getUsername()); - p.put("password", s.getPassword().getSecretValue()); - } - case WindowsAuth a -> {} - default -> {} - } - - return p; - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleStoreProvider.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleStoreProvider.java deleted file mode 100644 index dccfe8af..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleStoreProvider.java +++ /dev/null @@ -1,220 +0,0 @@ -package io.xpipe.ext.jdbcx.oracle; - -import io.xpipe.core.store.DataStore; -import io.xpipe.core.store.ShellStore; -import io.xpipe.ext.jdbc.JdbcGuiHelper; -import io.xpipe.ext.jdbc.JdbcStoreProvider; -import io.xpipe.ext.jdbc.address.JdbcBasicAddress; -import io.xpipe.ext.jdbc.auth.AuthMethod; -import io.xpipe.ext.jdbc.auth.SimpleAuthMethod; -import io.xpipe.ext.jdbc.auth.WindowsAuth; -import io.xpipe.ext.jdbc.postgres.PostgresUrlStore; -import io.xpipe.extension.GuiDialog; -import io.xpipe.extension.I18n; -import io.xpipe.extension.ModuleInstall; -import io.xpipe.extension.fxcomps.Comp; -import io.xpipe.extension.fxcomps.impl.ChoicePaneComp; -import io.xpipe.extension.fxcomps.impl.ShellStoreChoiceComp; -import io.xpipe.extension.fxcomps.impl.TabPaneComp; -import io.xpipe.extension.fxcomps.impl.VerticalComp; -import io.xpipe.extension.util.*; -import javafx.beans.binding.Bindings; -import javafx.beans.property.Property; -import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.value.ObservableValue; -import javafx.scene.layout.Region; - -import java.util.List; -import java.util.Map; - -public class OracleStoreProvider extends JdbcStoreProvider { - - public static final String PROTOCOL = "oracle:thin"; - public static final int DEFAULT_PORT = 1521; - public static final String DEFAULT_USERNAME = "oracle"; - - public OracleStoreProvider() { - super("oracle.jdbc.driver.OracleDriver"); - } - - @Override - public boolean init() throws Exception { - super.init(); - return false; - } - - @Override - public ModuleInstall getRequiredAdditionalInstallation() { - return new OracleInstall(); - } - - @Override - public GuiDialog guiDialog(Property store) { - var wizVal = new SimpleValidator(); - var wizValue = new SimpleObjectProperty( - store.getValue() instanceof OracleStandardStore ? store.getValue() : null); - var wizard = new TabPaneComp.Entry(I18n.observable("jdbc.connectionWizard"), null, wizard(wizValue, wizVal)); - - var urlVal = new SimpleValidator(); - var urlValue = - new SimpleObjectProperty<>(store.getValue() instanceof PostgresUrlStore ? store.getValue() : null); - var url = new TabPaneComp.Entry(I18n.observable("jdbc.connectionUrl"), null, url(urlValue, urlVal)); - - var stringVal = new SimpleValidator(); - var stringValue = new SimpleObjectProperty<>(store.getValue()); - var string = - new TabPaneComp.Entry(I18n.observable("jdbc.connectionString"), null, string(stringValue, stringVal)); - - var selected = new SimpleObjectProperty<>(store.getValue() instanceof PostgresUrlStore ? url : wizard); - - var map = Map.of( - wizard, wizVal, - url, urlVal, - string, stringVal); - var orVal = new ExclusiveValidator<>(map, selected); - - var propMap = Map.of( - wizard, wizValue, - url, urlValue, - string, stringValue); - PropertiesHelper.bindExclusive(selected, propMap, store); - - var pane = new TabPaneComp(selected, List.of(wizard, url)); - return new GuiDialog(pane, orVal); - } - - private Comp string(Property store, Validator val) { - return Comp.of(() -> new Region()); - } - - private Comp url(Property store, Validator val) { - return JdbcGuiHelper.url(PROTOCOL, PostgresUrlStore.class, store, val); - } - - private Comp wizard(Property store, Validator val) { - OracleStandardStore st = (OracleStandardStore) store.getValue(); - - var addrProp = new SimpleObjectProperty<>(st != null ? (JdbcBasicAddress) st.getAddress() : null); - var databaseProp = - new SimpleStringProperty(store.getValue() instanceof OracleStandardStore s ? s.getDatabase() : null); - var host = new SimpleStringProperty( - addrProp.getValue() != null ? addrProp.getValue().getHostname() : null); - var port = new SimpleObjectProperty<>( - addrProp.getValue() != null ? addrProp.getValue().getPort() : null); - var proxyProperty = new SimpleObjectProperty<>(st.getProxy()); - var connectionGui = new DynamicOptionsBuilder(I18n.observable("jdbc.connection")) - .addString(I18n.observable("jdbc.host"), host) - .nonNull(val) - .addInteger(I18n.observable("jdbc.port"), port) - .bind( - () -> { - return JdbcBasicAddress.builder() - .hostname(host.get()) - .port(port.get()) - .build(); - }, - addrProp) - .addString(I18n.observable("jdbc.database"), databaseProp) - .nonNull(val) - .addComp("proxy", ShellStoreChoiceComp.proxy(proxyProperty), proxyProperty) - .buildComp(); - - Property authProp = new SimpleObjectProperty<>(st.getAuth()); - Property passwordAuthProp = new SimpleObjectProperty<>( - authProp.getValue() instanceof SimpleAuthMethod ? (SimpleAuthMethod) authProp.getValue() : null); - var passwordAuthQ = Comp.of(() -> { - var user = new SimpleStringProperty( - passwordAuthProp.getValue() != null - ? passwordAuthProp.getValue().getUsername() - : DEFAULT_USERNAME); - var pass = new SimpleObjectProperty<>( - passwordAuthProp.getValue() != null - ? passwordAuthProp.getValue().getPassword() - : null); - return new DynamicOptionsBuilder(false) - .addString(I18n.observable("jdbc.username"), user) - .nonNull(val) - .addSecret(I18n.observable("jdbc.password"), pass) - .nonNull(val) - .bind( - () -> { - return new SimpleAuthMethod(user.get(), pass.get()); - }, - passwordAuthProp) - .build(); - }); - - Comp authChoice; - var passwordEntry = new ChoicePaneComp.Entry(I18n.observable("jdbc.passwordAuth"), passwordAuthQ); - var windowsEntry = new ChoicePaneComp.Entry(I18n.observable("jdbc.windowsAuth"), Comp.of(Region::new)); - var entries = List.of(passwordEntry, windowsEntry); - var authSelected = new SimpleObjectProperty( - authProp.getValue() == null || authProp.getValue() instanceof SimpleAuthMethod - ? passwordEntry - : windowsEntry); - var check = Validator.nonNull(val, I18n.observable("jdbc.authentication"), authSelected); - authChoice = new ChoicePaneComp(entries, authSelected).apply(s -> check.decorates(s.get())); - var authQ = new DynamicOptionsBuilder(I18n.observable("jdbc.authentication")) - .addComp((ObservableValue) null, authChoice, authSelected) - .bindChoice( - () -> { - if (entries.indexOf(authSelected.get()) == 0) { - return passwordAuthProp; - } - if (entries.indexOf(authSelected.get()) == 1) { - return new SimpleObjectProperty(new WindowsAuth()); - } - return null; - }, - authProp) - .buildComp(); - - store.bind(Bindings.createObjectBinding( - () -> { - return new OracleStandardStore( - proxyProperty.get(), addrProp.getValue(), authProp.getValue(), databaseProp.get()); - }, - proxyProperty, - addrProp, - databaseProp, - authProp)); - - return new VerticalComp(List.of(connectionGui, authQ)); - } - - @Override - public List> getStoreClasses() { - return List.of(OracleStandardStore.class, OracleUrlStore.class); - } - - @Override - public String getDisplayIconFileName() { - return "jdbc:oracle_icon.svg"; - } - - private OracleUrlStore defaultUrlStore() { - return OracleUrlStore.builder().build(); - } - - private OracleStandardStore defaultSimpleStore() { - return defaultStore().asNeeded(); - } - - @Override - public DataStore defaultStore() { - return new OracleStandardStore( - ShellStore.local(), - JdbcBasicAddress.builder() - .hostname("localhost") - .port(DEFAULT_PORT) - .build(), - new SimpleAuthMethod(DEFAULT_USERNAME, null), - DEFAULT_USERNAME); - } - - @Override - public List getPossibleNames() { - return List.of("oracle", "oraclesql", "osql"); - } -} diff --git a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleUrlStore.java b/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleUrlStore.java deleted file mode 100644 index 3b1459f9..00000000 --- a/ext/jdbcx/src/main/java/io/xpipe/ext/jdbcx/oracle/OracleUrlStore.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.xpipe.ext.jdbcx.oracle; - -import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.core.store.ShellStore; -import io.xpipe.ext.jdbc.JdbcBaseStore; -import io.xpipe.ext.jdbc.JdbcUrlStore; -import lombok.Builder; -import lombok.Getter; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -@JsonTypeName("oracleUrl") -@SuperBuilder -@Jacksonized -@Getter -public class OracleUrlStore extends JdbcUrlStore implements JdbcBaseStore { - - @Builder.Default - protected ShellStore proxy = ShellStore.local(); - - public OracleUrlStore(ShellStore proxy, String url) { - super(url); - this.proxy = proxy; - } - - @Override - public String getAddress() { - return getUrl().substring(0, getUrl().indexOf("/")); - } - - @Override - protected String getProtocol() { - return OracleStoreProvider.PROTOCOL; - } -} diff --git a/ext/jdbcx/src/main/java/module-info.java b/ext/jdbcx/src/main/java/module-info.java index 9d27d99d..50f70967 100644 --- a/ext/jdbcx/src/main/java/module-info.java +++ b/ext/jdbcx/src/main/java/module-info.java @@ -1,35 +1 @@ -import com.fasterxml.jackson.databind.Module; -import io.xpipe.ext.jdbc.JdbcDialect; -import io.xpipe.ext.jdbcx.JdbcxJacksonModule; -import io.xpipe.ext.jdbcx.mssql.MssqlDialect; -import io.xpipe.ext.jdbcx.mssql.MssqlStoreProvider; -import io.xpipe.ext.jdbcx.oracle.OracleStoreProvider; -import io.xpipe.extension.DataStoreProvider; - -import java.sql.Driver; - -open module io.xpipe.ext.jdbcx { - exports io.xpipe.ext.jdbcx.mssql; - - requires io.xpipe.ext.jdbc; - requires io.xpipe.core; - requires io.xpipe.extension; - requires static jarchivelib; - requires static lombok; - requires java.sql; - requires com.fasterxml.jackson.databind; - requires static net.synedra.validatorfx; - requires javafx.base; - requires javafx.graphics; - requires com.microsoft.sqlserver.jdbc; - requires io.xpipe.beacon; - - uses Driver; - - provides JdbcDialect with MssqlDialect; - provides Module with - JdbcxJacksonModule; - provides DataStoreProvider with - MssqlStoreProvider, - OracleStoreProvider; -} +module io.xpipe.ext.jdbcx {} diff --git a/ext/office/build.gradle b/ext/office/build.gradle index de17c96c..fce335e8 100644 --- a/ext/office/build.gradle +++ b/ext/office/build.gradle @@ -1,39 +1 @@ -plugins { - id 'java' - id "org.moditect.gradleplugin" version "1.0.0-rc3" -} - -dependencies { - implementation('org.apache.poi:poi-ooxml:5.2.3') { - exclude group: 'org.apache.commons', module: 'commons-collections4' - exclude group: 'org.apache.commons', module: 'commons-math3' - exclude group: 'commons-io', module: 'commons-io' - exclude group: 'org.apache.commons', module: 'commons-lang3' - } - implementation files("$buildDir/generated-modules/SparseBitSet-1.2.jar") - implementation files("$buildDir/generated-modules/commons-collections4-4.4.jar") -} - -apply from: "$rootDir/gradle/gradle_scripts/commons.gradle" -apply from: "$rootDir/gradle/gradle_scripts/extension.gradle" - -configurations { - compileOnly.extendsFrom(dep) - testImplementation.extendsFrom(dep) -} - -addDependenciesModuleInfo { - overwriteExistingFiles = true - jdepsExtraArgs = ['-q'] - outputDirectory = file("$buildDir/generated-modules") - modules { - module { - artifact 'com.zaxxer:SparseBitSet:1.2' - moduleInfoSource = ''' - module SparseBitSet { - exports com.zaxxer.sparsebits; - } - ''' - } - } -} +plugins { id 'java' } diff --git a/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxProvider.java b/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxProvider.java deleted file mode 100644 index ae20e682..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxProvider.java +++ /dev/null @@ -1,71 +0,0 @@ -package io.xpipe.ext.office.docx; - -import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.core.dialog.Dialog; -import io.xpipe.core.source.*; -import io.xpipe.core.store.DataStore; -import io.xpipe.core.store.StreamDataStore; -import io.xpipe.ext.base.SimpleFileDataSourceProvider; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -import java.util.List; -import java.util.Map; - -public class DocxProvider implements SimpleFileDataSourceProvider { - - @Override - public Dialog configDialog(Source source, boolean all) { - return null; - } - - @Override - public DataSourceType getPrimaryType() { - return DataSourceType.TEXT; - } - - @Override - public Map> getSupportedExtensions() { - return Map.of(i18nKey("fileName"), List.of("docx")); - } - - @Override - public Source createDefaultSource(DataStore input) throws Exception { - return Source.builder().store(input.asNeeded()).build(); - } - - @Override - public Class getSourceClass() { - return Source.class; - } - - @Override - public List getPossibleNames() { - return List.of("docx"); - } - - @JsonTypeName("docx") - @SuperBuilder - @Jacksonized - public static class Source extends TextDataSource { - - @Override - protected TextWriteConnection newWriteConnection(WriteMode mode) { - var sup = super.newWriteConnection(mode); - if (sup != null) { - return sup; - } - - if (mode.equals(WriteMode.REPLACE)) { - return new DocxWriteConnection(); - } - - throw new UnsupportedOperationException(mode.getId()); - } - - @Override - protected TextReadConnection newReadConnection() { - return new DocxReadConnection(getStore()); - } - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxReadConnection.java b/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxReadConnection.java deleted file mode 100644 index 827ecb2a..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxReadConnection.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.xpipe.ext.office.docx; - -import io.xpipe.core.source.DataSourceConnection; -import io.xpipe.core.source.TextReadConnection; -import io.xpipe.core.store.StreamDataStore; -import org.apache.poi.xwpf.extractor.XWPFWordExtractor; -import org.apache.poi.xwpf.usermodel.XWPFDocument; - -import java.util.Arrays; -import java.util.stream.Stream; - -public class DocxReadConnection implements TextReadConnection { - - private final StreamDataStore store; - - public DocxReadConnection(StreamDataStore store) { - this.store = store; - } - - @Override - public void init() throws Exception {} - - @Override - public Stream lines() throws Exception { - try (XWPFDocument doc = new XWPFDocument(store.openInput())) { - - XWPFWordExtractor xwpfWordExtractor = new XWPFWordExtractor(doc); - String docText = xwpfWordExtractor.getText(); - return Arrays.stream(docText.split("\r\n")); - } - } - - @Override - public boolean canRead() throws Exception { - return store.canOpen(); - } - - @Override - public void forward(DataSourceConnection con) throws Exception {} - - @Override - public void close() throws Exception {} -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxWriteConnection.java b/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxWriteConnection.java deleted file mode 100644 index 0caf4e5b..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/docx/DocxWriteConnection.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.xpipe.ext.office.docx; - -import io.xpipe.core.source.TextWriteConnection; - -public class DocxWriteConnection implements TextWriteConnection { - @Override - public void init() throws Exception {} - - @Override - public void close() throws Exception {} - - @Override - public void writeLine(String line) throws Exception {} -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelDetector.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelDetector.java deleted file mode 100644 index ce243559..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelDetector.java +++ /dev/null @@ -1,132 +0,0 @@ -package io.xpipe.ext.office.excel; - -import io.xpipe.core.store.StreamDataStore; -import io.xpipe.ext.office.excel.model.ExcelCellLocation; -import io.xpipe.ext.office.excel.model.ExcelHeaderState; -import io.xpipe.ext.office.excel.model.ExcelRange; -import io.xpipe.ext.office.excel.model.ExcelSheetIdentifier; -import org.apache.poi.EmptyFileException; -import org.apache.poi.ss.usermodel.*; -import org.apache.poi.ss.util.CellRangeAddress; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.StreamSupport; - -public class ExcelDetector { - - public static ExcelSource defaultSource(StreamDataStore store) { - return ExcelSource.builder() - .store(store) - .identifier(ExcelSheetIdentifier.builder().name("Sheet1").index(0).length(1).build()) - .headerState(ExcelHeaderState.INCLUDED) - .continueSelection(true) - .build(); - } - - public static ExcelSource detect(StreamDataStore store) throws Exception { - if (!store.canOpen()) { - return defaultSource(store); - } - - try (Workbook workbook = WorkbookFactory.create(store.openBufferedInput())) { - var sheets = ExcelHelper.getSheets(workbook); - var sheet = sheets.get(0); - var identifier = ExcelSheetIdentifier.builder().name(sheet.getSheetName()).index(0).length(sheets.size()).build(); - var state = ExcelHeaderState.INCLUDED; - var continueSelection = true; - var range = detectRange(sheet); - return ExcelSource.builder() - .store(store) - .continueSelection(continueSelection) - .identifier(identifier) - .headerState(state) - .range(range) - .build(); - } catch (EmptyFileException ex) { - return defaultSource(store); - } - } - - public static ExcelSource detect(StreamDataStore store, ExcelSheetIdentifier sheetId) throws Exception { - if (!store.canOpen()) { - return defaultSource(store); - } - - try (Workbook workbook = WorkbookFactory.create(store.openBufferedInput())) { - var sheets = ExcelHelper.getSheets(workbook); - var sheet = sheets.size() > 0 ? sheets.get(sheetId.getIndex()) : null; - var identifier = sheet != null ? ExcelSheetIdentifier.builder().name(sheet.getSheetName()).index(0).length(sheets.size()).build() : null; - var state = ExcelHeaderState.INCLUDED; - var continueSelection = true; - var range = sheet != null ? detectRange(sheet) : null; - return ExcelSource.builder() - .store(store) - .continueSelection(continueSelection) - .identifier(identifier) - .headerState(state) - .range(range) - .build(); - } - } - - private static ExcelRange detectRange(Sheet sheet) { - var rowsStart = 1; - var rowsEnd = sheet.getLastRowNum() + 1; - - var empty = StreamSupport.stream(sheet.spliterator(), false).findAny().isEmpty(); - if (empty) { - return null; - } - - for (Row cells : sheet) { - if (!isRowEmpty(cells) && !hasMergedRegions(sheet, cells)) { - break; - } - - rowsStart++; - } - - AtomicInteger columnStart = new AtomicInteger(Integer.MAX_VALUE); - AtomicInteger columnEnd = new AtomicInteger(1); - StreamSupport.stream(sheet.spliterator(), false).skip(rowsStart - 1).forEach(cells -> { - var s = getRowStart(cells); - if (s < columnStart.get()) { - columnStart.set(s); - } - - var e = (int) StreamSupport.stream(cells.spliterator(), false).count(); - if (e > columnEnd.get()) { - columnEnd.set(e); - } - }); - - return new ExcelRange( - new ExcelCellLocation(rowsStart, columnStart.get()), new ExcelCellLocation(rowsEnd, columnEnd.get())); - } - - private static boolean isRowEmpty(Row row) { - return StreamSupport.stream(row.spliterator(), false) - .allMatch(cell -> cell.getCellType() == CellType._NONE || cell.getCellType() == CellType.BLANK); - } - - private static boolean hasMergedRegions(Sheet sheet, Row row) { - int count = 0; - for (int i = 0; i < sheet.getNumMergedRegions(); ++i) { - CellRangeAddress range = sheet.getMergedRegion(i); - if (range.getFirstRow() <= row.getRowNum() && range.getLastRow() >= row.getRowNum()) ++count; - } - return count > 0; - } - - private static int getRowStart(Row row) { - var index = 1; - for (Cell cell : row) { - if (cell.getCellType() != CellType._NONE && cell.getCellType() != CellType.BLANK) { - break; - } - - index++; - } - return index; - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelHelper.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelHelper.java deleted file mode 100644 index c669808a..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelHelper.java +++ /dev/null @@ -1,78 +0,0 @@ -package io.xpipe.ext.office.excel; - -import io.xpipe.core.store.StreamDataStore; -import io.xpipe.ext.office.excel.model.ExcelRange; -import io.xpipe.ext.office.excel.model.ExcelSheetIdentifier; -import org.apache.poi.EmptyFileException; -import org.apache.poi.ss.usermodel.*; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.IntStream; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -public class ExcelHelper { - - public static Stream> rowStream(Sheet sheet, ExcelRange range, boolean continuousSelection) { - return StreamSupport.stream(sheet.spliterator(), false) - .skip(range != null ? range.getBegin().getRow() - 1 : 0) - .limit( - range == null || continuousSelection - ? Integer.MAX_VALUE - : range.getEnd().getRow() - range.getBegin().getRow() + 1) - .map(cells -> StreamSupport.stream(cells.spliterator(), false) - .skip(range != null ? range.getBegin().getColumn() - 1 : 0) - .toList()) - .takeWhile(cells -> !cells.stream() - .allMatch( - cell -> cell.getCellType() == CellType._NONE || cell.getCellType() == CellType.BLANK)); - } - - public static List getSheets(Workbook workbook) { - var sheets = new ArrayList(); - for (int i = 0; i < workbook.getNumberOfSheets(); i++) { - sheets.add(workbook.getSheetAt(i)); - } - return sheets; - } - - public static ExcelSheetIdentifier getDefaultSelected( - ExcelSheetIdentifier identifier, List available) { - if (identifier == null) { - return available.size() > 0 ? available.get(0) : null; - } - - var byName = available.stream() - .filter(identifier1 -> identifier1.getName().equals(identifier.getName())) - .findFirst(); - if (byName.isPresent()) { - return byName.get(); - } - - return available.size() == identifier.getLength() ? available.get(identifier.getIndex()) : null; - } - - public static List getSheetIdentifiers(Workbook workbook) { - var sheets = getSheets(workbook); - return IntStream.range(0, sheets.size()) - .mapToObj(operand -> ExcelSheetIdentifier.builder() - .name(sheets.get(operand).getSheetName()) - .index(operand) - .length(sheets.size()) - .build()) - .toList(); - } - - public static List getSheetIdentifiers(StreamDataStore store) throws Exception { - if (!store.canOpen()) { - return List.of(); - } - - try (Workbook workbook = WorkbookFactory.create(store.openBufferedInput())) { - return getSheetIdentifiers(workbook); - } catch (EmptyFileException ex) { - return List.of(); - } - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelReadConnection.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelReadConnection.java deleted file mode 100644 index a73e18ba..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelReadConnection.java +++ /dev/null @@ -1,138 +0,0 @@ -package io.xpipe.ext.office.excel; - -import io.xpipe.core.data.node.DataStructureNodeAcceptor; -import io.xpipe.core.data.node.TupleNode; -import io.xpipe.core.data.node.ValueNode; -import io.xpipe.core.data.type.TupleType; -import io.xpipe.core.data.type.ValueType; -import io.xpipe.core.impl.StreamReadConnection; -import io.xpipe.core.source.TableReadConnection; -import io.xpipe.ext.office.excel.model.ExcelHeaderState; -import io.xpipe.extension.util.DataTypeParser; -import org.apache.poi.EmptyFileException; -import org.apache.poi.ss.usermodel.*; - -import java.util.Collections; -import java.util.List; - -public class ExcelReadConnection extends StreamReadConnection implements TableReadConnection { - - private final ExcelSource source; - private Workbook workbook; - private Sheet sheet; - private TupleType type; - - public ExcelReadConnection(ExcelSource source) { - super(source.getStore(), null); - this.source = source; - } - - @Override - public void init() throws Exception { - super.init(); - try { - workbook = WorkbookFactory.create(inputStream); - } catch (EmptyFileException ex) { - return; - } - var sheets = ExcelHelper.getSheets(workbook); - sheet = sheets.stream() - .filter(s -> s.getSheetName().equals(source.getIdentifier().getName())) - .findFirst() - .orElse(workbook.getSheetAt(source.getIdentifier().getIndex())); - - if (source.getHeaderState() == ExcelHeaderState.INCLUDED) { - var names = ExcelHelper.rowStream(sheet, source.getRange(), false) - .findFirst() - .map(cells -> cells.stream() - .map(cell -> map(cell).asString().trim()) - .toList()) - .orElse(List.of()); - type = TupleType.of(names, Collections.nCopies(names.size(), ValueType.of())); - } else { - type = TupleType.of(Collections.nCopies( - source.getRange().getEnd().getColumn() - - source.getRange().getBegin().getColumn() - + 1, - ValueType.of())); - } - } - - @Override - public void close() throws Exception { - if (workbook != null) { - workbook.close(); - } - super.close(); - } - - @Override - public TupleType getDataType() { - return type; - } - - @Override - public void withRows(DataStructureNodeAcceptor lineAcceptor) throws Exception { - if (workbook == null) { - return; - } - - var iterator = ExcelHelper.rowStream(sheet, source.getRange(), source.isContinueSelection()) - .skip(source.getHeaderState() == ExcelHeaderState.INCLUDED ? 1 : 0) - .iterator(); - while (iterator.hasNext()) { - var row = iterator.next(); - var t = row.stream().map(cell -> map(cell)).limit(type.getSize()).toList(); - var tuple = TupleNode.of(type.getNames(), t); - if (!lineAcceptor.accept(tuple)) { - break; - } - ; - } - } - - private ValueNode map(Cell cell) { - DataFormatter dataFormatter = new DataFormatter(); - dataFormatter.setUse4DigitYearsInAllDateFormats(true); - String rawValue = dataFormatter.formatCellValue(cell); - return switch (cell.getCellType()) { - case _NONE -> ValueNode.nullValue(); - case NUMERIC -> { - if (DateUtil.isCellDateFormatted(cell)) { - var date = cell.getDateCellValue(); - var instant = date.toInstant(); - yield ValueNode.ofDate(rawValue, instant); - } - - var monetary = DataTypeParser.parseMonetary(rawValue); - if (monetary.isPresent()) { - yield monetary.get(); - } - - var number = DataTypeParser.parseNumber(rawValue); - if (number.isPresent()) { - yield number.get(); - } - - yield ValueNode.ofDecimal(rawValue, cell.getNumericCellValue()); - } - case STRING -> { - yield ValueNode.ofText(cell.getStringCellValue()); - } - case FORMULA -> { - FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); - evaluator.evaluateInCell(cell); - yield map(cell); - } - case BLANK -> { - yield ValueNode.nullValue(); - } - case BOOLEAN -> { - yield ValueNode.ofBoolean(cell.getBooleanCellValue()); - } - case ERROR -> { - yield ValueNode.nullValue(); - } - }; - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSource.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSource.java deleted file mode 100644 index 8e900e0f..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSource.java +++ /dev/null @@ -1,53 +0,0 @@ -package io.xpipe.ext.office.excel; - -import com.fasterxml.jackson.annotation.JsonTypeName; -import io.xpipe.core.source.TableDataSource; -import io.xpipe.core.source.TableReadConnection; -import io.xpipe.core.source.TableWriteConnection; -import io.xpipe.core.source.WriteMode; -import io.xpipe.core.store.StreamDataStore; -import io.xpipe.ext.office.excel.model.ExcelHeaderState; -import io.xpipe.ext.office.excel.model.ExcelRange; -import io.xpipe.ext.office.excel.model.ExcelSheetIdentifier; -import io.xpipe.extension.util.Validators; -import lombok.Getter; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -@JsonTypeName("excel") -@SuperBuilder -@Jacksonized -@Getter -public class ExcelSource extends TableDataSource { - - private final ExcelSheetIdentifier identifier; - private final ExcelRange range; - private final ExcelHeaderState headerState; - private final boolean continueSelection; - - @Override - public void checkComplete() throws Exception { - super.checkComplete(); - Validators.nonNull(identifier, "Sheet"); - Validators.nonNull(headerState, "Header"); - } - - @Override - protected TableReadConnection newReadConnection() { - return new ExcelReadConnection(this); - } - - @Override - public TableWriteConnection newWriteConnection(WriteMode mode) { - var sup = super.newWriteConnection(mode); - if (sup != null) { - return sup; - } - - if (mode.equals(WriteMode.REPLACE)) { - return new ExcelWriteConnection(this); - } - - throw new UnsupportedOperationException(mode.getId()); - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSourceOpenAction.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSourceOpenAction.java deleted file mode 100644 index f088bd12..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSourceOpenAction.java +++ /dev/null @@ -1,56 +0,0 @@ -package io.xpipe.ext.office.excel; - -import io.xpipe.core.impl.FileStore; -import io.xpipe.core.process.OsType; -import io.xpipe.extension.DataSourceActionProvider; -import io.xpipe.extension.I18n; -import io.xpipe.extension.util.WindowsRegistry; -import javafx.beans.value.ObservableValue; - -import java.nio.file.Path; - -public class ExcelSourceOpenAction implements DataSourceActionProvider { - - @Override - public boolean isActive() throws Exception { - if (!(OsType.getLocal() == OsType.WINDOWS)) { - return false; - } - - return true; - } - - @Override - public boolean isApplicable(ExcelSource o) throws Exception { - return o.getStore() instanceof FileStore store && store.isLocal(); - } - - @Override - public void execute(ExcelSource store) throws Exception { - var locationString = WindowsRegistry.readString( - WindowsRegistry.HKEY_LOCAL_MACHINE, - "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\excel.exe", - null); - if (locationString.isEmpty()) { - return; - } - - var excelExecutable = Path.of(locationString.get()); - Runtime.getRuntime().exec(new String[] {excelExecutable.toString(), ((FileStore) store.getStore()).getFile()}); - } - - @Override - public Class getApplicableClass() { - return ExcelSource.class; - } - - @Override - public ObservableValue getName(ExcelSource store) { - return I18n.observable("openInExcel"); - } - - @Override - public String getIcon(ExcelSource store) { - return "mdi2m-microsoft-excel"; - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSourceProvider.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSourceProvider.java deleted file mode 100644 index c699831c..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelSourceProvider.java +++ /dev/null @@ -1,166 +0,0 @@ -package io.xpipe.ext.office.excel; - -import io.xpipe.core.dialog.Dialog; -import io.xpipe.core.dialog.QueryConverter; -import io.xpipe.core.source.DataSourceType; -import io.xpipe.core.store.DataStore; -import io.xpipe.core.store.StreamDataStore; -import io.xpipe.ext.base.SimpleFileDataSourceProvider; -import io.xpipe.ext.office.excel.model.ExcelHeaderState; -import io.xpipe.ext.office.excel.model.ExcelRange; -import io.xpipe.ext.office.excel.model.ExcelSheetIdentifier; -import io.xpipe.extension.I18n; -import io.xpipe.extension.util.DialogHelper; -import io.xpipe.extension.util.DynamicOptionsBuilder; -import javafx.beans.property.Property; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.beans.property.SimpleObjectProperty; -import javafx.beans.property.SimpleStringProperty; -import javafx.beans.value.ObservableValue; -import javafx.scene.layout.Region; -import org.apache.poi.openxml4j.util.ZipSecureFile; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicReference; - -public class ExcelSourceProvider implements SimpleFileDataSourceProvider { - - @Override - public void init() throws Exception { - SimpleFileDataSourceProvider.super.init(); - - ZipSecureFile.setMinInflateRatio(0.001); - } - - @Override - public DataSourceType getPrimaryType() { - return DataSourceType.TABLE; - } - - @Override - public Map> getSupportedExtensions() { - return Map.of(i18nKey("fileName"), List.of("xlsx")); - } - - @Override - public Region configGui(Property source, boolean preferQuiet) throws Exception { - var s = source.getValue(); - - var headerState = new SimpleObjectProperty(s.getHeaderState()); - var headerStateNames = new LinkedHashMap>(); - headerStateNames.put(ExcelHeaderState.INCLUDED, I18n.observable("excel.included")); - headerStateNames.put(ExcelHeaderState.EXCLUDED, I18n.observable("excel.excluded")); - - var range = - new SimpleObjectProperty(source.getValue().getRange().toString()); - - var availableSheets = ExcelHelper.getSheetIdentifiers(source.getValue().getStore()); - var sheetNames = new LinkedHashMap>(); - availableSheets.forEach(identifier -> { - sheetNames.put( - identifier, - new SimpleStringProperty(identifier.getName() + " (" + (identifier.getIndex() + 1) + ".)")); - }); - var sheet = new SimpleObjectProperty<>(source.getValue().getIdentifier()); - - var continueAfterSelection = new SimpleBooleanProperty(source.getValue().isContinueSelection()); - - return new DynamicOptionsBuilder() - .addChoice(sheet, I18n.observable("excel.sheet"), sheetNames, false) - .addString("excel.range", range, true) - .addToggle("excel.continueAfterSelection", continueAfterSelection) - .addToggle(headerState, I18n.observable("excel.header"), headerStateNames) - .bind( - () -> { - return ExcelSource.builder() - .store(source.getValue().getStore()) - .identifier(sheet.get()) - .headerState(headerState.get()) - .range(ExcelRange.parse(range.get())) - .continueSelection(continueAfterSelection.get()) - .build(); - }, - source) - .build(); - } - - @Override - public List getPossibleNames() { - return List.of("excel", "xlsx", ".xlsx"); - } - - public Dialog configDialog(ExcelSource source, boolean preferQuiet) { - AtomicReference editedSource = new AtomicReference<>(source); - var sheetQ = Dialog.lazy(() -> { - var availableSheets = new ArrayList<>(ExcelHelper.getSheetIdentifiers(source.getStore())); - if (availableSheets.size() == 0) { - availableSheets.add(source.getIdentifier()); - } - - return Dialog.skipIf( - Dialog.choice( - "Sheet", - o -> o.getName(), - true, - false, - source.getIdentifier(), - availableSheets.toArray(ExcelSheetIdentifier[]::new)), - () -> availableSheets.size() <= 1) - .onCompletion((ExcelSheetIdentifier id) -> { - if (id != editedSource.get().getIdentifier()) { - editedSource.set(ExcelDetector.detect(source.getStore(), id)); - } - }); - }); - - var rangeQ = Dialog.lazy(() -> DialogHelper.query( - "Range", - editedSource.get().getRange(), - false, - new QueryConverter<>() { - @Override - protected ExcelRange fromString(String s) { - return ExcelRange.parse(s); - } - - @Override - protected String toString(ExcelRange value) { - return value.toString(); - } - }, - preferQuiet)); - - var headerQ = Dialog.lazy(() -> Dialog.choice( - "Header", - (ExcelHeaderState h) -> h == ExcelHeaderState.INCLUDED ? "Included" : "Excluded", - true, - preferQuiet, - editedSource.get().getHeaderState(), - ExcelHeaderState.values())); - - var continueQ = Dialog.lazy(() -> DialogHelper.booleanChoice( - "Continue Selection", editedSource.get().isContinueSelection(), preferQuiet)); - - return Dialog.chain(Dialog.busy(), sheetQ, rangeQ, headerQ, continueQ).evaluateTo(() -> ExcelSource.builder() - .store(source.getStore()) - .range(rangeQ.getResult()) - .identifier(sheetQ.getResult()) - .continueSelection(continueQ.getResult()) - .headerState(headerQ.getResult()) - .build()); - } - - @Override - public ExcelSource createDefaultSource(DataStore input) throws Exception { - var stream = (StreamDataStore) input; - return ExcelDetector.detect(stream); - } - - @Override - public Class getSourceClass() { - return ExcelSource.class; - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelWriteConnection.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelWriteConnection.java deleted file mode 100644 index dda7ff0f..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/ExcelWriteConnection.java +++ /dev/null @@ -1,121 +0,0 @@ -package io.xpipe.ext.office.excel; - -import io.xpipe.core.data.node.DataStructureNode; -import io.xpipe.core.data.node.DataStructureNodeAcceptor; -import io.xpipe.core.data.node.TupleNode; -import io.xpipe.core.data.node.ValueNode; -import io.xpipe.core.impl.SimpleTableWriteConnection; -import io.xpipe.core.impl.StreamWriteConnection; -import io.xpipe.core.source.TableMapping; -import io.xpipe.ext.office.excel.model.ExcelHeaderState; -import lombok.Getter; -import org.apache.poi.EmptyFileException; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.ss.usermodel.WorkbookFactory; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; - -import java.time.Instant; -import java.util.Date; -import java.util.List; - -public class ExcelWriteConnection extends StreamWriteConnection implements SimpleTableWriteConnection { - - @Getter - private final ExcelSource source; - - private Workbook workbook; - private Sheet sheet; - - private int counter; - private boolean headerWritten; - - public ExcelWriteConnection(ExcelSource source) { - super(source.getStore(), null); - this.source = source; - } - - @Override - public void init() throws Exception { - super.init(); - try { - workbook = source.getStore().canOpen() - ? WorkbookFactory.create(source.getStore().openBufferedInput()) - : new XSSFWorkbook(); - } catch (EmptyFileException ex) { - workbook = new XSSFWorkbook(); - } - - var sheets = ExcelHelper.getSheets(workbook); - if (sheets.size() == 0) { - sheets = List.of(workbook.createSheet(source.getIdentifier().getName())); - } - - sheet = sheets.stream() - .filter(s -> s.getSheetName().equals(source.getIdentifier().getName())) - .findFirst() - .orElse(workbook.getSheetAt(source.getIdentifier().getIndex())); - } - - @Override - public void close() throws Exception { - workbook.write(outputStream); - workbook.close(); - super.close(); - } - - private void writeHeader(TableMapping mapping) { - if (!headerWritten && source.getHeaderState() == ExcelHeaderState.INCLUDED) { - var row = sheet.createRow(counter++); - for (int i = 0; i < mapping.getOutputType().getSize(); i++) { - var offset = - source.getRange() != null ? source.getRange().getBegin().getColumn() - 1 + i : i; - var cell = row.createCell(offset); - cell.setCellValue(mapping.getOutputType().getNames().get(i)); - } - headerWritten = true; - } - } - - @Override - public DataStructureNodeAcceptor writeLinesAcceptor(TableMapping mapping) { - writeHeader(mapping); - return node -> { - var row = sheet.createRow(counter); - for (int i = 0; i < mapping.getOutputType().getSize(); i++) { - var offset = - source.getRange() != null ? source.getRange().getBegin().getColumn() - 1 + i : i; - var cell = row.createCell(offset); - writeValue(cell, node.at(mapping.inverseMap(i).orElseThrow()).asValue()); - } - counter++; - - return true; - }; - } - - private void writeValue(Cell cell, ValueNode node) { - if (node.hasMetaAttribute(DataStructureNode.IS_BOOLEAN)) { - cell.setCellValue(node.hasMetaAttribute(DataStructureNode.BOOLEAN_TRUE)); - } else if (node.hasMetaAttribute(DataStructureNode.IS_DATE)) { - cell.setCellValue(Date.from(Instant.parse(node.getMetaAttribute(DataStructureNode.DATE_VALUE)))); - - var styleDateFormat = workbook.createCellStyle(); - styleDateFormat.setDataFormat((short) 0xe); - cell.setCellStyle(styleDateFormat); - } else if (node.hasMetaAttribute(DataStructureNode.IS_CURRENCY)) { - cell.setCellValue(Double.parseDouble(node.getMetaAttribute(DataStructureNode.DECIMAL_VALUE))); - - var styleCurrencyFormat = workbook.createCellStyle(); - styleCurrencyFormat.setDataFormat((short) 0x7); - cell.setCellStyle(styleCurrencyFormat); - } else if (node.hasMetaAttribute(DataStructureNode.IS_INTEGER)) { - cell.setCellValue(Double.parseDouble(node.getMetaAttribute(DataStructureNode.INTEGER_VALUE))); - } else if (node.hasMetaAttribute(DataStructureNode.IS_DECIMAL)) { - cell.setCellValue(Double.parseDouble(node.getMetaAttribute(DataStructureNode.DECIMAL_VALUE))); - } else { - cell.setCellValue(node.asString()); - } - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelCellLocation.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelCellLocation.java deleted file mode 100644 index f98ac4ef..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelCellLocation.java +++ /dev/null @@ -1,37 +0,0 @@ -package io.xpipe.ext.office.excel.model; - -import lombok.Value; -import org.apache.poi.ss.util.CellReference; - -import java.util.regex.Pattern; - -@Value -public class ExcelCellLocation { - - private static final Pattern ID_PATTERN = Pattern.compile("([a-zA-Z]+)(\\d+)"); - int row; - int column; - - public static ExcelCellLocation parse(String id) { - var m = ID_PATTERN.matcher(id); - if (!m.matches()) { - throw new IllegalArgumentException("Invalid cell id: " + id); - } - - var column = toColumnIndex(m.group(1)); - var row = Integer.parseInt(m.group(2)); - return new ExcelCellLocation(row, column); - } - - private static String fromColumnIndex(int index) { - return CellReference.convertNumToColString(index - 1); - } - - private static int toColumnIndex(String id) { - return CellReference.convertColStringToIndex(id) + 1; - } - - public String toString() { - return fromColumnIndex(getColumn()) + getRow(); - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelHeaderState.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelHeaderState.java deleted file mode 100644 index bfbff623..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelHeaderState.java +++ /dev/null @@ -1,86 +0,0 @@ -package io.xpipe.ext.office.excel.model; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.xpipe.core.data.node.ArrayNode; - -import java.util.List; -import java.util.regex.Pattern; - -public enum ExcelHeaderState { - @JsonProperty("included") - INCLUDED, - @JsonProperty("excluded") - EXCLUDED; - - public static ExcelHeaderState determine(ArrayNode ar) { - if (ar.size() == 1) { - return INCLUDED; - } - - for (int i = 0; i < ar.at(0).size(); i++) { - if (!matchesPotentialHeader(ar, i)) { - return INCLUDED; - } - } - - return EXCLUDED; - } - - private static boolean matchesPotentialHeader(ArrayNode ar, int col) { - var t = getForColumnData(ar, col); - var headerType = getForColumnHeader(ar, col); - return t.equals(headerType); - } - - private static GeneralType getForColumnHeader(ArrayNode ar, int col) { - for (var type : GeneralType.TYPES) { - if (!type.matches(ar.at(0).at(col).asString())) { - continue; - } - - return type; - } - - throw new IllegalStateException(); - } - - private static GeneralType getForColumnData(ArrayNode ar, int col) { - out: - for (var type : GeneralType.TYPES) { - for (int i = 1; i < ar.size(); i++) { - if (!type.matches(ar.at(i).at(col).asString())) { - continue out; - } - } - - return type; - } - - throw new IllegalStateException(); - } - - private static interface GeneralType { - - static List TYPES = List.of(new NumberType(), new TextType()); - - boolean matches(String s); - } - - private static class NumberType implements GeneralType { - - private static final Pattern PATTERN = Pattern.compile("^-?\\d*(\\.\\d+)?$"); - - @Override - public boolean matches(String s) { - return PATTERN.matcher(s).matches(); - } - } - - private static class TextType implements GeneralType { - - @Override - public boolean matches(String s) { - return true; - } - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelJacksonModule.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelJacksonModule.java deleted file mode 100644 index 63afe606..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelJacksonModule.java +++ /dev/null @@ -1,78 +0,0 @@ -package io.xpipe.ext.office.excel.model; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - -import java.io.IOException; - -public class ExcelJacksonModule extends SimpleModule { - - @Override - public void setupModule(SetupContext context) { - addSerializer(ExcelCellLocation.class, new CellSerializer()); - addDeserializer(ExcelCellLocation.class, new CellDeserializer()); - - addSerializer(ExcelRange.class, new RangeSerializer()); - addDeserializer(ExcelRange.class, new RangeDeserializer()); - - context.addSerializers(_serializers); - context.addDeserializers(_deserializers); - } - - public static class CellSerializer extends StdSerializer { - - public CellSerializer() { - super(ExcelCellLocation.class); - } - - @Override - public void serialize(ExcelCellLocation value, JsonGenerator gen, SerializerProvider provider) - throws IOException { - gen.writeString(value.toString()); - } - } - - public static class CellDeserializer extends StdDeserializer { - - public CellDeserializer() { - super(ExcelCellLocation.class); - } - - @Override - public ExcelCellLocation deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { - JsonNode node = jp.getCodec().readTree(jp); - return ExcelCellLocation.parse(node.textValue()); - } - } - - public static class RangeSerializer extends StdSerializer { - - public RangeSerializer() { - super(ExcelRange.class); - } - - @Override - public void serialize(ExcelRange value, JsonGenerator gen, SerializerProvider provider) throws IOException { - gen.writeString(value.toString()); - } - } - - public static class RangeDeserializer extends StdDeserializer { - - public RangeDeserializer() { - super(ExcelRange.class); - } - - @Override - public ExcelRange deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { - JsonNode node = jp.getCodec().readTree(jp); - return ExcelRange.parse(node.asText()); - } - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelRange.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelRange.java deleted file mode 100644 index 94e9b1b7..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelRange.java +++ /dev/null @@ -1,24 +0,0 @@ -package io.xpipe.ext.office.excel.model; - -import lombok.Value; - -@Value -public class ExcelRange { - - ExcelCellLocation begin; - ExcelCellLocation end; - - public static ExcelRange parse(String s) { - if (s.contains(":")) { - var b = ExcelCellLocation.parse(s.split(":")[0]); - var e = ExcelCellLocation.parse(s.split(":")[1]); - return new ExcelRange(b, e); - } - - throw new IllegalArgumentException("Invalid excel range: " + s); - } - - public String toString() { - return begin.toString() + ":" + end.toString(); - } -} diff --git a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelSheetIdentifier.java b/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelSheetIdentifier.java deleted file mode 100644 index 9b976ccd..00000000 --- a/ext/office/src/main/java/io/xpipe/ext/office/excel/model/ExcelSheetIdentifier.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.xpipe.ext.office.excel.model; - -import lombok.Value; -import lombok.experimental.SuperBuilder; -import lombok.extern.jackson.Jacksonized; - -@Value -@Jacksonized -@SuperBuilder -public final class ExcelSheetIdentifier { - - private final String name; - private final int index; - private final int length; -} diff --git a/ext/office/src/main/java/module-info.java b/ext/office/src/main/java/module-info.java index ab747419..08e74492 100644 --- a/ext/office/src/main/java/module-info.java +++ b/ext/office/src/main/java/module-info.java @@ -1,31 +1 @@ -import com.fasterxml.jackson.databind.Module; -import io.xpipe.ext.office.docx.DocxProvider; -import io.xpipe.ext.office.excel.ExcelSourceOpenAction; -import io.xpipe.ext.office.excel.ExcelSourceProvider; -import io.xpipe.ext.office.excel.model.ExcelJacksonModule; -import io.xpipe.extension.DataSourceActionProvider; -import io.xpipe.extension.DataSourceProvider; - -open module io.xpipe.ext.office { - requires static org.apache.commons.io; - requires io.xpipe.core; - requires io.xpipe.extension; - requires static lombok; - requires static org.apache.poi.ooxml; - requires com.fasterxml.jackson.databind; - requires static javafx.base; - requires static javafx.controls; - requires io.xpipe.ext.base; - - exports io.xpipe.ext.office.excel; - exports io.xpipe.ext.office.excel.model; - exports io.xpipe.ext.office.docx; - - provides Module with - ExcelJacksonModule; - provides DataSourceActionProvider with - ExcelSourceOpenAction; - provides DataSourceProvider with - DocxProvider, - ExcelSourceProvider; -} +module io.xpipe.ext.office {} diff --git a/ext/office/src/main/resources/io/xpipe/ext/office/resources/extension.properties b/ext/office/src/main/resources/io/xpipe/ext/office/resources/extension.properties deleted file mode 100644 index 42f48b7f..00000000 --- a/ext/office/src/main/resources/io/xpipe/ext/office/resources/extension.properties +++ /dev/null @@ -1 +0,0 @@ -name=Office Formats \ No newline at end of file diff --git a/ext/office/src/main/resources/io/xpipe/ext/office/resources/img/docx_icon.png b/ext/office/src/main/resources/io/xpipe/ext/office/resources/img/docx_icon.png deleted file mode 100644 index 01556bd0697bfc638909de1b79c3e64ae9b280af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10713 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 diff --git a/ext/office/src/main/resources/io/xpipe/ext/office/resources/img/excel_icon.png b/ext/office/src/main/resources/io/xpipe/ext/office/resources/img/excel_icon.png deleted file mode 100644 index e2a522fce5198701206fae390721a929569f273d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26169 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 diff --git a/ext/office/src/main/resources/io/xpipe/ext/office/resources/lang/translations_en.properties b/ext/office/src/main/resources/io/xpipe/ext/office/resources/lang/translations_en.properties deleted file mode 100644 index a3f2de4f..00000000 --- a/ext/office/src/main/resources/io/xpipe/ext/office/resources/lang/translations_en.properties +++ /dev/null @@ -1,14 +0,0 @@ -excel.displayName=Excel -excel.displayDescription=Microsoft Excel Format -excel.fileName=Excel File -excel.included=Included -excel.excluded=Excluded -excel.header=Header -excel.range=Range -excel.sheet=Sheet -excel.continueAfterSelection=Continue Selection -openInExcel=Open in Excel - -docx.displayName=Word Document -docx.displayDescription=Microsoft Word Format -docx.fileName=Word File \ No newline at end of file diff --git a/ext/office/src/test/java/module-info.java b/ext/office/src/test/java/module-info.java deleted file mode 100644 index 3756c095..00000000 --- a/ext/office/src/test/java/module-info.java +++ /dev/null @@ -1,10 +0,0 @@ -open module io.xpipe.ext.office.test { - exports tests; - - requires io.xpipe.ext.office; - requires org.junit.jupiter.api; - requires org.junit.jupiter.params; - requires io.xpipe.core; - requires io.xpipe.extension; - requires io.xpipe.api; -} diff --git a/ext/office/src/test/java/tests/ExcelTest.java b/ext/office/src/test/java/tests/ExcelTest.java deleted file mode 100644 index 2e6d994d..00000000 --- a/ext/office/src/test/java/tests/ExcelTest.java +++ /dev/null @@ -1,112 +0,0 @@ -package tests; - -import io.xpipe.core.data.node.TupleNode; -import io.xpipe.core.data.node.ValueNode; -import io.xpipe.core.impl.FileStore; -import io.xpipe.core.impl.LocalStore; -import io.xpipe.ext.office.excel.ExcelSource; -import io.xpipe.ext.office.excel.model.ExcelCellLocation; -import io.xpipe.ext.office.excel.model.ExcelHeaderState; -import io.xpipe.ext.office.excel.model.ExcelRange; -import io.xpipe.ext.office.excel.model.ExcelSheetIdentifier; -import io.xpipe.extension.util.DaemonExtensionTest; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.nio.file.Files; -import java.util.Calendar; -import java.util.Currency; -import java.util.GregorianCalendar; - -public class ExcelTest extends DaemonExtensionTest { - - @Test - public void testEmpty() throws Exception { - var source = getSource("excel", "empty.xlsx").asTable(); - var lines = source.readAll(); - - Assertions.assertEquals(lines.size(), 0); - - ExcelSource detected = source.getInternalSource().asNeeded(); - Assertions.assertEquals(ExcelHeaderState.INCLUDED, detected.getHeaderState()); - Assertions.assertEquals(ExcelSheetIdentifier.builder().name("Sheet1").index(0).length(1).build(), detected.getIdentifier()); - Assertions.assertNull(detected.getRange()); - } - - @Test - public void testTwoSheetsEmpty() throws Exception { - var source = getSource("excel", "two-sheets-empty.xlsx").asTable(); - var lines = source.readAll(); - - Assertions.assertEquals(lines.size(), 0); - - ExcelSource detected = source.getInternalSource().asNeeded(); - Assertions.assertEquals(ExcelHeaderState.INCLUDED, detected.getHeaderState()); - Assertions.assertEquals(ExcelSheetIdentifier.builder().name("sheet 1").index(0).length(2).build(), detected.getIdentifier()); - Assertions.assertNull(detected.getRange()); - } - - @Test - public void testFinancialSample() throws Exception { - var source = getSource("excel", "Financial Sample.xlsx").asTable(); - var lines = source.readAll(); - - Assertions.assertEquals(700, lines.size()); - Assertions.assertEquals( - TupleNode.builder() - .add("Segment", ValueNode.ofText("Government")) - .add("Country", ValueNode.ofText("Canada")) - .add("Product", ValueNode.ofText("Carretera")) - .add("Discount Band", ValueNode.ofText("None")) - .add("Units Sold", ValueNode.ofCurrency("$ 1,618.50", "1618.5", Currency.getInstance("USD"))) - .add("Manufacturing Price", ValueNode.ofCurrency("$ 3.00", "3", Currency.getInstance("USD"))) - .add("Sale Price", ValueNode.ofCurrency("$ 20.00", "20", Currency.getInstance("USD"))) - .add("Gross Sales", ValueNode.ofCurrency("$ 32,370.00", "32370", Currency.getInstance("USD"))) - .add("Discounts", ValueNode.ofCurrency("$ - 0", "-0", Currency.getInstance("USD"))) - .add("Sales", ValueNode.ofCurrency("$ 32,370.00", "32370", Currency.getInstance("USD"))) - .add("COGS", ValueNode.ofCurrency("$ 16,185.00", "16185", Currency.getInstance("USD"))) - .add("Profit", ValueNode.ofCurrency("$ 16,185.00", "16185", Currency.getInstance("USD"))) - .add( - "Date", - ValueNode.ofDate( - "1/1/2014", - new GregorianCalendar(2014, Calendar.JANUARY, 1) - .getTime() - .toInstant())) - .add("Month Number", ValueNode.ofInteger("1", "1")) - .add("Month Name", ValueNode.ofText("January")) - .add("Year", ValueNode.ofText("2014")) - .build(), - lines.at(0)); - - ExcelSource detected = source.getInternalSource().asNeeded(); - Assertions.assertEquals(ExcelHeaderState.INCLUDED, detected.getHeaderState()); - Assertions.assertEquals(ExcelSheetIdentifier.builder().name("Sheet1").index(0).length(2).build(), detected.getIdentifier()); - Assertions.assertEquals( - new ExcelRange(ExcelCellLocation.parse("A1"), ExcelCellLocation.parse("P701")), detected.getRange()); - } - - @Test - public void testFinancialSampleRoundabout() throws Exception { - var source = getSource("excel", "Financial Sample.xlsx").asTable(); - - var targetFile = Files.createTempFile(null, ".xlsx").toString(); - var target = - getSource("excel", new FileStore(new LocalStore(), targetFile)).asTable(); - - source.forwardTo(target); - var lines = target.readAll(); - Assertions.assertEquals(700, lines.size()); - } - - @Test - public void testImages() throws Exception { - var source = getSource("excel", "images.xlsx").asTable(); - var lines = source.readAll(); - - Assertions.assertEquals(19, lines.size()); - - ExcelSource detected = source.getInternalSource().asNeeded(); - Assertions.assertEquals(ExcelHeaderState.INCLUDED, detected.getHeaderState()); - } -} diff --git a/ext/office/src/test/resources/Financial Sample.xlsx b/ext/office/src/test/resources/Financial Sample.xlsx deleted file mode 100644 index e7f41b65251977991b2add0dd51233e757bba3de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84373 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�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%0DJ^v$o@mzlntW2VDa-E|E`CD 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 diff --git a/ext/office/src/test/resources/empty.xlsx b/ext/office/src/test/resources/empty.xlsx deleted file mode 100644 index 1066ed386e9932182b0999c40d4926684950d3ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8323 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 BhWr2k diff --git a/ext/office/src/test/resources/images.xlsx b/ext/office/src/test/resources/images.xlsx deleted file mode 100644 index 3039a7cdc8579121f821af3dbb78590f00ba19f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97629 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 diff --git a/ext/office/src/test/resources/two-sheets-empty.xlsx b/ext/office/src/test/resources/two-sheets-empty.xlsx deleted file mode 100644 index 38da5504509e09aa1a389a07bdcd29b4c2dc0100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8993 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