From 9a93787140fd4007d4feb6ac03a07b1fd61bc500 Mon Sep 17 00:00:00 2001 From: hengsin Date: Thu, 9 May 2024 17:30:44 +0800 Subject: [PATCH 1/3] IDEMPIERE-6117 POI: WorkbookFactory.create cannot be used to open XLSX files --- .../src/org/adempiere/base/BaseActivator.java | 15 +++++++++++++++ .../src/org/compiere/model/MImportTemplate.java | 15 ++------------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/org.adempiere.base/src/org/adempiere/base/BaseActivator.java b/org.adempiere.base/src/org/adempiere/base/BaseActivator.java index d042c7c473..9ae3385769 100644 --- a/org.adempiere.base/src/org/adempiere/base/BaseActivator.java +++ b/org.adempiere.base/src/org/adempiere/base/BaseActivator.java @@ -28,6 +28,14 @@ import java.util.Properties; import org.adempiere.base.equinox.StackTraceCommand; +import org.apache.poi.extractor.ExtractorFactory; +import org.apache.poi.extractor.MainExtractorFactory; +import org.apache.poi.hssf.usermodel.HSSFWorkbookFactory; +import org.apache.poi.ooxml.extractor.POIXMLExtractorFactory; +import org.apache.poi.sl.usermodel.SlideShowFactory; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory; +import org.apache.poi.xslf.usermodel.XSLFSlideShowFactory; import org.compiere.Adempiere; import org.eclipse.osgi.framework.console.CommandProvider; import org.osgi.framework.BundleActivator; @@ -61,6 +69,13 @@ public void start(BundleContext context) throws Exception { context.registerService(CommandProvider.class.getName(), new StackTraceCommand(), null); blacklistService = new ComponentBlackListService(context); + + //setup poi + WorkbookFactory.addProvider(new HSSFWorkbookFactory()); + WorkbookFactory.addProvider(new XSSFWorkbookFactory()); + SlideShowFactory.addProvider(new XSLFSlideShowFactory()); + ExtractorFactory.addProvider(new POIXMLExtractorFactory()); + ExtractorFactory.addProvider(new MainExtractorFactory()); } /* diff --git a/org.adempiere.base/src/org/compiere/model/MImportTemplate.java b/org.adempiere.base/src/org/compiere/model/MImportTemplate.java index 9df66d5ff5..dac9740cf6 100644 --- a/org.adempiere.base/src/org/compiere/model/MImportTemplate.java +++ b/org.adempiere.base/src/org/compiere/model/MImportTemplate.java @@ -34,13 +34,12 @@ import java.util.logging.Level; import org.adempiere.exceptions.AdempiereException; -import org.apache.poi.hssf.usermodel.HSSFWorkbookFactory; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory; +import org.apache.poi.ss.usermodel.WorkbookFactory; import org.compiere.util.CCache; import org.compiere.util.CLogger; import org.compiere.util.DB; @@ -309,17 +308,7 @@ public InputStream validateFile(InputStream in) { */ public InputStream convertExcelToCSV(InputStream excelIs) throws IOException { - Workbook workbook = null; - if (MImportTemplate.IMPORTTEMPLATETYPE_XLS.equals(getImportTemplateType())) { - HSSFWorkbookFactory xlsWbf = new HSSFWorkbookFactory(); - workbook = xlsWbf.create(excelIs); - } else if (MImportTemplate.IMPORTTEMPLATETYPE_XLSX.equals(getImportTemplateType())) { - XSSFWorkbookFactory xlsxWbf = new XSSFWorkbookFactory(); - workbook = xlsxWbf.create(excelIs); - } else { - // unexpected error - throw new AdempiereException("Wrong template type -> " + getImportTemplateType()); - } + Workbook workbook = WorkbookFactory.create(excelIs); List colTypes = calculateAndValidateColumnTypes(); From 45f0f4488434db320cfc17ade3ea37c99760a22a Mon Sep 17 00:00:00 2001 From: hengsin Date: Thu, 9 May 2024 17:32:54 +0800 Subject: [PATCH 2/3] IDEMPIERE-6117 POI: WorkbookFactory.create cannot be used to open XLSX files --- .../src/org/adempiere/base/BaseActivator.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/org.adempiere.base/src/org/adempiere/base/BaseActivator.java b/org.adempiere.base/src/org/adempiere/base/BaseActivator.java index 9ae3385769..c10fc3534a 100644 --- a/org.adempiere.base/src/org/adempiere/base/BaseActivator.java +++ b/org.adempiere.base/src/org/adempiere/base/BaseActivator.java @@ -70,7 +70,7 @@ public void start(BundleContext context) throws Exception { blacklistService = new ComponentBlackListService(context); - //setup poi + //setup poi factory WorkbookFactory.addProvider(new HSSFWorkbookFactory()); WorkbookFactory.addProvider(new XSSFWorkbookFactory()); SlideShowFactory.addProvider(new XSLFSlideShowFactory()); @@ -135,6 +135,14 @@ public void stop(BundleContext context) throws Exception { blacklistService.stop(context); blacklistService = null; } + + //remove poi factory + WorkbookFactory.removeProvider(HSSFWorkbookFactory.class); + WorkbookFactory.removeProvider(XSSFWorkbookFactory.class); + SlideShowFactory.removeProvider(XSLFSlideShowFactory.class); + ExtractorFactory.removeProvider(POIXMLExtractorFactory.class); + ExtractorFactory.removeProvider(MainExtractorFactory.class); + Adempiere.stop(); } From 19d442380175153b95b175beaa28f4f9f71f73df Mon Sep 17 00:00:00 2001 From: hengsin Date: Mon, 10 Jun 2024 19:20:54 +0800 Subject: [PATCH 3/3] IDEMPIERE-6117 POI: WorkbookFactory.create cannot be used to open XLSX files - Incorporate patch from Carlos --- .../oracle/202405131534_IDEMPIERE-6040.sql | 25 +++++++++++++++++++ .../202405131534_IDEMPIERE-6040.sql | 22 ++++++++++++++++ org.adempiere.base-feature/feature.xml | 4 +++ .../model.generator.launch | 1 + .../packinfolder.app.launch | 1 + .../sign.database.build.launch | 1 + .../synchronize-terminology.app.launch | 1 + .../translation.app.launch | 1 + .../compiere/model/I_AD_ImportTemplate.java | 2 +- .../org/compiere/model/MImportTemplate.java | 3 +-- .../compiere/model/X_AD_ImportTemplate.java | 12 ++++----- org.adempiere.install/install.app.launch | 1 + .../install.console.app.launch | 1 + .../install.silent.app.launch | 1 + .../setup/configuration/config.ini | 1 + org.idempiere.test/pom.xml | 11 +++++--- 16 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 migration/iD11/oracle/202405131534_IDEMPIERE-6040.sql create mode 100644 migration/iD11/postgresql/202405131534_IDEMPIERE-6040.sql diff --git a/migration/iD11/oracle/202405131534_IDEMPIERE-6040.sql b/migration/iD11/oracle/202405131534_IDEMPIERE-6040.sql new file mode 100644 index 0000000000..57a9109402 --- /dev/null +++ b/migration/iD11/oracle/202405131534_IDEMPIERE-6040.sql @@ -0,0 +1,25 @@ +-- IDEMPIERE-6040 Improvements for CSV import template +SELECT register_migration_script('202405131534_IDEMPIERE-6040.sql') FROM dual; + +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- May 13, 2024, 3:34:49 PM CEST +UPDATE AD_Ref_List SET Name='Comma-separated values (CSV)',Updated=TO_TIMESTAMP('2024-05-13 15:34:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200704 +; + +-- May 13, 2024, 3:35:58 PM CEST +UPDATE AD_Ref_List SET Name='Excel (XLS/XLSX)',Updated=TO_TIMESTAMP('2024-05-13 15:35:58','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200706 +; + +-- May 13, 2024, 3:36:02 PM CEST +UPDATE AD_Ref_List SET IsActive='N',Updated=TO_TIMESTAMP('2024-05-13 15:36:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200705 +; + +UPDATE AD_ImportTemplate SET ImportTemplateType='XLSX' WHERE ImportTemplateType='XLS' +; + +-- May 13, 2024, 3:59:49 PM CEST +UPDATE AD_Field SET SeqNo=120, ColumnSpan=2,Updated=TO_TIMESTAMP('2024-05-13 15:59:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208476 +; + diff --git a/migration/iD11/postgresql/202405131534_IDEMPIERE-6040.sql b/migration/iD11/postgresql/202405131534_IDEMPIERE-6040.sql new file mode 100644 index 0000000000..962d64dfb4 --- /dev/null +++ b/migration/iD11/postgresql/202405131534_IDEMPIERE-6040.sql @@ -0,0 +1,22 @@ +-- IDEMPIERE-6040 Improvements for CSV import template +SELECT register_migration_script('202405131534_IDEMPIERE-6040.sql') FROM dual; + +-- May 13, 2024, 3:34:49 PM CEST +UPDATE AD_Ref_List SET Name='Comma-separated values (CSV)',Updated=TO_TIMESTAMP('2024-05-13 15:34:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200704 +; + +-- May 13, 2024, 3:35:58 PM CEST +UPDATE AD_Ref_List SET Name='Excel (XLS/XLSX)',Updated=TO_TIMESTAMP('2024-05-13 15:35:58','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200706 +; + +-- May 13, 2024, 3:36:02 PM CEST +UPDATE AD_Ref_List SET IsActive='N',Updated=TO_TIMESTAMP('2024-05-13 15:36:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=200705 +; + +UPDATE AD_ImportTemplate SET ImportTemplateType='XLSX' WHERE ImportTemplateType='XLS' +; + +-- May 13, 2024, 3:59:49 PM CEST +UPDATE AD_Field SET SeqNo=120, ColumnSpan=2,Updated=TO_TIMESTAMP('2024-05-13 15:59:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=208476 +; + diff --git a/org.adempiere.base-feature/feature.xml b/org.adempiere.base-feature/feature.xml index 6f63b4c82e..95e2d5375c 100644 --- a/org.adempiere.base-feature/feature.xml +++ b/org.adempiere.base-feature/feature.xml @@ -273,6 +273,10 @@ id="org.apache.commons.commons-compress" version="0.0.0"/> + + diff --git a/org.adempiere.base-feature/model.generator.launch b/org.adempiere.base-feature/model.generator.launch index 024b2d052d..4665b92632 100644 --- a/org.adempiere.base-feature/model.generator.launch +++ b/org.adempiere.base-feature/model.generator.launch @@ -61,6 +61,7 @@ + diff --git a/org.adempiere.base-feature/packinfolder.app.launch b/org.adempiere.base-feature/packinfolder.app.launch index 6d58643e08..bfe83c8f61 100644 --- a/org.adempiere.base-feature/packinfolder.app.launch +++ b/org.adempiere.base-feature/packinfolder.app.launch @@ -69,6 +69,7 @@ + diff --git a/org.adempiere.base-feature/sign.database.build.launch b/org.adempiere.base-feature/sign.database.build.launch index 735c4f7869..3126d7841c 100644 --- a/org.adempiere.base-feature/sign.database.build.launch +++ b/org.adempiere.base-feature/sign.database.build.launch @@ -70,6 +70,7 @@ + diff --git a/org.adempiere.base-feature/synchronize-terminology.app.launch b/org.adempiere.base-feature/synchronize-terminology.app.launch index cdac4f57d9..bb4831e224 100644 --- a/org.adempiere.base-feature/synchronize-terminology.app.launch +++ b/org.adempiere.base-feature/synchronize-terminology.app.launch @@ -70,6 +70,7 @@ + diff --git a/org.adempiere.base-feature/translation.app.launch b/org.adempiere.base-feature/translation.app.launch index ce8c3379ff..60562ba514 100644 --- a/org.adempiere.base-feature/translation.app.launch +++ b/org.adempiere.base-feature/translation.app.launch @@ -70,6 +70,7 @@ + diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_ImportTemplate.java b/org.adempiere.base/src/org/compiere/model/I_AD_ImportTemplate.java index daa56bd6f7..54420f4dc5 100644 --- a/org.adempiere.base/src/org/compiere/model/I_AD_ImportTemplate.java +++ b/org.adempiere.base/src/org/compiere/model/I_AD_ImportTemplate.java @@ -22,7 +22,7 @@ /** Generated Interface for AD_ImportTemplate * @author iDempiere (generated) - * @version Release 11 + * @version Release 12 */ public interface I_AD_ImportTemplate { diff --git a/org.adempiere.base/src/org/compiere/model/MImportTemplate.java b/org.adempiere.base/src/org/compiere/model/MImportTemplate.java index dac9740cf6..d7bf404209 100644 --- a/org.adempiere.base/src/org/compiere/model/MImportTemplate.java +++ b/org.adempiere.base/src/org/compiere/model/MImportTemplate.java @@ -238,8 +238,7 @@ else if ("M".equals(importMode)) */ public InputStream validateFile(InputStream in) { - if ( MImportTemplate.IMPORTTEMPLATETYPE_XLS.equals(getImportTemplateType()) - || MImportTemplate.IMPORTTEMPLATETYPE_XLSX.equals(getImportTemplateType())) { + if (MImportTemplate.IMPORTTEMPLATETYPE_ExcelXLSXLSX.equals(getImportTemplateType())) { try { in = convertExcelToCSV(in); } catch (Exception e) { diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_ImportTemplate.java b/org.adempiere.base/src/org/compiere/model/X_AD_ImportTemplate.java index 5cc228ef54..f114b05a72 100644 --- a/org.adempiere.base/src/org/compiere/model/X_AD_ImportTemplate.java +++ b/org.adempiere.base/src/org/compiere/model/X_AD_ImportTemplate.java @@ -23,7 +23,7 @@ /** Generated Model for AD_ImportTemplate * @author iDempiere (generated) - * @version Release 11 - $Id$ */ + * @version Release 12 - $Id$ */ @org.adempiere.base.Model(table="AD_ImportTemplate") public class X_AD_ImportTemplate extends PO implements I_AD_ImportTemplate, I_Persistent { @@ -31,7 +31,7 @@ public class X_AD_ImportTemplate extends PO implements I_AD_ImportTemplate, I_Pe /** * */ - private static final long serialVersionUID = 20240327L; + private static final long serialVersionUID = 20240513L; /** Standard Constructor */ public X_AD_ImportTemplate (Properties ctx, int AD_ImportTemplate_ID, String trxName) @@ -300,12 +300,12 @@ public String getDescription() /** ImportTemplateType AD_Reference_ID=200268 */ public static final int IMPORTTEMPLATETYPE_AD_Reference_ID=200268; - /** CSV = CSV */ - public static final String IMPORTTEMPLATETYPE_CSV = "CSV"; + /** Comma-separated values (CSV) = CSV */ + public static final String IMPORTTEMPLATETYPE_Comma_SeparatedValuesCSV = "CSV"; /** XLS = XLS */ public static final String IMPORTTEMPLATETYPE_XLS = "XLS"; - /** XLSX = XLSX */ - public static final String IMPORTTEMPLATETYPE_XLSX = "XLSX"; + /** Excel (XLS/XLSX) = XLSX */ + public static final String IMPORTTEMPLATETYPE_ExcelXLSXLSX = "XLSX"; /** Set Import Template Type. @param ImportTemplateType Import Template Type */ diff --git a/org.adempiere.install/install.app.launch b/org.adempiere.install/install.app.launch index ab92eb9455..5d9980a810 100644 --- a/org.adempiere.install/install.app.launch +++ b/org.adempiere.install/install.app.launch @@ -59,6 +59,7 @@ + diff --git a/org.adempiere.install/install.console.app.launch b/org.adempiere.install/install.console.app.launch index 330dd3ca85..562c12e9ff 100644 --- a/org.adempiere.install/install.console.app.launch +++ b/org.adempiere.install/install.console.app.launch @@ -59,6 +59,7 @@ + diff --git a/org.adempiere.install/install.silent.app.launch b/org.adempiere.install/install.silent.app.launch index c70c7e48fc..65576f12ae 100644 --- a/org.adempiere.install/install.silent.app.launch +++ b/org.adempiere.install/install.silent.app.launch @@ -59,6 +59,7 @@ + diff --git a/org.adempiere.server-feature/setup/configuration/config.ini b/org.adempiere.server-feature/setup/configuration/config.ini index ff161f0411..ae6458a54b 100644 --- a/org.adempiere.server-feature/setup/configuration/config.ini +++ b/org.adempiere.server-feature/setup/configuration/config.ini @@ -30,6 +30,7 @@ osgi.bundles=org.apache.felix.scr@1:start,\ wrapped.org.apache.poi.poi-ooxml,\ wrapped.org.apache.poi.poi-ooxml-lite,\ org.apache.commons.commons-compress,\ + org.apache.commons.commons-io,\ wrapped.org.apache.xmlbeans.xmlbeans,\ org.eclipse.core.jobs,\ org.eclipse.equinox.preferences,\ diff --git a/org.idempiere.test/pom.xml b/org.idempiere.test/pom.xml index 40f3818142..c447127b41 100644 --- a/org.idempiere.test/pom.xml +++ b/org.idempiere.test/pom.xml @@ -126,9 +126,14 @@ eclipse-plugin - org.idempiere.tablepartition - 0.0.0 - + org.idempiere.tablepartition + 0.0.0 + + + eclipse-plugin + wrapped.org.apache.xmlbeans.xmlbeans + 0.0.0 +