diff --git a/catalog/src/main/java/org/killbill/billing/catalog/CatalogEntityCollection.java b/catalog/src/main/java/org/killbill/billing/catalog/CatalogEntityCollection.java
index 15873b9..78cdda0 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/CatalogEntityCollection.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/CatalogEntityCollection.java
@@ -18,28 +18,24 @@
package org.killbill.billing.catalog;
import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.Map;
+import java.util.TreeMap;
import org.killbill.billing.catalog.api.CatalogEntity;
-import org.weakref.jmx.internal.guava.collect.Ordering;
+
+import com.google.common.collect.Ordering;
public class CatalogEntityCollection<T extends CatalogEntity> implements Collection<T> {
- private final Set<String> keys;
- private final HashMap<String, T> data;
+ private final Map<String, T> data;
public CatalogEntityCollection() {
- this.keys = new TreeSet<String>(Ordering.<String>natural());
- this.data = new HashMap<String, T>();
+ this.data = new TreeMap<String, T>(Ordering.<String>natural());
}
public CatalogEntityCollection(final T[] entities) {
- this.keys = new TreeSet<String>(Ordering.<String>natural());
- this.data = new HashMap<String, T>();
+ this.data = new TreeMap<String, T>(Ordering.<String>natural());
for (final T cur : entities) {
addEntry(cur);
}
@@ -73,12 +69,11 @@ public class CatalogEntityCollection<T extends CatalogEntity> implements Collect
@Override
public Iterator iterator() {
+
// Build an iterator that will return ordered using natural ordering with regard to CatalogEntity#name
- final Iterator<String> keyIterator = keys.iterator();
+ final Iterator<String> keyIterator = data.keySet().iterator();
final Iterator it = new Iterator() {
-
private String prevKey = null;
-
@Override
public boolean hasNext() {
return keyIterator.hasNext();
@@ -99,7 +94,6 @@ public class CatalogEntityCollection<T extends CatalogEntity> implements Collect
return it;
}
-
@Override
public boolean add(final T t) {
addEntry(t);
@@ -163,7 +157,6 @@ public class CatalogEntityCollection<T extends CatalogEntity> implements Collect
return data.values().toArray(new Object[data.size()]);
}
-
@Override
public boolean equals(final Object o) {
if (this == o) {
@@ -174,9 +167,7 @@ public class CatalogEntityCollection<T extends CatalogEntity> implements Collect
}
final CatalogEntityCollection<?> that = (CatalogEntityCollection<?>) o;
-
return data != null ? data.equals(that.data) : that.data == null;
-
}
@Override
@@ -185,12 +176,10 @@ public class CatalogEntityCollection<T extends CatalogEntity> implements Collect
}
private void addEntry(final T entry) {
- keys.add(entry.getName());
data.put(entry.getName(), entry);
}
private boolean removeEntry(final T entry) {
- keys.remove(entry.getName());
return data.remove(entry.getName()) != null;
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPriceList.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPriceList.java
index c48295d..feb06e6 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPriceList.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPriceList.java
@@ -17,7 +17,6 @@
package org.killbill.billing.catalog;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
@@ -56,8 +55,8 @@ public class DefaultPriceList extends ValidatingConfig<StandaloneCatalog> implem
}
@Override
- public Collection<Plan> getPlans() {
- return (Collection<Plan>) plans.getEntries();
+ public Plan[] getPlans() {
+ return (Plan[]) plans.toArray(new DefaultPlan[plans.size()]);
}
/* (non-Javadoc)
@@ -74,10 +73,10 @@ public class DefaultPriceList extends ValidatingConfig<StandaloneCatalog> implem
@Override
public DefaultPlan[] findPlans(final Product product, final BillingPeriod period) {
final List<DefaultPlan> result = new ArrayList<DefaultPlan>(plans.size());
- for (final DefaultPlan cur : getPlans()) {
+ for (final Plan cur : getPlans()) {
if (cur.getProduct().equals(product) &&
(cur.getRecurringBillingPeriod() != null && cur.getRecurringBillingPeriod().equals(period))) {
- result.add(cur);
+ result.add((DefaultPlan) cur);
}
}
return result.toArray(new DefaultPlan[result.size()]);