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>