14c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/* 24c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 34c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * or more contributor license agreements. See the NOTICE file 44c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed with this work for additional information 54c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * regarding copyright ownership. The ASF licenses this file 64c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 74c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * you may not use this file except in compliance with the License. 84c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * You may obtain a copy of the License at 94c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Unless required by applicable law or agreed to in writing, software 134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * See the License for the specific language governing permissions and 164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * limitations under the License. 174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/* 194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * $Id: XBoolean.java 469368 2006-10-31 04:41:36Z minchau $ 204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpackage org.apache.xpath.objects; 224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * This class represents an XPath boolean object, and is capable of 254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * converting the boolean to other types, such as a string. 264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @xsl.usage advanced 274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpublic class XBoolean extends XObject 294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson static final long serialVersionUID = -2964933058866100881L; 314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * A true boolean object so we don't have to keep creating them. 344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @xsl.usage internal 354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public static final XBoolean S_TRUE = new XBooleanStatic(true); 374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * A true boolean object so we don't have to keep creating them. 404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @xsl.usage internal 414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public static final XBoolean S_FALSE = new XBooleanStatic(false); 434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** Value of the object. 454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @serial */ 464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson private final boolean m_val; 474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Construct a XBoolean object. 504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param b Value of the boolean object 524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XBoolean(boolean b) 544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson super(); 574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_val = b; 594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Construct a XBoolean object. 634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param b Value of the boolean object 654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public XBoolean(Boolean b) 674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson super(); 704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson m_val = b.booleanValue(); 724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setObject(b); 734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell that this is a CLASS_BOOLEAN. 784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return type of CLASS_BOOLEAN 804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public int getType() 824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return CLASS_BOOLEAN; 844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Given a request type, return the equivalent string. 884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * For diagnostic purposes. 894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return type string "#BOOLEAN" 914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public String getTypeString() 934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return "#BOOLEAN"; 954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a number. 994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return numeric value of the object value 1014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public double num() 1034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return m_val ? 1.0 : 0.0; 1054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a boolean. 1094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The object value as a boolean 1114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean bool() 1134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return m_val; 1154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Cast result object to a string. 1194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The object's value as a string 1214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public String str() 1234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return m_val ? "true" : "false"; 1254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Return a java object that's closest to the representation 1294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * that should be handed to an extension. 1304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The object's value as a java object 1324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object object() 1344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if(null == m_obj) 1364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson setObject(new Boolean(m_val)); 1374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return m_obj; 1384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Tell if two objects are functionally equal. 1424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param obj2 Object to compare to this 1444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return True if the two objects are equal 1464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @throws javax.xml.transform.TransformerException 1484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean equals(XObject obj2) 1504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // In order to handle the 'all' semantics of 1534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // nodeset comparisons, we always call the 1544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // nodeset function. 1554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (obj2.getType() == XObject.CLASS_NODESET) 1564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return obj2.equals(this); 1574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson try 1594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return m_val == obj2.bool(); 1614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson catch(javax.xml.transform.TransformerException te) 1634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throw new org.apache.xml.utils.WrappedRuntimeException(te); 1654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 169