001 /* 002 // $Id: //open/util/resgen/src/org/eigenbase/xom/WrapperElementDef.java#3 $ 003 // Package org.eigenbase.xom is an XML Object Mapper. 004 // Copyright (C) 2005-2005 The Eigenbase Project 005 // Copyright (C) 2005-2005 Disruptive Tech 006 // Copyright (C) 2005-2005 LucidEra, Inc. 007 // Portions Copyright (C) 2001-2005 Kana Software, Inc. and others. 008 // 009 // This library is free software; you can redistribute it and/or modify it 010 // under the terms of the GNU Lesser General Public License as published by the 011 // Free Software Foundation; either version 2 of the License, or (at your 012 // option) any later version approved by The Eigenbase Project. 013 // 014 // This library is distributed in the hope that it will be useful, 015 // but WITHOUT ANY WARRANTY; without even the implied warranty of 016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 017 // GNU Lesser General Public License for more details. 018 // 019 // You should have received a copy of the GNU Lesser General Public License 020 // along with this library; if not, write to the Free Software 021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 022 // 023 // jhyde, 31 October, 2001 024 */ 025 026 package org.eigenbase.xom; 027 import java.io.PrintWriter; 028 029 /** 030 * <code>WrapperElementDef</code> is an {@link ElementDef} which retains the 031 * underlying XML {@link DOMWrapper}. It is used when there is no specific 032 * class for this tag. 033 * 034 * @author jhyde 035 * @since 31 October, 2001 036 * @version $Id: //open/util/resgen/src/org/eigenbase/xom/WrapperElementDef.java#3 $ 037 **/ 038 public class WrapperElementDef extends ElementDef 039 { 040 DOMWrapper _def; 041 Class enclosure; 042 String prefix; 043 044 public WrapperElementDef( 045 DOMWrapper def, Class enclosure, String prefix) 046 { 047 this._def = def; 048 this.enclosure = enclosure; 049 this.prefix = prefix; 050 } 051 052 // implement NodeDef 053 public void display(PrintWriter out, int indent) 054 { 055 out.print("<"); 056 out.print(_def.getTagName()); 057 String[] attributeKeys = _def.getAttributeNames(); 058 for (int i = 0; i < attributeKeys.length; i++) { 059 String key = attributeKeys[i]; 060 Object value = _def.getAttribute(key); 061 XOMUtil.printAtt(out, key, value.toString()); 062 } 063 NodeDef[] children = getChildren(); 064 if (children.length == 0) { 065 out.print("/>"); 066 } else { 067 for (int i = 0, count = children.length; i < count; i++) { 068 children[i].display(out, indent + 1); 069 } 070 out.print("</"); 071 out.print(_def.getTagName()); 072 out.print(">"); 073 } 074 } 075 076 // implement NodeDef 077 public void displayXML(XMLOutput out, int indent) 078 { 079 out.beginNode(); 080 String tagName = _def.getTagName(); 081 out.beginBeginTag(tagName); 082 String[] attributeKeys = _def.getAttributeNames(); 083 for (int i = 0; i < attributeKeys.length; i++) { 084 String key = attributeKeys[i]; 085 Object value = _def.getAttribute(key); 086 out.attribute(key, value.toString()); 087 } 088 out.endBeginTag(tagName); 089 NodeDef[] children = getChildren(); 090 for (int i = 0, count = children.length; i < count; i++) { 091 NodeDef child = children[i]; 092 child.displayXML(out, indent + 1); 093 } 094 out.endTag(tagName); 095 } 096 097 // implement NodeDef 098 public int getType() 099 { 100 return DOMWrapper.ELEMENT; 101 } 102 103 // implement NodeDef 104 public String getName() 105 { 106 return _def.getTagName(); 107 } 108 109 // implement NodeDef 110 public NodeDef[] getChildren() 111 { 112 try { 113 DOMWrapper[] children = _def.getChildren(); 114 NodeDef[] a = new NodeDef[children.length]; 115 for (int i = 0; i < a.length; i++) { 116 a[i] = ElementDef.constructElement( 117 children[i], enclosure, prefix); 118 } 119 return a; 120 } catch (XOMException e) { 121 throw new AssertFailure(e, "in WrapperElementDef.getChildren"); 122 } 123 } 124 125 // implement NodeDef 126 public DOMWrapper getWrapper() 127 { 128 return _def; 129 } 130 } 131 132 // End WrapperElementDef.java