1 16 package org.apache.commons.jxpath.ri; 17 18 import org.apache.commons.jxpath.Pointer; 19 import org.apache.commons.jxpath.ri.model.NodePointer; 20 import org.apache.commons.jxpath.ri.model.VariablePointer; 21 22 28 public class InfoSetUtil { 29 30 private static final Double ZERO = new Double (0); 31 private static final Double ONE = new Double (1); 32 private static final Double NOT_A_NUMBER = new Double (Double.NaN); 33 34 35 38 public static String stringValue(Object object) { 39 if (object instanceof String ) { 40 return (String ) object; 41 } 42 else if (object instanceof Number ) { 43 double d = ((Number ) object).doubleValue(); 44 long l = ((Number ) object).longValue(); 45 if (d == l) { 46 return String.valueOf(l); 47 } 48 return String.valueOf(d); 49 } 50 else if (object instanceof Boolean ) { 51 return ((Boolean ) object).booleanValue() ? "true" : "false"; 52 } 53 else if (object == null) { 54 return ""; 55 } 56 else if (object instanceof NodePointer) { 57 return stringValue(((NodePointer) object).getValue()); 58 } 59 else if (object instanceof EvalContext) { 60 EvalContext ctx = (EvalContext) object; 61 Pointer ptr = ctx.getSingleNodePointer(); 62 if (ptr != null) { 63 return stringValue(ptr); 64 } 65 return ""; 66 } 67 return String.valueOf(object); 68 } 69 70 73 public static Number number(Object object) { 74 if (object instanceof Number ) { 75 return (Number ) object; 76 } 77 else if (object instanceof Boolean ) { 78 return ((Boolean ) object).booleanValue() ? ONE : ZERO; 79 } 80 else if (object instanceof String ) { 81 Double value; 82 try { 83 value = new Double ((String ) object); 84 } 85 catch (NumberFormatException ex) { 86 value = NOT_A_NUMBER; 87 } 88 return value; 89 } 90 else if (object instanceof EvalContext) { 91 EvalContext ctx = (EvalContext) object; 92 Pointer ptr = ctx.getSingleNodePointer(); 93 if (ptr != null) { 94 return number(ptr); 95 } 96 return NOT_A_NUMBER; 97 } 98 else if (object instanceof NodePointer) { 99 return number(((NodePointer) object).getValue()); 100 } 101 return number(stringValue(object)); 102 } 103 104 107 public static double doubleValue(Object object) { 108 if (object instanceof Number ) { 109 return ((Number ) object).doubleValue(); 110 } 111 else if (object instanceof Boolean ) { 112 return ((Boolean ) object).booleanValue() ? 0.0 : 1.0; 113 } 114 else if (object instanceof String ) { 115 if (object.equals("")) { 116 return 0.0; 117 } 118 119 double value; 120 try { 121 value = Double.parseDouble((String ) object); 122 } 123 catch (NumberFormatException ex) { 124 value = Double.NaN; 125 } 126 return value; 127 } 128 else if (object instanceof NodePointer) { 129 return doubleValue(((NodePointer) object).getValue()); 130 } 131 else if (object instanceof EvalContext) { 132 EvalContext ctx = (EvalContext) object; 133 Pointer ptr = ctx.getSingleNodePointer(); 134 if (ptr != null) { 135 return doubleValue(ptr); 136 } 137 return Double.NaN; 138 } 139 return doubleValue(stringValue(object)); 140 } 141 142 145 public static boolean booleanValue(Object object) { 146 if (object instanceof Number ) { 147 double value = ((Number ) object).doubleValue(); 148 return value != 0 && value != -0 && !Double.isNaN(value); 149 } 150 else if (object instanceof Boolean ) { 151 return ((Boolean ) object).booleanValue(); 152 } 153 else if (object instanceof EvalContext) { 154 EvalContext ctx = (EvalContext) object; 155 Pointer ptr = ctx.getSingleNodePointer(); 156 if (ptr == null) { 157 return false; 158 } 159 return booleanValue(ptr); 160 } 161 else if (object instanceof String ) { 162 return ((String ) object).length() != 0; 163 } 164 else if (object instanceof NodePointer) { 165 NodePointer pointer = (NodePointer) object; 166 if (pointer instanceof VariablePointer) { 167 return booleanValue(pointer.getNode()); 168 } 169 pointer = pointer.getValuePointer(); 170 return pointer.isActual(); 171 } 172 else if (object == null) { 173 return false; 174 } 175 return true; 176 } 177 } | Popular Tags |