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 / parser / MakeDigestVisitor.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  5.3 KB  |  250 lines

  1. package com.ibm.xml.parser;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.FilterOutputStream;
  6. import java.security.MessageDigest;
  7. import java.util.Hashtable;
  8. import java.util.Vector;
  9. import org.w3c.dom.Node;
  10. import org.w3c.dom.Text;
  11.  
  12. public class MakeDigestVisitor extends NOOPVisitor implements Visitor {
  13.    protected MessageDigest messageDigest;
  14.  
  15.    public MakeDigestVisitor(MessageDigest var1) {
  16.       this.messageDigest = var1;
  17.    }
  18.  
  19.    public void visitElementPre(TXElement var1) throws Exception {
  20.       if (((Child)var1).getVisitorDigest() != null) {
  21.          throw new ToNextSiblingTraversalException();
  22.       }
  23.    }
  24.  
  25.    public void visitElementPost(TXElement var1) throws Exception {
  26.       if (((Child)var1).getVisitorDigest() == null) {
  27.          synchronized(var1){}
  28.  
  29.          try {
  30.             try {
  31.                ByteArrayOutputStream var4 = new ByteArrayOutputStream();
  32.                DataOutputStream var5 = new DataOutputStream(var4);
  33.                var5.writeInt(1);
  34.                ((FilterOutputStream)var5).write(getExpandedName(var1).getBytes("UnicodeBigUnmarked"));
  35.                var5.write(0);
  36.                var5.write(0);
  37.                if (var1.attributes == null) {
  38.                   var5.writeInt(0);
  39.                } else {
  40.                   int var6 = var1.attributes.getLength();
  41.                   int var7 = 0;
  42.                   Hashtable var8 = new Hashtable(var6);
  43.                   String[] var9 = new String[var6];
  44.  
  45.                   for(int var10 = 0; var10 < var6; ++var10) {
  46.                      Node var11 = var1.attributes.item(var10);
  47.                      String var12 = var11.getNodeName();
  48.                      if (!var12.equals("xmlns") && !var12.startsWith("xmlns:")) {
  49.                         String var13 = getExpandedName(var11);
  50.                         var8.put(var13, var12);
  51.                         var9[var7++] = var13;
  52.                      }
  53.                   }
  54.  
  55.                   var5.writeInt(var7);
  56.                   Util.heapSort(var9, var7);
  57.  
  58.                   for(int var24 = 0; var24 < var7; ++var24) {
  59.                      this.messageDigest.reset();
  60.                      TXAttribute var25 = (TXAttribute)var1.getAttributeNode((String)var8.get(var9[var24]));
  61.                      this.visitAttributePre(var25);
  62.                      ((FilterOutputStream)var5).write(((Child)var25).getVisitorDigest());
  63.                   }
  64.                }
  65.  
  66.                Vector var18 = new Vector();
  67.                StringBuffer var19 = new StringBuffer();
  68.  
  69.                for(Child var20 = (Child)((Parent)var1).getFirstWithoutReference(); var20 != null; var20 = (Child)var20.getNextWithoutReference()) {
  70.                   byte[] var21 = var20.getVisitorDigest();
  71.                   if (var20 instanceof Text) {
  72.                      var19.append(var20.getNodeValue());
  73.  
  74.                      while(var20.getNextWithoutReference() != null && var20.getNextWithoutReference() instanceof Text) {
  75.                         var20 = (Child)var20.getNextWithoutReference();
  76.                         var21 = var20.getVisitorDigest();
  77.                         var19.append(var20.getNodeValue());
  78.                      }
  79.  
  80.                      if (var19.length() > 0) {
  81.                         TXText var23 = new TXText(var19.toString());
  82.                         this.messageDigest.reset();
  83.                         this.visitTextPre(var23);
  84.                         var21 = ((Child)var23).getVisitorDigest();
  85.                      }
  86.  
  87.                      var19.setLength(0);
  88.                   }
  89.  
  90.                   if (var20.getNodeType() != 8) {
  91.                      var18.addElement(var21);
  92.                   }
  93.                }
  94.  
  95.                var5.writeInt(var18.size());
  96.  
  97.                for(int var22 = 0; var22 < var18.size(); ++var22) {
  98.                   ((FilterOutputStream)var5).write((byte[])var18.elementAt(var22));
  99.                }
  100.  
  101.                ((FilterOutputStream)var5).close();
  102.                this.messageDigest.reset();
  103.                ((Child)var1).setVisitorDigest(this.messageDigest.digest(var4.toByteArray()));
  104.             } catch (Exception var16) {
  105.                throw new LibraryException("com.ibm.xml.parser.MakeDigestVisitor#visitElementPost(): " + ((Throwable)var16).toString());
  106.             }
  107.          } catch (Throwable var17) {
  108.             throw var17;
  109.          }
  110.  
  111.       }
  112.    }
  113.  
  114.    public void visitAttributePre(TXAttribute var1) throws Exception {
  115.       if (((Child)var1).getVisitorDigest() == null) {
  116.          String var2 = var1.getNodeName();
  117.          if (!var2.equals("xmlns") && !var2.startsWith("xmlns:")) {
  118.             synchronized(var1){}
  119.  
  120.             try {
  121.                try {
  122.                   this.messageDigest.reset();
  123.                   this.messageDigest.update((byte)0);
  124.                   this.messageDigest.update((byte)0);
  125.                   this.messageDigest.update((byte)0);
  126.                   this.messageDigest.update((byte)2);
  127.                   this.messageDigest.update(getExpandedName(var1).getBytes("UnicodeBigUnmarked"));
  128.                   this.messageDigest.update((byte)0);
  129.                   this.messageDigest.update((byte)0);
  130.                   ((Child)var1).setVisitorDigest(this.messageDigest.digest(var1.getValue().getBytes("UnicodeBigUnmarked")));
  131.                } catch (Exception var8) {
  132.                   throw new LibraryException("com.ibm.xml.parser.MakeDigestVisitor#visitAttributePre(): " + ((Throwable)var8).toString());
  133.                }
  134.             } catch (Throwable var9) {
  135.                throw var9;
  136.             }
  137.  
  138.          }
  139.       }
  140.    }
  141.  
  142.    public void visitPIPre(TXPI var1) throws Exception {
  143.       if (((Child)var1).getVisitorDigest() == null) {
  144.          synchronized(var1){}
  145.  
  146.          try {
  147.             try {
  148.                this.messageDigest.reset();
  149.                this.messageDigest.update((byte)0);
  150.                this.messageDigest.update((byte)0);
  151.                this.messageDigest.update((byte)0);
  152.                this.messageDigest.update((byte)7);
  153.                this.messageDigest.update(var1.getNodeName().getBytes("UnicodeBigUnmarked"));
  154.                this.messageDigest.update((byte)0);
  155.                this.messageDigest.update((byte)0);
  156.                ((Child)var1).setVisitorDigest(this.messageDigest.digest(var1.getData().getBytes("UnicodeBigUnmarked")));
  157.             } catch (Exception var7) {
  158.                throw new LibraryException("com.ibm.xml.parser.MakeDigestVisitor#visitPIPre(): " + ((Throwable)var7).toString());
  159.             }
  160.          } catch (Throwable var8) {
  161.             throw var8;
  162.          }
  163.  
  164.       }
  165.    }
  166.  
  167.    public void visitCommentPre(TXComment var1) throws Exception {
  168.       if (((Child)var1).getVisitorDigest() == null) {
  169.          synchronized(var1){}
  170.  
  171.          try {
  172.             try {
  173.                this.messageDigest.reset();
  174.                this.messageDigest.update((byte)0);
  175.                this.messageDigest.update((byte)0);
  176.                this.messageDigest.update((byte)0);
  177.                this.messageDigest.update((byte)8);
  178.                ((Child)var1).setVisitorDigest(this.messageDigest.digest(((TXCharacterData)var1).getData().getBytes("UnicodeBigUnmarked")));
  179.             } catch (Exception var7) {
  180.                throw new LibraryException("com.ibm.xml.parser.MakeDigestVisitor#visitCommentPre(): " + ((Throwable)var7).toString());
  181.             }
  182.          } catch (Throwable var8) {
  183.             throw var8;
  184.          }
  185.  
  186.       }
  187.    }
  188.  
  189.    public void visitTextPre(TXText var1) throws Exception {
  190.       if (((Child)var1).getVisitorDigest() == null) {
  191.          synchronized(var1){}
  192.  
  193.          try {
  194.             try {
  195.                this.messageDigest.reset();
  196.                this.messageDigest.update((byte)0);
  197.                this.messageDigest.update((byte)0);
  198.                this.messageDigest.update((byte)0);
  199.                this.messageDigest.update((byte)3);
  200.                ((Child)var1).setVisitorDigest(this.messageDigest.digest(((TXCharacterData)var1).getData().getBytes("UnicodeBigUnmarked")));
  201.             } catch (Exception var7) {
  202.                throw new LibraryException("com.ibm.xml.parser.MakeDigestVisitor#visitTextPre(): " + ((Throwable)var7).toString());
  203.             }
  204.          } catch (Throwable var8) {
  205.             throw var8;
  206.          }
  207.  
  208.       }
  209.    }
  210.  
  211.    public void visitGeneralReferencePre(GeneralReference var1) throws Exception {
  212.    }
  213.  
  214.    public static String getExpandedName(Node var0) {
  215.       Object var1 = null;
  216.       String var8;
  217.       if (var0.getNodeType() == 1) {
  218.          TXDocument var2 = (TXDocument)var0.getOwnerDocument();
  219.          synchronized(var2){}
  220.  
  221.          try {
  222.             String var5 = var2.expandedNameSeparator;
  223.             var2.expandedNameSeparator = ":";
  224.             var8 = ((TXElement)var0).createExpandedName();
  225.             var2.expandedNameSeparator = var5;
  226.          } catch (Throwable var7) {
  227.             throw var7;
  228.          }
  229.       } else {
  230.          if (var0.getNodeType() != 2) {
  231.             throw new LibraryException("com.ibm.xml.parser.MakeDigestVisitor#getExpandedName(): Unsupported node type: " + var0.getNodeType());
  232.          }
  233.  
  234.          String var9 = var0.getNodeName();
  235.          int var3 = var9.indexOf(58);
  236.          if (var3 < 0) {
  237.             var8 = var9;
  238.          } else {
  239.             var8 = ((TXAttribute)var0).getNSName() + ":" + ((TXAttribute)var0).getNSLocalName();
  240.          }
  241.       }
  242.  
  243.       if (var8 != null) {
  244.          var8 = var8.intern();
  245.       }
  246.  
  247.       return var8;
  248.    }
  249. }
  250.