List<Ordering> work = new ArrayList<Ordering>();
// Populate the work Ordering list
Iterator<WebOrdering> webOrderingsIterator = webOrderings.iterator();
while (webOrderingsIterator.hasNext()) {
WebOrdering webOrdering = webOrderingsIterator.next();
Ordering ordering = new Ordering();
ordering.ordering = webOrdering;
ordering.afterOthers = webOrdering.isAfterOthers();
ordering.beforeOthers = webOrdering.isBeforeOthers();
if (ordering.afterOthers && ordering.beforeOthers) {
// Cannot be both after and before others
throw new IllegalStateException(sm.getString("ordering.afterAndBeforeOthers", webOrdering.getJar()));
}
work.add(ordering);
}
// Create double linked relationships between the orderings,
// and resolve names
Iterator<Ordering> workIterator = work.iterator();
while (workIterator.hasNext()) {
Ordering ordering = workIterator.next();
WebOrdering webOrdering = ordering.ordering;
Iterator<String> after = webOrdering.getAfter().iterator();
while (after.hasNext()) {
String name = after.next();
Iterator<Ordering> workIterator2 = work.iterator();
boolean found = false;
while (workIterator2.hasNext()) {
Ordering ordering2 = workIterator2.next();
if (name.equals(ordering2.ordering.getName())) {
if (found) {
// Duplicate name
throw new IllegalStateException(sm.getString("ordering.duplicateName", webOrdering.getJar()));
}
ordering.addAfter(ordering2);
ordering2.addBefore(ordering);
found = true;
}
}
if (!found) {
// Unknown name
throw new IllegalStateException(sm.getString("ordering.unkonwnName", webOrdering.getJar()));
}
}
Iterator<String> before = webOrdering.getBefore().iterator();
while (before.hasNext()) {
String name = before.next();
Iterator<Ordering> workIterator2 = work.iterator();
boolean found = false;
while (workIterator2.hasNext()) {
Ordering ordering2 = workIterator2.next();
if (name.equals(ordering2.ordering.getName())) {
if (found) {
// Duplicate name
throw new IllegalStateException(sm.getString("ordering.duplicateName", webOrdering.getJar()));
}
ordering.addBefore(ordering2);
ordering2.addAfter(ordering);
found = true;
}
}
if (!found) {
// Unknown name
throw new IllegalStateException(sm.getString("ordering.unkonwnName", webOrdering.getJar()));
}
}
}
// Validate ordering