1 19 20 package edu.umd.cs.findbugs.xml; 21 22 import java.util.Iterator ; 23 import java.util.LinkedList ; 24 import java.util.List ; 25 26 import edu.umd.cs.findbugs.annotations.NonNull; 27 28 33 public class XMLAttributeList { 34 public static class NameValuePair { 35 private String name; 36 private String value; 37 38 public NameValuePair(String name, String value) { 39 this.name = name; 40 this.value = value; 41 } 42 43 public String getName() { 44 return name; 45 } 46 47 public String getValue() { 48 return value; 49 } 50 } 51 52 private static class StringBufferQuoteMetaCharacters extends QuoteMetaCharacters { 53 private StringBuffer buf; 54 55 public StringBufferQuoteMetaCharacters(String text, MetaCharacterMap map, 56 StringBuffer buf) { 57 super(text, map); 58 this.buf = buf; 59 } 60 61 @Override 62 public void process() { 63 try { 64 super.process(); 65 } catch (java.io.IOException e) { 66 } 68 } 69 70 @Override 71 public void emitLiteral(String s) { 72 buf.append(s); 73 } 74 } 75 76 private static final MetaCharacterMap attrMetaCharacterMap = new MetaCharacterMap(); 80 static { 81 attrMetaCharacterMap.addMeta('<', "<"); 82 attrMetaCharacterMap.addMeta('>', ">"); 83 attrMetaCharacterMap.addMeta('&', "&"); 84 attrMetaCharacterMap.addMeta('"', """); 85 } 86 87 private List <NameValuePair> nameValuePairList; 89 90 94 public XMLAttributeList() { 95 this.nameValuePairList = new LinkedList <NameValuePair>(); 96 } 97 98 105 public XMLAttributeList addAttribute(@NonNull String name, @NonNull String value) { 106 if (name == null) throw new NullPointerException ("name must be nonnull"); 107 if (value == null) throw new NullPointerException ("value must be nonnull"); 108 nameValuePairList.add(new NameValuePair(name, value)); 109 return this; 110 } 111 112 116 @Override 117 public String toString() { 118 StringBuffer buf = new StringBuffer (); 119 for (NameValuePair pair : nameValuePairList) { 120 buf.append(' '); 121 buf.append(pair.getName()); 122 buf.append('='); 123 buf.append(getQuotedAttributeValue(pair.getValue())); 124 } 125 return buf.toString(); 126 } 127 128 131 public Iterator <NameValuePair> iterator() { 132 return nameValuePairList.iterator(); 133 } 134 135 140 public static String getQuotedAttributeValue(@NonNull String rawValue) { 141 if (rawValue == null) throw new NullPointerException ("rawValue must be nonnull"); 142 StringBuffer buf = new StringBuffer (); 143 buf.append('"'); 144 new StringBufferQuoteMetaCharacters(rawValue, attrMetaCharacterMap, buf).process(); 145 buf.append('"'); 146 return buf.toString(); 147 } 148 } 149 150 | Popular Tags |