1 10 package org.mmbase.util; 11 12 import java.util.Enumeration ; 13 import java.util.StringTokenizer ; 14 import java.util.Vector ; 15 16 import org.mmbase.module.ProcessorInterface; 17 import org.mmbase.util.logging.Logger; 18 import org.mmbase.util.logging.Logging; 19 20 32 public abstract class HTMLElement { 33 private static Logger log = Logging.getLoggerInstance(HTMLElement.class.getName()); 35 36 39 protected ProcessorInterface processor = null; 40 41 44 protected String name = null; 45 46 50 protected String values = null; 51 52 55 protected Vector valuesList = null; 56 57 60 protected String size = null; 61 62 65 protected String selected = null; 66 67 70 protected String rows = null; 71 72 75 protected String cols = null; 76 77 80 protected int max = -1; 81 82 85 protected String sorted = null; 86 87 90 protected String exclude = null; 91 92 95 protected boolean ex = false; 96 97 100 101 protected boolean multiple = false; 102 105 protected boolean moreValues = false; 106 107 110 protected boolean moredouble = false; 111 112 115 protected boolean sel = false; 116 117 120 protected boolean vertical = false; 121 122 125 protected boolean horizontal = false; 126 127 131 protected boolean empty = false; 132 133 137 protected boolean proc = false; 138 139 144 protected boolean procdouble = false; 145 146 149 protected String user =null; 150 151 154 protected scanpage sp=null; 156 157 160 public HTMLElement() { 161 } 162 163 166 protected String generateHTML(scanpage sp,ProcessorInterface proc, Vector macro) { 167 log.debug("generateHTML"); 168 processor=proc; 169 this.sp = sp; 171 log.debug("marco: " + macro); 172 boolean ok = parse(macro); 173 if (!ok) return ""; 175 return generate(); 176 } 177 180 protected abstract String generate(); 181 182 185 protected boolean parse (Vector macro) { 186 name = null; 187 values = null; 188 size = null; 189 selected = null; 190 rows = null; 191 cols = null; 192 exclude = null; 193 sorted = null; 194 max=-1; 195 196 ex = false; 197 multiple = false; 198 sel = false; 199 moreValues = false; 200 moredouble = false; 201 horizontal = false; 202 vertical = false; 203 empty = false; 204 proc = false; 205 procdouble = false; 206 207 Enumeration e = macro.elements(); 208 if (e.hasMoreElements()) { 209 name = (String ) e.nextElement(); 210 } else { 211 log.error("HTMLElement: to few params, no name !!!"); 212 return false; 213 } 214 215 if (e.hasMoreElements()) { 216 values = (String ) e.nextElement(); 217 if (this instanceof HTMLElementText) { 218 if (values.indexOf("\"")==0) { 220 values= values.substring(1,values.length()-1); 221 } 222 } 223 } else if (!(this instanceof HTMLElementText || 224 this instanceof HTMLElementPassword)) { 225 log.error("HTMLElement: to few params, no value !!!"); 226 return false; 227 } 228 229 while (e.hasMoreElements()) { 230 String str = (String ) e.nextElement(); 231 232 String type = getType(str); 233 if (type == null) { 234 return false; 235 } 236 String value ; 237 value = getValue(str); 238 if ((type.equalsIgnoreCase("MULTIPLE") && value == null) || 239 (type.equalsIgnoreCase("CHECKED") && value == null) || 240 (type.equalsIgnoreCase("MAX") && value == null) || 241 (type.equalsIgnoreCase("SELECTED") && value == null) || 242 (type.equalsIgnoreCase("VERTICAL") && value == null) || 243 (type.equalsIgnoreCase("EMPTY") && value == null) || 244 (type.equalsIgnoreCase("PROC") && value == null) || 245 (type.equalsIgnoreCase("DOUBLE") && value == null) || 246 (type.equalsIgnoreCase("SORTED") && value == null) || 247 (type.equalsIgnoreCase("HORIZONTAL") && value == null)) { 248 value = "whatever"; 249 } 250 251 if (type != null && value != null ) { 252 if (type.equalsIgnoreCase("SIZE")) { 253 size = value; 254 } else if ((type.equalsIgnoreCase("CHECKED")) || (type.equalsIgnoreCase("SELECTED"))) { 255 selected = value; 256 if (selected.charAt(0)== '\"') { 257 selected = selected.substring(1,selected.length()-1); 258 } 259 sel = true; 260 } else if (type.equalsIgnoreCase("ROWS")) { 261 rows = value; 262 } else if (type.equalsIgnoreCase("DOUBLE")) { 263 procdouble = true; 264 } else if (type.equalsIgnoreCase("PROC")) { 265 proc = true; 266 } else if (type.equalsIgnoreCase("SORTED")) { 267 sorted = value; 268 } else if (type.equalsIgnoreCase("EXCLUDE")) { 269 ex = true; 270 exclude = value; 271 if (exclude.charAt(0)== '\"') { 272 exclude = exclude.substring(1,exclude.length()-1); 273 } 274 } else if (type.equalsIgnoreCase("MULTIPLE")) { 275 multiple = true; 276 } else if (type.equalsIgnoreCase("VERTICAL")) { 277 vertical = true; 278 } else if (type.equalsIgnoreCase("HORIZONTAL")) { 279 horizontal = true; 280 } else if (type.equalsIgnoreCase("COLS")) { 281 cols = value; 282 } else if (type.equalsIgnoreCase("MAX")) { 283 try { 284 max=Integer.parseInt(value); 285 } catch (Exception f) {}; 286 } else if (type.equalsIgnoreCase("PROCESSOR")) { 287 } else if (type.equalsIgnoreCase("EMPTY")) { 289 empty = true; 290 } else { 291 log.error("HTMLElement.parse unknow MACRO HTML found: " + type + "=" + value); 292 } 293 } 294 } 295 296 if (proc && !procdouble) { 297 valuesList = null; 299 try { 301 valuesList = processor.getList(sp,new StringTagger(""),values); 302 } catch (RuntimeException pe) {} 303 if (valuesList == null) { 304 log.error("HTMLElement.parse: The processor return null !!"); 307 return false; 308 } else { 309 moreValues = true; 310 } 311 } 312 313 if (procdouble) { 314 valuesList = null; 316 try { 317 valuesList = processor.getList(sp,new StringTagger(""),values); 319 } catch (RuntimeException pe) {} 320 if (valuesList == null) { 321 log.error("HTMLElement.parse: The processor returned null !!"); 322 return false; 323 } else { 326 moredouble = true; 327 } 328 } 329 return true; 330 } 331 332 335 protected String getType(String str) { 336 StringTokenizer tok = new StringTokenizer (str,"="); 337 if (tok.hasMoreTokens()) { 338 return (String )tok.nextElement(); 339 } 340 log.error("getType: invalid format ...!!!"+str); 341 return null; 342 } 343 344 347 protected String getValue(String str) { 348 StringTokenizer tok = new StringTokenizer (str,"="); 349 if (tok.hasMoreTokens()) { 350 tok.nextElement(); 353 if (tok.hasMoreTokens()) { 354 return (String ) tok.nextElement(); 355 } 356 } 357 return null; 359 } 360 } 361 | Popular Tags |