19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License.
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License.
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: UnionPattern.java 468655 2006-10-28 07:12:06Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xpath.patterns;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.Expression;
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.ExpressionOwner;
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathContext;
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.XPathVisitor;
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.objects.XObject;
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class represents a union pattern, which can have multiple individual
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * StepPattern patterns.
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage advanced
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class UnionPattern extends Expression
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    static final long serialVersionUID = -6670449967116905820L;
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** Array of the contained step patterns to be tested.
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *  @serial  */
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private StepPattern[] m_patterns;
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * No arguments to process, so this does nothing.
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void fixupVariables(java.util.Vector vars, int globalsSize)
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for (int i = 0; i < m_patterns.length; i++)
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      m_patterns[i].fixupVariables(vars, globalsSize);
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Tell if this expression or it's subexpressions can traverse outside
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * the current subtree.
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return true if traversal outside the context node's subtree can occur.
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   public boolean canTraverseOutsideSubtree()
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   {
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     if(null != m_patterns)
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     {
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      int n = m_patterns.length;
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      for (int i = 0; i < n; i++)
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if(m_patterns[i].canTraverseOutsideSubtree())
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          return true;
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     }
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     return false;
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   }
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the contained step patterns to be tested.
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param patterns the contained step patterns to be tested.
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setPatterns(StepPattern[] patterns)
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_patterns = patterns;
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(null != patterns)
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    	for(int i = 0; i < patterns.length; i++)
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    	{
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    		patterns[i].exprSetParent(this);
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    	}
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the contained step patterns to be tested.
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return an array of the contained step patterns to be tested.
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public StepPattern[] getPatterns()
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_patterns;
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Test a node to see if it matches any of the patterns in the union.
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param xctxt XPath runtime context.
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return {@link org.apache.xpath.patterns.NodeTest#SCORE_NODETEST},
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         {@link org.apache.xpath.patterns.NodeTest#SCORE_NONE},
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         {@link org.apache.xpath.patterns.NodeTest#SCORE_NSWILD},
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         {@link org.apache.xpath.patterns.NodeTest#SCORE_QNAME}, or
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *         {@link org.apache.xpath.patterns.NodeTest#SCORE_OTHER}.
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @throws javax.xml.transform.TransformerException
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public XObject execute(XPathContext xctxt) throws javax.xml.transform.TransformerException
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    XObject bestScore = null;
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    int n = m_patterns.length;
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    for (int i = 0; i < n; i++)
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      XObject score = m_patterns[i].execute(xctxt);
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      if (score != NodeTest.SCORE_NONE)
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      {
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        if (null == bestScore)
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          bestScore = score;
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson        else if (score.num() > bestScore.num())
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson          bestScore = score;
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      }
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if (null == bestScore)
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      bestScore = NodeTest.SCORE_NONE;
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return bestScore;
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  class UnionPathPartOwner implements ExpressionOwner
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	int m_index;
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	UnionPathPartOwner(int index)
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	{
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		m_index = index;
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	}
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see ExpressionOwner#getExpression()
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public Expression getExpression()
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return m_patterns[m_index];
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    /**
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     * @see ExpressionOwner#setExpression(Expression)
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson     */
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    public void setExpression(Expression exp)
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    	exp.exprSetParent(UnionPattern.this);
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    	m_patterns[m_index] = (StepPattern)exp;
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see org.apache.xpath.XPathVisitable#callVisitors(ExpressionOwner, XPathVisitor)
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void callVisitors(ExpressionOwner owner, XPathVisitor visitor)
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	visitor.visitUnionPattern(owner, this);
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	if(null != m_patterns)
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	{
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		int n = m_patterns.length;
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		for(int i = 0; i < n; i++)
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		{
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  			m_patterns[i].callVisitors(new UnionPathPartOwner(i), visitor);
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		}
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	}
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see Expression#deepEquals(Expression)
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean deepEquals(Expression expr)
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	if(!isSameClass(expr))
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		return false;
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	UnionPattern up = (UnionPattern)expr;
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	if(null != m_patterns)
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	{
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		int n = m_patterns.length;
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		if((null == up.m_patterns) || (up.m_patterns.length != n))
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  			return false;
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		for(int i = 0; i < n; i++)
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		{
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  			if(!m_patterns[i].deepEquals(up.m_patterns[i]))
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  				return false;
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		}
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	}
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	else if(up.m_patterns != null)
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  		return false;
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  	return true;
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
219