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