You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mm...@apache.org on 2002/09/06 17:06:09 UTC

cvs commit: xml-xalan/java/src/org/apache/xpath/quantified Every.java Some.java

mmidy       2002/09/06 08:06:08

  Modified:    java/src/org/apache/xml/utils Tag: xslt20 DateTimeObj.java
               java/src/org/apache/xpath/axes Tag: xslt20
                        FilterExprIteratorSimple.java
                        UnionPathIterator.java
               java/src/org/apache/xpath/parser Tag: xslt20 SimpleNode.java
               java/src/org/apache/xpath/quantified Tag: xslt20 Every.java
                        Some.java
  Added:       java/src/org/apache/xpath/axes Tag: xslt20
                        ExceptPathIterator.java InterceptPathIterator.java
               java/src/org/apache/xpath/functions Tag: xslt20
                        FuncAddTZToDT.java FuncAddTZToDate.java
                        FuncAddTZToTime.java FuncRemoveTZFromDT.java
                        FuncRemoveTZFromTime.java
  Log:
  This is a commit includes:
  - Add/remove timezone functions
  - Misc fixes to dateTime and duration
  - Implement Every and Some
  - Fix bug in Union iterator
  - Implement Intercept/Except
  - Misc fixes in SimpleNode, FilterExprIteratorSimple
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1.2.1 +280 -4    xml-xalan/java/src/org/apache/xml/utils/Attic/DateTimeObj.java
  
  Index: DateTimeObj.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/utils/Attic/DateTimeObj.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
  --- DateTimeObj.java	14 Aug 2002 19:45:36 -0000	1.1.2.1
  +++ DateTimeObj.java	6 Sep 2002 15:06:05 -0000	1.1.2.1.2.1
  @@ -64,6 +64,7 @@
   import java.util.Calendar;
   import java.util.Date;
   import java.util.GregorianCalendar;
  +import java.util.TimeZone;
   
   import javax.xml.transform.TransformerException;
   import org.apache.xml.dtm.XType;
  @@ -78,6 +79,7 @@
       // Datetime formats (era and zone handled separately).
       public static final String dt1 = "yyyy-MM-dd'T'HH:mm:ss.ss";
       public static final String dt2 = "yyyy-MM-dd'T'HH:mm:ss";
  +    public static final String dt3 = "yyyy-MM-dd'T'HH:mm";
       public static final String d = "yyyy-MM-dd";
       public static final String gym = "yyyy-MM";
       public static final String gy = "yyyy";
  @@ -111,7 +113,7 @@
        */
       public DateTimeObj(String dateTimeIn) throws TransformerException
       {
  -    	this(dateTimeIn, new String[]{dt2});
  +    	this(dateTimeIn, new String[]{dt1, dt2, dt3});
       }
       
       public DateTimeObj(String dateTimeIn, String[] formatsIn) throws TransformerException
  @@ -161,7 +163,10 @@
         dateFormat.setLenient(false);
         m_dateTime = dateFormat.format(date);
         m_date = date;
  -
  +      m_size = m_dateTime.length();
  +    	// Remember our Time separator
  +      m_T = (m_T = m_dateTime.indexOf("T")) != -1 ? m_T : m_size ;
  +    	
         Calendar cal = Calendar.getInstance();
         cal.setLenient(false);
         cal.setTime(date);
  @@ -311,6 +316,8 @@
         if (z > 0)
         {
           zone = datetime.substring(z);
  +       if(datetime.charAt(z-1) == 'T')
  +          z--;
           datetime = datetime.substring(0, z);
         }
         else if (z == -2)
  @@ -456,7 +463,7 @@
       
       public static DateTimeObj time(Date timeIn) throws TransformerException
       {
  -    	DateTimeObj dt = new DateTimeObj (timeIn, t1);
  +    	DateTimeObj dt = new DateTimeObj (timeIn, t2);
                 
         return dt;
       }
  @@ -598,6 +605,27 @@
       }
       
       /**
  +     * Return the hours from a given timezone.
  +     * @param timezone string
  +     * @return hours from timezone
  +     */
  +    private static int getHrsFromZone(String zone)
  +    {
  +      if (zone.equals("Z"))
  +      return 0;
  +      int sign = 1;
  +      if (zone.startsWith("-"))
  +      {
  +        sign = -1;
  +      }
  +     int index = zone.indexOf(":");
  +     int hr = sign * (Integer.parseInt(zone.substring(1, index)));
  +     int min = sign * (Integer.parseInt(zone.substring(index+1))); 
  +     return hr;
  +    }
  +        
  +    
  +    /**
        * The duration function returns the duration specified in the duration 
        * string given as the argument.. 
        * The duration string that's returned must be a string in the format defined as the 
  @@ -1011,6 +1039,252 @@
        return dt;
       }
       
  +    public DateTimeObj addTZToDateTime(Duration tz) throws TransformerException
  +    {
  +    	if(tz == null)
  +    	{
  +    		if (m_zone.equals("z"))
  +    		return this;
  +    		Date date;
  +    		if (m_zone== null || m_zone.length()==0)
  +    		{
  +    			Calendar cal = Calendar.getInstance();
  +    			int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    			  cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    			int tZone = offset/(60*60*1000);    			
  +    			// ...but without daylight saving:
  +    			//int tZone = TimeZone.getDefault().getRawOffset()/(60*60*1000);
  +    			cal.setTime(m_date);
  +    			cal.add(Calendar.HOUR,-tZone);
  +    			//String dateTime = m_dateTime.substring(0,m_dateTime.indexOf("T"));
  +    			//dateTime = dateTime + formatDigits(hrs) + ":" + formatDigits(m_minute) + ":" + m_second;
  +    			date = cal.getTime();
  +    			DateTimeObj datetime = new DateTimeObj(date, dt2);
  +    			datetime.setZone("Z");
  +    			return datetime; 
  +    		}
  +    		else
  +    		{    			
  +    			Calendar cal = Calendar.getInstance();
  +    			int tZone = getHrsFromZone(m_zone);
  +    			cal.setTime(m_date);
  +    			cal.add(Calendar.HOUR,-tZone);
  +    			date = cal.getTime();
  +    			DateTimeObj datetime = new DateTimeObj(date, dt2);
  +    			datetime.setZone("Z");
  +    			return datetime;
  +    		}
  +    	}
  +    	else
  +    	{
  +    		Calendar cal = Calendar.getInstance();
  +    		int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    		 cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    		int tZone = tz.getSigned() ? tz.getHours() * -1 : tz.getHours();
  +    		// need to handle m_zone!!!
  +    		cal.setTime(m_date);
  +    		cal.add(Calendar.HOUR,-tZone);
  +    		if(m_zone != null && m_zone.length()>0)
  +    		{
  +    		  tZone = getHrsFromZone(m_zone);    		
  +    		  tZone = tZone - (offset/(60*60*1000));    		
  +    		  cal.add(Calendar.HOUR,-tZone);
  +    		}
  +    		//String dateTime = m_dateTime.substring(0,m_dateTime.indexOf("T"));
  +    		//dateTime = dateTime + formatDigits(hrs) + ":" + formatDigits(m_minute) + ":" + m_second;
  +    		Date date = cal.getTime();
  +    		DateTimeObj datetime = new DateTimeObj(date, dt2);
  +    		datetime.setZone("Z");
  +    		return datetime;
  +    	}
  +    }
  +    
  +    public DateTimeObj addTZToDate(Duration tz) throws TransformerException
  +    {
  +    	if(tz == null)
  +    	{
  +    		if (m_zone== null || m_zone.length()==0)
  +    		{
  +    			Calendar cal = Calendar.getInstance();
  +    			int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    			  cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    			int tZone = offset/(60*60*1000);
  +    			boolean signed = tZone < 0;
  +    			DateTimeObj dateTime = date(m_dateTime);
  +    			dateTime.setZone((signed?"-" : "") + formatDigits(tZone) + ":00");
  +    			return dateTime; 
  +    		}
  +    		else
  +    		return this;
  +    	}
  +    	else
  +    	{
  +    		int tZone = tz.getHours();
  +    		// need to handle m_zone!!!
  +    		DateTimeObj dateTime = date(m_dateTime);
  +    		dateTime.setZone((tz.getSigned() ? "-" + formatDigits(tZone) : formatDigits(tZone)) + ":00");
  +    		return dateTime; 
  +    	}
  +    }
  +    
  +    public DateTimeObj addTZToTime(Duration tz) throws TransformerException
  +    {
  +    	if(tz == null)
  +    	{
  +    		if (m_zone.equals("z"))
  +    		return this;
  +    		Date date;
  +    		if (m_zone== null || m_zone.length()==0)
  +    		{
  +    			Calendar cal = Calendar.getInstance();
  +    			int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    			  cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    			int tZone = offset/(60*60*1000);
  +    			cal.setTime(m_date);
  +    			cal.add(Calendar.HOUR,tZone);
  +    			//String dateTime = m_dateTime.substring(0,m_dateTime.indexOf("T"));
  +    			//dateTime = dateTime + formatDigits(hrs) + ":" + formatDigits(m_minute) + ":" + m_second;
  +    			date = cal.getTime();
  +    			DateTimeObj time = time(date);
  +    		    time.setZone("Z");
  +    		    return time; 
  +    		}
  +    		else
  +    		{
  +    			Calendar cal = Calendar.getInstance();
  +    			int tZone = getHrsFromZone(m_zone);
  +    			cal.setTime(m_date);
  +    			cal.add(Calendar.HOUR,-tZone);
  +    			date = cal.getTime();
  +    			DateTimeObj time = time(date);
  +    		    time.setZone("Z");
  +    		    return time;
  +    		}
  +    	}
  +    	else
  +    	{
  +    		Calendar cal = Calendar.getInstance();
  +    		int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    		  cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    		int tZone = tz.getSigned() ? tz.getHours() * -1 : tz.getHours();
  +    		// need to handle m_zone!!!
  +    		cal.setTime(m_date);
  +    		cal.add(Calendar.HOUR,-tZone);
  +    		if(m_zone != null && m_zone.length()>0)
  +    		{
  +    		  tZone = getHrsFromZone(m_zone);
  +    		  tZone = tZone - (offset/(60*60*1000));    		
  +    		  cal.add(Calendar.HOUR,-tZone);
  +    		}
  +    		//String dateTime = m_dateTime.substring(0,m_dateTime.indexOf("T"));
  +    		//dateTime = dateTime + formatDigits(hrs) + ":" + formatDigits(m_minute) + ":" + m_second;
  +    		Date date = cal.getTime();
  +    		DateTimeObj time = time(date);
  +    		time.setZone("Z");
  +    		return time;
  +    	}
  +    }
  +    
  +    public DateTimeObj removeTZFromDateTime(Duration tz) throws TransformerException
  +    {
  +    	if(tz == null)
  +    	{
  +    		if (m_zone.equals("z") || m_zone== null || m_zone.length()==0)
  +    		return this;
  +    		
  +    		Date date;
  +    		Calendar cal = Calendar.getInstance();
  +    		int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    		cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    	
  +    		int tZone = getHrsFromZone(m_zone);
  +    		tZone = (offset/(60*60*1000)) - tZone;
  +    		cal.setTime(m_date);
  +    		cal.add(Calendar.HOUR,tZone);
  +    		date = cal.getTime();
  +    		DateTimeObj datetime = new DateTimeObj(date, dt2);
  +    		datetime.setZone("Z");
  +    		return datetime;    		
  +    	}
  +    	else
  +    	{
  +    		Calendar cal = Calendar.getInstance();
  +    		int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    			  cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    			
  +    		int tZone = tz.getSigned() ? tz.getHours() * -1 : tz.getHours();
  +    		tZone = tZone - (offset/(60*60*1000));
  +    		// need to handle m_zone!!!
  +    		cal.setTime(m_date);
  +    		cal.add(Calendar.HOUR,tZone);
  +    		if(m_zone != null && m_zone.length()>0)
  +    		{
  +    		  tZone = getHrsFromZone(m_zone);
  +    		  tZone = (offset/(60*60*1000)) - tZone;    		
  +    		  cal.add(Calendar.HOUR,tZone);
  +    		}
  +    		//String dateTime = m_dateTime.substring(0,m_dateTime.indexOf("T"));
  +    		//dateTime = dateTime + formatDigits(hrs) + ":" + formatDigits(m_minute) + ":" + m_second;
  +    		Date date = cal.getTime();
  +    		DateTimeObj datetime = new DateTimeObj(date, dt2);
  +    		datetime.setZone("Z");
  +    		return datetime;
  +    	}
  +    }
  +    /* Removed from spec...
  +    public DateTimeObj removeTZFromDate(Duration tz) throws TransformerException
  +    {
  +    	return new DateTimeObj(m_dateTime);
  +    }
  +    */
  +    
  +    public DateTimeObj removeTZFromTime(Duration tz) throws TransformerException
  +    {
  +    	if(tz == null)
  +    	{
  +    		if (m_zone.equals("z") || m_zone== null || m_zone.length()==0)
  +    		return this;
  +    		
  +    		Date date;
  +    		Calendar cal = Calendar.getInstance();
  +    		int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    		cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    	
  +    		int tZone = getHrsFromZone(m_zone);
  +    		tZone = (offset/(60*60*1000)) - tZone;
  +    		cal.setTime(m_date);
  +    		cal.add(Calendar.HOUR,tZone);
  +    		date = cal.getTime();
  +    		DateTimeObj time = time(date);
  +    		time.setZone("Z");
  +    		return time;    		
  +    	}
  +    	else
  +    	{
  +    		Calendar cal = Calendar.getInstance();
  +    		int offset = TimeZone.getDefault().getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), 
  +    			  cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.DAY_OF_WEEK),Math.abs(TimeZone.getDefault().getRawOffset()));
  +    			
  +    		int tZone = tz.getSigned() ? tz.getHours() * -1 : tz.getHours();
  +    		tZone = tZone - (offset/(60*60*1000));
  +    		// need to handle m_zone!!!
  +    		cal.setTime(m_date);
  +    		cal.add(Calendar.HOUR,tZone);
  +    		if(m_zone != null && m_zone.length()>0)
  +    		{
  +    		  tZone = getHrsFromZone(m_zone);
  +    		  tZone = (offset/(60*60*1000)) - tZone;    		
  +    		  cal.add(Calendar.HOUR,tZone);
  +    		}
  +    		//String dateTime = m_dateTime.substring(0,m_dateTime.indexOf("T"));
  +    		//dateTime = dateTime + formatDigits(hrs) + ":" + formatDigits(m_minute) + ":" + m_second;
  +    		Date date = cal.getTime();
  +    		DateTimeObj time = time(date);
  +    		time.setZone("Z");
  +    		return time;
  +    	}
  +    }
  +    
       
       
       public void setYears(int years)
  @@ -1093,7 +1367,9 @@
       
       public String toString()
       {
  -    	return (m_dateTime + (m_zone == null ? "" : m_zone));
  +    	return (m_dateTime + 
  +    	((m_zone != null && m_zone.length()>0 && m_hour == 0) ? "T" : "" )+ 
  +    	(m_zone == null ? "" : m_zone));
       }
       
       
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.2.4.1.2.1 +1 -1      xml-xalan/java/src/org/apache/xpath/axes/FilterExprIteratorSimple.java
  
  Index: FilterExprIteratorSimple.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/FilterExprIteratorSimple.java,v
  retrieving revision 1.2.4.1
  retrieving revision 1.2.4.1.2.1
  diff -u -r1.2.4.1 -r1.2.4.1.2.1
  --- FilterExprIteratorSimple.java	14 Aug 2002 20:06:57 -0000	1.2.4.1
  +++ FilterExprIteratorSimple.java	6 Sep 2002 15:06:06 -0000	1.2.4.1.2.1
  @@ -112,7 +112,7 @@
           vars.setStackFrame(savedStart);
         }
         else
  -          result = (XNodeSet) expr.execute(xctxt);
  +          result = (XSequence)expr.execute(xctxt);
            
         /* %REVIEW% %OPT%
         	Unfortunately, not all variables can be statically resolved into either
  
  
  
  1.26.4.1.2.1 +3 -1      xml-xalan/java/src/org/apache/xpath/axes/UnionPathIterator.java
  
  Index: UnionPathIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/UnionPathIterator.java,v
  retrieving revision 1.26.4.1
  retrieving revision 1.26.4.1.2.1
  diff -u -r1.26.4.1 -r1.26.4.1.2.1
  --- UnionPathIterator.java	14 Aug 2002 20:06:57 -0000	1.26.4.1
  +++ UnionPathIterator.java	6 Sep 2002 15:06:06 -0000	1.26.4.1.2.1
  @@ -65,6 +65,8 @@
   import org.apache.xpath.functions.Function;
   import org.apache.xpath.operations.Variable;
   import org.apache.xpath.parser.Node;
  +import org.apache.xpath.parser.SimpleNode;
  +import org.apache.xpath.seqctor.ExprSequence;
   
   /**
    * <meta name="usage" content="advanced"/>
  @@ -218,7 +220,7 @@
       // we need to turn it back into a path expression here!  There 
       // might be a way to do this a bit earlier.  -sb
       // if(!(((SimpleNode)n).isPathExpr()))
  -    if(n instanceof Variable || n instanceof Function)
  +    if(n instanceof Variable || n instanceof Function || n instanceof ExprSequence)
       {
         FilterExprIteratorSimple feis =
           new FilterExprIteratorSimple((Expression) n);
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +232 -0    xml-xalan/java/src/org/apache/xpath/axes/Attic/ExceptPathIterator.java
  
  
  
  
  1.1.2.1   +136 -0    xml-xalan/java/src/org/apache/xpath/axes/Attic/InterceptPathIterator.java
  
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +127 -0    xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncAddTZToDT.java
  
  
  
  
  1.1.2.1   +127 -0    xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncAddTZToDate.java
  
  
  
  
  1.1.2.1   +127 -0    xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncAddTZToTime.java
  
  
  
  
  1.1.2.1   +127 -0    xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncRemoveTZFromDT.java
  
  
  
  
  1.1.2.1   +127 -0    xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncRemoveTZFromTime.java
  
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1.2.7 +18 -1     xml-xalan/java/src/org/apache/xpath/parser/Attic/SimpleNode.java
  
  Index: SimpleNode.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/parser/Attic/SimpleNode.java,v
  retrieving revision 1.1.2.1.2.6
  retrieving revision 1.1.2.1.2.7
  diff -u -r1.1.2.1.2.6 -r1.1.2.1.2.7
  --- SimpleNode.java	27 Aug 2002 20:51:18 -0000	1.1.2.1.2.6
  +++ SimpleNode.java	6 Sep 2002 15:06:07 -0000	1.1.2.1.2.7
  @@ -9,6 +9,7 @@
   import org.apache.xpath.Expression;
   import org.apache.xpath.ExpressionNode;
   import org.apache.xpath.axes.UnionPathIterator;
  +import org.apache.xpath.axes.ExceptPathIterator;
   import org.apache.xpath.axes.WalkerFactory;
   import org.apache.xpath.functions.*;
   import org.apache.xpath.objects.XDecimal;
  @@ -204,6 +205,21 @@
         new QName("subtract-dayTimeDurationFromTime"),
         new FuncSubtractDTDurationFromTime());
         m_builtInFunctions.put(
  +      new QName("add-timezone-to-dateTime"),
  +      new FuncAddTZToDT());
  +      m_builtInFunctions.put(
  +      new QName("remove-timezone-from-dateTime"),
  +      new FuncRemoveTZFromDT());
  +      m_builtInFunctions.put(
  +      new QName("add-timezone-to-date"),
  +      new FuncAddTZToDate());
  +      m_builtInFunctions.put(
  +      new QName("add-timezone-to-time"),
  +      new FuncAddTZToTime());
  +      m_builtInFunctions.put(
  +      new QName("remove-timezone-from-time"),
  +      new FuncRemoveTZFromTime());
  +      m_builtInFunctions.put(
         new QName("add-days"),
         new FuncAddDays());
         m_builtInFunctions.put(
  @@ -597,7 +613,8 @@
           newNode = new UnionPathIterator();
           break;
         case XPathTreeConstants.JJTINTERSECTEXCEPTEXPR :
  -        newNode = new NonExecutableExpression(p, "JJTUNIONEXPR");
  +        //newNode = new NonExecutableExpression(p, "JJTUNIONEXPR");
  +        newNode = new ExceptPathIterator();
           break;
           //			case XPathTreeConstants.JJTUNION:
           //				newNode = new SimpleNode();
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1.2.1 +194 -1    xml-xalan/java/src/org/apache/xpath/quantified/Attic/Every.java
  
  Index: Every.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/quantified/Attic/Every.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
  --- Every.java	14 Aug 2002 20:07:09 -0000	1.1.2.1
  +++ Every.java	6 Sep 2002 15:06:08 -0000	1.1.2.1.2.1
  @@ -7,10 +7,19 @@
   import org.apache.xpath.Expression;
   import org.apache.xpath.ExpressionOwner;
   import org.apache.xpath.VariableComposeState;
  +import org.apache.xpath.VariableStack;
   import org.apache.xpath.XPathContext;
   import org.apache.xpath.XPathVisitor;
   import org.apache.xpath.objects.XObject;
   import org.apache.xpath.parser.XPath;
  +import org.apache.xpath.operations.Variable;
  +import org.apache.xpath.parser.Node;
  +import org.apache.xpath.parser.QuantifiedExpr;
  +import org.apache.xml.utils.QName;
  +import org.apache.xpath.objects.XBoolean;
  +import org.apache.xpath.objects.XSequence;
  +import org.apache.xpath.objects.XNodeSequenceSingleton;
  +
   
   public class Every extends Expression implements ExpressionOwner
   {
  @@ -18,6 +27,16 @@
     public Every() {
       super();
     }
  +  
  +  Expression m_test;
  +
  +  Expression[] m_clauses;
  +
  +  Expression[] m_vars;
  +  
  +  int m_evalPos = 0;
  +  
  +  XSequence[] m_evaluations;
   
     /** Accept the visitor. **/
     public Object jjtAccept(org.apache.xpath.parser.XPathVisitor visitor, Object data) {
  @@ -25,6 +44,55 @@
     }
     
     /**
  +   * @see org.apache.xpath.parser.Node#jjtSetParent(Node)
  +   */
  +  public void jjtSetParent(Node n)
  +  {
  +    super.jjtSetParent(n);
  +    if (n instanceof QuantifiedExpr) // don't fix up if we're reducing
  +    {
  +      QuantifiedExpr qexpr = (QuantifiedExpr) n;
  +
  +      // At this point all children should have been added except this node.
  +      // This has a fixed number of children.
  +      int i = qexpr.jjtGetNumChildren();
  +      m_test = (Expression) qexpr.jjtGetChild(--i);
  +      m_test.jjtSetParent(this);
  +      i-=2;
  +      int count = (i)/3;
  +      m_clauses = new Expression[count];
  +      m_vars = new Expression[count];
  +      m_evaluations = new XSequence[count--];
  +      //count = 0;
  +      while(i>0)
  +      {      
  +      m_clauses[count] = (Expression) qexpr.jjtGetChild(i);
  +      m_clauses[count].jjtSetParent(this);
  +      m_vars [count]= (Expression) qexpr.jjtGetChild(i-=2);
  +      m_vars[count--].jjtSetParent(this);
  +      i--;
  +      }
  +
  +      qexpr.m_exprs.setSize(1);
  +    }
  +  }
  +  
  +  /**
  +   * @see org.apache.xpath.parser.Node#jjtGetChild(int)
  +   */
  +  public Node jjtGetChild(int i)
  +  {
  +  	if (i == this.jjtGetNumChildren() -1)
  +  	return m_test;
  +  	else if (i < m_vars.length)
  +    return m_vars[i];
  +   else if (i < m_vars.length + m_clauses.length) 
  +    return m_clauses[i - m_vars.length];
  +   else  
  +    return null;
  +  }
  +  
  +  /**
      * @see Expression#deepEquals(Expression)
      */
     public boolean deepEquals(Expression expr)
  @@ -37,6 +105,65 @@
      */
     public void fixupVariables(VariableComposeState vcs)
     {
  +  	vcs.pushStackMark();
  +    int globalsSize = vcs.getGlobalsSize();
  +    for (int i = 0; i < m_vars.length; i++)
  +    {
  +      Variable var = (Variable)m_vars[i];
  +      QName varName = var.getQName();
  +      int index = vcs.addVariableName(varName) - globalsSize;
  +      var.setIndex(index);
  +      var.setFixUpWasCalled(true);
  +      // var.fixupVariables(vcs);
  +    }
  +    m_test.fixupVariables(vcs);
  +    vcs.popStackMark();
  +  }
  +  
  +  /**
  +   * Bind the next tuple of values to the variables
  +   * 
  +   * @return XObject The last evaluation found, or null if 
  +   * there's no more to evaluate.
  +   */
  +  public XObject evalVars(XPathContext xctxt) throws TransformerException
  +  {
  +    //XObject var = m_var.execute(xctxt);
  +    VariableStack vars = xctxt.getVarStack();
  +    XSequence xseq;
  +    XObject xobj = null; 
  +  	for (int i =m_evalPos; i < m_vars.length; i++)
  +  	{
  +  	  if (m_evaluations[i] == null)
  +  	  {
  +  	    XObject clauseResult = m_clauses[i].execute(xctxt);
  +  	    xseq = clauseResult.xseq();
  +  	    m_evaluations[i] = xseq;  	  
  +  	  }
  +  	  else
  +  	  xseq = m_evaluations[i];
  +  	  
  +  	  xobj = xseq.next();
  +  	  if (null != xobj) 
  +  	  { 	
  +  	    vars.setLocalVariable(((Variable)m_vars[i]).getIndex(), xobj);  	    
  +  	    m_evalPos = i;
  +  	  }
  +  	  else
  +  	  {
  +  	    if (i != 0)
  +  	    {
  +  	      m_evaluations[i] = null;
  +  	      i -=2;  	      
  +  	    }
  +  	    else
  +  	    {
  +  	      m_evalPos = m_vars.length;
  +  	      break;
  +  	    }
  +  	  }
  +  	}
  +  	return xobj;
     }
   
   
  @@ -45,7 +172,73 @@
      */
     public XObject execute(XPathContext xctxt) throws TransformerException
     {
  -    return null;
  +    boolean testResult = true;
  +    while (true)
  +    {
  +    XObject xobj; 
  +  	xobj = evalVars(xctxt);
  +  	if (null != xobj)
  +  	{
  +  	  testResult = m_test.execute(xctxt).bool();
  +  	  if(!testResult)
  +       return new XBoolean(false);
  +  	}
  +  	else
  +  	  return new XBoolean(true);
  +    }
  +  //	
  +  //	XSequence xseq = clauseResult.xseq();
  +  	
  + // 	VariableStack vars = xctxt.getVarStack();
  + //   int thisframe = vars.getStackFrame();
  +
  +//  	XObject item;
  + // 	try{
  + /* 	int[] currentExpressionNodes = xctxt.getCurrentExpressionNodeStack();
  +      int currentExpressionNodePos =
  +        xctxt.getCurrentExpressionNodesFirstFree() - 1;
  +    int argsFrame = -1;    
  +    argsFrame = vars.link(1);
  +    vars.setStackFrame(thisframe);
  +      while (null != (item = xseq.next()))
  +      {
  +        xctxt.setCurrentItem(item);
  +        if(item instanceof XNodeSequenceSingleton)
  +        {
  +          XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item;
  +          int nodeHandle = xnss.getNodeHandle();
  +          currentExpressionNodes[currentExpressionNodePos] = nodeHandle;
  +        }
  +             
  +        // This code will create a section on the stack that is all the 
  +        // evaluated arguments.  These will be copied into the real params 
  +        // section of each called template.
  +        
  +        vars.setLocalVariable(0, item, argsFrame);
  +        vars.setStackFrame(argsFrame);
  +        int len=0;
  +        /*
  +        for (int i =0; i < m_vars.length; i++)
  +  	{
  +       XObject left = m_vars[i].execute(xctxt);
  +       
  +       if (left.isNodesetExpr())
  +       len += left.iter().getLength();
  +       else 
  +       len += 1;
  +  	}
  +     //  switch(type)
  +     //  {
  +    //   	case
  +       //m_test.m_left.execute() 
  +        XObject testResult = m_test.execute(xctxt);
  +        XSequence xseq = testResult.xseq();
  +        if(xseq.next()== null)
  +        return new XBoolean(true);
  +        //if (xseq.getLength() == len)
  +       // return new XBoolean(true);
  +      //}
  +    return new XBoolean(false);*/
     }
   
   
  
  
  
  1.1.2.1.2.1 +180 -1    xml-xalan/java/src/org/apache/xpath/quantified/Attic/Some.java
  
  Index: Some.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/quantified/Attic/Some.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
  --- Some.java	14 Aug 2002 20:07:09 -0000	1.1.2.1
  +++ Some.java	6 Sep 2002 15:06:08 -0000	1.1.2.1.2.1
  @@ -7,13 +7,31 @@
   import org.apache.xpath.Expression;
   import org.apache.xpath.ExpressionOwner;
   import org.apache.xpath.VariableComposeState;
  +import org.apache.xpath.VariableStack;
   import org.apache.xpath.XPathContext;
   import org.apache.xpath.XPathVisitor;
   import org.apache.xpath.objects.XObject;
  +import org.apache.xpath.operations.Variable;
  +import org.apache.xpath.parser.Node;
  +import org.apache.xpath.parser.QuantifiedExpr;
  +import org.apache.xml.utils.QName;
  +import org.apache.xpath.objects.XBoolean;
  +import org.apache.xpath.objects.XSequence;
  +import org.apache.xpath.objects.XNodeSequenceSingleton;
   
   public class Some extends Expression implements ExpressionOwner
   {
   	
  +  Expression m_test;
  +
  +  Expression[] m_clauses;
  +
  +  Expression[] m_vars;
  +  
  +  int m_evalPos = 0;
  +  
  +  XSequence[] m_evaluations;
  +	
     public Some() {
       super();
     }
  @@ -21,6 +39,56 @@
     /** Accept the visitor. **/
     public Object jjtAccept(org.apache.xpath.parser.XPathVisitor visitor, Object data) {
       return visitor.visit(this, data);
  +  }  
  +  
  +  
  +  /**
  +   * @see org.apache.xpath.parser.Node#jjtSetParent(Node)
  +   */
  +  public void jjtSetParent(Node n)
  +  {
  +    super.jjtSetParent(n);
  +    if (n instanceof QuantifiedExpr) // don't fix up if we're reducing
  +    {
  +      QuantifiedExpr qexpr = (QuantifiedExpr) n;
  +
  +      // At this point all children should have been added except this node.
  +      // This has a fixed number of children.
  +      int i = qexpr.jjtGetNumChildren();
  +      m_test = (Expression) qexpr.jjtGetChild(--i);
  +      m_test.jjtSetParent(this);
  +      i-=2;
  +      int count = (i)/3;
  +      m_clauses = new Expression[count];
  +      m_vars = new Expression[count];
  +      m_evaluations = new XSequence[count];
  +      count = 0;
  +      while(i>0)
  +      {      
  +      m_clauses[count] = (Expression) qexpr.jjtGetChild(i);
  +      m_clauses[count].jjtSetParent(this);
  +      m_vars [count]= (Expression) qexpr.jjtGetChild(i-=2);
  +      m_vars[count++].jjtSetParent(this);
  +      i--;
  +      }
  +
  +      qexpr.m_exprs.setSize(1);
  +    }
  +  }
  +  
  +  /**
  +   * @see org.apache.xpath.parser.Node#jjtGetChild(int)
  +   */
  +  public Node jjtGetChild(int i)
  +  {
  +  	if (i == this.jjtGetNumChildren() -1)
  +  	return m_test;
  +  	else if (i < m_vars.length)
  +    return m_vars[i];
  +   else if (i < m_vars.length + m_clauses.length) 
  +    return m_clauses[i - m_vars.length];
  +   else  
  +    return null;
     }
     
     /**
  @@ -35,14 +103,125 @@
      */
     public void fixupVariables(VariableComposeState vcs)
     {
  +  	vcs.pushStackMark();
  +    int globalsSize = vcs.getGlobalsSize();
  +    for (int i = 0; i < m_vars.length; i++)
  +    {
  +      Variable var = (Variable)m_vars[i];
  +      QName varName = var.getQName();
  +      int index = vcs.addVariableName(varName) - globalsSize;
  +      var.setIndex(index);
  +      var.setFixUpWasCalled(true);
  +      // var.fixupVariables(vcs);
  +    }
  +    m_test.fixupVariables(vcs);
  +    vcs.popStackMark();
     }
   
     /**
  +   * Bind the next tuple of values to the variables
  +   * 
  +   * @return XObject The last evaluation found, or null if 
  +   * there's no more to evaluate.
  +   */
  +  public XObject evalVars(XPathContext xctxt) throws TransformerException
  +  {
  +    //XObject var = m_var.execute(xctxt);
  +    VariableStack vars = xctxt.getVarStack();
  +    XSequence xseq;
  +    XObject xobj = null; 
  +  	for (int i =m_evalPos; i < m_vars.length; i++)
  +  	{
  +  	  if (m_evaluations[i] == null)
  +  	  {
  +  	    XObject clauseResult = m_clauses[i].execute(xctxt);
  +  	    xseq = clauseResult.xseq();
  +  	    m_evaluations[i] = xseq;  	  
  +  	  }
  +  	  else
  +  	  xseq = m_evaluations[i];
  +  	  
  +  	  xobj = xseq.next();
  +  	  if (null != xobj) 
  +  	  { 	
  +  	    vars.setLocalVariable(((Variable)m_vars[i]).getIndex(), xobj);  	    
  +  	    m_evalPos = i;
  +  	  }
  +  	  else
  +  	  {
  +  	    if (i != 0)
  +  	    {
  +  	      m_evaluations[i] = null;
  +  	      i -=2;  	      
  +  	    }
  +  	    else
  +  	    {
  +  	      m_evalPos = m_vars.length;
  +  	      break;
  +  	    }
  +  	  }
  +  	}
  +  	return xobj;
  +  }
  +
  +
  +  /**
      * @see Expression#execute(XPathContext)
      */
     public XObject execute(XPathContext xctxt) throws TransformerException
     {
  -    return null;
  +    boolean testResult = true;
  +    while (true)
  +    {
  +      XObject xobj; 
  +  	  xobj = evalVars(xctxt);
  +  	  if (null != xobj)
  +  	  {
  +  	     testResult = m_test.execute(xctxt).bool();
  +  	    if(testResult)
  +         return new XBoolean(true);
  +  	  }
  +  	  else 
  +  	  break;  	  
  +    }
  +    return new XBoolean(false);
  +  //	
  +  //	XSequence xseq = clauseResult.xseq();
  +  	
  + // 	VariableStack vars = xctxt.getVarStack();
  + //   int thisframe = vars.getStackFrame();
  +
  +//  	XObject item;
  + // 	try{
  + /* 	int[] currentExpressionNodes = xctxt.getCurrentExpressionNodeStack();
  +      int currentExpressionNodePos =
  +        xctxt.getCurrentExpressionNodesFirstFree() - 1;
  +    int argsFrame = -1;    
  +    argsFrame = vars.link(1);
  +    vars.setStackFrame(thisframe);
  +      while (null != (item = xseq.next()))
  +      {
  +        xctxt.setCurrentItem(item);
  +        if(item instanceof XNodeSequenceSingleton)
  +        {
  +          XNodeSequenceSingleton xnss = (XNodeSequenceSingleton)item;
  +          int nodeHandle = xnss.getNodeHandle();
  +          currentExpressionNodes[currentExpressionNodePos] = nodeHandle;
  +        }
  +             
  +        // This code will create a section on the stack that is all the 
  +        // evaluated arguments.  These will be copied into the real params 
  +        // section of each called template.
  +        
  +        vars.setLocalVariable(0, item, argsFrame);
  +        vars.setStackFrame(argsFrame); 
  +        
  +        boolean testResult = m_test.execute(xctxt).bool();
  +        if(testResult)
  +        return new XBoolean(true);
  +      //}
  +    return new XBoolean(false);*/
  +  	
     }
   
     /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org