home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / internal / SimpleContentModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  1.8 KB  |  194 lines

  1. package com.ibm.xml.internal;
  2.  
  3. import com.ibm.xml.framework.ContentModel;
  4. import com.ibm.xml.framework.InsertableElementsInfo;
  5.  
  6. class SimpleContentModel implements ContentModel {
  7.    int fFirstChild;
  8.    int fSecondChild;
  9.    int fOp;
  10.  
  11.    public SimpleContentModel(int var1, int var2, int var3) {
  12.       this.fFirstChild = var1;
  13.       this.fSecondChild = var2;
  14.       this.fOp = var3;
  15.    }
  16.  
  17.    public int validateContent(int var1, int[] var2) throws Exception {
  18.       switch (this.fOp) {
  19.          case 0:
  20.             if (var1 == 0) {
  21.                return 0;
  22.             }
  23.  
  24.             if (var2[0] != this.fFirstChild) {
  25.                return 0;
  26.             }
  27.  
  28.             if (var1 > 1) {
  29.                return 1;
  30.             }
  31.             break;
  32.          case 1:
  33.             if (var1 == 1 && var2[0] != this.fFirstChild) {
  34.                return 0;
  35.             }
  36.  
  37.             if (var1 > 1) {
  38.                return 1;
  39.             }
  40.             break;
  41.          case 2:
  42.             if (var1 > 0) {
  43.                for(int var4 = 0; var4 < var1; ++var4) {
  44.                   if (var2[var4] != this.fFirstChild) {
  45.                      return var4;
  46.                   }
  47.                }
  48.             }
  49.             break;
  50.          case 3:
  51.             if (var1 == 0) {
  52.                return 0;
  53.             }
  54.  
  55.             for(int var3 = 0; var3 < var1; ++var3) {
  56.                if (var2[var3] != this.fFirstChild) {
  57.                   return var3;
  58.                }
  59.             }
  60.             break;
  61.          case 4:
  62.             if (var1 == 0) {
  63.                return 0;
  64.             }
  65.  
  66.             if (var2[0] != this.fFirstChild && var2[0] != this.fSecondChild) {
  67.                return 0;
  68.             }
  69.  
  70.             if (var1 > 1) {
  71.                return 1;
  72.             }
  73.             break;
  74.          case 5:
  75.             if (var1 != 2) {
  76.                if (var1 > 2) {
  77.                   return 2;
  78.                }
  79.  
  80.                return var1;
  81.             }
  82.  
  83.             if (var2[0] != this.fFirstChild) {
  84.                return 0;
  85.             }
  86.  
  87.             if (var2[1] != this.fSecondChild) {
  88.                return 1;
  89.             }
  90.             break;
  91.          default:
  92.             throw new CMException(152);
  93.       }
  94.  
  95.       return -1;
  96.    }
  97.  
  98.    public int whatCanGoHere(boolean var1, InsertableElementsInfo var2) throws Exception {
  99.       for(int var3 = var2.insertAt; var3 < var2.childCount; ++var3) {
  100.          var2.curChildren[var3] = var2.curChildren[var3 + 1];
  101.       }
  102.  
  103.       --var2.childCount;
  104.       int var4 = this.validateContent(var2.childCount, var2.curChildren);
  105.       if (var4 != -1 && var4 < var2.insertAt) {
  106.          return var4;
  107.       } else {
  108.          var2.canHoldPCData = false;
  109.          if (this.fOp != 0 && this.fOp != 1 && this.fOp != 2 && this.fOp != 3) {
  110.             if (this.fOp != 4 && this.fOp != 5) {
  111.                throw new CMException(152);
  112.             }
  113.  
  114.             var2.resultsCount = 2;
  115.          } else {
  116.             var2.resultsCount = 1;
  117.          }
  118.  
  119.          if (var2.results == null || var2.results.length < var2.resultsCount) {
  120.             var2.results = new boolean[var2.resultsCount];
  121.          }
  122.  
  123.          if (var2.possibleChildren == null || var2.possibleChildren.length < var2.resultsCount) {
  124.             var2.possibleChildren = new int[var2.resultsCount];
  125.          }
  126.  
  127.          var2.possibleChildren[0] = this.fFirstChild;
  128.          var2.results[0] = false;
  129.          if (var2.resultsCount == 2) {
  130.             var2.possibleChildren[1] = this.fSecondChild;
  131.             var2.results[1] = false;
  132.          }
  133.  
  134.          var2.isValidEOC = false;
  135.          switch (this.fOp) {
  136.             case 0:
  137.             case 1:
  138.                if (var2.childCount == 0) {
  139.                   var2.results[0] = true;
  140.                } else if (var2.childCount > 0 && !var1 && var2.insertAt == 0) {
  141.                   var2.results[0] = true;
  142.                }
  143.  
  144.                if (this.fOp == 0) {
  145.                   if (var2.insertAt == 0) {
  146.                      var2.isValidEOC = true;
  147.                   }
  148.                } else {
  149.                   var2.isValidEOC = true;
  150.                }
  151.                break;
  152.             case 2:
  153.             case 3:
  154.                var2.results[0] = true;
  155.                if (this.fOp == 2 || var2.insertAt > 0) {
  156.                   var2.isValidEOC = true;
  157.                }
  158.                break;
  159.             case 4:
  160.                if (var2.insertAt == 0 && !var1 && var2.childCount == 0) {
  161.                   var2.results[0] = true;
  162.                   var2.results[1] = true;
  163.                }
  164.  
  165.                if (var2.insertAt == 1) {
  166.                   var2.isValidEOC = true;
  167.                }
  168.                break;
  169.             case 5:
  170.                if (var2.insertAt == 0) {
  171.                   if (var1) {
  172.                      if (var2.childCount == 1) {
  173.                         var2.results[0] = var2.curChildren[0] == this.fSecondChild;
  174.                      }
  175.                   } else {
  176.                      var2.results[0] = true;
  177.                   }
  178.                } else if (var2.insertAt == 1 && (!var1 || var2.childCount == 1)) {
  179.                   var2.results[1] = true;
  180.                }
  181.  
  182.                if (var2.insertAt == 2) {
  183.                   var2.isValidEOC = true;
  184.                }
  185.                break;
  186.             default:
  187.                throw new CMException(152);
  188.          }
  189.  
  190.          return -1;
  191.       }
  192.    }
  193. }
  194.