poi/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationHelper.java

156 lines
6.5 KiB
Java

/**
*
*/
package org.apache.poi.xssf.usermodel;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataValidation;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataValidationType;
/**
* @author <a href="rjankiraman@emptoris.com">Radhakrishnan J</a>
*
*/
public class XSSFDataValidationHelper implements DataValidationHelper {
private XSSFSheet xssfSheet;
public XSSFDataValidationHelper(XSSFSheet xssfSheet) {
super();
this.xssfSheet = xssfSheet;
}
/* (non-Javadoc)
* @see org.apache.poi.ss.usermodel.DataValidationHelper#createDateConstraint(int, java.lang.String, java.lang.String, java.lang.String)
*/
public DataValidationConstraint createDateConstraint(int operatorType, String formula1, String formula2, String dateFormat) {
return new XSSFDataValidationConstraint(ValidationType.DATE, operatorType,formula1, formula2);
}
/* (non-Javadoc)
* @see org.apache.poi.ss.usermodel.DataValidationHelper#createDecimalConstraint(int, java.lang.String, java.lang.String)
*/
public DataValidationConstraint createDecimalConstraint(int operatorType, String formula1, String formula2) {
return new XSSFDataValidationConstraint(ValidationType.DECIMAL, operatorType,formula1, formula2);
}
/* (non-Javadoc)
* @see org.apache.poi.ss.usermodel.DataValidationHelper#createExplicitListConstraint(java.lang.String[])
*/
public DataValidationConstraint createExplicitListConstraint(String[] listOfValues) {
return new XSSFDataValidationConstraint(listOfValues);
}
/* (non-Javadoc)
* @see org.apache.poi.ss.usermodel.DataValidationHelper#createFormulaListConstraint(java.lang.String)
*/
public DataValidationConstraint createFormulaListConstraint(String listFormula) {
return new XSSFDataValidationConstraint(ValidationType.LIST, listFormula);
}
public DataValidationConstraint createNumericConstraint(int validationType, int operatorType, String formula1, String formula2) {
if( validationType==ValidationType.INTEGER) {
return createIntegerConstraint(operatorType, formula1, formula2);
} else if ( validationType==ValidationType.DECIMAL) {
return createDecimalConstraint(operatorType, formula1, formula2);
} else if ( validationType==ValidationType.TEXT_LENGTH) {
return createTextLengthConstraint(operatorType, formula1, formula2);
}
return null;
}
/* (non-Javadoc)
* @see org.apache.poi.ss.usermodel.DataValidationHelper#createIntegerConstraint(int, java.lang.String, java.lang.String)
*/
public DataValidationConstraint createIntegerConstraint(int operatorType, String formula1, String formula2) {
return new XSSFDataValidationConstraint(ValidationType.INTEGER, operatorType,formula1,formula2);
}
/* (non-Javadoc)
* @see org.apache.poi.ss.usermodel.DataValidationHelper#createTextLengthConstraint(int, java.lang.String, java.lang.String)
*/
public DataValidationConstraint createTextLengthConstraint(int operatorType, String formula1, String formula2) {
return new XSSFDataValidationConstraint(ValidationType.TEXT_LENGTH, operatorType,formula1,formula2);
}
/* (non-Javadoc)
* @see org.apache.poi.ss.usermodel.DataValidationHelper#createTimeConstraint(int, java.lang.String, java.lang.String, java.lang.String)
*/
public DataValidationConstraint createTimeConstraint(int operatorType, String formula1, String formula2) {
return new XSSFDataValidationConstraint(ValidationType.TIME, operatorType,formula1,formula2);
}
public DataValidationConstraint createCustomConstraint(String formula) {
return new XSSFDataValidationConstraint(ValidationType.FORMULA, formula);
}
/* (non-Javadoc)
* @see org.apache.poi.ss.usermodel.DataValidationHelper#createValidation(org.apache.poi.ss.usermodel.DataValidationConstraint, org.apache.poi.ss.util.CellRangeAddressList)
*/
public DataValidation createValidation(DataValidationConstraint constraint, CellRangeAddressList cellRangeAddressList) {
XSSFDataValidationConstraint dataValidationConstraint = (XSSFDataValidationConstraint)constraint;
CTDataValidation newDataValidation = CTDataValidation.Factory.newInstance();
int validationType = constraint.getValidationType();
switch(validationType) {
case DataValidationConstraint.ValidationType.LIST:
newDataValidation.setType(STDataValidationType.LIST);
newDataValidation.setFormula1(constraint.getFormula1());
break;
case DataValidationConstraint.ValidationType.ANY:
newDataValidation.setType(STDataValidationType.NONE);
break;
case DataValidationConstraint.ValidationType.TEXT_LENGTH:
newDataValidation.setType(STDataValidationType.TEXT_LENGTH);
break;
case DataValidationConstraint.ValidationType.DATE:
newDataValidation.setType(STDataValidationType.DATE);
break;
case DataValidationConstraint.ValidationType.INTEGER:
newDataValidation.setType(STDataValidationType.WHOLE);
break;
case DataValidationConstraint.ValidationType.DECIMAL:
newDataValidation.setType(STDataValidationType.DECIMAL);
break;
case DataValidationConstraint.ValidationType.TIME:
newDataValidation.setType(STDataValidationType.TIME);
break;
case DataValidationConstraint.ValidationType.FORMULA:
newDataValidation.setType(STDataValidationType.CUSTOM);
break;
default:
newDataValidation.setType(STDataValidationType.NONE);
}
if (validationType!=ValidationType.ANY && validationType!=ValidationType.LIST) {
newDataValidation.setOperator(XSSFDataValidation.operatorTypeMappings.get(constraint.getOperator()));
if (constraint.getFormula1() != null) {
newDataValidation.setFormula1(constraint.getFormula1());
}
if (constraint.getFormula2() != null) {
newDataValidation.setFormula2(constraint.getFormula2());
}
}
CellRangeAddress[] cellRangeAddresses = cellRangeAddressList.getCellRangeAddresses();
List<String> sqref = new ArrayList<String>();
for (int i = 0; i < cellRangeAddresses.length; i++) {
CellRangeAddress cellRangeAddress = cellRangeAddresses[i];
sqref.add(cellRangeAddress.formatAsString());
}
newDataValidation.setSqref(sqref);
return new XSSFDataValidation(dataValidationConstraint,cellRangeAddressList,newDataValidation);
}
}