You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2014/11/05 13:14:55 UTC

svn commit: r1636857 - in /poi/trunk/src: java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/usermodel/ java/org/apache/poi/ss/usermodel/ ooxml/java/org/apache/poi/xssf/streaming/ testcases/org/apache/poi/hssf/usermodel/

Author: nick
Date: Wed Nov  5 12:14:54 2014
New Revision: 1636857

URL: http://svn.apache.org/r1636857
Log:
Patch from hishidama to add Sheet.getDataValidations() for HSSF and XSSF. This closes #11 from github

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
    poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestDataValidation.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java?rev=1636857&r1=1636856&r2=1636857&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/DVRecord.java Wed Nov  5 12:14:54 2014
@@ -18,9 +18,9 @@
 package org.apache.poi.hssf.record;
 
 import org.apache.poi.hssf.record.common.UnicodeString;
-import org.apache.poi.ss.formula.ptg.Ptg;
 import org.apache.poi.hssf.usermodel.HSSFDataValidation;
 import org.apache.poi.ss.formula.Formula;
+import org.apache.poi.ss.formula.ptg.Ptg;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellRangeAddressList;
 import org.apache.poi.util.BitField;
@@ -196,8 +196,29 @@ public final class DVRecord extends Stan
 	}
 	// <-- end option flags
 
-
-
+    public String getPromptTitle() {
+        return resolveTitleString(_promptTitle);
+    }
+
+    public String getErrorTitle() {
+        return resolveTitleString(_errorTitle);
+    }
+
+    public String getPromptText() {
+        return resolveTitleString(_promptText);
+    }
+
+    public String getErrorText() {
+        return resolveTitleString(_errorText);
+    }
+
+    public Ptg[] getFormula1() {
+        return Formula.getTokens(_formula1);
+    }
+
+    public Ptg[] getFormula2() {
+        return Formula.getTokens(_formula2);
+    }
 
 	public CellRangeAddressList getCellRangeAddress() {
 		return this._regions;
@@ -284,7 +305,14 @@ public final class DVRecord extends Stan
 		}
 		return new UnicodeString(str);
 	}
-	
+
+    private static String resolveTitleString(UnicodeString us) {
+        if (us == null || us.equals(NULL_TEXT_STRING)) {
+            return null;
+        }
+        return us.getString();
+    }
+
 	private static UnicodeString readUnicodeString(RecordInputStream in) {
 		return new UnicodeString(in);
 	}

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java?rev=1636857&r1=1636856&r2=1636857&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java Wed Nov  5 12:14:54 2014
@@ -17,15 +17,20 @@
 
 package org.apache.poi.hssf.usermodel;
 
+import java.text.MessageFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.regex.Pattern;
 
 import org.apache.poi.hssf.model.HSSFFormulaParser;
+import org.apache.poi.hssf.record.DVRecord;
+import org.apache.poi.ss.formula.FormulaRenderer;
+import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
+import org.apache.poi.ss.formula.FormulaType;
 import org.apache.poi.ss.formula.ptg.NumberPtg;
 import org.apache.poi.ss.formula.ptg.Ptg;
 import org.apache.poi.ss.formula.ptg.StringPtg;
-import org.apache.poi.ss.formula.FormulaType;
 import org.apache.poi.ss.usermodel.DataValidationConstraint;
 
 /**
@@ -429,4 +434,78 @@ public class DVConstraint implements Dat
         HSSFWorkbook wb = sheet.getWorkbook();
 		return HSSFFormulaParser.parse(formula, wb, FormulaType.CELL, wb.getSheetIndex(sheet));
 	}	
+
+    static DVConstraint createDVConstraint(DVRecord dvRecord, FormulaRenderingWorkbook book) {
+        switch (dvRecord.getDataType()) {
+        case ValidationType.ANY:
+            return new DVConstraint(ValidationType.ANY, dvRecord.getConditionOperator(), null, null, null, null, null);
+        case ValidationType.INTEGER:
+        case ValidationType.DECIMAL:
+        case ValidationType.DATE:
+        case ValidationType.TIME:
+        case ValidationType.TEXT_LENGTH:
+            FormulaValuePair pair1 = toFormulaString(dvRecord.getFormula1(), book);
+            FormulaValuePair pair2 = toFormulaString(dvRecord.getFormula2(), book);
+            return new DVConstraint(dvRecord.getDataType(), dvRecord.getConditionOperator(), pair1.formula(),
+                    pair2.formula(), pair1.value(), pair2.value(), null);
+        case ValidationType.LIST:
+            if (dvRecord.getListExplicitFormula()) {
+                String values = toFormulaString(dvRecord.getFormula1(), book).string();
+                if (values.startsWith("\"")) {
+                    values = values.substring(1);
+                }
+                if (values.endsWith("\"")) {
+                    values = values.substring(0, values.length() - 1);
+                }
+                String[] explicitListValues = values.split(Pattern.quote("\0"));
+                return createExplicitListConstraint(explicitListValues);
+            } else {
+                String listFormula = toFormulaString(dvRecord.getFormula1(), book).string();
+                return createFormulaListConstraint(listFormula);
+            }
+        case ValidationType.FORMULA:
+            return createCustomFormulaConstraint(toFormulaString(dvRecord.getFormula1(), book).string());
+        default:
+            throw new UnsupportedOperationException(MessageFormat.format("validationType={0}", dvRecord.getDataType()));
+        }
+    }
+
+    private static class FormulaValuePair {
+        private String _formula;
+        private String _value;
+
+        public String formula() {
+            return _formula;
+        }
+
+        public Double value() {
+            if (_value == null) {
+                return null;
+            }
+            return new Double(_value);
+        }
+
+        public String string() {
+            if (_formula != null) {
+                return _formula;
+            }
+            if (_value != null) {
+                return _value;
+            }
+            return null;
+        }
+    }
+
+    private static FormulaValuePair toFormulaString(Ptg[] ptgs, FormulaRenderingWorkbook book) {
+        FormulaValuePair pair = new FormulaValuePair();
+        if (ptgs != null && ptgs.length > 0) {
+            String string = FormulaRenderer.toFormulaString(book, ptgs);
+            if (ptgs.length == 1 && ptgs[0].getClass() == NumberPtg.class) {
+                pair._value = string;
+            } else {
+                pair._formula = string;
+            }
+        }
+        return pair;
+    }
 }

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java?rev=1636857&r1=1636856&r2=1636857&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java Wed Nov  5 12:14:54 2014
@@ -44,6 +44,7 @@ import org.apache.poi.hssf.record.WSBool
 import org.apache.poi.hssf.record.WindowTwoRecord;
 import org.apache.poi.hssf.record.aggregates.DataValidityTable;
 import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate;
+import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor;
 import org.apache.poi.hssf.record.aggregates.WorksheetProtectionBlock;
 import org.apache.poi.hssf.util.PaneInformation;
 import org.apache.poi.ss.SpreadsheetVersion;
@@ -60,6 +61,7 @@ import org.apache.poi.ss.usermodel.DataV
 import org.apache.poi.ss.usermodel.DataValidationHelper;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellRangeAddressList;
 import org.apache.poi.ss.util.CellReference;
 import org.apache.poi.ss.util.SSCellRange;
 import org.apache.poi.ss.util.SheetUtil;
@@ -394,6 +396,35 @@ public final class HSSFSheet implements 
         return _lastrow;
     }
 
+    public List<HSSFDataValidation> getDataValidations() {
+        DataValidityTable dvt = _sheet.getOrCreateDataValidityTable();
+        final List<HSSFDataValidation> hssfValidations = new ArrayList<HSSFDataValidation>();
+        RecordVisitor visitor = new RecordVisitor() {
+            private HSSFEvaluationWorkbook book = HSSFEvaluationWorkbook.create(getWorkbook());
+
+            @Override
+            public void visitRecord(Record r) {
+                if (!(r instanceof DVRecord)) {
+                    return;
+                }
+                DVRecord dvRecord = (DVRecord) r;
+                CellRangeAddressList regions = dvRecord.getCellRangeAddress().copy();
+                DVConstraint constraint = DVConstraint.createDVConstraint(dvRecord, book);
+                HSSFDataValidation hssfDataValidation = new HSSFDataValidation(regions, constraint);
+                hssfDataValidation.setErrorStyle(dvRecord.getErrorStyle());
+                hssfDataValidation.setEmptyCellAllowed(dvRecord.getEmptyCellAllowed());
+                hssfDataValidation.setSuppressDropDownArrow(dvRecord.getSuppressDropdownArrow());
+                hssfDataValidation.createPromptBox(dvRecord.getPromptTitle(), dvRecord.getPromptText());
+                hssfDataValidation.setShowPromptBox(dvRecord.getShowPromptOnCellSelected());
+                hssfDataValidation.createErrorBox(dvRecord.getErrorTitle(), dvRecord.getErrorText());
+                hssfDataValidation.setShowErrorBox(dvRecord.getShowErrorOnInvalidValue());
+                hssfValidations.add(hssfDataValidation);
+            }
+        };
+        dvt.visitContainedRecords(visitor);
+        return hssfValidations;
+    }
+
     /**
      * Creates a data validation object
      *

Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java?rev=1636857&r1=1636856&r2=1636857&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java Wed Nov  5 12:14:54 2014
@@ -18,6 +18,7 @@
 package org.apache.poi.ss.usermodel;
 
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.poi.hssf.util.PaneInformation;
 import org.apache.poi.ss.util.CellRangeAddress;
@@ -921,6 +922,12 @@ public interface Sheet extends Iterable<
     
     public DataValidationHelper getDataValidationHelper();
 
+    /**
+     * Returns the list of DataValidation in the sheet.
+     * @return list of DataValidation in the sheet
+     */
+    public List<? extends DataValidation> getDataValidations();
+
 	/**
 	 * Creates a data validation object
 	 * @param dataValidation The Data validation object settings

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java?rev=1636857&r1=1636856&r2=1636857&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java Wed Nov  5 12:14:54 2014
@@ -20,6 +20,7 @@ package org.apache.poi.xssf.streaming;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -42,6 +43,7 @@ import org.apache.poi.ss.usermodel.Sheet
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.SheetUtil;
+import org.apache.poi.xssf.usermodel.XSSFDataValidation;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetFormatPr;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
@@ -1339,6 +1341,11 @@ public class SXSSFSheet implements Sheet
         return _sh.getDataValidationHelper();
     }
 
+    public List<XSSFDataValidation> getDataValidations()
+    {
+        return _sh.getDataValidations();
+    }
+
     /**
      * Creates a data validation object
      * @param dataValidation The Data validation object settings

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestDataValidation.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestDataValidation.java?rev=1636857&r1=1636856&r2=1636857&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestDataValidation.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestDataValidation.java Wed Nov  5 12:14:54 2014
@@ -24,6 +24,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
+import java.util.List;
 
 import junit.framework.AssertionFailedError;
 
@@ -34,7 +35,16 @@ import org.apache.poi.hssf.eventmodel.Ev
 import org.apache.poi.hssf.record.DVRecord;
 import org.apache.poi.hssf.record.RecordFormatException;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
-import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.usermodel.BaseTestDataValidation;
+import org.apache.poi.ss.usermodel.DataValidation;
+import org.apache.poi.ss.usermodel.DataValidationConstraint;
+import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
+import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType;
+import org.apache.poi.ss.usermodel.DataValidationHelper;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellRangeAddressList;
 
 /**
@@ -209,4 +219,236 @@ public final class TestDataValidation ex
 		}
 		return -1;
 	}
+
+    public void testGetDataValidationsAny() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet();
+        List<HSSFDataValidation> list = sheet.getDataValidations();
+        assertEquals(0, list.size());
+
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = dataValidationHelper.createNumericConstraint(ValidationType.ANY,
+                OperatorType.IGNORED, null, null);
+        CellRangeAddressList addressList = new CellRangeAddressList(1, 2, 3, 4);
+        DataValidation validation = dataValidationHelper.createValidation(constraint, addressList);
+        validation.setEmptyCellAllowed(true);
+        validation.createErrorBox("error-title", "error-text");
+        validation.createPromptBox("prompt-title", "prompt-text");
+        sheet.addValidationData(validation);
+
+        list = sheet.getDataValidations(); // <-- works
+        assertEquals(1, list.size());
+
+        HSSFDataValidation dv = list.get(0);
+        {
+            CellRangeAddressList regions = dv.getRegions();
+            assertEquals(1, regions.countRanges());
+
+            CellRangeAddress address = regions.getCellRangeAddress(0);
+            assertEquals(1, address.getFirstRow());
+            assertEquals(2, address.getLastRow());
+            assertEquals(3, address.getFirstColumn());
+            assertEquals(4, address.getLastColumn());
+        }
+        assertEquals(true, dv.getEmptyCellAllowed());
+        assertEquals(false, dv.getSuppressDropDownArrow());
+        assertEquals(true, dv.getShowErrorBox());
+        assertEquals("error-title", dv.getErrorBoxTitle());
+        assertEquals("error-text", dv.getErrorBoxText());
+        assertEquals(true, dv.getShowPromptBox());
+        assertEquals("prompt-title", dv.getPromptBoxTitle());
+        assertEquals("prompt-text", dv.getPromptBoxText());
+
+        DataValidationConstraint c = dv.getValidationConstraint();
+        assertEquals(ValidationType.ANY, c.getValidationType());
+        assertEquals(OperatorType.IGNORED, c.getOperator());
+    }
+
+    public void testGetDataValidationsIntegerFormula() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet();
+        List<HSSFDataValidation> list = sheet.getDataValidations();
+        assertEquals(0, list.size());
+
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = dataValidationHelper.createIntegerConstraint(OperatorType.BETWEEN, "=A2",
+                "=A3");
+        CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
+        DataValidation validation = dataValidationHelper.createValidation(constraint, addressList);
+        sheet.addValidationData(validation);
+
+        list = sheet.getDataValidations(); // <-- works
+        assertEquals(1, list.size());
+
+        HSSFDataValidation dv = list.get(0);
+        DVConstraint c = dv.getConstraint();
+        assertEquals(ValidationType.INTEGER, c.getValidationType());
+        assertEquals(OperatorType.BETWEEN, c.getOperator());
+        assertEquals("A2", c.getFormula1());
+        assertEquals("A3", c.getFormula2());
+        assertEquals(null, c.getValue1());
+        assertEquals(null, c.getValue2());
+    }
+
+    public void testGetDataValidationsIntegerValue() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet();
+        List<HSSFDataValidation> list = sheet.getDataValidations();
+        assertEquals(0, list.size());
+
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = dataValidationHelper.createIntegerConstraint(OperatorType.BETWEEN, "100",
+                "200");
+        CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
+        DataValidation validation = dataValidationHelper.createValidation(constraint, addressList);
+        sheet.addValidationData(validation);
+
+        list = sheet.getDataValidations(); // <-- works
+        assertEquals(1, list.size());
+
+        HSSFDataValidation dv = list.get(0);
+        DVConstraint c = dv.getConstraint();
+        assertEquals(ValidationType.INTEGER, c.getValidationType());
+        assertEquals(OperatorType.BETWEEN, c.getOperator());
+        assertEquals(null, c.getFormula1());
+        assertEquals(null, c.getFormula2());
+        assertEquals(new Double("100"), c.getValue1());
+        assertEquals(new Double("200"), c.getValue2());
+    }
+
+    public void testGetDataValidationsDecimal() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet();
+        List<HSSFDataValidation> list = sheet.getDataValidations();
+        assertEquals(0, list.size());
+
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = dataValidationHelper.createDecimalConstraint(OperatorType.BETWEEN, "=A2",
+                "200");
+        CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
+        DataValidation validation = dataValidationHelper.createValidation(constraint, addressList);
+        sheet.addValidationData(validation);
+
+        list = sheet.getDataValidations(); // <-- works
+        assertEquals(1, list.size());
+
+        HSSFDataValidation dv = list.get(0);
+        DVConstraint c = dv.getConstraint();
+        assertEquals(ValidationType.DECIMAL, c.getValidationType());
+        assertEquals(OperatorType.BETWEEN, c.getOperator());
+        assertEquals("A2", c.getFormula1());
+        assertEquals(null, c.getFormula2());
+        assertEquals(null, c.getValue1());
+        assertEquals(new Double("200"), c.getValue2());
+    }
+
+    public void testGetDataValidationsDate() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet();
+        List<HSSFDataValidation> list = sheet.getDataValidations();
+        assertEquals(0, list.size());
+
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = dataValidationHelper.createDateConstraint(OperatorType.EQUAL,
+                "2014/10/25", null, null);
+        CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
+        DataValidation validation = dataValidationHelper.createValidation(constraint, addressList);
+        sheet.addValidationData(validation);
+
+        list = sheet.getDataValidations(); // <-- works
+        assertEquals(1, list.size());
+
+        HSSFDataValidation dv = list.get(0);
+        DVConstraint c = dv.getConstraint();
+        assertEquals(ValidationType.DATE, c.getValidationType());
+        assertEquals(OperatorType.EQUAL, c.getOperator());
+        assertEquals(null, c.getFormula1());
+        assertEquals(null, c.getFormula2());
+        assertEquals(DateUtil.getExcelDate(DateUtil.parseYYYYMMDDDate("2014/10/25")), c.getValue1());
+        assertEquals(null, c.getValue2());
+    }
+
+    public void testGetDataValidationsListExplicit() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet();
+        List<HSSFDataValidation> list = sheet.getDataValidations();
+        assertEquals(0, list.size());
+
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = dataValidationHelper.createExplicitListConstraint(new String[] { "aaa",
+                "bbb", "ccc" });
+        CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
+        DataValidation validation = dataValidationHelper.createValidation(constraint, addressList);
+        validation.setSuppressDropDownArrow(true);
+        sheet.addValidationData(validation);
+
+        list = sheet.getDataValidations(); // <-- works
+        assertEquals(1, list.size());
+
+        HSSFDataValidation dv = list.get(0);
+        assertEquals(true, dv.getSuppressDropDownArrow());
+
+        DVConstraint c = dv.getConstraint();
+        assertEquals(ValidationType.LIST, c.getValidationType());
+        assertEquals(null, c.getFormula1());
+        assertEquals(null, c.getFormula2());
+        assertEquals(null, c.getValue1());
+        assertEquals(null, c.getValue2());
+        String[] values = c.getExplicitListValues();
+        assertEquals(3, values.length);
+        assertEquals("aaa", values[0]);
+        assertEquals("bbb", values[1]);
+        assertEquals("ccc", values[2]);
+    }
+
+    public void testGetDataValidationsListFormula() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet();
+        List<HSSFDataValidation> list = sheet.getDataValidations();
+        assertEquals(0, list.size());
+
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = dataValidationHelper.createFormulaListConstraint("A2");
+        CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
+        DataValidation validation = dataValidationHelper.createValidation(constraint, addressList);
+        validation.setSuppressDropDownArrow(true);
+        sheet.addValidationData(validation);
+
+        list = sheet.getDataValidations(); // <-- works
+        assertEquals(1, list.size());
+
+        HSSFDataValidation dv = list.get(0);
+        assertEquals(true, dv.getSuppressDropDownArrow());
+
+        DVConstraint c = dv.getConstraint();
+        assertEquals(ValidationType.LIST, c.getValidationType());
+        assertEquals("A2", c.getFormula1());
+        assertEquals(null, c.getFormula2());
+        assertEquals(null, c.getValue1());
+        assertEquals(null, c.getValue2());
+    }
+
+    public void testGetDataValidationsFormula() {
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet();
+        List<HSSFDataValidation> list = sheet.getDataValidations();
+        assertEquals(0, list.size());
+
+        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
+        DataValidationConstraint constraint = dataValidationHelper.createCustomConstraint("A2:A3");
+        CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
+        DataValidation validation = dataValidationHelper.createValidation(constraint, addressList);
+        sheet.addValidationData(validation);
+
+        list = sheet.getDataValidations(); // <-- works
+        assertEquals(1, list.size());
+
+        HSSFDataValidation dv = list.get(0);
+        DVConstraint c = dv.getConstraint();
+        assertEquals(ValidationType.FORMULA, c.getValidationType());
+        assertEquals("A2:A3", c.getFormula1());
+        assertEquals(null, c.getFormula2());
+        assertEquals(null, c.getValue1());
+        assertEquals(null, c.getValue2());
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org