killbill-uncached
Changes
beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithCatalogPlugin.java 25(+13 -12)
pom.xml 2(+1 -1)
Details
diff --git a/api/src/main/java/org/killbill/billing/catalog/api/CatalogInternalApi.java b/api/src/main/java/org/killbill/billing/catalog/api/CatalogInternalApi.java
index c50693d..4abfcae 100644
--- a/api/src/main/java/org/killbill/billing/catalog/api/CatalogInternalApi.java
+++ b/api/src/main/java/org/killbill/billing/catalog/api/CatalogInternalApi.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2017 Groupon, Inc
- * Copyright 2014-2017 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -23,7 +23,6 @@ public interface CatalogInternalApi {
public Catalog getFullCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
-
public StaticCatalog getCurrentCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
}
diff --git a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithCatalogPlugin.java b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithCatalogPlugin.java
index 8978a13..a5a647c 100644
--- a/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithCatalogPlugin.java
+++ b/beatrix/src/test/java/org/killbill/billing/beatrix/integration/TestWithCatalogPlugin.java
@@ -31,9 +31,9 @@ import org.killbill.billing.account.api.AccountData;
import org.killbill.billing.api.TestApiListener.NextEvent;
import org.killbill.billing.beatrix.util.InvoiceChecker.ExpectedInvoiceItemCheck;
import org.killbill.billing.callcontext.InternalTenantContext;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.StandaloneCatalog;
import org.killbill.billing.catalog.StandaloneCatalogWithPriceOverride;
-import org.killbill.billing.catalog.VersionedCatalog;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogUserApi;
@@ -41,6 +41,7 @@ import org.killbill.billing.catalog.api.Plan;
import org.killbill.billing.catalog.api.PriceList;
import org.killbill.billing.catalog.api.Product;
import org.killbill.billing.catalog.api.ProductCategory;
+import org.killbill.billing.catalog.api.VersionedCatalog;
import org.killbill.billing.catalog.override.PriceOverride;
import org.killbill.billing.catalog.plugin.TestModelStandalonePluginCatalog;
import org.killbill.billing.catalog.plugin.TestModelVersionedPluginCatalog;
@@ -149,38 +150,38 @@ public class TestWithCatalogPlugin extends TestIntegrationBase {
testCatalogPluginApi.addCatalogVersion("versionedCatalog/WeaponsHireSmall-1.xml");
- final VersionedCatalog catalog1 = (VersionedCatalog) catalogUserApi.getCatalog("whatever", callContext);
+ final VersionedCatalog catalog1 = catalogUserApi.getCatalog("whatever", null, callContext);
Assert.assertEquals(testCatalogPluginApi.getNbLatestCatalogVersionApiCalls(), 1);
Assert.assertEquals(testCatalogPluginApi.getNbVersionedPluginCatalogApiCalls(), 1);
Assert.assertEquals(catalog1.getEffectiveDate().compareTo(testCatalogPluginApi.getLatestCatalogUpdate().toDate()), 0);
// Retrieve 3 more times
- catalogUserApi.getCatalog("whatever", callContext);
- catalogUserApi.getCatalog("whatever", callContext);
- catalogUserApi.getCatalog("whatever", callContext);
+ catalogUserApi.getCatalog("whatever", null, callContext);
+ catalogUserApi.getCatalog("whatever", null, callContext);
+ catalogUserApi.getCatalog("whatever", null, callContext);
Assert.assertEquals(testCatalogPluginApi.getNbLatestCatalogVersionApiCalls(), 4);
Assert.assertEquals(testCatalogPluginApi.getNbVersionedPluginCatalogApiCalls(), 1);
testCatalogPluginApi.addCatalogVersion("versionedCatalog/WeaponsHireSmall-2.xml");
- final VersionedCatalog catalog2 = (VersionedCatalog) catalogUserApi.getCatalog("whatever", callContext);
+ final VersionedCatalog catalog2 = catalogUserApi.getCatalog("whatever", null, callContext);
Assert.assertEquals(testCatalogPluginApi.getNbLatestCatalogVersionApiCalls(), 5);
Assert.assertEquals(testCatalogPluginApi.getNbVersionedPluginCatalogApiCalls(), 2);
Assert.assertEquals(catalog2.getEffectiveDate().compareTo(testCatalogPluginApi.getLatestCatalogUpdate().toDate()), 0);
testCatalogPluginApi.addCatalogVersion("versionedCatalog/WeaponsHireSmall-3.xml");
- final VersionedCatalog catalog3 = (VersionedCatalog) catalogUserApi.getCatalog("whatever", callContext);
+ final VersionedCatalog catalog3 = catalogUserApi.getCatalog("whatever", null, callContext);
Assert.assertEquals(testCatalogPluginApi.getNbLatestCatalogVersionApiCalls(), 6);
Assert.assertEquals(testCatalogPluginApi.getNbVersionedPluginCatalogApiCalls(), 3);
Assert.assertEquals(catalog3.getEffectiveDate().compareTo(testCatalogPluginApi.getLatestCatalogUpdate().toDate()), 0);
// Retrieve 4 more times
- catalogUserApi.getCatalog("whatever", callContext);
- catalogUserApi.getCatalog("whatever", callContext);
- catalogUserApi.getCatalog("whatever", callContext);
- catalogUserApi.getCatalog("whatever", callContext);
+ catalogUserApi.getCatalog("whatever", null, callContext);
+ catalogUserApi.getCatalog("whatever", null, callContext);
+ catalogUserApi.getCatalog("whatever", null, callContext);
+ catalogUserApi.getCatalog("whatever", null, callContext);
Assert.assertEquals(testCatalogPluginApi.getNbLatestCatalogVersionApiCalls(), 10);
Assert.assertEquals(testCatalogPluginApi.getNbVersionedPluginCatalogApiCalls(), 3);
@@ -225,7 +226,7 @@ public class TestWithCatalogPlugin extends TestIntegrationBase {
this.latestCatalogUpdate = new DateTime(inputCatalogVersion.getEffectiveDate());
if (versionedCatalog == null) {
- versionedCatalog = new VersionedCatalog(getClock());
+ versionedCatalog = new DefaultVersionedCatalog(getClock());
}
versionedCatalog.add(inputCatalogVersionWithOverride);
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/api/CatalogService.java b/catalog/src/main/java/org/killbill/billing/catalog/api/CatalogService.java
index 4be34da..6f138f7 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/api/CatalogService.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/api/CatalogService.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2017 Groupon, Inc
- * Copyright 2014-2017 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -18,6 +18,7 @@
package org.killbill.billing.catalog.api;
import org.killbill.billing.callcontext.InternalTenantContext;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.platform.api.KillbillService;
/**
@@ -25,11 +26,11 @@ import org.killbill.billing.platform.api.KillbillService;
*/
public interface CatalogService extends KillbillService {
- public Catalog getFullCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
+ public DefaultVersionedCatalog getFullCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
- public Catalog getFullCatalogForInternalUse(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
+ public DefaultVersionedCatalog getFullCatalogForInternalUse(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
- public StaticCatalog getCurrentCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
+ public DefaultVersionedCatalog getCurrentCatalog(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
- public StaticCatalog getCurrentCatalogForInternalUse(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
+ public DefaultVersionedCatalog getCurrentCatalogForInternalUse(boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) throws CatalogApiException;
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/api/DefaultCatalogInternalApi.java b/catalog/src/main/java/org/killbill/billing/catalog/api/DefaultCatalogInternalApi.java
index afba853..168d48a 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/api/DefaultCatalogInternalApi.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/api/DefaultCatalogInternalApi.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2017 Groupon, Inc
- * Copyright 2014-2017 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java b/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
index 2fee429..fc59d6c 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/api/user/DefaultCatalogUserApi.java
@@ -31,15 +31,15 @@ import org.joda.time.DateTime;
import org.killbill.billing.ErrorCode;
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.catalog.CatalogUpdater;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.StandaloneCatalog;
-import org.killbill.billing.catalog.VersionedCatalog;
-import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.CatalogService;
import org.killbill.billing.catalog.api.CatalogUserApi;
import org.killbill.billing.catalog.api.InvalidConfigException;
import org.killbill.billing.catalog.api.SimplePlanDescriptor;
import org.killbill.billing.catalog.api.StaticCatalog;
+import org.killbill.billing.catalog.api.VersionedCatalog;
import org.killbill.billing.catalog.caching.CatalogCache;
import org.killbill.billing.tenant.api.TenantApiException;
import org.killbill.billing.tenant.api.TenantKV.TenantKey;
@@ -80,14 +80,26 @@ public class DefaultCatalogUserApi implements CatalogUserApi {
}
@Override
- public Catalog getCatalog(final String catalogName, final TenantContext tenantContext) throws CatalogApiException {
+ public VersionedCatalog<? extends StaticCatalog> getCatalog(final String catalogName, @Nullable final DateTime catalogDateVersion, final TenantContext tenantContext) throws CatalogApiException {
final InternalTenantContext internalTenantContext;
if (tenantContext.getAccountId() != null) {
internalTenantContext = internalCallContextFactory.createInternalTenantContext(tenantContext.getAccountId(), tenantContext);
} else {
internalTenantContext = createInternalTenantContext(tenantContext);
}
- return catalogService.getFullCatalog(true, true, internalTenantContext);
+ final DefaultVersionedCatalog fullCatalog = catalogService.getFullCatalog(true, true, internalTenantContext);
+ if (catalogDateVersion == null) {
+ return fullCatalog;
+ } else {
+ final VersionedCatalog<StandaloneCatalog> filteredCatalog = new DefaultVersionedCatalog(clock);
+ for (final StandaloneCatalog v : fullCatalog.getVersions()) {
+ if (v.getEffectiveDate().compareTo(catalogDateVersion.toDate()) >= 0) {
+ filteredCatalog.add(v);
+ break;
+ }
+ }
+ return filteredCatalog;
+ }
}
@Override
@@ -108,7 +120,7 @@ public class DefaultCatalogUserApi implements CatalogUserApi {
final InternalTenantContext internalTenantContext = createInternalTenantContext(callContext);
try {
- final VersionedCatalog versionedCatalog = (VersionedCatalog) catalogService.getFullCatalog(false, true, internalTenantContext);
+ final DefaultVersionedCatalog versionedCatalog = catalogService.getFullCatalog(false, true, internalTenantContext);
// Validation purpose: Will throw if bad XML or catalog validation fails
final InputStream stream = new ByteArrayInputStream(catalogXML.getBytes());
@@ -220,7 +232,7 @@ public class DefaultCatalogUserApi implements CatalogUserApi {
}
private StandaloneCatalog getCurrentStandaloneCatalogForTenant(final InternalTenantContext internalTenantContext) throws CatalogApiException {
- final VersionedCatalog versionedCatalog = (VersionedCatalog) catalogService.getCurrentCatalog(false, false, internalTenantContext);
+ final DefaultVersionedCatalog versionedCatalog = catalogService.getCurrentCatalog(false, false, internalTenantContext);
if (versionedCatalog != null && !versionedCatalog.getVersions().isEmpty()) {
final StandaloneCatalog standaloneCatalogWithPriceOverride = versionedCatalog.getVersions().get(versionedCatalog.getVersions().size() - 1);
return standaloneCatalogWithPriceOverride;
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/caching/CatalogCache.java b/catalog/src/main/java/org/killbill/billing/catalog/caching/CatalogCache.java
index d8cc70f..979b5cb 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/caching/CatalogCache.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/caching/CatalogCache.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -18,15 +18,14 @@
package org.killbill.billing.catalog.caching;
import org.killbill.billing.callcontext.InternalTenantContext;
-import org.killbill.billing.catalog.VersionedCatalog;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.api.CatalogApiException;
public interface CatalogCache {
public void loadDefaultCatalog(final String url) throws CatalogApiException;
- public VersionedCatalog getCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final boolean internalUse, InternalTenantContext tenantContext) throws CatalogApiException;
+ public DefaultVersionedCatalog getCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final boolean internalUse, InternalTenantContext tenantContext) throws CatalogApiException;
public void clearCatalog(InternalTenantContext tenantContext);
-
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/caching/EhCacheCatalogCache.java b/catalog/src/main/java/org/killbill/billing/catalog/caching/EhCacheCatalogCache.java
index a424197..09b6eef 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/caching/EhCacheCatalogCache.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/caching/EhCacheCatalogCache.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2017 Groupon, Inc
- * Copyright 2014-2017 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -25,9 +25,9 @@ import org.joda.time.DateTime;
import org.killbill.billing.ErrorCode;
import org.killbill.billing.ObjectType;
import org.killbill.billing.callcontext.InternalTenantContext;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.StandaloneCatalog;
import org.killbill.billing.catalog.StandaloneCatalogWithPriceOverride;
-import org.killbill.billing.catalog.VersionedCatalog;
import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.io.VersionedCatalogLoader;
@@ -55,7 +55,7 @@ public class EhCacheCatalogCache implements CatalogCache {
private final Logger logger = LoggerFactory.getLogger(EhCacheCatalogCache.class);
- private final CacheController<Long, Catalog> cacheController;
+ private final CacheController<Long, DefaultVersionedCatalog> cacheController;
private final VersionedCatalogLoader loader;
private final CacheLoaderArgument cacheLoaderArgumentWithTemplateFiltering;
private final CacheLoaderArgument cacheLoaderArgument;
@@ -64,7 +64,7 @@ public class EhCacheCatalogCache implements CatalogCache {
private final PriceOverride priceOverride;
private final InternalCallContextFactory internalCallContextFactory;
- private VersionedCatalog defaultCatalog;
+ private DefaultVersionedCatalog defaultCatalog;
@Inject
public EhCacheCatalogCache(final OSGIServiceRegistration<CatalogPluginApi> pluginRegistry,
@@ -92,7 +92,7 @@ public class EhCacheCatalogCache implements CatalogCache {
}
@Override
- public VersionedCatalog getCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final boolean internalUse, final InternalTenantContext tenantContext) throws CatalogApiException {
+ public DefaultVersionedCatalog getCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final boolean internalUse, final InternalTenantContext tenantContext) throws CatalogApiException {
//
// This is used by Kill Bill services (subscription/invoice/... creation/change)
@@ -101,10 +101,10 @@ public class EhCacheCatalogCache implements CatalogCache {
// specific pieces of catalog for certain account). In such a scenario plugin would have to make sure that Kill Bill does not cache the catalog (since this is only cached at the tenant level)
//
if (internalUse) {
- Preconditions.checkState(tenantContext.getAccountRecordId() !=null, "Unexpected null accountRecordId in context issued from internal Kill Bill service");
+ Preconditions.checkState(tenantContext.getAccountRecordId() != null, "Unexpected null accountRecordId in context issued from internal Kill Bill service");
}
- final VersionedCatalog pluginVersionedCatalog = getCatalogFromPlugins(tenantContext);
+ final DefaultVersionedCatalog pluginVersionedCatalog = getCatalogFromPlugins(tenantContext);
if (pluginVersionedCatalog != null) {
return pluginVersionedCatalog;
}
@@ -115,12 +115,12 @@ public class EhCacheCatalogCache implements CatalogCache {
// The cache loader might choke on some bad xml -- unlikely since we check its validity prior storing it,
// but to be on the safe side;;
try {
- VersionedCatalog tenantCatalog = (VersionedCatalog) cacheController.get(tenantContext.getTenantRecordId(),
- filterTemplateCatalog ? cacheLoaderArgumentWithTemplateFiltering : cacheLoaderArgument);
+ DefaultVersionedCatalog tenantCatalog = cacheController.get(tenantContext.getTenantRecordId(),
+ filterTemplateCatalog ? cacheLoaderArgumentWithTemplateFiltering : cacheLoaderArgument);
// It means we are using a default catalog in a multi-tenant deployment, that does not really match a real use case, but we want to support it
// for test purpose.
if (useDefaultCatalog && tenantCatalog == null) {
- tenantCatalog = new VersionedCatalog(defaultCatalog.getClock());
+ tenantCatalog = new DefaultVersionedCatalog(defaultCatalog.getClock());
for (final StandaloneCatalog cur : defaultCatalog.getVersions()) {
final StandaloneCatalogWithPriceOverride curWithOverride = new StandaloneCatalogWithPriceOverride(cur, priceOverride, tenantContext.getTenantRecordId(), internalCallContextFactory);
tenantCatalog.add(curWithOverride);
@@ -140,7 +140,7 @@ public class EhCacheCatalogCache implements CatalogCache {
}
}
- private VersionedCatalog getCatalogFromPlugins(final InternalTenantContext internalTenantContext) throws CatalogApiException {
+ private DefaultVersionedCatalog getCatalogFromPlugins(final InternalTenantContext internalTenantContext) throws CatalogApiException {
final TenantContext tenantContext = internalCallContextFactory.createTenantContext(internalTenantContext);
for (final String service : pluginRegistry.getAllServices()) {
final CatalogPluginApi plugin = pluginRegistry.getServiceForName(service);
@@ -156,7 +156,7 @@ public class EhCacheCatalogCache implements CatalogCache {
// A null latestCatalogUpdatedDate by passing caching, by fetching full catalog from plugin below (compatibility mode with 0.18.x or non optimized plugin api mode)
//
if (latestCatalogUpdatedDate != null) {
- final VersionedCatalog tenantCatalog = (VersionedCatalog) cacheController.get(internalTenantContext.getTenantRecordId(), cacheLoaderArgument);
+ final DefaultVersionedCatalog tenantCatalog = cacheController.get(internalTenantContext.getTenantRecordId(), cacheLoaderArgument);
if (tenantCatalog != null) {
if (tenantCatalog.getEffectiveDate().compareTo(latestCatalogUpdatedDate.toDate()) == 0) {
// Current cached version matches the one from the plugin
@@ -169,7 +169,7 @@ public class EhCacheCatalogCache implements CatalogCache {
// First plugin that gets something (for that tenant) returns it
if (pluginCatalog != null) {
logger.info("Returning catalog from plugin {} on tenant {} ", service, internalTenantContext.getTenantRecordId());
- final VersionedCatalog resolvedPluginCatalog = versionedCatalogMapper.toVersionedCatalog(pluginCatalog, internalTenantContext);
+ final DefaultVersionedCatalog resolvedPluginCatalog = versionedCatalogMapper.toVersionedCatalog(pluginCatalog, internalTenantContext);
cacheController.remove(internalTenantContext.getTenantRecordId());
cacheController.putIfAbsent(internalTenantContext.getTenantRecordId(), resolvedPluginCatalog);
return resolvedPluginCatalog;
@@ -203,7 +203,7 @@ public class EhCacheCatalogCache implements CatalogCache {
// Provided in the classpath
this.defaultCatalog = loader.loadDefaultCatalog("EmptyCatalog.xml");
} catch (final CatalogApiException e) {
- this.defaultCatalog = new VersionedCatalog();
+ this.defaultCatalog = new DefaultVersionedCatalog();
logger.error("Exception loading EmptyCatalog - should never happen!", e);
}
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultCatalogService.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultCatalogService.java
index 8733dd2..0497adf 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultCatalogService.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultCatalogService.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -21,10 +21,8 @@ package org.killbill.billing.catalog;
import javax.inject.Named;
import org.killbill.billing.callcontext.InternalTenantContext;
-import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.CatalogService;
-import org.killbill.billing.catalog.api.StaticCatalog;
import org.killbill.billing.catalog.caching.CatalogCache;
import org.killbill.billing.catalog.glue.CatalogModule;
import org.killbill.billing.platform.api.KillbillService;
@@ -45,12 +43,10 @@ public class DefaultCatalogService implements KillbillService, CatalogService {
private static final String CATALOG_SERVICE_NAME = "catalog-service";
private final CatalogConfig config;
- private boolean isInitialized;
-
private final TenantInternalApi tenantInternalApi;
-
private final CatalogCache catalogCache;
private final CacheInvalidationCallback cacheInvalidationCallback;
+ private boolean isInitialized;
@Inject
public DefaultCatalogService(final CatalogConfig config,
@@ -74,7 +70,7 @@ public class DefaultCatalogService implements KillbillService, CatalogService {
log.info("Successfully loaded the default catalog {}", config.getCatalogURI());
}
isInitialized = true;
- } catch (Exception e) {
+ } catch (final Exception e) {
throw new ServiceException(e);
}
}
@@ -91,26 +87,26 @@ public class DefaultCatalogService implements KillbillService, CatalogService {
}
@Override
- public Catalog getFullCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
+ public DefaultVersionedCatalog getFullCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
return getCatalog(useDefaultCatalog, filterTemplateCatalog, false, context);
}
@Override
- public Catalog getFullCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
+ public DefaultVersionedCatalog getFullCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
return getCatalog(useDefaultCatalog, filterTemplateCatalog, true, context);
}
@Override
- public StaticCatalog getCurrentCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
+ public DefaultVersionedCatalog getCurrentCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
return getCatalog(useDefaultCatalog, filterTemplateCatalog, false, context);
}
@Override
- public StaticCatalog getCurrentCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
+ public DefaultVersionedCatalog getCurrentCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final InternalTenantContext context) throws CatalogApiException {
return getCatalog(useDefaultCatalog, filterTemplateCatalog, true, context);
}
- private VersionedCatalog getCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final boolean internalUse, final InternalTenantContext context) throws CatalogApiException {
+ private DefaultVersionedCatalog getCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, final boolean internalUse, final InternalTenantContext context) throws CatalogApiException {
return catalogCache.getCatalog(useDefaultCatalog, filterTemplateCatalog, internalUse, context);
}
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/io/CatalogLoader.java b/catalog/src/main/java/org/killbill/billing/catalog/io/CatalogLoader.java
index 953dfe3..d3c5501 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/io/CatalogLoader.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/io/CatalogLoader.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -18,11 +18,10 @@
package org.killbill.billing.catalog.io;
-import org.killbill.billing.catalog.VersionedCatalog;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.api.CatalogApiException;
public interface CatalogLoader {
- public abstract VersionedCatalog loadDefaultCatalog(String urlString)
- throws CatalogApiException;
+ public DefaultVersionedCatalog loadDefaultCatalog(String urlString) throws CatalogApiException;
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/io/VersionedCatalogLoader.java b/catalog/src/main/java/org/killbill/billing/catalog/io/VersionedCatalogLoader.java
index edfdf88..86085c2 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/io/VersionedCatalogLoader.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/io/VersionedCatalogLoader.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014-2016 Groupon, Inc
- * Copyright 2014-2016 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -32,16 +32,15 @@ import javax.xml.bind.JAXBException;
import javax.xml.transform.TransformerException;
import org.killbill.billing.ErrorCode;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.StandaloneCatalog;
import org.killbill.billing.catalog.StandaloneCatalogWithPriceOverride;
-import org.killbill.billing.catalog.VersionedCatalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.InvalidConfigException;
import org.killbill.billing.catalog.override.PriceOverride;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.clock.Clock;
import org.killbill.xmlloader.UriAccessor;
-import org.killbill.xmlloader.ValidationErrors;
import org.killbill.xmlloader.ValidationException;
import org.killbill.xmlloader.XMLLoader;
import org.slf4j.Logger;
@@ -70,7 +69,7 @@ public class VersionedCatalogLoader implements CatalogLoader {
}
@Override
- public VersionedCatalog loadDefaultCatalog(final String uriString) throws CatalogApiException {
+ public DefaultVersionedCatalog loadDefaultCatalog(final String uriString) throws CatalogApiException {
try {
final List<URI> xmlURIs;
if (uriString.endsWith(XML_EXTENSION)) { // Assume its an xml file
@@ -82,7 +81,7 @@ public class VersionedCatalogLoader implements CatalogLoader {
xmlURIs = findXmlReferences(directoryContents, url);
}
- final VersionedCatalog result = new VersionedCatalog(clock);
+ final DefaultVersionedCatalog result = new DefaultVersionedCatalog(clock);
for (final URI u : xmlURIs) {
final StandaloneCatalog catalog = XMLLoader.getObjectFromUri(u, StandaloneCatalog.class);
result.add(new StandaloneCatalogWithPriceOverride(catalog, priceOverride, InternalCallContextFactory.INTERNAL_TENANT_RECORD_ID, internalCallContextFactory));
@@ -96,7 +95,7 @@ public class VersionedCatalogLoader implements CatalogLoader {
} catch (final JAXBException e) {
logger.warn("Failed to load default catalog", e);
throw new CatalogApiException(e, ErrorCode.CAT_INVALID_DEFAULT, uriString);
- } catch(IllegalArgumentException e) {
+ } catch (IllegalArgumentException e) {
logger.warn("Failed to load default catalog", e);
throw new CatalogApiException(e, ErrorCode.CAT_INVALID_DEFAULT, uriString);
} catch (Exception e) {
@@ -115,8 +114,8 @@ public class VersionedCatalogLoader implements CatalogLoader {
return Resources.getResource(urlString);
}
- public VersionedCatalog load(final Iterable<String> catalogXMLs, final boolean filterTemplateCatalog, final Long tenantRecordId) throws CatalogApiException {
- final VersionedCatalog result = new VersionedCatalog(clock);
+ public DefaultVersionedCatalog load(final Iterable<String> catalogXMLs, final boolean filterTemplateCatalog, final Long tenantRecordId) throws CatalogApiException {
+ final DefaultVersionedCatalog result = new DefaultVersionedCatalog(clock);
final URI uri;
try {
uri = new URI("/tenantCatalog");
@@ -131,25 +130,25 @@ public class VersionedCatalogLoader implements CatalogLoader {
XMLLoader.initializeAndValidate(uri, result);
return result;
} catch (final ValidationException e) {
- logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
+ logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
throw new CatalogApiException(e, ErrorCode.CAT_INVALID_FOR_TENANT, tenantRecordId);
} catch (final JAXBException e) {
- logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
+ logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
throw new CatalogApiException(e, ErrorCode.CAT_INVALID_FOR_TENANT, tenantRecordId);
} catch (final IOException e) {
- logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
+ logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
throw new IllegalStateException(e);
} catch (final TransformerException e) {
- logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
+ logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
throw new IllegalStateException(e);
} catch (final URISyntaxException e) {
- logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
+ logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
throw new IllegalStateException(e);
} catch (final SAXException e) {
- logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
+ logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
throw new IllegalStateException(e);
} catch (final InvalidConfigException e) {
- logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
+ logger.warn("Failed to load catalog for tenantRecordId='{}'", tenantRecordId, e);
throw new IllegalStateException(e);
}
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/plugin/VersionedCatalogMapper.java b/catalog/src/main/java/org/killbill/billing/catalog/plugin/VersionedCatalogMapper.java
index eb170ce..bdbab8a 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/plugin/VersionedCatalogMapper.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/plugin/VersionedCatalogMapper.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2015 Groupon, Inc
- * Copyright 2014-2015 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -17,14 +17,12 @@
package org.killbill.billing.catalog.plugin;
-import java.util.List;
-
import javax.inject.Inject;
import org.killbill.billing.callcontext.InternalTenantContext;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.StandaloneCatalog;
import org.killbill.billing.catalog.StandaloneCatalogWithPriceOverride;
-import org.killbill.billing.catalog.VersionedCatalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.override.PriceOverride;
import org.killbill.billing.catalog.plugin.api.StandalonePluginCatalog;
@@ -32,10 +30,6 @@ import org.killbill.billing.catalog.plugin.api.VersionedPluginCatalog;
import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.clock.Clock;
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-
public class VersionedCatalogMapper {
private final Clock clock;
@@ -50,8 +44,8 @@ public class VersionedCatalogMapper {
this.internalCallContextFactory = internalCallContextFactory;
}
- public VersionedCatalog toVersionedCatalog(final VersionedPluginCatalog pluginCatalog, final InternalTenantContext internalTenantContext) throws CatalogApiException {
- final VersionedCatalog result = new VersionedCatalog(clock);
+ public DefaultVersionedCatalog toVersionedCatalog(final VersionedPluginCatalog pluginCatalog, final InternalTenantContext internalTenantContext) throws CatalogApiException {
+ final DefaultVersionedCatalog result = new DefaultVersionedCatalog(clock);
for (final StandalonePluginCatalog cur : pluginCatalog.getStandalonePluginCatalogs()) {
result.add(toStandaloneCatalogWithPriceOverride(pluginCatalog, cur, internalTenantContext));
}
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/caching/TestEhCacheCatalogCache.java b/catalog/src/test/java/org/killbill/billing/catalog/caching/TestEhCacheCatalogCache.java
index f03a6a1..5afd6a2 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/caching/TestEhCacheCatalogCache.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/caching/TestEhCacheCatalogCache.java
@@ -29,12 +29,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.killbill.billing.callcontext.InternalCallContext;
import org.killbill.billing.callcontext.InternalTenantContext;
import org.killbill.billing.catalog.CatalogTestSuiteNoDB;
-import org.killbill.billing.catalog.DefaultProduct;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.StandaloneCatalog;
import org.killbill.billing.catalog.StandaloneCatalogWithPriceOverride;
-import org.killbill.billing.catalog.VersionedCatalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.Product;
+import org.killbill.billing.catalog.api.VersionedCatalog;
import org.killbill.xmlloader.UriAccessor;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
@@ -83,13 +83,13 @@ public class TestEhCacheCatalogCache extends CatalogTestSuiteNoDB {
public void testDefaultCatalog() throws CatalogApiException {
catalogCache.loadDefaultCatalog(Resources.getResource("SpyCarBasic.xml").toExternalForm());
- final VersionedCatalog result = catalogCache.getCatalog(true, true, false, internalCallContext);
+ final DefaultVersionedCatalog result = catalogCache.getCatalog(true, true, false, internalCallContext);
Assert.assertNotNull(result);
final Collection<Product> products = result.getProducts(clock.getUTCNow());
Assert.assertEquals(products.size(), 3);
// Verify the lookup with other contexts
- final VersionedCatalog resultForMultiTenantContext = new VersionedCatalog(result.getClock());
+ final VersionedCatalog resultForMultiTenantContext = new DefaultVersionedCatalog(result.getClock());
for (final StandaloneCatalog cur : result.getVersions()) {
resultForMultiTenantContext.add(new StandaloneCatalogWithPriceOverride(cur, priceOverride, multiTenantContext.getTenantRecordId(), internalCallContextFactory));
}
@@ -155,13 +155,13 @@ public class TestEhCacheCatalogCache extends CatalogTestSuiteNoDB {
catalogCache.loadDefaultCatalog(Resources.getResource("SpyCarBasic.xml").toExternalForm());
// Verify the lookup for this tenant
- final VersionedCatalog result = catalogCache.getCatalog(true, true, false, multiTenantContext);
+ final DefaultVersionedCatalog result = catalogCache.getCatalog(true, true, false, multiTenantContext);
Assert.assertNotNull(result);
final Collection<Product> products = result.getProducts(clock.getUTCNow());
Assert.assertEquals(products.size(), 6);
// Verify the lookup for another tenant
- final VersionedCatalog otherResult = catalogCache.getCatalog(true, true, false, otherMultiTenantContext);
+ final DefaultVersionedCatalog otherResult = catalogCache.getCatalog(true, true, false, otherMultiTenantContext);
Assert.assertNotNull(otherResult);
final Collection<Product> otherProducts = otherResult.getProducts(clock.getUTCNow());
Assert.assertEquals(otherProducts.size(), 3);
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/io/TestVersionedCatalogLoader.java b/catalog/src/test/java/org/killbill/billing/catalog/io/TestVersionedCatalogLoader.java
index b3f5bd0..128bb65 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/io/TestVersionedCatalogLoader.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/io/TestVersionedCatalogLoader.java
@@ -24,14 +24,13 @@ import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.util.Iterator;
import java.util.List;
import org.joda.time.DateTime;
import org.killbill.billing.catalog.CatalogTestSuiteNoDB;
-import org.killbill.billing.catalog.StandaloneCatalog;
-import org.killbill.billing.catalog.VersionedCatalog;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.api.CatalogApiException;
+import org.killbill.billing.catalog.api.VersionedCatalog;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -113,23 +112,22 @@ public class TestVersionedCatalogLoader extends CatalogTestSuiteNoDB {
@Test(groups = "fast")
public void testLoad() throws CatalogApiException {
- final VersionedCatalog c = loader.loadDefaultCatalog(Resources.getResource("versionedCatalog").toString());
- Assert.assertEquals(c.size(), 4);
- final Iterator<StandaloneCatalog> it = c.iterator();
+ final DefaultVersionedCatalog c = loader.loadDefaultCatalog(Resources.getResource("versionedCatalog").toString());
+ Assert.assertEquals(c.getVersions().size(), 4);
DateTime dt = new DateTime("2011-01-01T00:00:00+00:00");
- Assert.assertEquals(it.next().getEffectiveDate(), dt.toDate());
+ Assert.assertEquals(c.getVersions().get(0).getEffectiveDate(), dt.toDate());
dt = new DateTime("2011-02-02T00:00:00+00:00");
- Assert.assertEquals(it.next().getEffectiveDate(), dt.toDate());
+ Assert.assertEquals(c.getVersions().get(1).getEffectiveDate(), dt.toDate());
dt = new DateTime("2011-02-03T00:00:00+00:00");
- Assert.assertEquals(it.next().getEffectiveDate(), dt.toDate());
+ Assert.assertEquals(c.getVersions().get(2).getEffectiveDate(), dt.toDate());
dt = new DateTime("2011-03-03T00:00:00+00:00");
- Assert.assertEquals(it.next().getEffectiveDate(), dt.toDate());
+ Assert.assertEquals(c.getVersions().get(3).getEffectiveDate(), dt.toDate());
}
@Test(groups = "fast")
public void testLoadCatalogFromClasspathResourceFolder() throws CatalogApiException {
final VersionedCatalog c = loader.loadDefaultCatalog("SpyCarBasic.xml");
- Assert.assertEquals(c.size(), 1);
+ Assert.assertEquals(c.getVersions().size(), 1);
final DateTime dt = new DateTime("2013-02-08T00:00:00+00:00");
Assert.assertEquals(c.getEffectiveDate(), dt.toDate());
Assert.assertEquals(c.getCatalogName(), "SpyCarBasic");
@@ -142,8 +140,8 @@ public class TestVersionedCatalogLoader extends CatalogTestSuiteNoDB {
@Test(groups = "fast")
public void testLoadCatalogFromInsideResourceFolder() throws CatalogApiException {
- final VersionedCatalog c = loader.loadDefaultCatalog("com/acme/SpyCarCustom.xml");
- Assert.assertEquals(c.size(), 1);
+ final DefaultVersionedCatalog c = loader.loadDefaultCatalog("com/acme/SpyCarCustom.xml");
+ Assert.assertEquals(c.getVersions().size(), 1);
final DateTime dt = new DateTime("2015-10-04T00:00:00+00:00");
Assert.assertEquals(c.getEffectiveDate(), dt.toDate());
Assert.assertEquals(c.getCatalogName(), "SpyCarCustom");
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/io/TestXMLWriter.java b/catalog/src/test/java/org/killbill/billing/catalog/io/TestXMLWriter.java
index 7a3c905..de3d3da 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/io/TestXMLWriter.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/io/TestXMLWriter.java
@@ -33,9 +33,8 @@ import org.killbill.billing.catalog.DefaultPrice;
import org.killbill.billing.catalog.DefaultPriceListSet;
import org.killbill.billing.catalog.DefaultProduct;
import org.killbill.billing.catalog.DefaultRecurring;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.StandaloneCatalog;
-import org.killbill.billing.catalog.StandaloneCatalogWithPriceOverride;
-import org.killbill.billing.catalog.VersionedCatalog;
import org.killbill.billing.catalog.api.BillingMode;
import org.killbill.billing.catalog.api.BillingPeriod;
import org.killbill.billing.catalog.api.Currency;
@@ -44,30 +43,27 @@ import org.killbill.billing.catalog.api.PhaseType;
import org.killbill.billing.catalog.api.Plan;
import org.killbill.billing.catalog.api.ProductCategory;
import org.killbill.billing.catalog.api.TimeUnit;
-import org.killbill.billing.util.callcontext.InternalCallContextFactory;
+import org.killbill.billing.catalog.api.VersionedCatalog;
import org.killbill.xmlloader.XMLLoader;
import org.killbill.xmlloader.XMLWriter;
import org.testng.annotations.Test;
-import com.google.common.collect.ImmutableList;
import com.google.common.io.Resources;
import static org.testng.Assert.assertEquals;
public class TestXMLWriter extends CatalogTestSuiteNoDB {
-
// Verifies we can generate the XML associated with a VersionedCatalog
@Test(groups = "fast")
public void testVersionedCatalog() throws Exception {
final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("SpyCarAdvanced.xml").toExternalForm(), StandaloneCatalog.class);
- final VersionedCatalog versionedCatalog = new VersionedCatalog(clock);
+ final DefaultVersionedCatalog versionedCatalog = new DefaultVersionedCatalog(clock);
versionedCatalog.add(catalog);
- final String newCatalogStr = XMLWriter.writeXML(versionedCatalog, VersionedCatalog.class);
+ final String newCatalogStr = XMLWriter.writeXML(versionedCatalog, DefaultVersionedCatalog.class);
//System.err.println(newCatalogStr);
}
-
// Verify we can marshall/unmarshall a (fairly complex catalog) catalog and get back the same result (Required to support catalog update)
@Test(groups = "fast")
public void testMarshallUnmarshall() throws Exception {
@@ -80,9 +76,6 @@ public class TestXMLWriter extends CatalogTestSuiteNoDB {
assertEquals(oldCatalogStr2, oldCatalogStr);
}
-
-
-
@Test(groups = "fast")
public void testAddPlan() throws Exception {
final StandaloneCatalog catalog = XMLLoader.getObjectFromString(Resources.getResource("SpyCarBasic.xml").toExternalForm(), StandaloneCatalog.class);
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogModule.java b/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogModule.java
index 1e76d64..c755d8e 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogModule.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogModule.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -19,7 +19,6 @@
package org.killbill.billing.catalog;
import org.killbill.billing.callcontext.InternalCallContext;
-import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.CatalogInternalApi;
import org.killbill.billing.catalog.api.CatalogService;
@@ -35,14 +34,16 @@ public class MockCatalogModule extends KillBillModule {
@Override
protected void configure() {
- final Catalog catalog = Mockito.mock(Catalog.class);
+ final DefaultVersionedCatalog catalog = Mockito.mock(DefaultVersionedCatalog.class);
final CatalogService catalogService = Mockito.mock(CatalogService.class);
final CatalogInternalApi catalogInternalApi = Mockito.mock(CatalogInternalApi.class);
try {
- Mockito.when(catalogService.getCurrentCatalogForInternalUse(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(new MockCatalog());
+ final DefaultVersionedCatalog mockVersionedCatalog = new DefaultVersionedCatalog();
+ mockVersionedCatalog.add(new MockCatalog());
+ Mockito.when(catalogService.getCurrentCatalogForInternalUse(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(mockVersionedCatalog);
Mockito.when(catalogService.getFullCatalogForInternalUse(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(catalog);
- Mockito.when(catalogService.getCurrentCatalog(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(new MockCatalog());
+ Mockito.when(catalogService.getCurrentCatalog(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(mockVersionedCatalog);
Mockito.when(catalogService.getFullCatalog(Mockito.any(Boolean.class), Mockito.any(Boolean.class), Mockito.any(InternalCallContext.class))).thenReturn(catalog);
bind(CatalogService.class).toInstance(catalogService);
bind(CatalogInternalApi.class).toInstance(catalogInternalApi);
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogService.java b/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogService.java
index 37fae0c..ca5799e 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogService.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/MockCatalogService.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2018 Groupon, Inc
+ * Copyright 2014-2018 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -17,15 +19,13 @@
package org.killbill.billing.catalog;
import org.killbill.billing.callcontext.InternalTenantContext;
-import org.killbill.billing.catalog.api.Catalog;
-import org.killbill.billing.catalog.api.StaticCatalog;
import org.killbill.billing.util.cache.CacheControllerDispatcher;
public class MockCatalogService extends DefaultCatalogService {
- private final MockCatalog catalog;
+ private final DefaultVersionedCatalog catalog;
- public MockCatalogService(final MockCatalog catalog, final CacheControllerDispatcher cacheControllerDispatcher) {
+ public MockCatalogService(final DefaultVersionedCatalog catalog, final CacheControllerDispatcher cacheControllerDispatcher) {
super(null, null, null, null);
this.catalog = catalog;
}
@@ -40,23 +40,22 @@ public class MockCatalogService extends DefaultCatalogService {
}
@Override
- public Catalog getFullCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
+ public DefaultVersionedCatalog getFullCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
return catalog;
}
@Override
- public StaticCatalog getCurrentCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
+ public DefaultVersionedCatalog getCurrentCatalogForInternalUse(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
return catalog;
}
@Override
- public Catalog getFullCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
+ public DefaultVersionedCatalog getFullCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
return catalog;
}
@Override
- public StaticCatalog getCurrentCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
+ public DefaultVersionedCatalog getCurrentCatalog(final boolean useDefaultCatalog, final boolean filterTemplateCatalog, InternalTenantContext context) {
return catalog;
}
-
}
diff --git a/catalog/src/test/java/org/killbill/billing/catalog/TestVersionedCatalog.java b/catalog/src/test/java/org/killbill/billing/catalog/TestVersionedCatalog.java
index 4bcee55..6ed50a6 100644
--- a/catalog/src/test/java/org/killbill/billing/catalog/TestVersionedCatalog.java
+++ b/catalog/src/test/java/org/killbill/billing/catalog/TestVersionedCatalog.java
@@ -45,7 +45,7 @@ public class TestVersionedCatalog extends CatalogTestSuiteNoDB {
// WeaponsHireSmall-3.xml
final DateTime dt3 = new DateTime("2011-03-03T00:01:00+00:00");
- private VersionedCatalog vc;
+ private DefaultVersionedCatalog vc;
@BeforeClass(groups = "fast")
public void beforeClass() throws Exception {
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
index 1cb6d7b..51820bb 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/CatalogJson.java
@@ -28,8 +28,8 @@ import java.util.List;
import java.util.Map;
import org.joda.time.DateTime;
-import org.killbill.billing.catalog.VersionedCatalog;
import org.killbill.billing.catalog.api.BillingPeriod;
+import org.killbill.billing.catalog.api.Catalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.catalog.api.CurrencyValueNull;
@@ -54,7 +54,6 @@ import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
@ApiModel(value="Catalog")
public class CatalogJson {
@@ -81,8 +80,7 @@ public class CatalogJson {
this.priceLists = priceLists;
}
-
- public CatalogJson(final VersionedCatalog catalog, final DateTime requestedDate) throws CatalogApiException {
+ public CatalogJson(final Catalog catalog, final DateTime requestedDate) throws CatalogApiException {
name = catalog.getCatalogName();
effectiveDate = catalog.getStandaloneCatalogEffectiveDate(requestedDate);
currencies = Arrays.asList(catalog.getSupportedCurrencies(requestedDate));
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
index 356ea48..8dbdfa3 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/CatalogResource.java
@@ -40,8 +40,6 @@ import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.killbill.billing.account.api.AccountUserApi;
-import org.killbill.billing.catalog.StandaloneCatalog;
-import org.killbill.billing.catalog.VersionedCatalog;
import org.killbill.billing.catalog.api.CatalogApiException;
import org.killbill.billing.catalog.api.CatalogUserApi;
import org.killbill.billing.catalog.api.CurrencyValueNull;
@@ -52,6 +50,7 @@ import org.killbill.billing.catalog.api.PriceList;
import org.killbill.billing.catalog.api.Product;
import org.killbill.billing.catalog.api.SimplePlanDescriptor;
import org.killbill.billing.catalog.api.StaticCatalog;
+import org.killbill.billing.catalog.api.VersionedCatalog;
import org.killbill.billing.catalog.api.user.DefaultSimplePlanDescriptor;
import org.killbill.billing.entitlement.api.Subscription;
import org.killbill.billing.entitlement.api.SubscriptionApi;
@@ -134,20 +133,11 @@ public class CatalogResource extends JaxRsResourceBase {
DATE_TIME_FORMATTER.parseDateTime(requestedDate).toDateTime(DateTimeZone.UTC) :
null;
- final VersionedCatalog catalog = (VersionedCatalog) catalogUserApi.getCatalog(catalogName, tenantContext);
- final String result;
- if (catalogDateVersion != null) {
- final VersionedCatalog oneVersionCatalog = new VersionedCatalog();
- for (final StandaloneCatalog v : catalog.getVersions()) {
- if (v.getEffectiveDate().compareTo(catalogDateVersion.toDate()) >= 0) {
- oneVersionCatalog.add(v);
- break;
- }
- }
- result = XMLWriter.writeXML(oneVersionCatalog, VersionedCatalog.class);
- } else {
- result = XMLWriter.writeXML(catalog, VersionedCatalog.class);
- }
+ final VersionedCatalog<? extends StaticCatalog> catalog = catalogUserApi.getCatalog(catalogName, catalogDateVersion, tenantContext);
+
+ // This assumes serializableClass has the right JAXB annotations
+ final Class serializableClass = catalog.getClass();
+ final String result = XMLWriter.writeXML(catalog, serializableClass);
return Response.status(Status.OK).entity(result).build();
}
@@ -214,14 +204,13 @@ public class CatalogResource extends JaxRsResourceBase {
DATE_TIME_FORMATTER.parseDateTime(requestedDate).toDateTime(DateTimeZone.UTC) :
null;
- // Yack...
- final VersionedCatalog catalog = (VersionedCatalog) catalogUserApi.getCatalog(catalogName, tenantContext);
+ final VersionedCatalog<? extends StaticCatalog> catalog = catalogUserApi.getCatalog(catalogName, null, tenantContext);
final List<CatalogJson> result = new ArrayList<CatalogJson>();
if (catalogDateVersion != null) {
result.add(new CatalogJson(catalog, catalogDateVersion));
} else {
- for (final StandaloneCatalog v : catalog.getVersions()) {
+ for (final StaticCatalog v : catalog.getVersions()) {
result.add(new CatalogJson(catalog, new DateTime(v.getEffectiveDate())));
}
}
@@ -239,10 +228,10 @@ public class CatalogResource extends JaxRsResourceBase {
final TenantContext tenantContext = accountId != null ?
context.createTenantContextWithAccountId(accountId, request) :
context.createTenantContextNoAccountId(request);
- final VersionedCatalog catalog = (VersionedCatalog) catalogUserApi.getCatalog(catalogName, tenantContext);
+ final VersionedCatalog<? extends StaticCatalog> catalog = catalogUserApi.getCatalog(catalogName, null, tenantContext);
final List<DateTime> result = new ArrayList<DateTime>();
- for (final StandaloneCatalog v : catalog.getVersions()) {
+ for (final StaticCatalog v : catalog.getVersions()) {
result.add(new DateTime(v.getEffectiveDate()));
}
diff --git a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBillingApi.java b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBillingApi.java
index 4f7e151..58734ed 100644
--- a/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBillingApi.java
+++ b/junction/src/test/java/org/killbill/billing/junction/plumbing/billing/TestBillingApi.java
@@ -30,6 +30,7 @@ import org.killbill.billing.ObjectType;
import org.killbill.billing.account.api.Account;
import org.killbill.billing.account.api.AccountApiException;
import org.killbill.billing.callcontext.InternalTenantContext;
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.MockCatalog;
import org.killbill.billing.catalog.api.BillingAlignment;
import org.killbill.billing.catalog.api.Catalog;
@@ -67,6 +68,7 @@ import org.testng.annotations.Test;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
@@ -109,8 +111,9 @@ public class TestBillingApi extends JunctionTestSuiteNoDB {
Mockito.when(subscriptionInternalApi.getBillingTransitions(Mockito.<SubscriptionBase>any(), Mockito.<InternalTenantContext>any())).thenReturn(effectiveSubscriptionTransitions);
Mockito.when(subscriptionInternalApi.getAllTransitions(Mockito.<SubscriptionBase>any(), Mockito.<InternalTenantContext>any())).thenReturn(effectiveSubscriptionTransitions);
- catalog = ((MockCatalog) catalogService.getCurrentCatalog(true, true, internalCallContext));
- Mockito.when(catalogService.getFullCatalog(true, true, internalCallContext)).thenReturn(catalog);
+ final DefaultVersionedCatalog versionedCatalog = catalogService.getCurrentCatalog(true, true, internalCallContext);
+ catalog = (MockCatalog) Iterables.getLast(versionedCatalog.getVersions());
+ Mockito.when(catalogService.getFullCatalog(true, true, internalCallContext)).thenReturn(versionedCatalog);
Mockito.when(catalogInternalApi.getFullCatalog(true, true, internalCallContext)).thenReturn(catalog);
Mockito.when(catalogInternalApi.getCurrentCatalog(true, true, internalCallContext)).thenReturn(catalog);
pom.xml 2(+1 -1)
diff --git a/pom.xml b/pom.xml
index db1a440..9e2d974 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
<parent>
<artifactId>killbill-oss-parent</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.141.87</version>
+ <version>0.141.89-SNAPSHOT</version>
</parent>
<artifactId>killbill</artifactId>
<version>0.19.17-SNAPSHOT</version>
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java b/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
index 9c3818b..289d27f 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/api/transfer/TestDefaultSubscriptionTransferApi.java
@@ -20,22 +20,15 @@ package org.killbill.billing.subscription.api.transfer;
import java.util.List;
import java.util.UUID;
-import java.util.regex.Matcher;
import org.joda.time.DateTime;
-import org.killbill.billing.account.api.AccountInternalApi;
-import org.killbill.billing.catalog.api.CatalogInternalApi;
-import org.killbill.billing.catalog.api.DefaultCatalogInternalApi;
-import org.killbill.billing.catalog.override.DefaultPriceOverride;
-import org.mockito.Mockito;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
+import org.killbill.billing.catalog.DefaultVersionedCatalog;
import org.killbill.billing.catalog.MockCatalog;
import org.killbill.billing.catalog.MockCatalogService;
import org.killbill.billing.catalog.api.BillingPeriod;
+import org.killbill.billing.catalog.api.CatalogInternalApi;
import org.killbill.billing.catalog.api.CatalogService;
+import org.killbill.billing.catalog.api.DefaultCatalogInternalApi;
import org.killbill.billing.catalog.api.PhaseType;
import org.killbill.billing.catalog.api.PlanPhaseSpecifier;
import org.killbill.billing.catalog.api.PriceListSet;
@@ -52,9 +45,11 @@ import org.killbill.billing.subscription.events.SubscriptionBaseEvent;
import org.killbill.billing.subscription.events.SubscriptionBaseEvent.EventType;
import org.killbill.billing.subscription.events.user.ApiEventTransfer;
import org.killbill.billing.subscription.events.user.ApiEventType;
-import org.killbill.billing.util.cache.CacheControllerDispatcher;
-import org.killbill.billing.util.callcontext.InternalCallContextFactory;
import org.killbill.billing.util.dao.NonEntityDao;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
@@ -67,15 +62,17 @@ public class TestDefaultSubscriptionTransferApi extends SubscriptionTestSuiteNoD
@BeforeMethod(groups = "fast")
public void beforeMethod() throws Exception {
super.beforeMethod();
- final NonEntityDao nonEntityDao = Mockito.mock(NonEntityDao.class);
final SubscriptionDao dao = Mockito.mock(SubscriptionDao.class);
- final CatalogService catalogService = new MockCatalogService(new MockCatalog(), cacheControllerDispatcher);
+ final DefaultVersionedCatalog versionedCatalog = new DefaultVersionedCatalog();
+ final MockCatalog mockCatalog = new MockCatalog();
+ versionedCatalog.add(mockCatalog);
+ final CatalogService catalogService = new MockCatalogService(versionedCatalog, cacheControllerDispatcher);
final CatalogInternalApi catalogInternalApiWithMockCatalogService = new DefaultCatalogInternalApi(catalogService, internalCallContextFactory);
final SubscriptionBaseApiService apiService = Mockito.mock(SubscriptionBaseApiService.class);
final SubscriptionBaseTimelineApi timelineApi = Mockito.mock(SubscriptionBaseTimelineApi.class);
transferApi = new DefaultSubscriptionBaseTransferApi(clock, dao, timelineApi, catalogInternalApiWithMockCatalogService, subscriptionInternalApi, apiService, internalCallContextFactory);
- // Overrride catalog with our Mock CatalogService
- this.catalog = catalogInternalApiWithMockCatalogService.getFullCatalog(true, true, internalCallContext);
+ // Overrride catalog with our MockCatalog
+ this.catalog = mockCatalog;
}
@Test(groups = "fast")
diff --git a/subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java b/subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java
index 8da169d..9186d88 100644
--- a/subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java
+++ b/subscription/src/test/java/org/killbill/billing/subscription/DefaultSubscriptionTestInitializer.java
@@ -55,7 +55,6 @@ public class DefaultSubscriptionTestInitializer implements SubscriptionTestIniti
}
public Catalog initCatalog(final CatalogService catalogService, final InternalTenantContext context) throws Exception {
-
((DefaultCatalogService) catalogService).loadCatalog();
final Catalog catalog = catalogService.getFullCatalog(true, true, context);
assertNotNull(catalog);