mmidy       2002/11/14 14:43:00

  Modified:    java/src/org/apache/xalan/templates Tag: xslt20
                        ElemNumber.java
               java/src/org/apache/xml/utils Tag: xslt20 Duration.java
               java/src/org/apache/xpath/functions Tag: xslt20
                        FuncDeepEqual.java FuncSequenceDeepEqual.java
                        FuncSequenceNodeEqual.java
               java/src/org/apache/xpath/operations Tag: xslt20 Is.java
                        IsNot.java
  Log:
  Fix some problems with deep-equal, sequence-deep-equal, is, isnot, etc...
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.28.2.1.2.1 +21 -3     xml-xalan/java/src/org/apache/xalan/templates/ElemNumber.java
  
  Index: ElemNumber.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/templates/ElemNumber.java,v
  retrieving revision 1.28.2.1
  retrieving revision 1.28.2.1.2.1
  diff -u -r1.28.2.1 -r1.28.2.1.2.1
  --- ElemNumber.java   14 Aug 2002 19:21:28 -0000      1.28.2.1
  +++ ElemNumber.java   14 Nov 2002 22:42:53 -0000      1.28.2.1.2.1
  @@ -75,6 +75,7 @@
   
   import org.apache.xpath.*;
   import org.apache.xpath.objects.XObject;
  +import org.apache.xpath.objects.XSequenceImpl;
   import org.apache.xml.utils.PrefixResolver;
   import org.apache.xml.utils.PrefixResolverDefault;
   import org.apache.xml.utils.QName;
  @@ -893,10 +894,25 @@
       if (null != m_valueExpr)
       {
         XObject countObj = m_valueExpr.execute(xctxt, sourceNode, this);
  -      long count = (long)java.lang.Math.floor(countObj.num()+ 0.5);
  +      if (countObj instanceof XSequenceImpl)
  +      {
  +        XSequenceImpl seq = (XSequenceImpl)countObj;
  +        list = new long[seq.getLength()];
  +        XObject item;
  +        int i = 0; 
  +        while ((item = seq.next()) != null)
  +        {
  +          long count = (long)java.lang.Math.floor(item.num()+ 0.5);
  +          list [i++] = count;
  +        }
  +      }
  +      else
  +      { 
  +       long count = (long)java.lang.Math.floor(countObj.num()+ 0.5);
   
  -      list = new long[1];
  -      list[0] = count;
  +        list = new long[1];
  +        list[0] = count;
  +      }
       }
       else
       {
  @@ -1212,6 +1228,8 @@
           formatter.setGroupingUsed(false);
         }
       }
  +    else
  +      formatter.setGroupingUsed(false);
   
       return formatter;
     }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1.2.1 +2 -2      xml-xalan/java/src/org/apache/xml/utils/Attic/Duration.java
  
  Index: Duration.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/utils/Attic/Duration.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.1.2.1
  diff -u -r1.1.2.1 -r1.1.2.1.2.1
  --- Duration.java     14 Aug 2002 19:45:36 -0000      1.1.2.1
  +++ Duration.java     14 Nov 2002 22:42:54 -0000      1.1.2.1.2.1
  @@ -155,7 +155,7 @@
       public Duration(int[] xercesduration)
       {
                // I'm not sure how they're representing negative durations!?
  -        m_year = xercesduration[0];
  +        m_year = Math.abs(xercesduration[0]);
           m_month = xercesduration[1];
           m_day = xercesduration[2];
           m_hour = xercesduration[3];
  @@ -167,7 +167,7 @@
       public Duration(int year, int month, int day, int hour, int minute, double 
second)
       {
       // I'm not sure how they're representing negative durations!?
  -        m_year = year;
  +        m_year = Math.abs(year);
           m_month = month;
           m_day = day;
           m_hour = hour;
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.4   +12 -4     
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncDeepEqual.java
  
  Index: FuncDeepEqual.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncDeepEqual.java,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- FuncDeepEqual.java        12 Nov 2002 19:03:51 -0000      1.1.2.3
  +++ FuncDeepEqual.java        14 Nov 2002 22:42:57 -0000      1.1.2.4
  @@ -160,11 +160,16 @@
       
     }
     
  -  private boolean deepEqual(int node1, int node2, DTM dtm1, DTM dtm2, 
java.text.Collator collator)
  +  static boolean deepEqual(int node1, int node2, DTM dtm1, DTM dtm2, 
java.text.Collator collator)
     {
       int type = dtm1.getNodeType(node1);
  +    String uri1 = null;
       if (type == dtm2.getNodeType(node2)
  -        && dtm1.getNodeName(node1).equals(dtm2.getNodeName(node2)))
  +        && dtm1.getLocalName(node1).equals(dtm2.getLocalName(node2))
  +         && ((uri1 = dtm1.getNamespaceURI(node1)) == null ?
  +         dtm2.getNamespaceURI(node2) == null :
  +         uri1.equals(dtm2.getNamespaceURI(node2))))  
  +        //dtm1.getNodeName(node1).equals(dtm2.getNodeName(node2)))
       {
         switch (type)
         {
  @@ -259,13 +264,16 @@
                return false;
           }
         }
  -      return true;
  +      else if (!dtm1.hasChildNodes(node1) && !dtm2.hasChildNodes(node2))
  +        return true;
  +      else
  +        return false;
       }
       else
         return false;
     }
     
  -  private int getNonCommentOrPI(DTM dtm, int child)
  +  static private int getNonCommentOrPI(DTM dtm, int child)
     {
       if (DTM.NULL == child)
         return child;
  
  
  
  1.1.2.2   +13 -5     
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceDeepEqual.java
  
  Index: FuncSequenceDeepEqual.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceDeepEqual.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- FuncSequenceDeepEqual.java        10 Oct 2002 14:58:35 -0000      1.1.2.1
  +++ FuncSequenceDeepEqual.java        14 Nov 2002 22:42:59 -0000      1.1.2.2
  @@ -68,6 +68,7 @@
   import org.apache.xpath.objects.XBoolean;
   import java.util.Comparator;
   import org.apache.xml.dtm.XType;
  +import org.apache.xml.dtm.DTM;
   import org.apache.xpath.parser.regexp.*;
   import org.apache.xalan.res.XSLMessages;
   import org.apache.xpath.res.XPATHErrorResources;
  @@ -135,12 +136,19 @@
            {
              if(item1 instanceof XNodeSequenceSingleton)
              {
  -             XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item1;
  +             XNodeSequenceSingleton xnss1 = (XNodeSequenceSingleton)item1;
                
                if (type == item2.getType())
                {
  -               if (!xnss.deepEquals((XNodeSequenceSingleton)item2)) 
  -                 return new XBoolean(false);
  +               XNodeSequenceSingleton xnss2 = (XNodeSequenceSingleton)item2;
  +              if (!xnss1.deepEquals(xnss2))
  +               {
  +                 DTM dtm1 = xnss1.getDTM();
  +                DTM dtm2 = xnss2.getDTM();
  +              int node1 = xnss1.getNodeHandle();
  +              int node2 = xnss2.getNodeHandle();
  +                 return new XBoolean(FuncDeepEqual.deepEqual(node1, node2, dtm1, 
dtm2, collator));
  +               }
                }
              }
            }
  @@ -148,12 +156,12 @@
            {
              if (collator == null)
              {
  -             if (!item1.equals(item2))
  +             if (type != item2.getType() || !item1.equals(item2))
                 return new XBoolean(false);
              }
              else
              {
  -             if (collator.equals(item1.str(), item2.str()))
  +             if (type != item2.getType() || !collator.equals(item1.str(), 
item2.str()))
                  return new XBoolean(false);
              }               
            }
  
  
  
  1.1.2.2   +18 -2     
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceNodeEqual.java
  
  Index: FuncSequenceNodeEqual.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncSequenceNodeEqual.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- FuncSequenceNodeEqual.java        10 Oct 2002 14:58:35 -0000      1.1.2.1
  +++ FuncSequenceNodeEqual.java        14 Nov 2002 22:43:00 -0000      1.1.2.2
  @@ -68,6 +68,7 @@
   import org.apache.xpath.objects.XBoolean;
   import java.util.Comparator;
   import org.apache.xml.dtm.XType;
  +import org.apache.xml.dtm.DTM;
   import org.apache.xpath.parser.regexp.*;
   import org.apache.xalan.res.XSLMessages;
   import org.apache.xpath.res.XPATHErrorResources;
  @@ -96,6 +97,9 @@
        XSequence seq1 = m_arg0.execute(xctxt).xseq();
        XSequence seq2 = m_arg1.execute(xctxt).xseq();
        
  +     if (seq1.getLength() == 0 || seq2.getLength() == 0)
  +     return XSequence.EMPTY;
  +     
        if (seq1.getLength() != seq2.getLength())
          return new XBoolean(false);   
        
  @@ -112,11 +116,23 @@
            {
              if(item1 instanceof XNodeSequenceSingleton)
              {
  -             XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item1;
  +             XNodeSequenceSingleton xnss1 = (XNodeSequenceSingleton)item1;
  +             XNodeSequenceSingleton xnss2 = (XNodeSequenceSingleton)item2;
                
                if (type == item2.getType())
                {
  -               if (!xnss.deepEquals((XNodeSequenceSingleton)item2)) 
  +               DTM dtm1 = xnss1.getDTM();
  +              DTM dtm2 = xnss2.getDTM();
  +            int node1 = xnss1.getNodeHandle();
  +            int node2 = xnss2.getNodeHandle();
  +            
  +            String uri1 = null;
  +             if(!dtm1.getLocalName(node1).equals(dtm2.getLocalName(node2))
  +                || !((uri1 = dtm1.getNamespaceURI(node1)) == null ?
  +         dtm2.getNamespaceURI(node2) == null :
  +         uri1.equals(dtm2.getNamespaceURI(node2))) 
  +             //(!dtm1.getNodeName(node1).equals(dtm2.getNodeName(node2))
  +               || (!xnss1.deepEquals(xnss2))) 
                    return new XBoolean(false);
                }
              }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1.2.1 +17 -4     xml-xalan/java/src/org/apache/xpath/operations/Attic/Is.java
  
  Index: Is.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/operations/Attic/Is.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.1.2.1
  diff -u -r1.1.2.1 -r1.1.2.1.2.1
  --- Is.java   14 Aug 2002 20:07:05 -0000      1.1.2.1
  +++ Is.java   14 Nov 2002 22:43:00 -0000      1.1.2.1.2.1
  @@ -60,6 +60,8 @@
   import org.apache.xpath.XPathContext;
   import org.apache.xpath.objects.XBoolean;
   import org.apache.xpath.objects.XObject;
  +import org.apache.xpath.objects.XSequence;
  +import org.apache.xml.dtm.XType;
   
   /**
    * The '=' operation expression executer.
  @@ -81,7 +83,14 @@
             throws javax.xml.transform.TransformerException
     {
        // Might need to be more sophisticated!
  -    return (left == right) ? XBoolean.S_TRUE : XBoolean.S_FALSE;
  +    if (left.xseq().getLength() == 0 || right.xseq().getLength() == 0)
  +       return XSequence.EMPTY;
  +        
  +     if (left.getType() == XType.NODE && right.getType() == XType.NODE)
  +       return (left.iter().nextNode() == right.iter().nextNode())? XBoolean.S_TRUE 
: XBoolean.S_FALSE;         
  +    //return (left.notEquals(right)) ? XBoolean.S_FALSE : XBoolean.S_TRUE;
  +    else
  +      return XBoolean.S_FALSE;
     }
     
     /**
  @@ -100,9 +109,13 @@
     {
       XObject left = m_left.execute(xctxt, true);
       XObject right = m_right.execute(xctxt, true);
  -
  -     // Might need to be more sophisticated!
  -    boolean result = (left == right) ? true : false;
  +    
  +    // Might need to be more sophisticated!
  +     boolean result;
  +     if (left.getType() == XType.NODE && right.getType() == XType.NODE)
  +       result = (left.iter().nextNode() == right.iter().nextNode())? true : false;  
   
  +    else
  +      result = false;
        left.detach();
        right.detach();
       return result;
  
  
  
  1.1.2.1.2.1 +10 -1     
xml-xalan/java/src/org/apache/xpath/operations/Attic/IsNot.java
  
  Index: IsNot.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/operations/Attic/IsNot.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.1.2.1
  diff -u -r1.1.2.1 -r1.1.2.1.2.1
  --- IsNot.java        14 Aug 2002 20:07:05 -0000      1.1.2.1
  +++ IsNot.java        14 Nov 2002 22:43:00 -0000      1.1.2.1.2.1
  @@ -58,6 +58,8 @@
   
   import org.apache.xpath.objects.XObject;
   import org.apache.xpath.objects.XBoolean;
  +import org.apache.xpath.objects.XSequence;
  +import org.apache.xml.dtm.XType;
   
   /**
    * The '!=' operation expression executer.
  @@ -79,6 +81,13 @@
             throws javax.xml.transform.TransformerException
     {
        // Might have to be more sophisticated!
  -    return (left != right) ? XBoolean.S_TRUE : XBoolean.S_FALSE;
  +     if (left.xseq().getLength() == 0 || right.xseq().getLength() == 0)
  +       return XSequence.EMPTY;
  +        
  +     if (left.getType() == XType.NODE && right.getType() == XType.NODE)
  +       return (left.iter().nextNode() == right.iter().nextNode())? XBoolean.S_FALSE 
: XBoolean.S_TRUE;         
  +    //return (left.notEquals(right)) ? XBoolean.S_FALSE : XBoolean.S_TRUE;
  +    else
  +      return XBoolean.S_FALSE; 
     }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to