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.

XSSFDataValidation.java 9.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. /**
  2. *
  3. */
  4. package org.apache.poi.xssf.usermodel;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import org.apache.poi.ss.usermodel.DataValidation;
  8. import org.apache.poi.ss.usermodel.DataValidationConstraint;
  9. import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType;
  10. import org.apache.poi.ss.util.CellRangeAddress;
  11. import org.apache.poi.ss.util.CellRangeAddressList;
  12. import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataValidation;
  13. import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataValidationErrorStyle;
  14. import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataValidationOperator;
  15. import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataValidationType;
  16. import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataValidationOperator.Enum;
  17. /**
  18. * @author <a href="rjankiraman@emptoris.com">Radhakrishnan J</a>
  19. *
  20. */
  21. public class XSSFDataValidation implements DataValidation {
  22. private CTDataValidation ctDdataValidation;
  23. private XSSFDataValidationConstraint validationConstraint;
  24. private CellRangeAddressList regions;
  25. static Map<Integer,STDataValidationOperator.Enum> operatorTypeMappings = new HashMap<Integer,STDataValidationOperator.Enum>();
  26. static Map<STDataValidationOperator.Enum,Integer> operatorTypeReverseMappings = new HashMap<STDataValidationOperator.Enum,Integer>();
  27. static Map<Integer,STDataValidationType.Enum> validationTypeMappings = new HashMap<Integer,STDataValidationType.Enum>();
  28. static Map<STDataValidationType.Enum,Integer> validationTypeReverseMappings = new HashMap<STDataValidationType.Enum,Integer>();
  29. static Map<Integer,STDataValidationErrorStyle.Enum> errorStyleMappings = new HashMap<Integer,STDataValidationErrorStyle.Enum>();
  30. static {
  31. errorStyleMappings.put(DataValidation.ErrorStyle.INFO, STDataValidationErrorStyle.INFORMATION);
  32. errorStyleMappings.put(DataValidation.ErrorStyle.STOP, STDataValidationErrorStyle.STOP);
  33. errorStyleMappings.put(DataValidation.ErrorStyle.WARNING, STDataValidationErrorStyle.WARNING);
  34. }
  35. static {
  36. operatorTypeMappings.put(DataValidationConstraint.OperatorType.BETWEEN,STDataValidationOperator.BETWEEN);
  37. operatorTypeMappings.put(DataValidationConstraint.OperatorType.NOT_BETWEEN,STDataValidationOperator.NOT_BETWEEN);
  38. operatorTypeMappings.put(DataValidationConstraint.OperatorType.EQUAL,STDataValidationOperator.EQUAL);
  39. operatorTypeMappings.put(DataValidationConstraint.OperatorType.NOT_EQUAL,STDataValidationOperator.NOT_EQUAL);
  40. operatorTypeMappings.put(DataValidationConstraint.OperatorType.GREATER_THAN,STDataValidationOperator.GREATER_THAN);
  41. operatorTypeMappings.put(DataValidationConstraint.OperatorType.GREATER_OR_EQUAL,STDataValidationOperator.GREATER_THAN_OR_EQUAL);
  42. operatorTypeMappings.put(DataValidationConstraint.OperatorType.LESS_THAN,STDataValidationOperator.LESS_THAN);
  43. operatorTypeMappings.put(DataValidationConstraint.OperatorType.LESS_OR_EQUAL,STDataValidationOperator.LESS_THAN_OR_EQUAL);
  44. for( Map.Entry<Integer,STDataValidationOperator.Enum> entry : operatorTypeMappings.entrySet() ) {
  45. operatorTypeReverseMappings.put(entry.getValue(),entry.getKey());
  46. }
  47. }
  48. static {
  49. validationTypeMappings.put(DataValidationConstraint.ValidationType.FORMULA,STDataValidationType.CUSTOM);
  50. validationTypeMappings.put(DataValidationConstraint.ValidationType.DATE,STDataValidationType.DATE);
  51. validationTypeMappings.put(DataValidationConstraint.ValidationType.DECIMAL,STDataValidationType.DECIMAL);
  52. validationTypeMappings.put(DataValidationConstraint.ValidationType.LIST,STDataValidationType.LIST);
  53. validationTypeMappings.put(DataValidationConstraint.ValidationType.ANY,STDataValidationType.NONE);
  54. validationTypeMappings.put(DataValidationConstraint.ValidationType.TEXT_LENGTH,STDataValidationType.TEXT_LENGTH);
  55. validationTypeMappings.put(DataValidationConstraint.ValidationType.TIME,STDataValidationType.TIME);
  56. validationTypeMappings.put(DataValidationConstraint.ValidationType.INTEGER,STDataValidationType.WHOLE);
  57. for( Map.Entry<Integer,STDataValidationType.Enum> entry : validationTypeMappings.entrySet() ) {
  58. validationTypeReverseMappings.put(entry.getValue(),entry.getKey());
  59. }
  60. }
  61. XSSFDataValidation(CellRangeAddressList regions,CTDataValidation ctDataValidation) {
  62. super();
  63. this.validationConstraint = getConstraint(ctDataValidation);
  64. this.ctDdataValidation = ctDataValidation;
  65. this.regions = regions;
  66. this.ctDdataValidation.setErrorStyle(STDataValidationErrorStyle.STOP);
  67. this.ctDdataValidation.setAllowBlank(true);
  68. }
  69. public XSSFDataValidation(XSSFDataValidationConstraint constraint,CellRangeAddressList regions,CTDataValidation ctDataValidation) {
  70. super();
  71. this.validationConstraint = constraint;
  72. this.ctDdataValidation = ctDataValidation;
  73. this.regions = regions;
  74. this.ctDdataValidation.setErrorStyle(STDataValidationErrorStyle.STOP);
  75. this.ctDdataValidation.setAllowBlank(true);
  76. }
  77. CTDataValidation getCtDdataValidation() {
  78. return ctDdataValidation;
  79. }
  80. /* (non-Javadoc)
  81. * @see org.apache.poi.ss.usermodel.DataValidation#createErrorBox(java.lang.String, java.lang.String)
  82. */
  83. public void createErrorBox(String title, String text) {
  84. ctDdataValidation.setErrorTitle(title);
  85. ctDdataValidation.setError(text);
  86. }
  87. /* (non-Javadoc)
  88. * @see org.apache.poi.ss.usermodel.DataValidation#createPromptBox(java.lang.String, java.lang.String)
  89. */
  90. public void createPromptBox(String title, String text) {
  91. ctDdataValidation.setPromptTitle(title);
  92. ctDdataValidation.setPrompt(text);
  93. }
  94. /* (non-Javadoc)
  95. * @see org.apache.poi.ss.usermodel.DataValidation#getEmptyCellAllowed()
  96. */
  97. public boolean getEmptyCellAllowed() {
  98. return ctDdataValidation.getAllowBlank();
  99. }
  100. /* (non-Javadoc)
  101. * @see org.apache.poi.ss.usermodel.DataValidation#getErrorBoxText()
  102. */
  103. public String getErrorBoxText() {
  104. return ctDdataValidation.getError();
  105. }
  106. /* (non-Javadoc)
  107. * @see org.apache.poi.ss.usermodel.DataValidation#getErrorBoxTitle()
  108. */
  109. public String getErrorBoxTitle() {
  110. return ctDdataValidation.getErrorTitle();
  111. }
  112. /* (non-Javadoc)
  113. * @see org.apache.poi.ss.usermodel.DataValidation#getErrorStyle()
  114. */
  115. public int getErrorStyle() {
  116. return ctDdataValidation.getErrorStyle().intValue();
  117. }
  118. /* (non-Javadoc)
  119. * @see org.apache.poi.ss.usermodel.DataValidation#getPromptBoxText()
  120. */
  121. public String getPromptBoxText() {
  122. return ctDdataValidation.getPrompt();
  123. }
  124. /* (non-Javadoc)
  125. * @see org.apache.poi.ss.usermodel.DataValidation#getPromptBoxTitle()
  126. */
  127. public String getPromptBoxTitle() {
  128. return ctDdataValidation.getPromptTitle();
  129. }
  130. /* (non-Javadoc)
  131. * @see org.apache.poi.ss.usermodel.DataValidation#getShowErrorBox()
  132. */
  133. public boolean getShowErrorBox() {
  134. return ctDdataValidation.getShowErrorMessage();
  135. }
  136. /* (non-Javadoc)
  137. * @see org.apache.poi.ss.usermodel.DataValidation#getShowPromptBox()
  138. */
  139. public boolean getShowPromptBox() {
  140. return ctDdataValidation.getShowInputMessage();
  141. }
  142. /* (non-Javadoc)
  143. * @see org.apache.poi.ss.usermodel.DataValidation#getSuppressDropDownArrow()
  144. */
  145. public boolean getSuppressDropDownArrow() {
  146. return !ctDdataValidation.getShowDropDown();
  147. }
  148. /* (non-Javadoc)
  149. * @see org.apache.poi.ss.usermodel.DataValidation#getValidationConstraint()
  150. */
  151. public DataValidationConstraint getValidationConstraint() {
  152. return validationConstraint;
  153. }
  154. /* (non-Javadoc)
  155. * @see org.apache.poi.ss.usermodel.DataValidation#setEmptyCellAllowed(boolean)
  156. */
  157. public void setEmptyCellAllowed(boolean allowed) {
  158. ctDdataValidation.setAllowBlank(allowed);
  159. }
  160. /* (non-Javadoc)
  161. * @see org.apache.poi.ss.usermodel.DataValidation#setErrorStyle(int)
  162. */
  163. public void setErrorStyle(int errorStyle) {
  164. ctDdataValidation.setErrorStyle(errorStyleMappings.get(errorStyle));
  165. }
  166. /* (non-Javadoc)
  167. * @see org.apache.poi.ss.usermodel.DataValidation#setShowErrorBox(boolean)
  168. */
  169. public void setShowErrorBox(boolean show) {
  170. ctDdataValidation.setShowErrorMessage(show);
  171. }
  172. /* (non-Javadoc)
  173. * @see org.apache.poi.ss.usermodel.DataValidation#setShowPromptBox(boolean)
  174. */
  175. public void setShowPromptBox(boolean show) {
  176. ctDdataValidation.setShowInputMessage(show);
  177. }
  178. /* (non-Javadoc)
  179. * @see org.apache.poi.ss.usermodel.DataValidation#setSuppressDropDownArrow(boolean)
  180. */
  181. public void setSuppressDropDownArrow(boolean suppress) {
  182. if (validationConstraint.getValidationType()==ValidationType.LIST) {
  183. ctDdataValidation.setShowDropDown(!suppress);
  184. }
  185. }
  186. public CellRangeAddressList getRegions() {
  187. return regions;
  188. }
  189. public String prettyPrint() {
  190. StringBuilder builder = new StringBuilder();
  191. for(CellRangeAddress address : regions.getCellRangeAddresses()) {
  192. builder.append(address.formatAsString());
  193. }
  194. builder.append(" => ");
  195. builder.append(this.validationConstraint.prettyPrint());
  196. return builder.toString();
  197. }
  198. private XSSFDataValidationConstraint getConstraint(CTDataValidation ctDataValidation) {
  199. XSSFDataValidationConstraint constraint = null;
  200. String formula1 = ctDataValidation.getFormula1();
  201. String formula2 = ctDataValidation.getFormula2();
  202. Enum operator = ctDataValidation.getOperator();
  203. org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataValidationType.Enum type = ctDataValidation.getType();
  204. Integer validationType = XSSFDataValidation.validationTypeReverseMappings.get(type);
  205. Integer operatorType = XSSFDataValidation.operatorTypeReverseMappings.get(operator);
  206. constraint = new XSSFDataValidationConstraint(validationType,operatorType, formula1,formula2);
  207. return constraint;
  208. }
  209. }