killbill-uncached

Versioning catalog complete (I think)

11/17/2011 11:08:43 PM

Details

diff --git a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
index b511c24..96f7b5a 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/CatalogService.java
@@ -51,7 +51,9 @@ public class CatalogService implements IService, Provider<ICatalog>, ICatalogSer
     public synchronized void loadCatalog() throws ServiceException {
         if (!isInitialized) {
             try {
-            	catalog = loader.load(config.getCatalogURI());
+            	System.out.println("Really really::" + config.getCatalogURI());
+            	String url = config.getCatalogURI();
+            	catalog = loader.load(url);
             	
                 //catalog = XMLLoader.getObjectFromProperty(config.getCatalogURI(), Catalog.class);
                 isInitialized = true;
diff --git a/catalog/src/main/java/com/ning/billing/catalog/InternationalPrice.java b/catalog/src/main/java/com/ning/billing/catalog/InternationalPrice.java
index 63cf388..21bf82a 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/InternationalPrice.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/InternationalPrice.java
@@ -70,20 +70,7 @@ public class InternationalPrice extends ValidatingConfig<Catalog> implements IIn
 		}
 		return new BigDecimal(0);
 	}
-
-	@Override
-	public ValidationErrors validate(Catalog catalog, ValidationErrors errors)  {
-		if(prices.length == 0) return errors;
-		Currency[] supportedCurrencies = catalog.getSupportedCurrencies();
-		for (IPrice p : prices) {
-			Currency currency = p.getCurrency();
-			if(!currencyIsSupported(currency, supportedCurrencies)) {
-				errors.add("Unsupported currency: " + currency, catalog.getCatalogURI(), this.getClass(), "");
-			}
-		}
-		return errors;
-	}
-
+	
 	private boolean currencyIsSupported(Currency currency, Currency[] supportedCurrencies) {
 		for (Currency c : supportedCurrencies) {
 			if(c == currency) {
@@ -102,5 +89,21 @@ public class InternationalPrice extends ValidatingConfig<Catalog> implements IIn
 		this.prices = prices;
 		return this;
 	}
+	
+	@Override
+	public ValidationErrors validate(Catalog catalog, ValidationErrors errors)  {
+		if(prices.length == 0) return errors;
+		Currency[] supportedCurrencies = catalog.getSupportedCurrencies();
+		for (IPrice p : prices) {
+			Currency currency = p.getCurrency();
+			if(!currencyIsSupported(currency, supportedCurrencies)) {
+				errors.add("Unsupported currency: " + currency, catalog.getCatalogURI(), this.getClass(), "");
+			}
+		}
+		return errors;
+	}
+	
+	
+
 
 }
diff --git a/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java b/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
index 59796be..d51c486 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/io/VersionedCatalogLoader.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.catalog.io;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
@@ -23,6 +24,7 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Scanner;
 
@@ -31,18 +33,26 @@ import javax.xml.transform.TransformerException;
 
 import org.xml.sax.SAXException;
 
+import com.google.inject.Inject;
 import com.ning.billing.catalog.Catalog;
 import com.ning.billing.catalog.VersionedCatalog;
 import com.ning.billing.catalog.api.InvalidConfigException;
 import com.ning.billing.lifecycle.IService.ServiceException;
+import com.ning.billing.util.clock.IClock;
 import com.ning.billing.util.config.XMLLoader;
 
 public class VersionedCatalogLoader  {
+	private static final Object PROTOCOL_FOR_FILE = "file";
 	private  final String XML_EXTENSION = ".xml";
 	private  final String HREF_LOW_START = "href=\""; 
 	private  final String HREF_CAPS_START = "HREF=\""; 
 	private  final String HREF_SEARCH_END = "\"";
+	private IClock clock;
 			
+	@Inject 
+	public VersionedCatalogLoader(IClock clock) {
+		this.clock = clock;
+	}
 	
 	public  VersionedCatalog load(String urlString) throws ServiceException{
 		try {
@@ -53,13 +63,23 @@ public class VersionedCatalogLoader  {
 	}
 
 	public  VersionedCatalog load(URL url) throws IOException, SAXException, InvalidConfigException, JAXBException, TransformerException, URISyntaxException {
-		String directoryContents = pullContentsFrom(url);
-		List<URL> xmlURLs = findXmlReferences(directoryContents, url);
+		List<URL> xmlURLs = null;
+		
+		if(url.getPath().endsWith(XML_EXTENSION)) { //assume its an xml file
+			xmlURLs = new ArrayList<URL>();
+        	xmlURLs.add(url);
+		} else { //assume its a directory
+			String directoryContents = pullContentsFrom(url);
+			xmlURLs = findXmlReferences(directoryContents, url);
+		}
+		
 		VersionedCatalog result = new VersionedCatalog();
 		for(URL u : xmlURLs) {
 			Catalog catalog = XMLLoader.getObjectFromURL(u, Catalog.class);
 			result.add(catalog);
 		}
+		Date now = clock.getUTCNow().toDate();
+		result.configureEffectiveDate(now);
 		return result;
 	}
 	
diff --git a/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java b/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
index cb447ea..73d6560 100644
--- a/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
+++ b/catalog/src/main/java/com/ning/billing/catalog/VersionedCatalog.java
@@ -23,6 +23,7 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
+import com.google.inject.Inject;
 import com.ning.billing.catalog.api.ActionPolicy;
 import com.ning.billing.catalog.api.BillingAlignment;
 import com.ning.billing.catalog.api.BillingPeriod;
@@ -37,6 +38,7 @@ import com.ning.billing.catalog.api.PlanAlignmentCreate;
 import com.ning.billing.catalog.api.PlanChangeResult;
 import com.ning.billing.catalog.api.PlanPhaseSpecifier;
 import com.ning.billing.catalog.api.PlanSpecifier;
+import com.ning.billing.util.clock.IClock;
 import com.ning.billing.util.config.ValidatingConfig;
 import com.ning.billing.util.config.ValidationErrors;
 
@@ -46,10 +48,11 @@ public class VersionedCatalog extends ValidatingConfig<Catalog> implements ICata
 	
 	private final List<Catalog> versions = new ArrayList<Catalog>();
 	
+	@Inject
 	public VersionedCatalog() {
 		Catalog baseline = new Catalog(new Date(0)); // init with an empty catalog may need to 
 													 // populate some empty pieces here to make validation work
-		add(baseline);
+		add(baseline); 
 	}
 	
 	private Catalog versionForDate(Date date) {
diff --git a/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java b/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
index 0035bc8..0e2510f 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/io/TestVersionedCatalogLoader.java
@@ -36,9 +36,10 @@ import com.google.common.io.Resources;
 import com.ning.billing.catalog.Catalog;
 import com.ning.billing.catalog.VersionedCatalog;
 import com.ning.billing.catalog.api.InvalidConfigException;
+import com.ning.billing.util.clock.Clock;
 
 public class TestVersionedCatalogLoader {
-	private final VersionedCatalogLoader loader = new VersionedCatalogLoader();
+	private final VersionedCatalogLoader loader = new VersionedCatalogLoader(new Clock());
 
 
 	@Test(enabled=true)
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestCatlogService.java b/catalog/src/test/java/com/ning/billing/catalog/TestCatlogService.java
index 77b1773..fa42ea3 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestCatlogService.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestCatlogService.java
@@ -19,22 +19,39 @@ package com.ning.billing.catalog;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import com.ning.billing.catalog.api.ICatalog;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
 import com.ning.billing.config.ICatalogConfig;
 import com.ning.billing.lifecycle.IService.ServiceException;
+import com.ning.billing.util.clock.Clock;
 
 public class TestCatlogService {
 
 	@Test
-	public void testCatalogService() throws ServiceException {
+	public void testCatalogServiceDirectory() throws ServiceException {
 		CatalogService service = new CatalogService(new ICatalogConfig() {
 			@Override
 			public String getCatalogURI() {
 				return "file:src/test/resources/versionedCatalog";
 			}
 			
-		}, new VersionedCatalogLoader());
+		}, new VersionedCatalogLoader(new Clock()));
 		service.loadCatalog();
 		Assert.assertNotNull(service.getCatalog());
+		Assert.assertEquals(service.getCatalog().getCalalogName(), "WeaponsHireSmall");
+	}
+	
+	@Test
+	public void testCatalogServiceFile() throws ServiceException {
+		CatalogService service = new CatalogService(new ICatalogConfig() {
+			@Override
+			public String getCatalogURI() {
+				return "file:src/test/resources/WeaponsHire.xml";
+			}
+			
+		}, new VersionedCatalogLoader(new Clock()));
+		service.loadCatalog();
+		Assert.assertNotNull(service.getCatalog());
+		Assert.assertEquals(service.getCatalog().getCalalogName(), "Firearms");
 	}
 }
diff --git a/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java b/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
index fc456ac..a857176 100644
--- a/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
+++ b/catalog/src/test/java/com/ning/billing/catalog/TestVersionedCatalog.java
@@ -30,13 +30,12 @@ import org.testng.annotations.Test;
 import org.xml.sax.SAXException;
 
 import com.google.common.io.Resources;
-import com.ning.billing.catalog.Catalog;
-import com.ning.billing.catalog.VersionedCatalog;
 import com.ning.billing.catalog.api.InvalidConfigException;
 import com.ning.billing.catalog.io.VersionedCatalogLoader;
+import com.ning.billing.util.clock.Clock;
 
 public class TestVersionedCatalog {
-	private final VersionedCatalogLoader loader = new VersionedCatalogLoader();
+	private final VersionedCatalogLoader loader = new VersionedCatalogLoader(new Clock());
 
 	@Test(enabled=true)
 	public void testAddCatalog() throws MalformedURLException, IOException, SAXException, InvalidConfigException, JAXBException, TransformerException, URISyntaxException {
diff --git a/entitlement/src/test/resources/entitlement.properties b/entitlement/src/test/resources/entitlement.properties
index fa719ee..d149d78 100644
--- a/entitlement/src/test/resources/entitlement.properties
+++ b/entitlement/src/test/resources/entitlement.properties
@@ -1,4 +1,4 @@
-killbill.catalog.uri=file:src/test/resources/catalog
+killbill.catalog.uri=file:src/test/resources/testInput.xml
 killbill.entitlement.dao.claim.time=60000
 killbill.entitlement.dao.ready.max=1
 killbill.entitlement.engine.notifications.sleep=500