You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by an...@apache.org on 2012/03/13 15:51:21 UTC

svn commit: r1300165 - in /myfaces/trinidad/branches/andys-skin-pregen: trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/ trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/ trinidad-impl/src/main/java/org/apache/myfaces...

Author: andys
Date: Tue Mar 13 14:51:20 2012
New Revision: 1300165

URL: http://svn.apache.org/viewvc?rev=1300165&view=rev
Log:
Checkpoint: cut skin pregen over to new Range API

Also:

- Restored trinidadinternal.util.Range to its former even lamer (non-genericized) self and deprecated.
- Added Version.ALL_VERSIONS constant, which we can do now that we've got an immutable Range class.


Modified:
    myfaces/trinidad/branches/andys-skin-pregen/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/Version.java
    myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/AgentAtRuleMatcher.java
    myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/pregen/variant/AgentVariantExtractor.java
    myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/StableNameUtils.java
    myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/Range.java
    myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/xrts/org/apache/myfaces/trinidadinternal/resource/LoggerBundle.xrts

Modified: myfaces/trinidad/branches/andys-skin-pregen/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/Version.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/andys-skin-pregen/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/Version.java?rev=1300165&r1=1300164&r2=1300165&view=diff
==============================================================================
--- myfaces/trinidad/branches/andys-skin-pregen/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/Version.java (original)
+++ myfaces/trinidad/branches/andys-skin-pregen/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/Version.java Tue Mar 13 14:51:20 2012
@@ -21,9 +21,11 @@ package org.apache.myfaces.trinidad.cont
 import java.util.Arrays;
 import java.util.regex.Pattern;
 
+import org.apache.myfaces.trinidad.util.Range;
+
 /**
  * Immutable Representation of a dot-separated version.
- * 
+ *
  * This representation
  * allows individual sections of the version to be wild-carded and allows
  * for comparisons between Versions with different numbers of version
@@ -33,7 +35,7 @@ import java.util.regex.Pattern;
  * is used for this comparison.  Version subsections with the wild-card value "*"
  * are considered equal.  The value returned by compareTo() is the value of the
  * first non-equal version subsection or zero if all subsections match.
- * 
+ *
  * Due to the support for wild-cards, this class has a natural ordering
  * that is inconsistent with equals.  For example,
  * <code>Version("5", "*").compareTo(Version("5.0", "*") == 0</code>
@@ -42,6 +44,28 @@ import java.util.regex.Pattern;
  */
 public final class Version implements Comparable<Version>
 {
+
+  /**
+   * A constant value holding the minimum value a version can have: 0.
+   */
+  public static final Version MIN_VERSION;
+  
+  /**
+   * A constant value holding a maximum upper bound for versions.
+   *
+   * In theory there is no upper limit to version string values, ie. version
+   * strings could be infinitely long.  However, in practice it can be
+   * helpful to have some way to identify a concrete maximum upper bound to
+   * a range of versions.  Version.MAX_VERSION specifies the Integer.MAX_VALUE
+   * version for this purpose.
+   */
+  public static final Version MAX_VERSION;
+  
+  /**
+   * A range of versions from MIN_VERSION to MAX_VERSION.
+   */
+  public static final Range<Version> ALL_VERSIONS;
+
   /**
    * Creates a Version instance from the dot-separated Version String using null as the padding
    * @param version The dot-separated version to represent
@@ -395,20 +419,11 @@ public final class Version implements Co
   private static final int _NON_INT_VERSION = -1;
   
   private static final String _MAX_STRING = Integer.toString(Integer.MAX_VALUE);
-  /**
-   * A constant value holding the minimum value a version can have: 0.
-   */
-  public static final Version MIN_VERSION = new Version("0");
   
-  /**
-   * A constant value holding a maximum upper bound for versions.
-   *
-   * In theory there is no upper limit to version string values, ie. version
-   * strings could be infinitely long.  However, in practice it can be
-   * helpful to have some way to identify a concrete maximum upper bound to
-   * a range of versions.  Version.MAX_VERSION specifies the Integer.MAX_VALUE
-   * version for this purpose.
-   */
-  public static final Version MAX_VERSION =
-    new Version(_MAX_STRING, _MAX_STRING);
+  static
+  {
+    MIN_VERSION = new Version("0");
+    MAX_VERSION = new Version(_MAX_STRING, _MAX_STRING);
+    ALL_VERSIONS = Range.of(MIN_VERSION, MAX_VERSION);
+  }
 }

Modified: myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/AgentAtRuleMatcher.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/AgentAtRuleMatcher.java?rev=1300165&r1=1300164&r2=1300165&view=diff
==============================================================================
--- myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/AgentAtRuleMatcher.java (original)
+++ myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/AgentAtRuleMatcher.java Tue Mar 13 14:51:20 2012
@@ -32,10 +32,12 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.myfaces.trinidad.context.Version;
+import org.apache.myfaces.trinidad.util.Range;
+
 import org.apache.myfaces.trinidad.logging.TrinidadLogger;
 import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
 import org.apache.myfaces.trinidadinternal.style.util.NameUtils;
-import org.apache.myfaces.trinidadinternal.util.Range;
+
 
 /**
  * Threadsafe immutable class that stores the @agent rule for a particular @agent query string
@@ -237,24 +239,35 @@ public final class AgentAtRuleMatcher
    */
   public Collection<Range<Version>> getAllVersionsForApplication(TrinidadAgent.Application application)
   {
-    Collection<Range<Version>> ranges = new ArrayList<Range<Version>>();
-
+    Collection<Range<Version>> ranges = new HashSet<Range<Version>>();
     Set<AgentMatcher> agentMatchers = _selectorAgents.get(application);
     
     for (AgentMatcher agentMatcher : agentMatchers)
     {
       Range<Version> range = _getVersionRange(agentMatcher);
-      if (range != null)
-      {
-        ranges.add(range);
-      }
+      assert(range != null);
+
+      ranges.add(range);
     }
     
     return ranges;
   }
 
+  // Returns a non-null range of Versions for the specified matcher.
+  private static Range<Version> _getVersionRange(AgentMatcher agentMatcher)
+  {
+    if (agentMatcher instanceof Versioned)
+    {
+      return ((Versioned)agentMatcher).getMatchedVersions();
+    }
+
+    return Version.ALL_VERSIONS;
+  }
+
   /**
-   * Returns a non-null collection of agent version ranges that
+   * Returns a non-null range of versions that represent that intersection
+   * of all verions that:
+   * 
    * a) are matched by this matcher, and...
    * b) contain the specified agent version.
    * 
@@ -262,37 +275,24 @@ public final class AgentAtRuleMatcher
    *   should be returned.
    * @param agentVersion only ranges that contain this version will be matched.
    */  
-  public Collection<Range<Version>> getMatchingVersionsForApplication(
+  public Range<Version> getMatchedVersionsForApplication(
     TrinidadAgent.Application application,
     Version                   agentVersion
     )
   {
     Collection<Range<Version>> allVersions = getAllVersionsForApplication(application);
-    Collection<Range<Version>> matchingVersions = 
-      new ArrayList<Range<Version>>(allVersions.size());
+    
+    Range<Version> matchedVersions = Version.ALL_VERSIONS;
     
     for (Range<Version> range : allVersions)
     {
-      // todo: Range.contains()
-      if ((range.getStart().compareTo(agentVersion) <= 0) &&
-          (range.getEnd().compareTo(agentVersion) >= 0))
+      if (range.contains(agentVersion))
       {
-        matchingVersions.add(range);
+        matchedVersions = matchedVersions.intersect(range);
       }
     }
     
-    return matchingVersions;
-  }
-      
-
-  private static Range<Version> _getVersionRange(AgentMatcher agentMatcher)
-  {
-    if (agentMatcher instanceof Versioned)
-    {
-      return ((Versioned)agentMatcher).getMatchedVersion();
-    }
-
-    return null;
+    return matchedVersions;
   }
 
   /**
@@ -581,7 +581,7 @@ public final class AgentAtRuleMatcher
    */
   private interface Versioned
   {
-    Range<Version> getMatchedVersion();    
+    Range<Version> getMatchedVersions();    
   }
 
   /**
@@ -643,7 +643,7 @@ public final class AgentAtRuleMatcher
     }
 
     @Override
-    public Range<Version> getMatchedVersion()
+    public Range<Version> getMatchedVersions()
     {
       Version start = Version.MIN_VERSION;
       Version end = Version.MAX_VERSION;
@@ -764,7 +764,7 @@ public final class AgentAtRuleMatcher
     }
 
     @Override
-    public Range<Version> getMatchedVersion()
+    public Range<Version> getMatchedVersions()
     {
       List<Range<Version>> versionRanges = new ArrayList<Range<Version>>(_matchers.size());
         
@@ -772,7 +772,7 @@ public final class AgentAtRuleMatcher
       {
         if (matcher instanceof Versioned)
         {
-          Range<Version> versionRange = ((Versioned)matcher).getMatchedVersion();
+          Range<Version> versionRange = ((Versioned)matcher).getMatchedVersions();
           if (versionRange != null)
           {
             versionRanges.add(versionRange);
@@ -783,6 +783,20 @@ public final class AgentAtRuleMatcher
       return _intersectVersionRanges(versionRanges);
     }
 
+    private static Range<Version> _intersectVersionRanges(
+      List<Range<Version>> versionRanges
+      )
+    {
+      Range<Version> intersectRange = Version.ALL_VERSIONS;
+      
+      for (Range versionRange : versionRanges)
+      {
+        intersectRange = intersectRange.intersect(versionRange);
+      }
+
+      return intersectRange;
+    }
+
     @Override
     public int hashCode()
     {
@@ -813,28 +827,7 @@ public final class AgentAtRuleMatcher
       return super.toString() + ", matchers=" + _matchers;
     }
 
-    private static Range<Version> _intersectVersionRanges(
-      List<Range<Version>> versionRanges
-      )
-    {
-      if (versionRanges.size() > 0)
-      {
-        Range<Version> mergedRange = Range.of(Version.MIN_VERSION, Version.MAX_VERSION);
-        Range.intersect(mergedRange, versionRanges);
-
-        return _validVersionRange(mergedRange);
-      }
 
-      return null;
-    }
-    
-    private static Range<Version> _validVersionRange(Range<Version> versionRange)
-    {
-      Version start = versionRange.getStart();
-      Version end = versionRange.getEnd();
-
-      return (start.compareTo(end) < 0) ? versionRange : null;
-    }
 
     private final List<AgentMatcher> _matchers;
     private final int _hashCode;

Modified: myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/pregen/variant/AgentVariantExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/pregen/variant/AgentVariantExtractor.java?rev=1300165&r1=1300164&r2=1300165&view=diff
==============================================================================
--- myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/pregen/variant/AgentVariantExtractor.java (original)
+++ myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/pregen/variant/AgentVariantExtractor.java Tue Mar 13 14:51:20 2012
@@ -33,10 +33,11 @@ import java.util.Set;
 import java.util.TreeSet;
 
 import org.apache.myfaces.trinidad.context.Version;
+import org.apache.myfaces.trinidad.util.Range;
+
 import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent;
 import org.apache.myfaces.trinidadinternal.skin.AgentAtRuleMatcher;
 import org.apache.myfaces.trinidadinternal.style.xml.parse.StyleSheetNode;
-import org.apache.myfaces.trinidadinternal.util.Range;
 
 /**
  * An @-rule processor for extracting @agent rule metadata.
@@ -167,7 +168,7 @@ final class AgentVariantExtractor implem
     Collection<Range<Version>> versionRanges
     )
   {
-    Set<Version> versions = _appVersionsMap.get(application);
+    Collection<Version> versions = _appVersionsMap.get(application);
     assert(versions != null);
     
     for (Range<Version> versionRange : versionRanges)

Modified: myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/StableNameUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/StableNameUtils.java?rev=1300165&r1=1300164&r2=1300165&view=diff
==============================================================================
--- myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/StableNameUtils.java (original)
+++ myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/style/util/StableNameUtils.java Tue Mar 13 14:51:20 2012
@@ -28,6 +28,7 @@ import java.util.Iterator;
 import java.util.Locale;
 
 import org.apache.myfaces.trinidad.context.Version;
+import org.apache.myfaces.trinidad.util.Range;
 import org.apache.myfaces.trinidad.logging.TrinidadLogger;
 import org.apache.myfaces.trinidadinternal.agent.TrinidadAgent.Application;
 import org.apache.myfaces.trinidadinternal.skin.AgentAtRuleMatcher;
@@ -36,7 +37,6 @@ import org.apache.myfaces.trinidadintern
 import org.apache.myfaces.trinidadinternal.style.xml.XMLConstants;
 import org.apache.myfaces.trinidadinternal.style.xml.parse.StyleSheetDocument;
 import org.apache.myfaces.trinidadinternal.style.xml.parse.StyleSheetNode;
-import org.apache.myfaces.trinidadinternal.util.Range;
 import org.apache.myfaces.trinidadinternal.util.nls.LocaleUtils;
 
 /**
@@ -458,7 +458,7 @@ public final class StableNameUtils
       assert(agentVersion != null);
 
       _agentVersion = agentVersion;
-      _matchedVersions = Range.of(Version.MIN_VERSION, Version.MAX_VERSION);
+      _matchedVersions = Version.ALL_VERSIONS;
     }
 
     @Override
@@ -493,18 +493,13 @@ public final class StableNameUtils
       assert(agentMatcher != null);
       assert(agentApplication != null);
 
-      Collection<Range<Version>> versionRanges =
-        agentMatcher.getMatchingVersionsForApplication(agentApplication, _agentVersion);
-      Range.intersect(_matchedVersions, versionRanges);
-
-      if (_matchedVersions.getStart().compareTo(_matchedVersions.getEnd()) > 0)
-      {
-        throw new IllegalStateException(
-          _LOG.getMessage("ILLEGAL_SKIN_AGENT_VERSION_RANGE",
-                                        new Object[] {
-                                          agentApplication,
-                                          _matchedVersions.getStart(),
-                                          _matchedVersions.getEnd() }));
+      Range<Version> matchedVersions =
+        agentMatcher.getMatchedVersionsForApplication(agentApplication, _agentVersion);
+      _matchedVersions = _matchedVersions.intersect(matchedVersions);
+
+      if (_matchedVersions.isEmpty())
+      {
+        _LOG.warning("SKIN_EMPTY_VERSION_RANGE");
       }
     }
 

Modified: myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/Range.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/Range.java?rev=1300165&r1=1300164&r2=1300165&view=diff
==============================================================================
--- myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/Range.java (original)
+++ myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/Range.java Tue Mar 13 14:51:20 2012
@@ -18,110 +18,37 @@
  */
 package org.apache.myfaces.trinidadinternal.util;
 
-import java.util.Collection;
-
 
 /**
- * Represents a range of values with a specific start and end.
- *
  * Used for SelectRangeChoiceBar to allow the app developer to customize
  * the labels to not use numbers, but to use the data model.
- *
- * Also used by skinning to represent agent version ranges.
- *
  * @version $Name:  $ ($Revision: adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/util/Range.java#0 $) $Date: 10-nov-2005.18:49:12 $
+ * 
+ * @deprecated
+ * @see org.apache.myfaces.trinidad.util.Range
  */
-public final class Range<T>
+public final class Range
 {
-  /**
-   * Returns a new range consisting of the specified start and end points.
-   */
-  public static <T> Range<T> of(T start, T end)
-  {
-    Range<T> range = new Range<T>();
-    range.setStart(start);
-    range.setEnd(end);
-    return range;
-  }
-
-  public T getStart()
+  public Object getStart()
   {
     return _start;
   }
   
-  public void setStart(T start)
+  public void setStart(Object start)
   {
     _start = start;
   } 
   
-  public T getEnd()
+  public Object getEnd()
   {
     return _end;
   }
   
-  public void setEnd(T end)
+  public void setEnd(Object end)
   {
     _end = end;
-  }
-
-  @Override  
-  public String toString()
-  {
-    return getClass().getName() + "[" + _start + " - " + _end + "]";
-  }
-
-  /**
-   * Computes the intersection of the specified range with a
-   * collection of other ranges.  The results of the intersection
-   * are stored in the provided range.
-   * 
-   * In the event that there is no intersection, the range will
-   * be left in a state where range.getStart() > range.getEnd().
-   * 
-   * @param range the (non-null) range to intersect/update
-   * @param ranges the ranges to include in the intersection.
-   */
-  public static <C extends Comparable> void intersect(
-    Range<C>             range,
-    Collection<Range<C>> ranges
-    )
-  {
-    // I would have preferred to implement this as a non-static
-    // method.  However, we cannot change the Range class type
-    // parameter to extend Comparable since we have one use case
-    // where T == Object.  Thus, we're stuck with a static method.
-    
-    assert(range != null);
-    
-    if (ranges != null)
-    {
-      for (Range<C> otherRange : ranges)
-      {
-        _intersect(range, otherRange);
-      }
-    }
-  }
-
-  // Computes the intersection of two ranges, updating the
-  // first range.
-  private static <C extends Comparable> void _intersect(
-    Range<C> range,
-    Range<C> otherRange
-    )
-  {
-    C otherStart = otherRange.getStart();
-    if (otherStart.compareTo(range.getStart()) > 0)
-    {
-      range.setStart(otherStart);
-    }
-    
-    C otherEnd = otherRange.getEnd();
-    if (otherEnd.compareTo(range.getEnd()) < 0)
-    {
-      range.setEnd(otherEnd);
-    }
-  }
-
-  private T _start;
-  private T _end;
+  }  
+  
+  private Object _start;
+  private Object _end;
 }

Modified: myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/xrts/org/apache/myfaces/trinidadinternal/resource/LoggerBundle.xrts
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/xrts/org/apache/myfaces/trinidadinternal/resource/LoggerBundle.xrts?rev=1300165&r1=1300164&r2=1300165&view=diff
==============================================================================
--- myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/xrts/org/apache/myfaces/trinidadinternal/resource/LoggerBundle.xrts (original)
+++ myfaces/trinidad/branches/andys-skin-pregen/trinidad-impl/src/main/xrts/org/apache/myfaces/trinidadinternal/resource/LoggerBundle.xrts Tue Mar 13 14:51:20 2012
@@ -1188,6 +1188,6 @@ The skin {0} specified on the requestMap
 
 <resource key="ILLEGAL_SYSTEM_PROPERTY_VALUE">{0} is not a valid value for system property {1}.  Valid values are: {2}</resource>
 
-<resource key="ILLEGAL_SKIN_AGENT_VERSION_RANGE">Illegal version range detected for agent {0}.  Version range start {1} is greater than end {2}.</resource>
+<resource key="SKIN_EMPTY_VERSION_RANGE">An unexecpted empty version range was detected during style sheet generation, possibly indicating a Trinidad skinning defect.</resource>
 
 </resources>