in trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/agent/parse/NameVersion.java [380:490]
private double _matchVersion(VersionEntry entry,
VersionId version)
{
if (version == null)
return NO_MATCH; //request has no version info, but entry has version requirement. Hence no match
if (entry._type == VersionEntry.STAR_TYPE)
{
Iterator<String> vIterator1 = version.iterator();
Iterator<String> vIterator2 = entry._versionId.iterator();
//Check upto where both have values
int matchedParts = 0;
while ((vIterator1.hasNext()) && (vIterator2.hasNext()))
{
String part1 = vIterator1.next();
String part2 = vIterator2.next();
if (!part1.equals(part2))
return NO_MATCH;
matchedParts++;
}
//So far they match. Now if version condition has more
//parts (sub versions), then it must be .0's
while (vIterator2.hasNext())
{
if (!"0".equals(vIterator2.next()))
return NO_MATCH;
}
//now check how many parts the VersionId has
int totNoOfParts = matchedParts;
while (vIterator1.hasNext())
{
totNoOfParts++;
vIterator1.next();
}
return (VERSION_STAR_MATCH * matchedParts / totNoOfParts);
}
else if (entry._type == VersionEntry.PLUS_TYPE)
{
Iterator<String> vIterator1 = version.iterator();
Iterator<String> vIterator2 = entry._versionId.iterator();
//Check upto where both have values
while ((vIterator1.hasNext()) && (vIterator2.hasNext()))
{
try
{
int v1 = Integer.parseInt(vIterator1.next());
int v2 = Integer.parseInt(vIterator2.next());
if (v1 > v2)
return (VERSION_GE_MATCH * (entry._versionId.getVersion() / version.getVersion()));
else if (v1 < v2)
return NO_MATCH;
}
catch (NumberFormatException npe)
{
return NO_MATCH;
}
}
//if we reach here they two number are equal so far
//Check if remaining are .0's
while (vIterator2.hasNext())
{
try
{
if (Integer.parseInt(vIterator2.next()) != 0)
return NO_MATCH;
}
catch (NumberFormatException npe)
{
return NO_MATCH;
}
}
return (VERSION_GE_MATCH * (entry._versionId.getVersion() / version.getVersion()));
}
else
{
//exact match
Iterator<String> vIterator1 = version.iterator();
Iterator<String> vIterator2 = entry._versionId.iterator();
//Check upto where both have values
while ((vIterator1.hasNext()) && (vIterator2.hasNext()))
{
String part1 = vIterator1.next();
String part2 = vIterator2.next();
if (!part1.equals(part2))
return NO_MATCH;
}
while (vIterator1.hasNext())
{
if (!"0".equals(vIterator1.next()))
return NO_MATCH;
}
while (vIterator2.hasNext())
{
if (!"0".equals(vIterator2.next()))
return NO_MATCH;
}
return VERSION_EXACT_MATCH;
}
}