1 32 33 package websphinx; 34 35 import java.net.URL ; 36 import java.net.MalformedURLException ; 37 import java.net.URLEncoder ; 38 39 42 public class Form extends Link { 43 44 51 public Form (Tag startTag, Tag endTag, URL base) throws MalformedURLException { 52 super (startTag, endTag, base); 53 } 54 55 61 protected URL urlFromHref (Tag tag, URL base) throws MalformedURLException { 62 String href = tag.getHTMLAttribute ("action"); 63 if (href == null) 64 return base; 66 return new URL (base, href); 67 } 68 69 73 public int getMethod () { 74 return getHTMLAttribute ("method", "GET").equalsIgnoreCase ("post") 75 ? POST : GET; 76 } 77 78 82 public URL makeQuery () { 83 return makeQuery (null); 84 } 85 86 91 public URL makeQuery (FormButton button) { 92 StringBuffer querybuf = new StringBuffer (); 93 makeQuery (getChild (), querybuf); 94 95 if (button != null) { 96 String type = button.getHTMLAttribute ("type", ""); 97 String name = button.getHTMLAttribute ("name", ""); 98 String value = button.getHTMLAttribute ("value", ""); 99 100 if (type.equalsIgnoreCase ("submit")) { 101 passArgument (querybuf, name, value); 102 } 103 else if (type.equalsIgnoreCase ("image")) { 104 passArgument (querybuf, name+".x", "0"); 106 passArgument (querybuf, name+".y", "0"); 107 } 108 } 109 110 String href = getURL().toExternalForm () + "?"; 111 if (querybuf.length() > 0) 112 href += querybuf.toString().substring (1); 114 try { 115 return new URL (href); 116 } catch (MalformedURLException e) { 117 throw new RuntimeException ("internal error: " + e); 118 } 119 } 120 121 private void makeQuery (Element elem, StringBuffer query) { 124 for (Element e = elem; e != null; e = e.getSibling ()) { 125 String tagName = e.getTagName (); 126 if (tagName == Tag.INPUT) { 127 String type = e.getHTMLAttribute ("type", "text").toLowerCase (); 128 129 if ( type.equals ("text") 131 || type.equals ("password") 132 || type.equals ("hidden") 133 134 || ((type.equals ("checkbox") || type.equals ("radio")) 136 && e.hasHTMLAttribute ("checked"))) { 137 passArgument (query, 138 e.getHTMLAttribute ("name", ""), 139 e.getHTMLAttribute ("value", "")); 140 } 141 } 142 else if (tagName == Tag.SELECT) { 143 String name = e.getHTMLAttribute ("name", ""); 144 for (Element opt = e.getChild(); opt != null; opt = opt.getSibling()) { 145 if (opt.getTagName() == Tag.OPTION 146 && opt.hasHTMLAttribute ("selected")) { 147 passArgument (query, name, opt.getHTMLAttribute ("value", "")); 148 } 149 } 150 } 151 else if (tagName == Tag.TEXTAREA) { 152 passArgument (query, e.getHTMLAttribute ("name", ""), e.toText ()); 153 } 154 else { 155 makeQuery (e.getChild (), query); 156 } 157 } 158 } 159 160 private void passArgument (StringBuffer query, String name, String value) { 161 query.append ('&'); 162 query.append (URLEncoder.encode(name)); query.append ('='); 164 query.append (URLEncoder.encode(value)); 165 } 166 } 167 168 | Popular Tags |