001 /* 002 // $Id: //open/util/resgen/src/org/eigenbase/xom/TextDef.java#4 $ 003 // Package org.eigenbase.xom is an XML Object Mapper. 004 // Copyright (C) 2005-2008 The Eigenbase Project 005 // Copyright (C) 2005-2008 Disruptive Tech 006 // Copyright (C) 2005-2008 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, 5 October, 2001 024 */ 025 026 package org.eigenbase.xom; 027 import java.io.PrintWriter; 028 029 /** 030 * A <code>TextDef</code> represents piece of textual data in an XML document. 031 * Free text (such as <code>Some text</code>) is represented by an actual 032 * <code>TextDef</code>; comments (such as <code><-- a comment --></code>) 033 * by derived class {@link CommentDef}; and CDATA sections (such as 034 * <code><![CDATA[Some text]]></code>) by derived class {@link CdataDef}. 035 * 036 * @author jhyde 037 * @since 5 October, 2001 038 * @version $Id: //open/util/resgen/src/org/eigenbase/xom/TextDef.java#4 $ 039 **/ 040 public class TextDef implements NodeDef { 041 042 public String s; 043 044 /** 045 * Whether to print the data as is -- never quote as a CDATA 046 * section. Useful if the fragment contains a valid XML string. 047 **/ 048 boolean asIs; 049 050 private Location location; 051 052 public TextDef() 053 { 054 this(null, false, null); 055 } 056 057 public TextDef(String s) 058 { 059 this(s, false, null); 060 } 061 062 public TextDef(String s, boolean asIs) 063 { 064 this(s, asIs, null); 065 } 066 067 public TextDef(String s, boolean asIs, Location location) 068 { 069 this.s = s; 070 this.asIs = asIs; 071 this.location = location; 072 } 073 074 public TextDef(org.eigenbase.xom.DOMWrapper _def) 075 throws org.eigenbase.xom.XOMException 076 { 077 switch (_def.getType()) { 078 case DOMWrapper.FREETEXT: 079 case DOMWrapper.CDATA: 080 case DOMWrapper.COMMENT: 081 break; 082 default: 083 throw new XOMException( 084 "cannot make CDATA/PCDATA element from a " + _def.getType()); 085 } 086 this.s = _def.getText(); 087 this.location = _def.getLocation(); 088 } 089 090 // override ElementDef 091 public String getName() 092 { 093 return null; 094 } 095 096 // override ElementDef 097 public String getText() 098 { 099 return s; 100 } 101 102 // implement NodeDef 103 public NodeDef[] getChildren() 104 { 105 return XOMUtil.emptyNodeArray; 106 } 107 108 // implement NodeDef 109 public DOMWrapper getWrapper() 110 { 111 return null; 112 } 113 114 // implement NodeDef 115 public int getType() 116 { 117 return DOMWrapper.FREETEXT; 118 } 119 120 // implement NodeDef 121 public void display(PrintWriter pw, int indent) 122 { 123 pw.print(s); 124 } 125 126 // override NodeDef 127 public void displayXML(XMLOutput out, int indent) 128 { 129 if (out.getIgnorePcdata()) { 130 return; 131 } 132 out.beginNode(); 133 if (asIs) { 134 out.print(s); 135 } else { 136 boolean quote = true; 137 out.cdata(s, quote); 138 } 139 } 140 141 // implement NodeDef 142 public Location getLocation() 143 { 144 return location; 145 } 146 } 147 148 // End TextDef.java