home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / allaire / util / template / LoopElement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-12  |  3.6 KB  |  152 lines

  1. package allaire.util.template;
  2.  
  3. import allaire.util.TextUtils;
  4. import netscape.util.Enumeration;
  5. import netscape.util.Vector;
  6.  
  7. class LoopElement extends TemplateTagElement {
  8.    private static final int LOOP_LIST = 0;
  9.    private static final int LOOP_INDEX = 1;
  10.    private static final int LOOP_CONDITION = 2;
  11.    private static final String INDEX = "INDEX";
  12.    private static final String FROM = "FROM";
  13.    // $FF: renamed from: TO java.lang.String
  14.    private static final String field_0 = "TO";
  15.    private static final String STEP = "STEP";
  16.    private static final String LIST = "LIST";
  17.    private static final String CONDITION = "CONDITION";
  18.  
  19.    private void doIndexLoop(String var1, int var2, int var3, int var4, TemplateOutput var5) throws TemplateException {
  20.       Vector var6 = new Vector();
  21.  
  22.       for(int var7 = var2; var7 <= var3; var7 += var4) {
  23.          var6.addElement(String.valueOf(var7));
  24.       }
  25.  
  26.       this.doListLoop(var1, var6, var5);
  27.    }
  28.  
  29.    public void process(TemplateOutput var1) throws TemplateException {
  30.       try {
  31.          this.doLoop(var1);
  32.       } catch (LoopBreakException var2) {
  33.       }
  34.    }
  35.  
  36.    private void stripTrailingSpaces() {
  37.       Vector var1 = ((TemplateTagElement)this).getSubElements();
  38.       if (var1.size() > 0) {
  39.          TemplateElement var2 = (TemplateElement)var1.lastElement();
  40.          if (var2 instanceof TextElement) {
  41.             TextElement var3 = (TextElement)var2;
  42.             String var4 = var3.getText();
  43.             int var5 = var4.length();
  44.  
  45.             for(int var6 = var5 - 1; var6 >= 0; --var6) {
  46.                char var7 = var4.charAt(var6);
  47.                if (!Character.isSpace(var7)) {
  48.                   break;
  49.                }
  50.  
  51.                if (var7 == '\n') {
  52.                   var4 = var4.substring(0, var6 + 1);
  53.                   var3.setText(var4);
  54.                   return;
  55.                }
  56.             }
  57.          }
  58.       }
  59.  
  60.    }
  61.  
  62.    private void doLoop(TemplateOutput var1) throws TemplateException {
  63.       this.stripLeadingNewline();
  64.       this.stripTrailingSpaces();
  65.       TagAttributes var2 = ((TemplateTagElement)this).getAttributesRaw();
  66.       String var3 = var2.get("CONDITION");
  67.       if (var3 != null) {
  68.          this.doConditionalLoop(var3, var1);
  69.       } else {
  70.          String var4 = var2.get("LIST");
  71.          if (var4 != null) {
  72.             String var10 = var2.getRequired("INDEX");
  73.             Vector var11 = TextUtils.getListElements(((TemplateElement)this).resolveExpressionsInText(var4));
  74.             this.doListLoop(var10, var11, var1);
  75.          } else {
  76.             String var5 = var2.getRequired("INDEX");
  77.             int var6 = Integer.parseInt(((TemplateElement)this).resolveExpressionsInText(var2.getRequired("FROM")));
  78.             int var7 = Integer.parseInt(((TemplateElement)this).resolveExpressionsInText(var2.getRequired("TO")));
  79.             int var8 = 1;
  80.             String var9 = var2.get("STEP");
  81.             if (var9 != null) {
  82.                var8 = Integer.parseInt(((TemplateElement)this).resolveExpressionsInText(var9));
  83.             }
  84.  
  85.             this.doIndexLoop(var5, var6, var7, var8, var1);
  86.          }
  87.       }
  88.    }
  89.  
  90.    private void doListLoop(String var1, Vector var2, TemplateOutput var3) throws TemplateException {
  91.       Enumeration var4 = var2.elements();
  92.  
  93.       while(var4.hasMoreElements()) {
  94.          String var5 = (String)var4.nextElement();
  95.          SymbolTable var6 = ((TemplateElement)this).getParser().getRuntimeContext().getSymbolTable();
  96.          var6.set(var1, var5);
  97.  
  98.          try {
  99.             this.processChildren(var3);
  100.          } catch (LoopContinueException var7) {
  101.          }
  102.       }
  103.  
  104.    }
  105.  
  106.    private void doConditionalLoop(String var1, TemplateOutput var2) throws TemplateException {
  107.       while(((TemplateTagElement)this).evaluateExpression(var1)) {
  108.          try {
  109.             this.processChildren(var2);
  110.          } catch (LoopContinueException var3) {
  111.          }
  112.       }
  113.  
  114.    }
  115.  
  116.    private void processChildren(TemplateOutput var1) throws TemplateException {
  117.       Enumeration var2 = ((TemplateTagElement)this).getSubElements().elements();
  118.  
  119.       while(var2.hasMoreElements()) {
  120.          TemplateElement var3 = (TemplateElement)var2.nextElement();
  121.          var3.process(var1);
  122.       }
  123.  
  124.    }
  125.  
  126.    private void stripLeadingNewline() {
  127.       Vector var1 = ((TemplateTagElement)this).getSubElements();
  128.       if (var1.size() > 0) {
  129.          TemplateElement var2 = (TemplateElement)var1.elementAt(0);
  130.          if (var2 instanceof TextElement) {
  131.             TextElement var3 = (TextElement)var2;
  132.             String var4 = var3.getText();
  133.             int var5 = var4.length();
  134.  
  135.             for(int var6 = 0; var6 < var5; ++var6) {
  136.                char var7 = var4.charAt(var6);
  137.                if (!Character.isSpace(var7)) {
  138.                   break;
  139.                }
  140.  
  141.                if (var7 == '\n') {
  142.                   var4 = var4.substring(Math.min(var6 + 1, var5 - 1));
  143.                   var3.setText(var4);
  144.                   return;
  145.                }
  146.             }
  147.          }
  148.       }
  149.  
  150.    }
  151. }
  152.