|
What this is
Other links
The source code
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.jxpath.ri;
import org.apache.commons.jxpath.Pointer;
import org.apache.commons.jxpath.ri.model.NodePointer;
import org.apache.commons.jxpath.ri.model.VariablePointer;
/**
* Type conversions, XPath style.
*
* @author Dmitri Plotnikov
* @version $Revision: 1.11 $ $Date: 2004/07/16 22:49:33 $
*/
public class InfoSetUtil {
private static final Double ZERO = new Double(0);
private static final Double ONE = new Double(1);
private static final Double NOT_A_NUMBER = new Double(Double.NaN);
/**
* Converts the supplied object to String
*/
public static String stringValue(Object object) {
if (object instanceof String) {
return (String) object;
}
else if (object instanceof Number) {
double d = ((Number) object).doubleValue();
long l = ((Number) object).longValue();
if (d == l) {
return String.valueOf(l);
}
return String.valueOf(d);
}
else if (object instanceof Boolean) {
return ((Boolean) object).booleanValue() ? "true" : "false";
}
else if (object == null) {
return "";
}
else if (object instanceof NodePointer) {
return stringValue(((NodePointer) object).getValue());
}
else if (object instanceof EvalContext) {
EvalContext ctx = (EvalContext) object;
Pointer ptr = ctx.getSingleNodePointer();
if (ptr != null) {
return stringValue(ptr);
}
return "";
}
return String.valueOf(object);
}
/**
* Converts the supplied object to Number
*/
public static Number number(Object object) {
if (object instanceof Number) {
return (Number) object;
}
else if (object instanceof Boolean) {
return ((Boolean) object).booleanValue() ? ONE : ZERO;
}
else if (object instanceof String) {
Double value;
try {
value = new Double((String) object);
}
catch (NumberFormatException ex) {
value = NOT_A_NUMBER;
}
return value;
}
else if (object instanceof EvalContext) {
EvalContext ctx = (EvalContext) object;
Pointer ptr = ctx.getSingleNodePointer();
if (ptr != null) {
return number(ptr);
}
return NOT_A_NUMBER;
}
else if (object instanceof NodePointer) {
return number(((NodePointer) object).getValue());
}
return number(stringValue(object));
}
/**
* Converts the supplied object to double
*/
public static double doubleValue(Object object) {
if (object instanceof Number) {
return ((Number) object).doubleValue();
}
else if (object instanceof Boolean) {
return ((Boolean) object).booleanValue() ? 0.0 : 1.0;
}
else if (object instanceof String) {
if (object.equals("")) {
return 0.0;
}
double value;
try {
value = Double.parseDouble((String) object);
}
catch (NumberFormatException ex) {
value = Double.NaN;
}
return value;
}
else if (object instanceof NodePointer) {
return doubleValue(((NodePointer) object).getValue());
}
else if (object instanceof EvalContext) {
EvalContext ctx = (EvalContext) object;
Pointer ptr = ctx.getSingleNodePointer();
if (ptr != null) {
return doubleValue(ptr);
}
return Double.NaN;
}
return doubleValue(stringValue(object));
}
/**
* Converts the supplied object to boolean
*/
public static boolean booleanValue(Object object) {
if (object instanceof Number) {
double value = ((Number) object).doubleValue();
return value != 0 && value != -0 && !Double.isNaN(value);
}
else if (object instanceof Boolean) {
return ((Boolean) object).booleanValue();
}
else if (object instanceof EvalContext) {
EvalContext ctx = (EvalContext) object;
Pointer ptr = ctx.getSingleNodePointer();
if (ptr == null) {
return false;
}
return booleanValue(ptr);
}
else if (object instanceof String) {
return ((String) object).length() != 0;
}
else if (object instanceof NodePointer) {
NodePointer pointer = (NodePointer) object;
if (pointer instanceof VariablePointer) {
return booleanValue(pointer.getNode());
}
pointer = pointer.getValuePointer();
return pointer.isActual();
}
else if (object == null) {
return false;
}
return true;
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.