home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / validation / DateTimeLeafValidator.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  6.1 KB  |  355 lines

  1. package com.extensibility.validation;
  2.  
  3. import com.extensibility.xml.SchemaIntf;
  4. import com.extensibility.xml.SchemaUtilities;
  5. import com.extensibility.xml.dt.DataType;
  6. import com.extensibility.xml.dt.DataTypeIntf;
  7. import com.extensibility.xml.dt.Facet;
  8. import java.util.Calendar;
  9. import java.util.GregorianCalendar;
  10. import java.util.Vector;
  11.  
  12. class DateTimeLeafValidator extends DataValidator {
  13.    protected static int parseIntField(String var0, int var1, int var2) {
  14.       int var3 = 0;
  15.       if (var0.length() < var2) {
  16.          return -1;
  17.       } else {
  18.          for(int var4 = var1; var4 < var2; ++var4) {
  19.             if (!Character.isDigit(var0.charAt(var4))) {
  20.                return -1;
  21.             }
  22.  
  23.             var3 = var3 * 10 + Character.digit(var0.charAt(var4), 10);
  24.          }
  25.  
  26.          return var3;
  27.       }
  28.    }
  29.  
  30.    protected String parseDate(SchemaIntf var1, DataType var2, String var3, GregorianCalendar var4) {
  31.       int var5 = 0;
  32.       int var6 = 0;
  33.       int var7 = 0;
  34.       int var8 = 0;
  35.  
  36.       try {
  37.          String var9 = var1.getFlavorName();
  38.          if (SchemaUtilities.flavorConvertsTo(var9) == SchemaIntf.SOX2_FLAVOR_NAME) {
  39.             var6 = parseIntField(var3, 0, 4);
  40.             var7 = parseIntField(var3, 4, 6);
  41.             var8 = parseIntField(var3, 6, 8);
  42.             if (var6 == -1 || var7 == -1 || var8 == -1 || var3.length() != 8) {
  43.                String var18 = "invalid date";
  44.                return var18;
  45.             }
  46.          } else if (var3.indexOf("-") != -1 && var3.indexOf("-") < 8 || SchemaUtilities.flavorConvertsTo(var9) != SchemaIntf.XDR_FLAVOR_NAME && SchemaUtilities.flavorConvertsTo(var9) != SchemaIntf.DTD_FLAVOR_NAME) {
  47.             boolean var16 = false;
  48.             if (var3.startsWith("-")) {
  49.                var16 = true;
  50.                ++var5;
  51.             }
  52.  
  53.             int var11 = var3.indexOf("-", var5);
  54.             if (var11 == -1) {
  55.                if (SchemaUtilities.flavorConvertsTo(var9) == "xsd") {
  56.                   var6 = parseIntField(var3, var5, var3.length());
  57.                   var5 = var3.length();
  58.                   var7 = 1;
  59.                   var8 = 1;
  60.                }
  61.             } else {
  62.                var6 = parseIntField(var3, var5, var11);
  63.                var5 = var11 + 1;
  64.                var11 = var3.indexOf("-", var5);
  65.                if (var11 == -1) {
  66.                   if (SchemaUtilities.flavorConvertsTo(var9) == "xsd") {
  67.                      var7 = parseIntField(var3, var5, var5 + 2);
  68.                      var5 += 2;
  69.                      var8 = 1;
  70.                   }
  71.                } else {
  72.                   var7 = parseIntField(var3, var5, var5 + 2);
  73.                   if (var11 != var5 + 2) {
  74.                      String var20 = "invalid date";
  75.                      return var20;
  76.                   }
  77.  
  78.                   var5 += 3;
  79.                   var8 = parseIntField(var3, var5, var5 + 2);
  80.                   var5 += 2;
  81.                }
  82.             }
  83.  
  84.             if (var6 == -1 || var7 == -1 || var8 == -1 || var3.length() != var5) {
  85.                String var12 = "invalid date";
  86.                return var12;
  87.             }
  88.  
  89.             if (var16) {
  90.                var6 = -var6;
  91.             }
  92.          } else {
  93.             var6 = parseIntField(var3, 0, 4);
  94.             var7 = parseIntField(var3, 4, 6);
  95.             var8 = parseIntField(var3, 6, 8);
  96.             if (var6 == -1 || var7 == -1 || var8 == -1 || var3.length() != 8) {
  97.                String var15 = "invalid date";
  98.                return var15;
  99.             }
  100.          }
  101.  
  102.          ((Calendar)var4).set(1, var6);
  103.          ((Calendar)var4).set(2, var7 - 1);
  104.          ((Calendar)var4).set(5, var8);
  105.          ((Calendar)var4).getTime();
  106.          Object var17 = null;
  107.          return (String)var17;
  108.       } catch (Exception var13) {
  109.          String var10 = "invalid date";
  110.          return var10;
  111.       }
  112.    }
  113.  
  114.    protected String parseTime(SchemaIntf var1, DataType var2, String var3, GregorianCalendar var4) {
  115.       String var5 = LeafValidator.getRootTypeName(var1, var2);
  116.       int var22 = 0;
  117.       int var7 = 0;
  118.       int var8 = 0;
  119.       int var9 = 0;
  120.       int var10 = 0;
  121.       int var11 = 0;
  122.       int var12 = 0;
  123.       boolean var13 = false;
  124.  
  125.       try {
  126.          String var14 = var1.getFlavorName();
  127.          if (var3.startsWith("-", var22) && SchemaUtilities.flavorConvertsTo(var14) != SchemaIntf.SOX2_FLAVOR_NAME) {
  128.             ++var22;
  129.             if (var3.startsWith("-", var22)) {
  130.                ++var22;
  131.             } else {
  132.                var8 = parseIntField(var3, var22, var22 + 2);
  133.                var22 += 2;
  134.                if (var3.charAt(var22) != ':') {
  135.                   String var34 = "invalid time";
  136.                   return var34;
  137.                }
  138.  
  139.                ++var22;
  140.             }
  141.          } else {
  142.             var7 = parseIntField(var3, var22, var22 + 2);
  143.             var22 += 2;
  144.             if (var3.charAt(var22) != ':') {
  145.                String var32 = "invalid time";
  146.                return var32;
  147.             }
  148.  
  149.             ++var22;
  150.             var8 = parseIntField(var3, var22, var22 + 2);
  151.             var22 += 2;
  152.             if (var3.charAt(var22) != ':') {
  153.                String var31 = "invalid time";
  154.                return var31;
  155.             }
  156.  
  157.             ++var22;
  158.          }
  159.  
  160.          var9 = parseIntField(var3, var22, var22 + 2);
  161.          var22 += 2;
  162.          boolean var33 = SchemaUtilities.flavorConvertsTo(var14) != SchemaIntf.SOX2_FLAVOR_NAME;
  163.          if (var3.startsWith(".", var22) && var33) {
  164.             ++var22;
  165.             int var16 = 9;
  166.             int var17 = 0;
  167.             var10 = 0;
  168.             if (SchemaUtilities.flavorConvertsTo(var14) != "xsd") {
  169.                var16 = Integer.MAX_VALUE;
  170.             }
  171.  
  172.             while(var22 < var3.length() && var17 < var16 && Character.isDigit(var3.charAt(var22))) {
  173.                if (var17 < 9) {
  174.                   var10 = var10 * 10 + Character.digit(var3.charAt(var22), 10);
  175.                }
  176.  
  177.                ++var22;
  178.                ++var17;
  179.             }
  180.          }
  181.  
  182.          if (var7 != -1 && var8 != -1 && var9 != -1 && var10 != -1 && var7 <= 24 && (var7 != 24 || var8 == 0 && var9 == 0 && var10 == 0)) {
  183.             boolean var36 = var5 != null && (var5.equals(DataTypeIntf.DATETIMETZ) || var5.equals(DataTypeIntf.TIMETZ));
  184.             if (var3.length() > var22 && var36) {
  185.                if (var3.charAt(var22) == 'Z') {
  186.                   ++var22;
  187.                } else {
  188.                   if (var3.charAt(var22) == '-') {
  189.                      var13 = true;
  190.                   } else if (var3.charAt(var22) != '+') {
  191.                      String var41 = "invalid time";
  192.                      return var41;
  193.                   }
  194.  
  195.                   ++var22;
  196.                   var11 = parseIntField(var3, var22, var22 + 2);
  197.                   var22 += 2;
  198.                   if (var3.charAt(var22) != ':') {
  199.                      String var40 = "invalid time";
  200.                      return var40;
  201.                   }
  202.  
  203.                   ++var22;
  204.                   var12 = parseIntField(var3, var22, var22 + 2);
  205.                   var22 += 2;
  206.                   if (var11 == -1 || var12 == -1) {
  207.                      String var39 = "invalid time";
  208.                      return var39;
  209.                   }
  210.                }
  211.             }
  212.  
  213.             if (var3.length() != var22) {
  214.                String var38 = "invalid time";
  215.                return var38;
  216.             } else {
  217.                ((Calendar)var4).set(11, var7);
  218.                ((Calendar)var4).set(12, var8);
  219.                ((Calendar)var4).set(13, var9);
  220.                ((Calendar)var4).set(14, var10 / 1000000);
  221.                int var37 = (var11 * 60 + var12) * 60 * 1000;
  222.                if (var13) {
  223.                   var37 = -var37;
  224.                }
  225.  
  226.                ((Calendar)var4).set(15, var37);
  227.                Object var18 = null;
  228.                return (String)var18;
  229.             }
  230.          } else {
  231.             String var35 = "invalid time";
  232.             return var35;
  233.          }
  234.       } catch (Exception var19) {
  235.          String var15 = "invalid time";
  236.          return var15;
  237.       }
  238.    }
  239.  
  240.    protected String applyDateTimeFacets(SchemaIntf var1, DataType var2, GregorianCalendar var3) {
  241.       GregorianCalendar var4 = new GregorianCalendar();
  242.       Facet var7 = var2.getFacet(Facet.FACET_ENUM_NAME);
  243.       Vector var8 = var7 == null ? null : (Vector)var7.getValue();
  244.       if (var8 != null) {
  245.          int var9 = -1;
  246.  
  247.          for(int var10 = 0; var10 < var8.size(); ++var10) {
  248.             String var6 = (String)var8.elementAt(var10);
  249.             String var5 = this.parseDateTimeValue(var1, var2, var6, var4);
  250.             if (var5 != null) {
  251.                return String.valueOf("bad enumeration value: ").concat(String.valueOf(var5));
  252.             }
  253.  
  254.             if (var3.equals(var4)) {
  255.                var9 = var10;
  256.             }
  257.          }
  258.  
  259.          if (var9 == -1) {
  260.             return "data does not match enumeration facet";
  261.          }
  262.       }
  263.  
  264.       var7 = var2.getFacet(Facet.FACET_MINEX_NAME);
  265.       boolean var20 = var7 != null && ((String)var7.getValue()).equals("true");
  266.       var7 = var2.getFacet(Facet.FACET_MIN_NAME);
  267.       String var14 = var7 == null ? null : (String)var7.getValue();
  268.       if (var14 != null) {
  269.          String var12 = this.parseDateTimeValue(var1, var2, var14, var4);
  270.          if (var12 != null) {
  271.             return String.valueOf("bad min value: ").concat(String.valueOf(var12));
  272.          }
  273.  
  274.          if (var20) {
  275.             if (!var3.after(((Calendar)var4).getTime())) {
  276.                return String.valueOf(String.valueOf("data must be greater than \"").concat(String.valueOf(var14))).concat(String.valueOf("\""));
  277.             }
  278.  
  279.             if (var3.before(((Calendar)var4).getTime())) {
  280.                return String.valueOf(String.valueOf("data must be greater than or equal to \"").concat(String.valueOf(var14))).concat(String.valueOf("\""));
  281.             }
  282.          }
  283.       }
  284.  
  285.       var7 = var2.getFacet(Facet.FACET_MAXEX_NAME);
  286.       boolean var21 = var7 != null && ((String)var7.getValue()).equals("true");
  287.       var7 = var2.getFacet(Facet.FACET_MAX_NAME);
  288.       var14 = var7 == null ? null : (String)var7.getValue();
  289.       if (var14 != null) {
  290.          String var13 = this.parseDateTimeValue(var1, var2, var14, var4);
  291.          if (var13 != null) {
  292.             return String.valueOf("bad max value: ").concat(String.valueOf(var13));
  293.          }
  294.  
  295.          if (var21) {
  296.             if (!var3.before(((Calendar)var4).getTime())) {
  297.                return String.valueOf(String.valueOf("data must be less than \"").concat(String.valueOf(var14))).concat(String.valueOf("\""));
  298.             }
  299.  
  300.             if (var3.after(((Calendar)var4).getTime())) {
  301.                return String.valueOf(String.valueOf("data must be less than or equal to \"").concat(String.valueOf(var14))).concat(String.valueOf("\""));
  302.             }
  303.          }
  304.       }
  305.  
  306.       DataType var11 = LeafValidator.getParentDataType(var1, var2);
  307.       return var11 != null ? this.applyDateTimeFacets(var1, var11, var3) : null;
  308.    }
  309.  
  310.    protected String parseDateTimeValue(SchemaIntf var1, DataType var2, String var3, GregorianCalendar var4) {
  311.       ((Calendar)var4).clear();
  312.       ((Calendar)var4).setLenient(false);
  313.       ((Calendar)var4).set(15, 0);
  314.       String var5 = LeafValidator.getRootTypeName(var1, var2);
  315.       String var6 = null;
  316.       if (!var5.equals(DataTypeIntf.DATETIMETZ) && !var5.equals(DataTypeIntf.DATETIME) && !var5.equals(DataTypeIntf.INTERVAL)) {
  317.          if (!var5.equals(DataTypeIntf.TIMETZ) && !var5.equals(DataTypeIntf.TIME)) {
  318.             if (var5.equals(DataTypeIntf.DATE)) {
  319.                var6 = this.parseDate(var1, var2, var3, var4);
  320.             }
  321.          } else {
  322.             var6 = this.parseTime(var1, var2, var3, var4);
  323.          }
  324.       } else {
  325.          int var7 = var3.indexOf("T");
  326.          if (var7 == -1) {
  327.             return "invalid date time";
  328.          }
  329.  
  330.          String var8 = var3.substring(0, var7);
  331.          String var9 = var3.substring(var7 + 1);
  332.          var6 = this.parseDate(var1, var2, var8, var4);
  333.          if (var6 == null) {
  334.             var6 = this.parseTime(var1, var2, var9, var4);
  335.          }
  336.       }
  337.  
  338.       return var6;
  339.    }
  340.  
  341.    String validate(SchemaIntf var1, DataType var2, String var3) {
  342.       GregorianCalendar var4 = new GregorianCalendar();
  343.       String var5 = this.parseDateTimeValue(var1, var2, var3, var4);
  344.       if (var5 == null) {
  345.          var5 = this.applyDateTimeFacets(var1, var2, var4);
  346.       }
  347.  
  348.       if (var5 == null) {
  349.          var5 = ((DataValidator)this).applyLexicalFacets(var1, var2, var3);
  350.       }
  351.  
  352.       return var5;
  353.    }
  354. }
  355.