aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2016-11-27 11:06:57 +0000
committerDominik Stadler <centic@apache.org>2016-11-27 11:06:57 +0000
commitf8040a4c41051eef07fcc5c2748407763486af0b (patch)
tree9e34119caaad1a03b716f223488923e62ffd329e
parent470a17ad436f604cf4c569bb38a5b253f30ac5b2 (diff)
downloadpoi-f8040a4c41051eef07fcc5c2748407763486af0b.tar.gz
poi-f8040a4c41051eef07fcc5c2748407763486af0b.zip
Fix newly introduced Sonar issues and allow text to be null
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1771563 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidation.java25
-rw-r--r--src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java11
2 files changed, 20 insertions, 16 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidation.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidation.java
index a0160b5655..9f945ddbe3 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidation.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidation.java
@@ -35,6 +35,8 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataValidationOpera
*
*/
public class XSSFDataValidation implements DataValidation {
+ private static final int MAX_TEXT_LENGTH = 255;
+
private CTDataValidation ctDdataValidation;
private XSSFDataValidationConstraint validationConstraint;
private CellRangeAddressList regions;
@@ -43,15 +45,13 @@ public class XSSFDataValidation implements DataValidation {
static Map<STDataValidationOperator.Enum,Integer> operatorTypeReverseMappings = new HashMap<STDataValidationOperator.Enum,Integer>();
static Map<Integer,STDataValidationType.Enum> validationTypeMappings = new HashMap<Integer,STDataValidationType.Enum>();
static Map<STDataValidationType.Enum,Integer> validationTypeReverseMappings = new HashMap<STDataValidationType.Enum,Integer>();
- static Map<Integer,STDataValidationErrorStyle.Enum> errorStyleMappings = new HashMap<Integer,STDataValidationErrorStyle.Enum>();
+ static Map<Integer,STDataValidationErrorStyle.Enum> errorStyleMappings = new HashMap<Integer,STDataValidationErrorStyle.Enum>();
+
static {
errorStyleMappings.put(DataValidation.ErrorStyle.INFO, STDataValidationErrorStyle.INFORMATION);
errorStyleMappings.put(DataValidation.ErrorStyle.STOP, STDataValidationErrorStyle.STOP);
errorStyleMappings.put(DataValidation.ErrorStyle.WARNING, STDataValidationErrorStyle.WARNING);
- }
-
-
- static {
+
operatorTypeMappings.put(DataValidationConstraint.OperatorType.BETWEEN,STDataValidationOperator.BETWEEN);
operatorTypeMappings.put(DataValidationConstraint.OperatorType.NOT_BETWEEN,STDataValidationOperator.NOT_BETWEEN);
operatorTypeMappings.put(DataValidationConstraint.OperatorType.EQUAL,STDataValidationOperator.EQUAL);
@@ -64,9 +64,7 @@ public class XSSFDataValidation implements DataValidation {
for( Map.Entry<Integer,STDataValidationOperator.Enum> entry : operatorTypeMappings.entrySet() ) {
operatorTypeReverseMappings.put(entry.getValue(),entry.getKey());
}
- }
- static {
validationTypeMappings.put(DataValidationConstraint.ValidationType.FORMULA,STDataValidationType.CUSTOM);
validationTypeMappings.put(DataValidationConstraint.ValidationType.DATE,STDataValidationType.DATE);
validationTypeMappings.put(DataValidationConstraint.ValidationType.DECIMAL,STDataValidationType.DECIMAL);
@@ -81,7 +79,6 @@ public class XSSFDataValidation implements DataValidation {
}
}
-
XSSFDataValidation(CellRangeAddressList regions,CTDataValidation ctDataValidation) {
this(getConstraint(ctDataValidation), regions, ctDataValidation);
}
@@ -104,10 +101,10 @@ public class XSSFDataValidation implements DataValidation {
*/
public void createErrorBox(String title, String text) {
// the spec does not specify a length-limit, however Excel reports files as "corrupt" if they exceed 255 bytes for these texts...
- if(title != null && title.length() > 255) {
+ if(title != null && title.length() > MAX_TEXT_LENGTH) {
throw new IllegalStateException("Error-title cannot be longer than 32 characters, but had: " + title);
}
- if(text != null && text.length() > 255) {
+ if(text != null && text.length() > MAX_TEXT_LENGTH) {
throw new IllegalStateException("Error-text cannot be longer than 255 characters, but had: " + text);
}
ctDdataValidation.setErrorTitle(encodeUtf(title));
@@ -119,10 +116,10 @@ public class XSSFDataValidation implements DataValidation {
*/
public void createPromptBox(String title, String text) {
// the spec does not specify a length-limit, however Excel reports files as "corrupt" if they exceed 255 bytes for these texts...
- if(title != null && title.length() > 255) {
+ if(title != null && title.length() > MAX_TEXT_LENGTH) {
throw new IllegalStateException("Error-title cannot be longer than 32 characters, but had: " + title);
}
- if(text != null && text.length() > 255) {
+ if(text != null && text.length() > MAX_TEXT_LENGTH) {
throw new IllegalStateException("Error-text cannot be longer than 255 characters, but had: " + text);
}
ctDdataValidation.setPromptTitle(encodeUtf(title));
@@ -143,6 +140,10 @@ public class XSSFDataValidation implements DataValidation {
* @return the encoded string
*/
private String encodeUtf(String text) {
+ if(text == null) {
+ return null;
+ }
+
StringBuilder builder = new StringBuilder();
for(char c : text.toCharArray()) {
// for now only encode characters below 32, we can add more here if needed
diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
index 4d465499ac..a1f296355f 100644
--- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
+++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
@@ -1805,6 +1805,9 @@ public abstract class BaseTestBugzillaIssues {
checkFailures(dataValidation, TEST_256, TEST_32, true);
checkFailures(dataValidation, TEST_32, TEST_256, true);
+ // null does work
+ checkFailures(dataValidation, null, null, false);
+
// more than 32 title fail for HSSFWorkbook
checkFailures(dataValidation, TEST_255, TEST_32, wb instanceof HSSFWorkbook);
@@ -1838,16 +1841,16 @@ public abstract class BaseTestBugzillaIssues {
private void checkFailures(DataValidation dataValidation, String title, String text, boolean shouldFail) {
try {
dataValidation.createPromptBox(title, text);
- assertFalse("Should fail in a length-check, had " + title.length() + " and " + text.length(), shouldFail);
+ assertFalse("Should fail in a length-check, had " + (title == null ? null : title.length()) + " and " + (text == null ? null : text.length()), shouldFail);
} catch (IllegalStateException e) {
- assertTrue("Should not fail in a length-check, had " + title.length() + " and " + text.length(), shouldFail);
+ assertTrue("Should not fail in a length-check, had " + (title == null ? null : title.length()) + " and " + (text == null ? null : text.length()), shouldFail);
// expected here
}
try {
dataValidation.createErrorBox(title, text);
- assertFalse("Should fail in a length-check, had " + title.length() + " and " + text.length(), shouldFail);
+ assertFalse("Should fail in a length-check, had " + (title == null ? null : title.length()) + " and " + (text == null ? null : text.length()), shouldFail);
} catch (IllegalStateException e) {
- assertTrue("Should not fail in a length-check, had " + title.length() + " and " + text.length(), shouldFail);
+ assertTrue("Should not fail in a length-check, had " + (title == null ? null : title.length()) + " and " + (text == null ? null : text.length()), shouldFail);
}
}