original = super.preParse(original);
HashMap<String, NameVersion> existingEntries = new HashMap<String, NameVersion>();
ListIterator<String> iter = original.listIterator();
while (iter.hasNext()) {
String entry = iter.next().trim();
MatchResult result = null;
_preparse_matcher_ = _preparse_pattern_.matcher(entry);
if (_preparse_matcher_.matches()) {
result = _preparse_matcher_.toMatchResult();
String name = result.group(1);
String version = result.group(2);
NameVersion nv = new NameVersion(name, version);
NameVersion existing = existingEntries.get(name);
if (null != existing) {
if (nv.versionNumber < existing.versionNumber) {
iter.remove(); // removal removes from original list.
continue;
}
}
existingEntries.put(name, nv);
}
}
// we've now removed all entries less than with less than the largest
// version number for each name that were listed after the largest.
// we now must remove those with smaller than the largest version number
// for each name that were found before the largest
while (iter.hasPrevious()) {
String entry = iter.previous().trim();
MatchResult result = null;
_preparse_matcher_ = _preparse_pattern_.matcher(entry);
if (_preparse_matcher_.matches()) {
result = _preparse_matcher_.toMatchResult();
String name = result.group(1);
String version = result.group(2);
NameVersion nv = new NameVersion(name, version);
NameVersion existing = existingEntries.get(name);
if (null != existing) {
if (nv.versionNumber < existing.versionNumber) {
iter.remove(); // removal removes from original list.