/* * Globus Toolkit Public License (GTPL) * * Copyright (c) 1999 University of Chicago and The University of * Southern California. All Rights Reserved. * * 1) The "Software", below, refers to the Globus Toolkit (in either * source-code, or binary form and accompanying documentation) and a * "work based on the Software" means a work based on either the * Software, on part of the Software, or on any derivative work of * the Software under copyright law: that is, a work containing all * or a portion of the Software either verbatim or with * modifications. Each licensee is addressed as "you" or "Licensee." * * 2) The University of Southern California and the University of * Chicago as Operator of Argonne National Laboratory are copyright * holders in the Software. The copyright holders and their third * party licensors hereby grant Licensee a royalty-free nonexclusive * license, subject to the limitations stated herein and * U.S. Government license rights. * * 3) A copy or copies of the Software may be given to others, if you * meet the following conditions: * * a) Copies in source code must include the copyright notice and * this license. * * b) Copies in binary form must include the copyright notice and * this license in the documentation and/or other materials * provided with the copy. * * 4) All advertising materials, journal articles and documentation * mentioning features derived from or use of the Software must * display the following acknowledgement: * * "This product includes software developed by and/or derived from * the Globus project (http://www.globus.org/)." * * In the event that the product being advertised includes an intact * Globus distribution (with copyright and license included) then * this clause is waived. * * 5) You are encouraged to package modifications to the Software * separately, as patches to the Software. * * 6) You may make modifications to the Software, however, if you * modify a copy or copies of the Software or any portion of it, * thus forming a work based on the Software, and give a copy or * copies of such work to others, either in source code or binary * form, you must meet the following conditions: * * a) The Software must carry prominent notices stating that you * changed specified portions of the Software. * * b) The Software must display the following acknowledgement: * * "This product includes software developed by and/or derived * from the Globus Project (http://www.globus.org/) to which the * U.S. Government retains certain rights." * * 7) You may incorporate the Software or a modified version of the * Software into a commercial product, if you meet the following * conditions: * * a) The commercial product or accompanying documentation must * display the following acknowledgment: * * "This product includes software developed by and/or derived * from the Globus Project (http://www.globus.org/) to which the * U.S. Government retains a paid-up, nonexclusive, irrevocable * worldwide license to reproduce, prepare derivative works, and * perform publicly and display publicly." * * b) The user of the commercial product must be given the following * notice: * * "[Commercial product] was prepared, in part, as an account of * work sponsored by an agency of the United States Government. * Neither the United States, nor the University of Chicago, nor * University of Southern California, nor any contributors to * the Globus Project or Globus Toolkit nor any of their employees, * makes any warranty express or implied, or assumes any legal * liability or responsibility for the accuracy, completeness, or * usefulness of any information, apparatus, product, or process * disclosed, or represents that its use would not infringe * privately owned rights. * * IN NO EVENT WILL THE UNITED STATES, THE UNIVERSITY OF CHICAGO * OR THE UNIVERSITY OF SOUTHERN CALIFORNIA OR ANY CONTRIBUTORS * TO THE GLOBUS PROJECT OR GLOBUS TOOLKIT BE LIABLE FOR ANY * DAMAGES, INCLUDING DIRECT, INCIDENTAL, SPECIAL, OR CONSEQUENTIAL * DAMAGES RESULTING FROM EXERCISE OF THIS LICENSE AGREEMENT OR * THE USE OF THE [COMMERCIAL PRODUCT]." * * 8) LICENSEE AGREES THAT THE EXPORT OF GOODS AND/OR TECHNICAL DATA * FROM THE UNITED STATES MAY REQUIRE SOME FORM OF EXPORT CONTROL * LICENSE FROM THE U.S. GOVERNMENT AND THAT FAILURE TO OBTAIN SUCH * EXPORT CONTROL LICENSE MAY RESULT IN CRIMINAL LIABILITY UNDER U.S. * LAWS. * * 9) Portions of the Software resulted from work developed under a * U.S. Government contract and are subject to the following license: * the Government is granted for itself and others acting on its * behalf a paid-up, nonexclusive, irrevocable worldwide license in * this computer software to reproduce, prepare derivative works, and * perform publicly and display publicly. * * 10) The Software was prepared, in part, as an account of work * sponsored by an agency of the United States Government. Neither * the United States, nor the University of Chicago, nor The * University of Southern California, nor any contributors to the * Globus Project or Globus Toolkit, nor any of their employees, * makes any warranty express or implied, or assumes any legal * liability or responsibility for the accuracy, completeness, or * usefulness of any information, apparatus, product, or process * disclosed, or represents that its use would not infringe privately * owned rights. * * 11) IN NO EVENT WILL THE UNITED STATES, THE UNIVERSITY OF CHICAGO OR * THE UNIVERSITY OF SOUTHERN CALIFORNIA OR ANY CONTRIBUTORS TO THE * GLOBUS PROJECT OR GLOBUS TOOLKIT BE LIABLE FOR ANY DAMAGES, * INCLUDING DIRECT, INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES * RESULTING FROM EXERCISE OF THIS LICENSE AGREEMENT OR THE USE OF * THE SOFTWARE. * * END OF LICENSE */ package org.griphyn.vdl.annotation; import java.util.*; /** * This class defines the node structure for the tree representation of * the query. * * @author Jens-S. Vöckler * @author Yong Zhao * @version $Revision$ */ public class QueryTree { /** * Stores a predicate, as the data element of the tree node */ private Predicate m_predicate = null; /** * Stores the left child */ private QueryTree m_lchild = null; /** * Stores the right child */ private QueryTree m_rchild = null; /** * Constructor */ public QueryTree() { } /** * Constructor */ public QueryTree(Predicate predicate) { m_predicate = predicate; } /** * Get the data element */ public Predicate getData() { return m_predicate; } /** * Set the data element */ public void setData(Predicate predicate) { m_predicate = predicate; } /** * Get the data element */ public int getPredicate() { if (m_predicate != null) return m_predicate.getPredicate(); else return -1; } /** * Add a child */ public void addChild(QueryTree node) { if (m_lchild == null) m_lchild = node; else m_rchild = node; } /** * Get the left child */ public QueryTree getLchild() { return m_lchild; } /** * Set the left child */ public void setLchild(QueryTree node) { m_lchild = node; } /** * Get the right child */ public QueryTree getRchild() { return m_rchild; } /** * Set the right child */ public void setRchild(QueryTree node) { m_rchild = node; } public void traversal() { traversal(this); } public void traversal(QueryTree root) { if (root != null) { QueryTree lchild = root.getLchild(); if (lchild != null) { QueryTree llchild = lchild.getLchild(); if (llchild != null) { System.out.print("("); } traversal(lchild); if (llchild != null) { System.out.print(")"); } } if (root.getData() != null) { System.out.print(" " + root.getData().toString() + " "); } QueryTree rchild = root.getRchild(); if (rchild != null) { QueryTree rrchild = rchild.getRchild(); if (rrchild != null) { System.out.print("("); } traversal(rchild); if (rrchild != null) { System.out.print(")"); } } } } public String toSQL(int annoClass, Object arg) { return toSQL(this, annoClass, arg) + ";"; } public String toSQL(QueryTree root, int annoClass, Object arg) { StringBuffer sb = new StringBuffer(); if (root != null) { QueryTree lchild = root.getLchild(); if (lchild != null) { QueryTree llchild = lchild.getLchild(); if (llchild != null) { sb.append("("); } sb.append(toSQL(lchild, annoClass, arg)); if (llchild != null) { sb.append(")"); } } if (root.getData() != null) { sb.append(root.getData().toSQL(annoClass, arg)); } QueryTree rchild = root.getRchild(); if (rchild != null) { QueryTree rrchild = rchild.getRchild(); if (rrchild != null || root.getPredicate() == Predicate.NOT) { sb.append("("); } sb.append(toSQL(rchild, annoClass, arg)); if (rrchild != null || root.getPredicate() == Predicate.NOT) { sb.append(")"); } } } return sb.toString(); } public String toXQuery(String var) { return toXQuery(this, var); } public String toXQuery(QueryTree root, String var) { StringBuffer sb = new StringBuffer(); if (root != null) { QueryTree lchild = root.getLchild(); if (lchild != null) { QueryTree llchild = lchild.getLchild(); if (llchild != null) { sb.append("("); } sb.append(toXQuery(lchild, var)); if (llchild != null) { sb.append(")"); } } if (root.getData() != null) { sb.append(root.getData().toXQuery(var)); } QueryTree rchild = root.getRchild(); if (rchild != null) { QueryTree rrchild = rchild.getRchild(); if (rrchild != null || root.getPredicate() == Predicate.NOT) { sb.append("("); } sb.append(toXQuery(rchild, var)); if (rrchild != null || root.getPredicate() == Predicate.NOT) { sb.append(")"); } } } return sb.toString(); } }