- public static boolean asBoolean(Object object) {
- if(object instanceof Boolean) return (Boolean)object;
- else if(object instanceof Number) return ((Number)object).doubleValue() != 0;
- else if(object instanceof Variant) return asBoolean(((Variant)object).getValue());
- else if(object instanceof String) {
- Double d = asDoubleWhereEmptyStringIsZero((String)object);
- if(d==null) return false;
- else return d != 0;
- }
- return false;
- }
-
- public static String asString(Object object) {
- if(object == null) return "";
- if(object instanceof String) return (String)object;
- if(object instanceof Number) {
- double dVal = ((Number)object).doubleValue();
- if(dVal == Math.floor(dVal)){
- return ""+((Number)object).intValue();
- } else {
- return object.toString();
- }
- }
- else if(object instanceof Variant) {
- Object o = ((Variant) object).getValue();
- if(o instanceof String) return (String)o;
- else if(o instanceof Number) asString((Number)o);
- else return o.toString();
- }
- return object.toString();
- }
-
- public static Double asDoubleWhereEmptyStringIsZero(Object object){
- if(object instanceof Number)
- return ((Number)object).doubleValue();
- else if(object instanceof String) {
- try {
- if(((String)object).isEmpty())
- return 0.0;
- return Double.parseDouble((String)object);
- } catch (NumberFormatException e) {
- return null;
- }
- } else if(object instanceof Variant) {
- Object o = ((Variant) object).getValue();
- return asDoubleWhereEmptyStringIsZero(o);
- } else if (SpreadsheetCell.EMPTY == object) {
- return null;
- }
- return null;
- }
-
- public static double asNumber(Object object) {
- if(object instanceof Number) {
- return ((Number)object).doubleValue();
- } else if(object instanceof String) {
- try {
- String str = (String)object;
- if(str.isEmpty()) return 0;
- return Double.parseDouble((String)object);
- } catch (NumberFormatException e) {
- return 0;
- }
- } else if(object instanceof Variant) {
- Object o = ((Variant) object).getValue();
- return asNumber(o);
- } else if (SpreadsheetCell.EMPTY == object) {
- return 0.0;
- }
-
- return 0.0;
-
- }
-
- public static Number asValidNumber(Object object) {
- if(object instanceof Number) {
- return (Number)object;
- } else if(object instanceof String) {
- try {
- return Double.parseDouble((String)object);
- } catch (NumberFormatException e) {
- return null;
- }
- } else if(object instanceof Variant) {
- Object o = ((Variant) object).getValue();
- return asNumber(o);
- } else if (SpreadsheetCell.EMPTY == object) {
- return null;
- }
-
- return null;
-
- }
-
- public static boolean matchCriteria(Object value, Object criteria) {
- if(value==null || criteria==null) return false;
-
- if(value instanceof Variant){
- Double dVal = asDoubleWhereEmptyStringIsZero(value);
- if(dVal==null) value = ((Variant)value).getValue();
- else value = dVal;
- }
- if(criteria instanceof Variant){
- Double dVal = asDoubleWhereEmptyStringIsZero(criteria);
- if(dVal==null) criteria = ((Variant)criteria).getValue();
- else criteria = dVal;
- }
-
- if(criteria instanceof Number && value instanceof Number) {
- Number nc = (asNumber(criteria));
- Number nv = (asNumber(value));
- return nc.equals(nv);
- }
- if(criteria instanceof String){
- boolean nums = false;
- Object valueObj = null;
- if(value instanceof Number){
- valueObj = ((Number)value).doubleValue();
- nums = true;
- }
- else valueObj = value.toString();
-
- String sc = criteria.toString();
- if(sc.length() >= 3){
- String oper = sc.substring(0, 2);
- String criteriaStr = sc.substring(2);
- Double criteriaNum = null;
- try {
- criteriaNum = Double.parseDouble(criteriaStr);
- if(oper.equals("<>")){
- if(!nums) return true;
- }
- else if(!nums) return false;
- nums = true;
- } catch (NumberFormatException e){
- if(oper.equals("<>")){
- if(nums) return true;
- }
- else if(nums) return false;
- nums = false;
- }
-
- if(oper.equals(">=")){
- if(!nums) return (valueObj.toString().toLowerCase()).compareTo(criteriaStr.toLowerCase()) >= 0 ;
- else return ((Number)valueObj).doubleValue() >= criteriaNum;
- } else if(oper.equals("<=")){
- if(!nums) return (valueObj.toString().toLowerCase()).compareTo(criteriaStr.toLowerCase()) <= 0 ;
- else return ((Number)valueObj).doubleValue() <= criteriaNum;
- } else if(oper.equals("<>")){
- if(!nums) return (valueObj.toString().toLowerCase()).compareTo(criteriaStr.toLowerCase()) != 0 ;
- else return ((Number)valueObj).doubleValue() != criteriaNum;
- }
- }
- if(sc.length() >= 2){
- String oper = sc.substring(0, 1);
- String criteriaStr = sc.substring(1);
- Double criteriaNum = null;
-
- try {
- criteriaNum = Double.parseDouble(criteriaStr);
- if(!nums) return false;
- nums = true;
- } catch (NumberFormatException e){
- if(nums) return false;
- nums = false;
- }
- if(oper.equals("<")){
- if(!nums) return (valueObj.toString().toLowerCase()).compareTo(criteriaStr.toLowerCase()) < 0;
- else return ((Number)valueObj).doubleValue() < criteriaNum;
- } else if(oper.equals(">")){
- if(!nums) return (valueObj.toString().toLowerCase()).compareTo(criteriaStr.toLowerCase()) > 0;
- else return ((Number)valueObj).doubleValue() > criteriaNum;
- } else if(oper.equals("=")){
- if(!nums) return (valueObj.toString().toLowerCase()).compareTo(criteriaStr.toLowerCase()) == 0;
- else return ((Number)valueObj).doubleValue() == criteriaNum;
- }
- }
- return sc.equals(valueObj);
- }
- else if (criteria instanceof Number){
- return false;
- }
- throw new IllegalStateException();
- }
-
- public static boolean excelEquals(Object left, Object right) {
- if(left instanceof String) {
- if(right instanceof String) {
- return ((String) left).toLowerCase().equals(((String) right).toLowerCase());
- }
- }
- return left.equals(right);
- }
-