killbill-aplcache
Changes
entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundle.java 78(+78 -0)
Details
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
index 4e270a0..46c9878 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultEntitlement.java
@@ -44,17 +44,17 @@ import com.ning.billing.util.svcapi.junction.DefaultBlockingState;
public class DefaultEntitlement extends EntityBase implements Entitlement {
- private final EntitlementDateHelper dateHelper;
- private final SubscriptionBase subscriptionBase;
- private final InternalCallContextFactory internalCallContextFactory;
- private final Clock clock;
- private final EntitlementState state;
- private final BlockingState entitlementBlockingState;
- private final BlockingChecker checker;
- private final UUID accountId;
- private final String externalKey;
- private final DateTimeZone accountTimeZone;
- private final BlockingStateDao blockingStateDao;
+ protected final EntitlementDateHelper dateHelper;
+ protected final SubscriptionBase subscriptionBase;
+ protected final InternalCallContextFactory internalCallContextFactory;
+ protected final Clock clock;
+ protected final EntitlementState state;
+ protected final BlockingState entitlementBlockingState;
+ protected final BlockingChecker checker;
+ protected final UUID accountId;
+ protected final String externalKey;
+ protected final DateTimeZone accountTimeZone;
+ protected final BlockingStateDao blockingStateDao;
public DefaultEntitlement(final EntitlementDateHelper dateHelper, final SubscriptionBase subscriptionBase, final UUID accountId,
final String externalKey, final EntitlementState state, final BlockingState entitlementBlockingState, final DateTimeZone accountTimeZone,
@@ -75,11 +75,53 @@ public class DefaultEntitlement extends EntityBase implements Entitlement {
this.blockingStateDao = blockingStateDao;
}
+ public DefaultEntitlement(final DefaultEntitlement in) {
+ this(in.getDateHelper(),
+ in.getSubscriptionBase(),
+ in.getAccountId(),
+ in.getExternalKey(),
+ in.getState(),
+ in.getEntitlementBlockingState(),
+ in.getAccountTimeZone(),
+ in.getInternalCallContextFactory(),
+ in.getBlockingStateDao(),
+ in.getClock(),
+ in.getChecker());
+ }
+
// STEPH_ENT should be remove but beatrix tests need to be changed
public SubscriptionBase getSubscriptionBase() {
return subscriptionBase;
}
+ public EntitlementDateHelper getDateHelper() {
+ return dateHelper;
+ }
+
+ public InternalCallContextFactory getInternalCallContextFactory() {
+ return internalCallContextFactory;
+ }
+
+ public Clock getClock() {
+ return clock;
+ }
+
+ public BlockingState getEntitlementBlockingState() {
+ return entitlementBlockingState;
+ }
+
+ public BlockingChecker getChecker() {
+ return checker;
+ }
+
+ public DateTimeZone getAccountTimeZone() {
+ return accountTimeZone;
+ }
+
+ public BlockingStateDao getBlockingStateDao() {
+ return blockingStateDao;
+ }
+
@Override
public UUID getBaseEntitlementId() {
return subscriptionBase.getId();
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscription.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscription.java
new file mode 100644
index 0000000..888acf1
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscription.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning 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:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+
+public class DefaultSubscription extends DefaultEntitlement implements Subscription {
+
+
+ private final List<BlockingState> blockingStates;
+
+ DefaultSubscription(final DefaultEntitlement entitlement, final List<BlockingState> blockingStates) {
+ super(entitlement);
+ this.blockingStates = blockingStates;
+ }
+
+ @Override
+ public LocalDate getBillingStartDate() {
+ return new LocalDate(subscriptionBase.getStartDate(), accountTimeZone);
+ }
+
+ @Override
+ public LocalDate getBillingEndDate() {
+ final DateTime futureOrCurrentEndDate = subscriptionBase.getEndDate() != null ? subscriptionBase.getEndDate() : subscriptionBase.getFutureEndDate();
+ return futureOrCurrentEndDate != null ? new LocalDate(futureOrCurrentEndDate, accountTimeZone) : null;
+ }
+
+ @Override
+ public LocalDate getChargedThroughDate() {
+ return subscriptionBase.getChargedThroughDate() != null ? new LocalDate(subscriptionBase.getChargedThroughDate(), accountTimeZone) : null;
+ }
+
+ @Override
+ public int getBCD() {
+ // STEPH_ENT
+ return 0;
+ }
+
+ @Override
+ public Map<String, String> getCurrentStatesForService() {
+
+ final Map<String, String> result = new HashMap<String, String>();
+ if (blockingStates == null) {
+ return result;
+ }
+ for (BlockingState cur : blockingStates) {
+ result.put(cur.getService(), cur.getStateName());
+ }
+ return result;
+ }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionApi.java
index bb4171c..e38318c 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionApi.java
@@ -1,29 +1,141 @@
package com.ning.billing.entitlement.api;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
+import com.ning.billing.ErrorCode;
+import com.ning.billing.clock.Clock;
+import com.ning.billing.entitlement.block.BlockingChecker;
+import com.ning.billing.entitlement.dao.BlockingStateDao;
+import com.ning.billing.subscription.api.user.SubscriptionBaseApiException;
+import com.ning.billing.subscription.api.user.SubscriptionBaseBundle;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.callcontext.InternalTenantContext;
import com.ning.billing.util.callcontext.TenantContext;
+import com.ning.billing.util.svcapi.subscription.SubscriptionBaseInternalApi;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.LinkedListMultimap;
+import com.google.common.collect.ListMultimap;
+import com.google.common.collect.Multimaps;
public class DefaultSubscriptionApi implements SubscriptionApi {
+ private final SubscriptionBaseInternalApi subscriptionInternalApi;
+ private final EntitlementApi entitlementApi;
+ private final BlockingChecker checker;
+ private final BlockingStateDao blockingStateDao;
+ private final EntitlementDateHelper dateHelper;
+ private final Clock clock;
+ private final InternalCallContextFactory internalCallContextFactory;
+
+ public DefaultSubscriptionApi(final SubscriptionBaseInternalApi subscriptionInternalApi, final EntitlementApi entitlementApi, final BlockingChecker checker, final BlockingStateDao blockingStateDao, final EntitlementDateHelper dateHelper, final Clock clock, final InternalCallContextFactory internalCallContextFactory) {
+ this.subscriptionInternalApi = subscriptionInternalApi;
+ this.entitlementApi = entitlementApi;
+ this.checker = checker;
+ this.blockingStateDao = blockingStateDao;
+ this.dateHelper = dateHelper;
+ this.clock = clock;
+ this.internalCallContextFactory = internalCallContextFactory;
+ }
+
@Override
public Subscription getSubscriptionForEntitlementId(final UUID entitlementId, final TenantContext context) throws SubscriptionApiException {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ try {
+ final Entitlement entitlement = entitlementApi.getEntitlementForId(entitlementId, context);
+ final InternalTenantContext contextWithValidAccountRecordId = internalCallContextFactory.createInternalTenantContext(entitlement.getAccountId(), context);
+ return fromEntitlement(entitlement, contextWithValidAccountRecordId);
+ } catch (EntitlementApiException e) {
+ throw new SubscriptionApiException(e);
+ }
}
@Override
public SubscriptionBundle getSubscriptionBundle(final UUID bundleId, final TenantContext context) throws SubscriptionApiException {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+
+ try {
+
+ final List<Entitlement> entitlements = entitlementApi.getAllEntitlementsForBundle(bundleId, context);
+ if (entitlements.isEmpty()) {
+ throw new SubscriptionApiException(ErrorCode.SUB_GET_INVALID_BUNDLE_ID, bundleId);
+ }
+ return getSubscriptionBundleFromEntitlement(bundleId, entitlements, context);
+ } catch (EntitlementApiException e) {
+ throw new SubscriptionApiException(e);
+ } catch (SubscriptionBaseApiException e) {
+ throw new SubscriptionApiException(e);
+ }
}
+
+
@Override
public SubscriptionBundle getSubscriptionBundleForAccountIdAndExternalKey(final UUID accountId, final String externalKey, final TenantContext context) throws SubscriptionApiException {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+
+ try {
+ final List<Entitlement> entitlements = entitlementApi.getAllEntitlementsForAccountIdAndExternalKey(accountId, externalKey, context);
+ if (entitlements.isEmpty()) {
+ throw new SubscriptionApiException(ErrorCode.SUB_GET_INVALID_BUNDLE_KEY, externalKey);
+ }
+ return getSubscriptionBundleFromEntitlement(entitlements.get(0).getBundleId(), entitlements, context);
+ } catch (EntitlementApiException e) {
+ throw new SubscriptionApiException(e);
+ } catch (SubscriptionBaseApiException e) {
+ throw new SubscriptionApiException(e);
+ }
}
@Override
public List<SubscriptionBundle> getSubscriptionBundlesForAccountId(final UUID accountId, final TenantContext context) throws SubscriptionApiException {
- return null; //To change body of implemented methods use File | Settings | File Templates.
+ try {
+
+ final List<Entitlement> entitlements = entitlementApi.getAllEntitlementsForAccountId(accountId, context);
+ if (entitlements.isEmpty()) {
+ throw new SubscriptionApiException(ErrorCode.SUB_GET_INVALID_ACCOUNT_ID, accountId);
+ }
+
+ final ListMultimap<UUID, Entitlement> perBundleEntitlements = LinkedListMultimap.create();
+ for (Entitlement cur : entitlements) {
+ perBundleEntitlements.put(cur.getBundleId(), cur);
+ }
+
+ final List<SubscriptionBundle> result = new ArrayList<SubscriptionBundle>(perBundleEntitlements.keySet().size());
+ for (UUID bundleId : perBundleEntitlements.keySet()) {
+ final List<Entitlement> e = perBundleEntitlements.get(bundleId);
+ final SubscriptionBundle b = getSubscriptionBundleFromEntitlement(bundleId, e, context);
+ result.add(b);
+ }
+ return result;
+ } catch (EntitlementApiException e) {
+ throw new SubscriptionApiException(e);
+ } catch (SubscriptionBaseApiException e) {
+ throw new SubscriptionApiException(e);
+ }
+ }
+
+ private Subscription fromEntitlement(final Entitlement entitlement, final InternalTenantContext internalTenantContext) {
+
+ final List<BlockingState> states = blockingStateDao.getBlockingState(entitlement.getId(), internalTenantContext);
+ final Subscription result = new DefaultSubscription((DefaultEntitlement) entitlement, states);
+ return result;
+ }
+
+ private SubscriptionBundle getSubscriptionBundleFromEntitlement(final UUID bundleId, final List<Entitlement> entitlements, final TenantContext context) throws SubscriptionBaseApiException {
+ final InternalTenantContext internalTenantContext = internalCallContextFactory.createInternalTenantContext(context);
+ final SubscriptionBaseBundle baseBundle = subscriptionInternalApi.getBundleFromId(bundleId, internalTenantContext);
+ final List<Subscription> subscriptions = new ArrayList<Subscription>();
+ subscriptions.addAll(Collections2.transform(entitlements, new Function<Entitlement, Subscription>() {
+ @Override
+ public Subscription apply(final Entitlement input) {
+ return fromEntitlement(input, internalTenantContext);
+ }
+ }));
+ // STEPH_ENT account timeline
+ final DefaultSubscriptionBundle bundle = new DefaultSubscriptionBundle(bundleId, baseBundle.getAccountId(), baseBundle.getExternalKey(), subscriptions, null, baseBundle.getCreatedDate(), baseBundle.getUpdatedDate());
+ return bundle;
}
}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundle.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundle.java
new file mode 100644
index 0000000..8cd38f9
--- /dev/null
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/DefaultSubscriptionBundle.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning 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:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.ning.billing.entitlement.api;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+public class DefaultSubscriptionBundle implements SubscriptionBundle {
+
+ private final UUID id;
+ private final UUID accountId;
+ private final String externalKey;
+ private final List<Subscription> subscriptions;
+ private final SubscriptionBundleTimeline bundleTimeline;
+ private final DateTime createdDate;
+ private final DateTime updatedDate;
+
+ public DefaultSubscriptionBundle(final UUID id, final UUID accountId, final String externalKey, final List<Subscription> subscriptions, final SubscriptionBundleTimeline bundleTimeline, final DateTime createdDate, final DateTime updatedDate) {
+ this.id = id;
+ this.accountId = accountId;
+ this.externalKey = externalKey;
+ this.subscriptions = subscriptions;
+ this.bundleTimeline = bundleTimeline;
+ this.createdDate = createdDate;
+ this.updatedDate = updatedDate;
+ }
+
+ @Override
+ public UUID getAccountId() {
+ return accountId;
+ }
+
+ @Override
+ public String getExternalKey() {
+ return externalKey;
+ }
+
+ @Override
+ public List<Subscription> getSubscriptions() {
+ return subscriptions;
+ }
+
+ @Override
+ public SubscriptionBundleTimeline getTimeline() {
+ return bundleTimeline;
+ }
+
+ @Override
+ public UUID getId() {
+ return id;
+ }
+
+ @Override
+ public DateTime getCreatedDate() {
+ return createdDate;
+ }
+
+ @Override
+ public DateTime getUpdatedDate() {
+ return updatedDate;
+ }
+}
diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java b/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
index 691b2ba..8d96e35 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/glue/DefaultEntitlementModule.java
@@ -43,6 +43,7 @@ public class DefaultEntitlementModule extends AbstractModule implements Entitlem
installBlockingStateDao();
installBlockingApi();
installEntitlementApi();
+ installSubscriptionApi();
installBlockingChecker();
}
diff --git a/entitlement/src/main/resources/com/ning/billing/entitlement/dao/BlockingStateSqlDao.sql.stg b/entitlement/src/main/resources/com/ning/billing/entitlement/dao/BlockingStateSqlDao.sql.stg
index ad7ed24..dacc64f 100644
--- a/entitlement/src/main/resources/com/ning/billing/entitlement/dao/BlockingStateSqlDao.sql.stg
+++ b/entitlement/src/main/resources/com/ning/billing/entitlement/dao/BlockingStateSqlDao.sql.stg
@@ -88,7 +88,7 @@ order by record_id asc
;
>>
-getBlockingAll) ::= <<
+getBlockingAll() ::= <<
select
<allTableFields()>
from
@@ -97,4 +97,4 @@ where blockable_id = :blockableId
<AND_CHECK_TENANT()>
order by record_id asc
;
->>
\ No newline at end of file
+>>
diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
index 8b42de4..99499e9 100644
--- a/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/json/SubscriptionJsonNoEvents.java
@@ -20,7 +20,6 @@ public class SubscriptionJsonNoEvents extends EntitlementJsonNoEvents {
private final LocalDate billingStartDate;
private final LocalDate billingEndDate;
private final Integer bcd;
- private final String billingState;
//private final Map<String, String> currentStatesForServices;
@@ -38,14 +37,12 @@ public class SubscriptionJsonNoEvents extends EntitlementJsonNoEvents {
@JsonProperty("chargedThroughDate") @Nullable final LocalDate chargedThroughDate,
@JsonProperty("billingStartDate") @Nullable final LocalDate billingStartDate,
@JsonProperty("billingEndDate") @Nullable final LocalDate billingEndDate,
- @JsonProperty("bcd") @Nullable final Integer bcd,
- @JsonProperty("billingState") @Nullable final String billingState) {
+ @JsonProperty("bcd") @Nullable final Integer bcd) {
super(accountId, bundleId, entitlementId, externalKey, startDate, productName, productCategory, billingPeriod, priceList, cancelledDate, auditLogs);
this.chargedThroughDate = chargedThroughDate;
this.billingStartDate = billingStartDate;
this.billingEndDate = billingEndDate;
this.bcd = bcd;
- this.billingState = billingState;
}
public SubscriptionJsonNoEvents(final Subscription s,
@@ -64,8 +61,7 @@ public class SubscriptionJsonNoEvents extends EntitlementJsonNoEvents {
s.getChargedThroughDate() != null ? s.getChargedThroughDate() : null,
s.getBillingStartDate(),
s.getBillingEndDate(),
- s.getBCD(),
- s.getBillingState() != null ? s.getBillingState().name() : null);
+ s.getBCD());
}
public LocalDate getChargedThroughDate() {
@@ -84,7 +80,4 @@ public class SubscriptionJsonNoEvents extends EntitlementJsonNoEvents {
return bcd;
}
- public String getBillingState() {
- return billingState;
- }
}
diff --git a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonNoEvents.java b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonNoEvents.java
index f52cd7e..6529c00 100644
--- a/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonNoEvents.java
+++ b/jaxrs/src/test/java/com/ning/billing/jaxrs/json/TestSubscriptionJsonNoEvents.java
@@ -59,7 +59,7 @@ public class TestSubscriptionJsonNoEvents extends JaxrsTestSuiteNoDB {
final List<AuditLogJson> auditLogs = createAuditLogsJson(clock.getUTCNow());
final SubscriptionJsonNoEvents subscriptionJsonNoEvents = new SubscriptionJsonNoEvents(accountId, bundleId, entitlementId, externalKey, startDate, productName,
productCategory, billingPeriod, priceList, cancelDate, auditLogs, chargedThroughDate,
- billingStartDate, billingEndDate, new Integer(1), "OK");
+ billingStartDate, billingEndDate, new Integer(1));
Assert.assertEquals(subscriptionJsonNoEvents.getEntitlementId(), entitlementId);
Assert.assertEquals(subscriptionJsonNoEvents.getBundleId(), bundleId);