You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SXSSFITestDataProvider.java 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /*
  2. * ====================================================================
  3. * Licensed to the Apache Software Foundation (ASF) under one or more
  4. * contributor license agreements. See the NOTICE file distributed with
  5. * this work for additional information regarding copyright ownership.
  6. * The ASF licenses this file to You under the Apache License, Version 2.0
  7. * (the "License"); you may not use this file except in compliance with
  8. * the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. * ====================================================================
  18. */
  19. package org.apache.poi.xssf;
  20. import java.io.IOException;
  21. import java.io.InputStream;
  22. import java.util.ArrayList;
  23. import java.util.Collection;
  24. import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
  25. import org.apache.poi.POIDataSamples;
  26. import org.apache.poi.ss.ITestDataProvider;
  27. import org.apache.poi.ss.SpreadsheetVersion;
  28. import org.apache.poi.ss.usermodel.FormulaEvaluator;
  29. import org.apache.poi.ss.usermodel.Sheet;
  30. import org.apache.poi.ss.usermodel.Workbook;
  31. import org.apache.poi.xssf.streaming.SXSSFSheet;
  32. import org.apache.poi.xssf.streaming.SXSSFWorkbook;
  33. import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
  34. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  35. public class SXSSFITestDataProvider implements ITestDataProvider {
  36. public static final SXSSFITestDataProvider instance = new SXSSFITestDataProvider();
  37. // an instance of all SXSSFWorkbooks opened by this TestDataProvider,
  38. // so that the temporary files created can be disposed up by cleanup()
  39. protected final Collection<SXSSFWorkbook> instances = new ArrayList<>();
  40. protected SXSSFITestDataProvider() {
  41. // enforce singleton
  42. }
  43. @Override
  44. public Workbook openSampleWorkbook(String sampleFileName) {
  45. XSSFWorkbook xssfWorkbook = XSSFITestDataProvider.instance.openSampleWorkbook(sampleFileName);
  46. SXSSFWorkbook swb = new SXSSFWorkbook(xssfWorkbook);
  47. instances.add(swb);
  48. return swb;
  49. }
  50. /**
  51. * Returns an XSSFWorkbook since SXSSFWorkbook is write-only
  52. */
  53. @Override
  54. public XSSFWorkbook writeOutAndReadBack(Workbook wb) {
  55. // wb is usually an SXSSFWorkbook, but must also work on an XSSFWorkbook
  56. // since workbooks must be able to be written out and read back
  57. // several times in succession
  58. if(!(wb instanceof SXSSFWorkbook || wb instanceof XSSFWorkbook)) {
  59. throw new IllegalArgumentException("Expected an instance of SXSSFWorkbook");
  60. }
  61. try (UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream()) {
  62. wb.write(baos);
  63. try (InputStream is = baos.toInputStream()) {
  64. return new XSSFWorkbook(is);
  65. }
  66. } catch (IOException e) {
  67. throw new RuntimeException(e);
  68. }
  69. }
  70. @Override
  71. public SXSSFWorkbook createWorkbook() {
  72. SXSSFWorkbook wb = new SXSSFWorkbook();
  73. instances.add(wb);
  74. return wb;
  75. }
  76. //************ SXSSF-specific methods ***************//
  77. @Override
  78. public SXSSFWorkbook createWorkbook(int rowAccessWindowSize) {
  79. SXSSFWorkbook wb = new SXSSFWorkbook(rowAccessWindowSize);
  80. instances.add(wb);
  81. return wb;
  82. }
  83. @Override
  84. public void trackAllColumnsForAutosizing(Sheet sheet) {
  85. ((SXSSFSheet)sheet).trackAllColumnsForAutoSizing();
  86. }
  87. //************ End SXSSF-specific methods ***************//
  88. @Override
  89. public FormulaEvaluator createFormulaEvaluator(Workbook wb) {
  90. return new XSSFFormulaEvaluator(((SXSSFWorkbook) wb).getXSSFWorkbook());
  91. }
  92. @Override
  93. public byte[] getTestDataFileContent(String fileName) {
  94. return POIDataSamples.getSpreadSheetInstance().readFile(fileName);
  95. }
  96. @Override
  97. public SpreadsheetVersion getSpreadsheetVersion() {
  98. return SpreadsheetVersion.EXCEL2007;
  99. }
  100. @Override
  101. public String getStandardFileNameExtension() {
  102. return "xlsx";
  103. }
  104. public synchronized boolean cleanup() {
  105. boolean ok = true;
  106. for(final SXSSFWorkbook wb : instances) {
  107. ok = ok && wb.dispose();
  108. }
  109. instances.clear();
  110. return ok;
  111. }
  112. }