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