1 17 18 19 package org.apache.jasper.tagplugins.jstl.core; 20 21 import org.apache.jasper.compiler.tagplugin.TagPlugin; 22 import org.apache.jasper.compiler.tagplugin.TagPluginContext; 23 24 public class ForTokens implements TagPlugin { 25 26 public void doTag(TagPluginContext ctxt) { 27 boolean hasVar, hasVarStatus, hasBegin, hasEnd, hasStep; 28 29 hasVar = ctxt.isAttributeSpecified("var"); 31 hasVarStatus = ctxt.isAttributeSpecified("varStatus"); 32 hasBegin = ctxt.isAttributeSpecified("begin"); 33 hasEnd = ctxt.isAttributeSpecified("end"); 34 hasStep = ctxt.isAttributeSpecified("step"); 35 36 if(hasVarStatus){ 37 ctxt.dontUseTagPlugin(); 38 return; 39 } 40 41 String itemsName = ctxt.getTemporaryVariableName(); 43 String delimsName = ctxt.getTemporaryVariableName(); 44 String stName = ctxt.getTemporaryVariableName(); 45 String beginName = ctxt.getTemporaryVariableName(); 46 String endName = ctxt.getTemporaryVariableName(); 47 String stepName = ctxt.getTemporaryVariableName(); 48 String index = ctxt.getTemporaryVariableName(); 49 String temp = ctxt.getTemporaryVariableName(); 50 String tokensCountName = ctxt.getTemporaryVariableName(); 51 52 ctxt.generateJavaSource("String " + itemsName + " = (String)"); 54 ctxt.generateAttribute("items"); 55 ctxt.generateJavaSource(";"); 56 57 ctxt.generateJavaSource("String " + delimsName + " = (String)"); 59 ctxt.generateAttribute("delims"); 60 ctxt.generateJavaSource(";"); 61 62 ctxt.generateJavaSource("java.util.StringTokenizer " + stName + " = " + 64 "new java.util.StringTokenizer(" + itemsName + ", " + delimsName + ");"); 65 66 ctxt.generateJavaSource("int " + tokensCountName + " = " + stName + ".countTokens();"); 69 if(hasBegin){ 70 ctxt.generateJavaSource("int " + beginName + " = " ); 71 ctxt.generateAttribute("begin"); 72 ctxt.generateJavaSource(";"); 73 ctxt.generateJavaSource("for(int " + index + " = 0; " + index + " < " + beginName + " && " + stName + ".hasMoreTokens(); " + index + "++, " + stName + ".nextToken()){}"); 74 }else{ 75 ctxt.generateJavaSource("int " + beginName + " = 0;"); 76 } 77 78 if(hasEnd){ 82 ctxt.generateJavaSource("int " + endName + " = 0;" ); 83 ctxt.generateJavaSource("if((" + tokensCountName + " - 1) < "); 84 ctxt.generateAttribute("end"); 85 ctxt.generateJavaSource("){"); 86 ctxt.generateJavaSource(" " + endName + " = " + tokensCountName + " - 1;"); 87 ctxt.generateJavaSource("}else{"); 88 ctxt.generateJavaSource(" " + endName + " = "); 89 ctxt.generateAttribute("end"); 90 ctxt.generateJavaSource(";}"); 91 }else{ 92 ctxt.generateJavaSource("int " + endName + " = " + tokensCountName + " - 1;"); 93 } 94 95 if(hasStep){ 98 ctxt.generateJavaSource("int " + stepName + " = " ); 99 ctxt.generateAttribute("step"); 100 ctxt.generateJavaSource(";"); 101 }else{ 102 ctxt.generateJavaSource("int " + stepName + " = 1;"); 103 } 104 105 ctxt.generateJavaSource("for(int " + index + " = " + beginName + "; " + index + " <= " + endName + "; " + index + "++){"); 107 ctxt.generateJavaSource(" String " + temp + " = " + stName + ".nextToken();"); 108 ctxt.generateJavaSource(" if(((" + index + " - " + beginName + ") % " + stepName + ") == 0){"); 109 if(hasVar){ 111 String strVar = ctxt.getConstantAttribute("var"); 112 ctxt.generateJavaSource(" pageContext.setAttribute(\"" + strVar + "\", " + temp + ");"); 113 } 114 ctxt.generateBody(); 115 ctxt.generateJavaSource(" }"); 116 ctxt.generateJavaSource("}"); 117 } 118 119 } 120 | Popular Tags |