jakarta-watchdog-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sant...@locus.apache.org
Subject cvs commit: jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags ATag.java BTag.java CheckCount.java Count.java Define.java DefineExtraInfo.java SillyArgs.java SillyArgsExtraInfo.java Verbatim.java
Date Tue, 03 Oct 2000 23:37:29 GMT
santosh     00/10/03 16:37:29

  Added:       src/server/jsp-tests/WEB-INF/classes/tags ATag.java
                        BTag.java CheckCount.java Count.java Define.java
                        DefineExtraInfo.java SillyArgs.java
                        SillyArgsExtraInfo.java Verbatim.java
  Log:
  watchdog 4.0
  
  Revision  Changes    Path
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/ATag.java
  
  Index: ATag.java
  ===================================================================
  /**
   * A Tag Handler written from scratch without extending TagSupport
   * Takes one attribute: att
   */
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  public class ATag implements Tag {
      // Property Attributes
      public void setAtt(String s) {
  	att = s;
      }
  
      public String getAtt() {
  	return att;
      }
  
      // Setters for standard tag handler attributes
  
      public void setPageContext(PageContext pc) {
  	this.pc = pc;
      }
         
      public void setParent(Tag p) {
  	this.parent = p;
      }
  
      public Tag getParent() {
  	return parent;
      }
  
      // The action methods
  
      public int doStartTag() {
  	return EVAL_BODY_INCLUDE;
      }
  
      public int doEndTag() {
  	return EVAL_PAGE;
      }
  
      public void release() {
      }
  
      // ======
      private String att = null;
      private PageContext pc = null;
      private Tag parent = null;
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/BTag.java
  
  Index: BTag.java
  ===================================================================
  /**
   * A Tag Handler written from scratch without extending TagSupport
   * Takes one attribute: att
   */
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  public class BTag implements BodyTag {
      // Property Attributes
      public void setAtt(String s) {
  	att = s;
      }
  
      public String getAtt() {
  	return att;
      }
  
      // Setters for standard tag handler attributes
  
      public void setPageContext(PageContext pc) {
  	this.pc = pc;
      }
         
      public void setParent(Tag p) {
  	this.parent = p;
      }
  
      public Tag getParent() {
  	return parent;
      }
  
      // The action methods
  
      public int doStartTag() {
  	return EVAL_BODY_TAG;
      }
  
      public void setBodyContent(BodyContent b) {
  	BodyContent body = b;
      }
  
      public void doInitBody() {
      }
  
      public int doAfterBody() {
  	try {
  	    body.writeOut(pc.getOut());
  	    body.clearBody();
  	} catch (Exception ex) {
  	    // ignore
  	}
  	return SKIP_BODY;
      }
  
      public int doEndTag() {
  	return EVAL_PAGE;
      }
  
      public void release() {
      }
  
      // ======
      private String att = null;
      private PageContext pc = null;
      private Tag parent = null;
      private BodyContent body = null;
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/CheckCount.java
  
  Index: CheckCount.java
  ===================================================================
  /**
   * Check different types of counts related to the count tag.
   *
   * This tag takes several optional attributes:
   *   nexted - then number of enclosing count tags that should be active
   *               note that we need to assume the name of the class...  This should really
   *               be a parameter in TestLib.tld
   */
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  public class CheckCount extends TagSupport {
  
      //  nested
      public void setNested(String s) {
  	try {
  	    nestedCount = Integer.valueOf(s);
  	} catch (Exception ex) {
  	    nestedCount = null;
  	}
      }
      
      // startCount
      public void setStart(String s) {
  	try {
  	    startCount = Integer.valueOf(s);
  	} catch (Exception ex) {
  	    startCount = null;
  	}
      }
  
      // endCount
      public void setEnd(String s) {
  	try {
  	    endCount = Integer.valueOf(s);
  	} catch (Exception ex) {
  	    endCount = null;
  	}
      }
  
  
      // ================== Actions ====================
  
      // doStartTag
      public int doStartTag() {
  	if (nestedCount != null) { 
  	    // check for active nested tags.
  
  	    int k = nestedCount.intValue();
  	    int c = 0;
  	    Count t = (Count) TagSupport.findAncestorWithClass(this, tags.Count.class);
  
  	    while (t != null) {
  		c += 1;
  		t = (Count) TagSupport.findAncestorWithClass(t, tags.Count.class);
  	    }
  
  	    if (c != k) {
  		throw new Error("nested count: expecting "+k+" got "+c);
  	    }
  	}
  
  	if (startCount != null) {
  	    // check for start tag invocations
  	    int k = startCount.intValue();
  
  	    int c = Count.getCount(pageContext, Count.DO_START_TAG_COUNTER);
  	    if (k != c) {
  		throw new Error("start count: expecting "+k+" got "+c);
  	    }
  	}
  
  	if (endCount != null) {
  	    // check for end tag invocations
  	    int k = endCount.intValue();
  
  	    int c = Count.getCount(pageContext, Count.DO_END_TAG_COUNTER);
  	    if (k != c) {
  		throw new Error("end count: expecting "+k+" got "+c);
  	    }
  	}
  
  	return SKIP_BODY;
      }
  
  
      // private data
  
      private Integer nestedCount = null;
      private Integer startCount = null;
      private Integer endCount = null;
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/Count.java
  
  Index: Count.java
  ===================================================================
  /**
   * This is a tag handler that will validate that the JSP compiler
   * is invoking the methods in the proper order
   *
   * The validity checking seems most easily described using a simple check on
   * what was the previously called method.
   *
   * This tag takes several optional attributes:
   *   att1, att2 do nothing
   *   includeBody - whether the body is to be included or not ("true" is default)
   *   skipPage - whether to skip the rest of the page ("false" is default)
   */
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  import java.util.*;
  
  public class Count extends TagSupport {
  
      public static String CREATED = "Created";
      public static String SET_PC = "Set_pc";
      public static String SET_PARENT = "Set_parent";
      public static String SET_ATT_1 = "Set_att_1";
      public static String SET_ATT_2 = "Set_att_2";
      public static String SET_INCLUDE_BODY = "Set_include_body";
      public static String SET_SKIP_PAGE = "Set_skip_page";
      public static String DO_START_TAG = "Do_start_tag";
      public static String DO_END_TAG = "Do_end_tag";
      public static String RELEASE = "Release";
  
      public static String DO_START_TAG_COUNTER = "Do_start_tag_counter";
      public static String DO_END_TAG_COUNTER = "Do_end_tag_counter";
  
      // setpageContext
      public void setPageContext(PageContext pc) {
  	if ((state == DO_START_TAG)) {
  	    throw new Error("Cannot setPageContext when in: "+state);
  	}
  
  	state = SET_PC;
  	if (pc == null) {
  	    throw new Error("Cannot set a null PageContext");
  	}
  	super.setPageContext(pc);
      }
  
      // setParent
      public void setParent(Tag parent) {
  	if ((state == DO_START_TAG) ||
  	    (state == CREATED) ||
  	    (state == RELEASE)) {
  	    throw new Error("Cannot setParent when in: "+state);
  	}
  
  	state = SET_PARENT;
  	super.setParent(parent);
      }
  
      // getParent
      public Tag getParent() {
  	return super.getParent();
      }
  
      //  att1
      public void setAtt1(String s) {
  	if ((state == SET_PARENT) ||
  	    (aSetter(state)) ||
  	    (state == DO_END_TAG)) {
  	} else {
  	    throw new Error("Cannot setAtt1 when in: "+state);
  	}
  
  	state = SET_ATT_1;
  	att1 = s;
      }
      
      public String getAtt1() {
  	return att1;
      }
  
      //  att2
      public void setAtt2(String s) {
  	if ((state == SET_PARENT) ||
  	    (aSetter(state)) ||
  	    (state == DO_END_TAG)) {
  	} else {
  	    throw new Error("Cannot setAtt1 when in: "+state);
  	}
  
  	state = SET_ATT_1;
  	att1 = s;
      }
  
      public String getAtt2() {
  	return att2;
      }
  
      //  includeBody
      public void setIncludeBody(String s) {
  	if ((state == SET_PARENT) ||
  	    (aSetter(state)) ||
  	    (state == DO_END_TAG)) {
  	} else {
  	    throw new Error("Cannot setIncludeBody when in: "+state);
  	}
  
  	state = SET_INCLUDE_BODY;
  	includeBody = s;
      }
  
      public String getIncludeBody() {
  	return includeBody;
      }
  
      //  skipPage
      public void setSkipPage(String s) {
  	if ((state == SET_PARENT) ||
  	    (aSetter(state)) ||
  	    (state == DO_END_TAG)) {
  	} else {
  	    throw new Error("Cannot setSkipPage when in: "+state);
  	}
  
  	state = SET_SKIP_PAGE;
  	skipPage = s;
      }
  
      public String getSkipPage() {
  	return skipPage;
      }
  
      // ================== Actions ====================
  
      // doStartTag
      public int doStartTag() {
  	if ((aSetter(state)) ||
  	    (state == SET_PARENT) ||
  	    (state == DO_END_TAG)) {
  	} else {
  	    throw new Error("Cannot doStartTag when in: "+state);
  	}
  
  	state = DO_START_TAG;
  	addCount(pageContext, DO_START_TAG_COUNTER);
  	if (includeBody.equals("true")) {
  	    return EVAL_BODY_INCLUDE;
  	} else {
  	    return SKIP_BODY;
  	}
      }
  
      // doEndTag
      public int doEndTag() {
  	if ((state != DO_START_TAG)) {
  	    throw new Error("Cannot doEndTag when in: "+state);
  	}
  
  	state = DO_END_TAG;
  	addCount(pageContext, DO_END_TAG_COUNTER);
  	if (skipPage.equals("true")) {
  	    return SKIP_PAGE;
  	} else {
  	    return EVAL_PAGE;
  	}
      }
  
  
      // release
      public void release() {
  	if ((state == DO_START_TAG)) {
  	    throw new Error("Cannot release when in: "+state);
  	}
  
  	state = RELEASE;
  	super.release();
      }
  
      // ========== Public methods for counting ============
  
      public static void addCount(PageContext pc, String s) {
  	synchronized (pc) {
  	    Integer c = (Integer) pc.getAttribute(s);
  	    if (c == null) {
  		pc.setAttribute(s, new Integer(1),
  				PageContext.PAGE_SCOPE);
  	    } else {
  		int i = c.intValue();
  		pc.setAttribute(s, new Integer(i+1),
  				PageContext.PAGE_SCOPE);
  	    }
  	}
      }
  
      public static int getCount(PageContext pc, String s) {
  	synchronized (pc) {
  	    Integer c = (Integer) pc.getAttribute(s);
  	    if (c == null) {
  		return 0;
  	    } else {
  		return c.intValue();
  	    }
  	}
      }
  
  
      //  Auxiliary methods
      protected boolean aSetter(String state) {
  	if ((state == SET_INCLUDE_BODY) ||
  	    (state == SET_SKIP_PAGE) ||
  	    (state == SET_ATT_1) ||
  	    (state == SET_ATT_2)) {
  	    return true;
  	} else {
  	    return false;
  	}
      }
  
      // private data
  
      private String state = CREATED;
      private String att1 = null;
      private String att2 = null;
      private String includeBody = "true";
      private String skipPage = "false";
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/Define.java
  
  Index: Define.java
  ===================================================================
  /**
   * Define an Integer object and do some iteration stuff
   *
   * Requires the following attributes:
   *  id - the ID
   *  scope - where in the PageContext space will it be
   *  life - what type of lifetime the definition will take
   * Optional attributes are:
   *  declare - whether the id is to be declared, or assumed to be so.
   *  startValue - value after doStartTag (invalid with life=="AT_END")
   *  endValue - value after doEndTag (invalid with life=="NESTED")
   *  initBodyValue - value after doInitTag (invalid with life=="AT_END")
   *  afterBodyIncrement - increment after doAfterTag (invalid with life=="AT_END")
   *  iterationCount - number of iterations to do (defaults to 1)
   */
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  import java.io.IOException;
  
  public class Define extends BodyTagSupport {
  
      // the scope where to define the object
      public void setScope(String s) {
  	if (s.equals("page")) {
  	    scope = PageContext.PAGE_SCOPE;
  	} else if (s.equals("session")) {
  	    scope = PageContext.SESSION_SCOPE;
  	} else if (s.equals("request")) {
  	    scope = PageContext.REQUEST_SCOPE;
  	} else if (s.equals("application")) {
  	    scope = PageContext.APPLICATION_SCOPE;
  	}
      }
  
      public String getScope() {
  	switch (scope) {
  	case PageContext.PAGE_SCOPE:
  	    return "page";
  	case PageContext.SESSION_SCOPE:
  	    return "session";
  	case PageContext.REQUEST_SCOPE:
  	    return "request";
  	case PageContext.APPLICATION_SCOPE:
  	    return "application";
  	default:
  	    return null;
  	}
      }
  
      // Lifetime 
  
      public void setLife(String s) {
  	if (s.equals("nested")) {
  	    life = VariableInfo.NESTED;
  	} else if (s.equals("at_begin")) {
  	    life = VariableInfo.AT_BEGIN;
  	} else if (s.equals("at_end")) {
  	    life = VariableInfo.AT_END;
  	} else {
  	    throw new Error("Oops! unexpected syntactic error");
  	}
      } 
  
      public String getLife() {
  	switch (life) {
  	case VariableInfo.NESTED:
  	    return "nested";
  	case VariableInfo.AT_BEGIN:
  	    return "at_begin";
  	case VariableInfo.AT_END:
  	    return "at_end";
  	}
  	return null;
      }
  
      // ====== Optional attributes =========
  
  
      // Whether to declare the scripting variable or not.
  
      public void setDeclare(String s) {
  	declare = new Boolean(s);
      }
  
  
      // value after doStartTag (invalid with life=="AT_END")
  
      public void setStartValue(String v) {
  	startValue = Integer.valueOf(v);
      }
  
      public String getStartValue() {
  	return startValue.toString();
      }
  
      // value after doEndTag (invalid with life=="NESTED")
  
      public void setEndValue(String v) {
  	endValue = Integer.valueOf(v);
      }
  
      public String getEndValue() {
  	return endValue.toString();
      }
  
      // value after doInitBody (invalid with life=="AT_END")
  
      public void setInitBodyValue(String v) {
  	initBodyValue = Integer.valueOf(v);
      }
  
      public String getInitBodyValue() {
  	return initBodyValue.toString();
      }
  
      // increment after doAfterTag (invalid with life=="AT_END")
  
      public void setAfterBodyIncrement(String v) {
  	afterBodyIncrement = Integer.parseInt(v);
      }
  
      // number of iterations to do (defaults to 1)
  
      public void setIterationCount(String v) {
  	iterationCount = Integer.parseInt(v);
      }
  
  
      // ================== Actions ====================
  
      public int doStartTag() {
  	if (startValue != null) {
  	    pageContext.setAttribute(getId(), startValue, scope);
  	}
  	currentCount = 0;
  System.err.println("finishing doStartTag()");
  	return EVAL_BODY_TAG;
      }
  
      public void doInitBody() {
  	if (initBodyValue != null) {
  	    pageContext.setAttribute(getId(), initBodyValue, scope);
  	}
  	currentCount = 0;
  System.err.println("finishing doInitBody()");
      }
  
      public int doAfterBody() throws JspException {
  	BodyContent bd = getBodyContent();
  	try {
  	    bd.writeOut(getPreviousOut());
  	    bd.clearBody();
  	} catch (IOException ex) {
  	    throw new JspTagException("io trouble in tag handler");
  	}
  
  	Integer value = (Integer) pageContext.getAttribute(getId());
          int k;
          if (value != null)
              k = value.intValue()+afterBodyIncrement;
          else
              k = afterBodyIncrement;
  
  	pageContext.setAttribute(getId(), new Integer(k), scope);
  	currentCount += 1;
  	if (currentCount < iterationCount) {
  System.err.println("finishing doAfterBody on EVAL_BODY_TAG");
  	    return EVAL_BODY_TAG;
  	} else {
  System.err.println("finishing doAfterBody on SKIP_BODY");
  	    return SKIP_BODY;
  	}
      }
  
      public int doEndTag() {
  	if (endValue != null) {
  	    pageContext.setAttribute(getId(), endValue, scope);
  	}
  System.err.println("finishing doEndTag");
  	return EVAL_PAGE;
      }
  
      // private data
  
      protected int scope = PageContext.PAGE_SCOPE;
      protected int life = VariableInfo.AT_BEGIN;
      protected Boolean declare;
      private Integer startValue;
      private Integer endValue;
      private Integer initBodyValue;
      private int afterBodyIncrement;
      protected int iterationCount = 1;
      protected int currentCount = 1;
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/DefineExtraInfo.java
  
  Index: DefineExtraInfo.java
  ===================================================================
  /**
   * TagExtraInfo for the define action
   */
  
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  public class DefineExtraInfo extends TagExtraInfo {
  
      public boolean isValid(TagData data) {
  	if (data == null) {
  	    return false;
  	}
  	if ((data.getAttribute("startValue") != null) &&
  	    (data.getAttributeString("life").equals("at_end"))) {
  	    return false;
  	}
  	if ((data.getAttribute("endValue") != null) &&
  	    (data.getAttributeString("life").equals("nested"))) {
  	    return false;
  	}
  	if ((data.getAttribute("initBodyValue") != null) &&
  	    (data.getAttributeString("life").equals("at_end"))) {
  	    return false;
  	}
  	if ((data.getAttribute("afterBodyIncrement") != null) &&
  	    (data.getAttributeString("life").equals("at_end"))) {
  	    return false;
  	}
  	return true;
      }
  
      public VariableInfo[] getVariableInfo(TagData data) {
  	String id = data.getId();
  	if (id == null) {
  	    throw new Error("should not happen...");
  	}
  	String life = data.getAttributeString("life");
  	String scope = data.getAttributeString("scope");
  	String declare = data.getAttributeString("declare");
  	if (declare == null) {
  	    declare = "true";
  	}
  
  	VariableInfo back[] = {
  	    new VariableInfo(id,
  			     "java.lang.Integer",
  			     declare.equals("true"), lifeInt(life))};
  	return back;
      }
  
      // private fields
  
      private int lifeInt(String s) {
          if (s.equals("nested")) {
              return VariableInfo.NESTED;
          } else if (s.equals("at_begin")) {
              return VariableInfo.AT_BEGIN;
          } else if (s.equals("at_end")) {
              return VariableInfo.AT_END;
  	}
  	return -1;
      }
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/SillyArgs.java
  
  Index: SillyArgs.java
  ===================================================================
  /**
   * This is a tag that accepts only some combinations of arguments
   */
  
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  public class SillyArgs extends TagSupport {
  
      // Attribute a
      public void setA(String s) {
          a = s;
      }
  
      // Attribute b
      public void setB(String s) {
          b = s;
      }
  
      // Attribute c
      public void setC(String s) {
          c = s;
      }
      
      public void setTestLibInfo(String s) {
          testLibInfo = s;
      }
      
  
      // private
      private String a = null; 
      private String b = null; 
      private String c = null; 
      private String testLibInfo = null;
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/SillyArgsExtraInfo.java
  
  Index: SillyArgsExtraInfo.java
  ===================================================================
  /**
   * TagExtraInfo for an action that accepts only arguments A,B,C
   * such that A+B==C
   */
  
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  
  public class SillyArgsExtraInfo extends TagExtraInfo {
  
      public boolean isValid(TagData data) {
          //System.out.println("isValid()");
  	if (data == null) {
  	    return false;
  	}
  	int a, b, c;
  	String oa, ob, oc;
  	oa = data.getAttributeString("a");
  	ob = data.getAttributeString("b");
  	oc = data.getAttributeString("c");
          
          //System.out.println("a: "+oa+" b: "+ob+" c: "+oc);
  
  	if ((oa == null) || (ob == null) || (oc == null)) {
  	    return false;
  	}
  	
  	if (Integer.parseInt(oa) +
  	    Integer.parseInt(ob) !=
  	    Integer.parseInt(oc)) {
              //System.out.println("false 'cos they are not equal");
  	    return false;
  	}
  	
  	if (data.getAttribute("testLibInfo") != null) {
  	    if (!testLibInfo()) {
                  //System.out.println("false 'cos of testLibInfo");
  		return false;
  	    }
  	}
  
  	return true;
      }
  
      private boolean testLibInfo() {
  	// Now test that TagInfo is somewhat appropriate...
  	TagInfo ti = getTagInfo();
  
  	if (!(ti.getTagClassName()+"ExtraInfo").equals(this.getClass().getName())) {
              //System.out.println("ti.getTagClassName: "+ti.getTagClassName());
  	    return false;
  	}
  	
  	TagAttributeInfo tai[] = ti.getAttributes();
  
  	if (tai.length != 3 && tai.length != 4) {
              //System.out.println("tai.length = "+tai.length);
  	    return false;	// there should be 3 attributes
  	}
  
  	if (!has(tai, "a") || !has(tai, "b") || !has(tai, "c")) {
              //System.out.println("has issue");
  	    return false;
  	}
  
  	TagLibraryInfo tli = ti.getTagLibrary();
  	TagInfo ti2 = tli.getTag(ti.getTagName());
  
  	if (!(ti2.getTagClassName()+"ExtraInfo").equals(this.getClass().getName())) {
              //System.out.println("ti2.getTagClassName: "+ti2.getTagClassName());
  	    return false;
  	}
  
  	return true;
      }
  
  
      private static boolean has(TagAttributeInfo tai[], String s) {
  	for (int i = 0; i<tai.length; i++) {
  	    if (tai[i].getName().equals(s)) {
  		return true;
  	    }
  	}
  	return false;
      }
  }
  
  
  
  1.1                  jakarta-watchdog-4.0/src/server/jsp-tests/WEB-INF/classes/tags/Verbatim.java
  
  Index: Verbatim.java
  ===================================================================
  /**
   * Return the content of the body using one of several different
   * mechanisms.
   *
   * Uses one attribute: "how" which may be "reader", "string" and "writeout"
   */
  
  package tags;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  import java.io.*;
  
  public class Verbatim extends BodyTagSupport {
  
      // ================ Attributes ==================
  
      public void setHow(String s) {
  	how = s;
      }
  
      public String getHow() {
  	return how;
      }
  
      // ================== Actions ====================
  
      public int doEndTag() {
  	BodyContent bd = getBodyContent();
  	JspWriter w = getPreviousOut();
  
  	try {
  	    if (how.equals("reader")) {
  		Reader r = bd.getReader();
  		int b = r.read();
  		while (b != -1) {
  		    w.write(b);
  		    b = r.read();
  		}
  		r.close();
  	    } else if (how.equals("string")) {
  		w.print(bd.getString());
  	    } else if (how.equals("writeout")) {
  		bd.writeOut(w);
  	    } else {
  		throw new Error("Inconsistent state!");
  	    }
  	} catch (IOException ex) {
  	    throw new Error("caught IO excepiton");
  	}
  
  	bd.clearBody();
  
  	return EVAL_PAGE;
      }
  
      // private data
  
      protected String how = null;
  }
  
  
  

Mime
View raw message