001 //$$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/io/datastore/sql/wherebuilder/FeaturePropertyNode.java $$ 002 /*---------------- FILE HEADER ------------------------------------------ 003 This file is part of deegree. 004 Copyright (C) 2001-2006 by: 005 Department of Geography, University of Bonn 006 http://www.giub.uni-bonn.de/deegree/ 007 lat/lon GmbH 008 http://www.lat-lon.de 009 010 This library is free software; you can redistribute it and/or 011 modify it under the terms of the GNU Lesser General Public 012 License as published by the Free Software Foundation; either 013 version 2.1 of the License, or (at your option) any later version. 014 015 This library is distributed in the hope that it will be useful, 016 but WITHOUT ANY WARRANTY; without even the implied warranty of 017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 018 Lesser General Public License for more details. 019 020 You should have received a copy of the GNU Lesser General Public 021 License along with this library; if not, write to the Free Software 022 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 023 024 Contact: 025 026 Andreas Poth 027 lat/lon GmbH 028 Aennchenstraße 19 029 53177 Bonn 030 Germany 031 E-Mail: poth@lat-lon.de 032 033 Jens Fitzke 034 lat/lon GmbH 035 Aennchenstraße 19 036 53177 Bonn 037 Germany 038 E-Mail: jens.fitzke@uni-bonn.de 039 ---------------------------------------------------------------------------*/ 040 041 package org.deegree.io.datastore.sql.wherebuilder; 042 043 import java.util.ArrayList; 044 import java.util.Collection; 045 import java.util.Iterator; 046 047 import org.deegree.io.datastore.schema.MappedFeaturePropertyType; 048 049 /** 050 * Represents a {@link MappedFeaturePropertyType} as a node in a {@link QueryTableTree}. 051 * 052 * @author <a href="mailto:schneider@lat-lon.de">Markus Schneider </a> 053 * @author last edited by: $Author: mschneider $ 054 * 055 * @version $Revision: 7106 $, $Date: 2007-05-14 13:26:27 +0200 (Mo, 14 Mai 2007) $ 056 */ 057 class FeaturePropertyNode extends AbstractPropertyNode { 058 059 private Collection<FeatureTypeNode> children = new ArrayList<FeatureTypeNode> (); 060 061 /** 062 * Creates a new <code>FeaturePropertyNode</code> instance from the given parameters. 063 * 064 * @param property 065 * the PropertyType that this FeaturePropertyNode represents 066 * @param parent 067 * @param tableAliases 068 * the aliases for the tables that lead from the parent feature type node's table to 069 * the table where the property's value is stored 070 */ 071 FeaturePropertyNode( MappedFeaturePropertyType property, FeatureTypeNode parent, 072 String[] tableAliases ) { 073 super( property, parent, tableAliases ); 074 } 075 076 /** 077 * Returns the children of this <code>FeaturePropertyNode</code>. 078 * 079 * @return the children of this FeaturePropertyNode. 080 */ 081 public FeatureTypeNode[] getFeatureTypeNodes() { 082 return this.children.toArray( new FeatureTypeNode[this.children.size()] ); 083 } 084 085 086 /** 087 * Adds a new child to this <code>FeaturePropertyNode</code>. 088 * 089 * @param newFeatureTypeNode child node to add 090 */ 091 public void addFeatureTypeNode( FeatureTypeNode newFeatureTypeNode ) { 092 this.children.add(newFeatureTypeNode); 093 } 094 095 @Override 096 public String toString( String indent ) { 097 098 StringBuffer sb = new StringBuffer(); 099 sb.append( indent ); 100 sb.append( "+ " ); 101 sb.append( this.getProperty().getName() ); 102 sb.append( " (FeaturePropertyNode" ); 103 if ( this.getTableAliases() != null ) { 104 for (int i = 0; i < this.getTableAliases().length; i++) { 105 sb.append( " [" ); 106 sb.append( getPathFromParent()[i] ); 107 sb.append( " target alias: '" ); 108 sb.append( getTableAliases()[i] ); 109 sb.append( "'" ); 110 if ( i != this.getTableAliases().length - 1 ) { 111 sb.append( ", " ); 112 } else { 113 sb.append( "]" ); 114 } 115 } 116 } 117 sb.append( ")\n" ); 118 Iterator iter = this.children.iterator (); 119 while (iter.hasNext()) { 120 FeatureTypeNode child = (FeatureTypeNode) iter.next (); 121 sb.append( child.toString( indent + " " ) ); 122 } 123 return sb.toString(); 124 } 125 }