killbill-uncached

Fixed inheritance bug that was causing the planPhase to be ignored

10/29/2011 2:29:07 AM

Details

diff --git a/api/src/main/java/com/ning/billing/catalog/api/PlanPhaseSpecifier.java b/api/src/main/java/com/ning/billing/catalog/api/PlanPhaseSpecifier.java
index 4dcfa58..7dadda0 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/PlanPhaseSpecifier.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/PlanPhaseSpecifier.java
@@ -16,14 +16,34 @@
 
 package com.ning.billing.catalog.api;
 
-public class PlanPhaseSpecifier extends PlanSpecifier {
+public class PlanPhaseSpecifier  {
 
 	private final PhaseType phaseType;
+	private final String productName;
+	private final ProductCategory productCategory;
+	private final BillingPeriod billingPeriod;
+	private final String priceListName;
 	
 	public PlanPhaseSpecifier(String productName, ProductCategory productCategory, BillingPeriod billingPeriod,
 			String priceListName, PhaseType phaseType) {
-		super(productName, productCategory, billingPeriod, priceListName);
 		this.phaseType = phaseType;
+		this.productName = productName;
+		this.productCategory = productCategory;
+		this.billingPeriod = billingPeriod;
+		this.priceListName = priceListName;
+	}
+	
+	public String getProductName() {
+		return productName;
+	}
+	public ProductCategory getProductCategory() {
+		return productCategory;
+	}
+	public BillingPeriod getBillingPeriod() {
+		return billingPeriod;
+	}
+	public String getPriceListName() {
+		return priceListName;
 	}
 
 	public PhaseType getPhaseType() {
diff --git a/api/src/main/java/com/ning/billing/catalog/api/PlanSpecifier.java b/api/src/main/java/com/ning/billing/catalog/api/PlanSpecifier.java
index 92b6bc4..39bba68 100644
--- a/api/src/main/java/com/ning/billing/catalog/api/PlanSpecifier.java
+++ b/api/src/main/java/com/ning/billing/catalog/api/PlanSpecifier.java
@@ -31,6 +31,14 @@ public class PlanSpecifier {
 		this.priceListName = priceListName;
 	}
 	
+	public PlanSpecifier(PlanPhaseSpecifier planPhase) {
+		super();
+		this.productName = planPhase.getProductName();
+		this.productCategory = planPhase.getProductCategory();
+		this.billingPeriod = planPhase.getBillingPeriod();
+		this.priceListName = planPhase.getPriceListName();
+	}
+	
 	public String getProductName() {
 		return productName;
 	}
diff --git a/catalog/src/main/java/com/ning/billing/catalog/CasePhase.java b/catalog/src/main/java/com/ning/billing/catalog/CasePhase.java
index e189c5c..36cafc3 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/CasePhase.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/CasePhase.java
@@ -18,10 +18,10 @@ package com.ning.billing.catalog;
 
 import javax.xml.bind.annotation.XmlElement;
 
-import com.ning.billing.catalog.ValidatingConfig.ValidationErrors;
 import com.ning.billing.catalog.api.BillingPeriod;
 import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.PlanSpecifier;
 import com.ning.billing.catalog.api.ProductCategory;
 
 public abstract class CasePhase<T> extends Case<T> {
@@ -39,17 +39,17 @@ public abstract class CasePhase<T> extends Case<T> {
 	}
 	
 	
-	public T getResult(PlanPhaseSpecifier planPhase, Catalog c) {
+	public T getResult(PlanPhaseSpecifier specifier, Catalog c) {
 		if (	
-				(phaseType       == null || planPhase.getPhaseType() == null || planPhase.getPhaseType() == phaseType) &&
-				satisfiesCase(planPhase, c)
+				(phaseType       == null || specifier.getPhaseType() == null || specifier.getPhaseType() == phaseType) &&
+				satisfiesCase(new PlanSpecifier(specifier), c)
 				) {
 			return getResult(); 
 		}
 		return null;
 	}
 	
-	public static <K> K getResult(Case<K>[] cases, PlanPhaseSpecifier planSpec, Catalog catalog) {
+	public static <K> K getResult(CasePhase<K>[] cases, PlanPhaseSpecifier planSpec, Catalog catalog) {
     	if(cases != null) {
     		for(int i = cases.length - 1; i >=0; i --) {
     			K result = cases[i].getResult(planSpec, catalog);
diff --git a/catalog/src/main/java/com/ning/billing/catalog/Catalog.java b/catalog/src/main/java/com/ning/billing/catalog/Catalog.java
index c83da21..c66b411 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/Catalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/Catalog.java
@@ -208,9 +208,7 @@ public class Catalog extends ValidatingConfig implements ICatalog {
     }
     
     @Override
-    public PlanAlignmentCreate getPlanCreateAlignment(PlanSpecifier planPhase) {
-    	PlanPhaseSpecifier specifier = new PlanPhaseSpecifier(planPhase.getProductName(), planPhase.getProductCategory(), planPhase.getBillingPeriod(), planPhase.getPriceListName(), null);
-    	
+    public PlanAlignmentCreate getPlanCreateAlignment(PlanSpecifier specifier) {
         return planRules.getPlanCreateAlignment(specifier, this);
     }
     
diff --git a/catalog/src/main/java/com/ning/billing/catalog/PlanRules.java b/catalog/src/main/java/com/ning/billing/catalog/PlanRules.java
index 34b372f..fa36049 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/PlanRules.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/PlanRules.java
@@ -117,16 +117,16 @@ public class PlanRules extends ValidatingConfig  {
 		return CaseChange.getResult(changeAlignmentCase, from, to, catalog);      
     }
 
-	public PlanAlignmentCreate getPlanCreateAlignment(PlanPhaseSpecifier planPhase, Catalog catalog) {
-		return Case.getResult(createAlignmentCase, planPhase, catalog);      
+	public PlanAlignmentCreate getPlanCreateAlignment(PlanSpecifier specifier, Catalog catalog) {
+		return Case.getResult(createAlignmentCase, specifier, catalog);      
     }
 	
 	public ActionPolicy getPlanCancelPolicy(PlanPhaseSpecifier planPhase, Catalog catalog) {
-		return Case.getResult(cancelCase, planPhase, catalog);      
+		return CasePhase.getResult(cancelCase, planPhase, catalog);      
 	}
 
 	public BillingAlignment getBillingAlignment(PlanPhaseSpecifier planPhase, Catalog catalog) {
-		return Case.getResult(billingAlignmentCase, planPhase, catalog);      
+		return CasePhase.getResult(billingAlignmentCase, planPhase, catalog);      
 	}
 
 	private int getBillingPeriodIndex(BillingPeriod src) {
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestPlanChangeRules.java b/catalog/src/test/java/com/ning/billing/catalog/TestPlanChangeRules.java
index 2ea4319..dc51664 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestPlanChangeRules.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestPlanChangeRules.java
@@ -31,6 +31,7 @@ import com.ning.billing.catalog.PlanPolicyChangeRule.Qualifier;
 import com.ning.billing.catalog.api.ActionPolicy;
 import com.ning.billing.catalog.api.PhaseType;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
+import com.ning.billing.catalog.api.PlanSpecifier;
 
 public class TestPlanChangeRules extends TestPlanRules {
 
@@ -50,7 +51,7 @@ public class TestPlanChangeRules extends TestPlanRules {
 				);
 		assertEquals(ActionPolicy.END_OF_TERM,c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, ANNUAL, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, ANNUAL, null, EVERGREEN)
+				new PlanSpecifier("BP", null, ANNUAL, null)
 				));
 	}
 
@@ -71,12 +72,12 @@ public class TestPlanChangeRules extends TestPlanRules {
 		
 		assertEquals(END_OF_TERM,c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, ANNUAL, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, MONTHLY, null, EVERGREEN)
+				new PlanSpecifier("BP", null, MONTHLY, null)
 				));
 		
 		assertNull(c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, MONTHLY, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, ANNUAL, null, EVERGREEN)
+				new PlanSpecifier("BP", null, ANNUAL, null)
 				));
 
 
@@ -100,12 +101,12 @@ public class TestPlanChangeRules extends TestPlanRules {
 
 		assertEquals(END_OF_TERM,c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, MONTHLY, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, ANNUAL, null, EVERGREEN)
+				new PlanSpecifier("BP", null, ANNUAL, null)
 				));
 		
 		assertNull(c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, ANNUAL, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, MONTHLY, null, EVERGREEN)
+				new PlanSpecifier("BP", null, MONTHLY, null)
 				));
 
 }
@@ -127,12 +128,12 @@ public class TestPlanChangeRules extends TestPlanRules {
 
 		assertEquals(END_OF_TERM,c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, MONTHLY, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, ANNUAL, null, EVERGREEN)
+				new PlanSpecifier("BP", null, ANNUAL, null)
 				));
 		
 		assertNull(c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, MONTHLY, null, TRIAL),
-				new PlanPhaseSpecifier("BP", null, ANNUAL, null, TRIAL)
+				new PlanSpecifier("BP", null, ANNUAL, null)
 				));
 		
 	}
@@ -154,12 +155,12 @@ public class TestPlanChangeRules extends TestPlanRules {
 		
 		assertEquals(IMMEDIATE,c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, MONTHLY, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, ANNUAL, null, EVERGREEN)
+				new PlanSpecifier("BP", null, ANNUAL, null)
 				));
 		
 		assertNull(c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("BP", null, MONTHLY, null, EVERGREEN),
-				new PlanPhaseSpecifier("FP", null, ANNUAL, null, EVERGREEN)
+				new PlanSpecifier("FP", null, ANNUAL, null)
 				));
 		
 
@@ -182,12 +183,12 @@ public class TestPlanChangeRules extends TestPlanRules {
 
 		assertEquals(IMMEDIATE,c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("BP", null, ANNUAL, null, EVERGREEN),
-				new PlanPhaseSpecifier("FP", null, MONTHLY, null, EVERGREEN)
+				new PlanSpecifier("FP", null, MONTHLY, null)
 				));
 		
 		assertNull(c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, MONTHLY, null, TRIAL),
-				new PlanPhaseSpecifier("BP", null, ANNUAL, null, TRIAL)
+				new PlanSpecifier("BP", null, ANNUAL, null)
 				));
 		
 	}
@@ -212,12 +213,12 @@ public class TestPlanChangeRules extends TestPlanRules {
 		
 		assertEquals(END_OF_TERM,c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, ANNUAL, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, MONTHLY, null, EVERGREEN)
+				new PlanSpecifier("BP", null, MONTHLY, null)
 				));
 		
 		assertNull(c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("BP", null, MONTHLY, null, EVERGREEN),
-				new PlanPhaseSpecifier("FP", null, ANNUAL, null, EVERGREEN)
+				new PlanSpecifier("FP", null, ANNUAL, null)
 				));
 
 	}
@@ -240,12 +241,12 @@ public class TestPlanChangeRules extends TestPlanRules {
 		
 		assertEquals(IMMEDIATE,c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("FP", null, ANNUAL, null, EVERGREEN),
-				new PlanPhaseSpecifier("BP", null, MONTHLY, null, EVERGREEN)
+				new PlanSpecifier("BP", null, MONTHLY, null)
 				));
 		
 		assertNull(c.getPlanChangePolicy(
 				new PlanPhaseSpecifier("BP", null, MONTHLY, null, EVERGREEN),
-				new PlanPhaseSpecifier("FP", null, ANNUAL, null, EVERGREEN)
+				new PlanSpecifier("FP", null, ANNUAL, null)
 				));
 
 	}
diff --git a/catalog/src/test/resources/WeaponsHire.xml b/catalog/src/test/resources/WeaponsHire.xml
index 59b9093..a3f4e0b 100644
--- a/catalog/src/test/resources/WeaponsHire.xml
+++ b/catalog/src/test/resources/WeaponsHire.xml
@@ -83,12 +83,6 @@ Use Cases to do:
 		<product name="Refurbish-Maintenance">
 			<category>ADD_ON</category>
 		</product>
-		<product name="Bowie-Knife">
-			<category>BASE</category>
-		</product>
-		<product name="Samuri-Sword">
-			<category>BASE</category>
-		</product>
 	</products>
 	 
 	<rules>