private CatalogOverrideUsageDefinitionModelDao getOrCreateOverrideUsageDefinitionFromTransaction(final Usage parentUsage, Currency currency, final DateTime catalogEffectiveDate, final UsagePriceOverride override, final Handle inTransactionHandle, final InternalCallContext context){ final List<TierPriceOverride> resolvedTierOverrides = override.getTierPriceOverrides(); final CatalogOverrideTierDefinitionModelDao[] overrideTierDefinitionModelDaos = new CatalogOverrideTierDefinitionModelDao[resolvedTierOverrides.size()]; for (int i = 0; i < resolvedTierOverrides.size(); i++) { final TierPriceOverride curOverride = resolvedTierOverrides.get(i); if (curOverride != null) { Tier parentTier = parentUsage.getTiers()[i]; final CatalogOverrideTierDefinitionModelDao createdOverrideTierDefinitionModelDao = getOrCreateOverrideTierDefinitionFromTransaction(parentTier, curOverride, currency, catalogEffectiveDate, inTransactionHandle, context); overrideTierDefinitionModelDaos[i] = createdOverrideTierDefinitionModelDao; } } final CatalogOverrideUsageDefinitionSqlDao sqlDao = inTransactionHandle.attach(CatalogOverrideUsageDefinitionSqlDao.class); final List<Long> targetUsageDefinitionRecordIds = getOverrideUsageDefinitionFromTransaction(overrideTierDefinitionModelDaos, inTransactionHandle, context); List<CatalogOverrideUsageDefinitionModelDao> results = sqlDao.getByAttributes(parentUsage.getName(), context); for(CatalogOverrideUsageDefinitionModelDao usage : results) { if (targetUsageDefinitionRecordIds != null && targetUsageDefinitionRecordIds.contains(usage.getRecordId())) { return usage; } } final CatalogOverrideUsageDefinitionModelDao inputUsageDef = new CatalogOverrideUsageDefinitionModelDao(parentUsage.getName(), parentUsage.getUsageType().name(), currency.name(), null, null, catalogEffectiveDate); sqlDao.create(inputUsageDef, context); final Long recordId = sqlDao.getLastInsertId(); final CatalogOverrideUsageDefinitionModelDao resultUsageDef = sqlDao.getByRecordId(recordId, context); for (short i = 0; i < overrideTierDefinitionModelDaos.length; i++) { if (overrideTierDefinitionModelDaos[i] != null) { createCatalogOverrideUsageTierFromTransaction(i, overrideTierDefinitionModelDaos[i], resultUsageDef, inTransactionHandle, context); } } return resultUsageDef; }
@Override public Void doTransaction(final CatalogOverrideUsageDefinitionSqlDao sqlDao) { sqlDao.create(obj1, internalCallContext); final Long lastInserted = sqlDao.getLastInsertId(); final CatalogOverrideUsageDefinitionModelDao rehydrated = sqlDao.getByRecordId(lastInserted, internalCallContext); assertEquals(rehydrated.getParentUsageName(), obj1.getParentUsageName()); assertEquals(rehydrated.getType(), obj1.getType()); assertEquals(rehydrated.getCurrency(), obj1.getCurrency()); assertEquals(rehydrated.getFixedPrice().compareTo(obj1.getFixedPrice()), 0); return null; } });
private void checkRehydrated(final List<CatalogOverrideUsageDefinitionModelDao> objList, final CatalogOverrideUsageDefinitionSqlDao sqlDao) { final List<CatalogOverrideUsageDefinitionModelDao> rehydrated = sqlDao.getByAttributes("u1", internalCallContext); assertEquals(rehydrated.size(), 2); assertEquals(rehydrated.get(0).getParentUsageName(), objList.get(0).getParentUsageName()); assertEquals(rehydrated.get(0).getType(), objList.get(0).getType()); assertEquals(rehydrated.get(0).getCurrency(), objList.get(0).getCurrency()); assertEquals(rehydrated.get(1).getParentUsageName(), objList.get(1).getParentUsageName()); assertEquals(rehydrated.get(1).getType(), objList.get(1).getType()); assertEquals(rehydrated.get(1).getCurrency(), objList.get(1).getCurrency()); } });
assertEquals(usages.size(), 1); final CatalogOverrideUsageDefinitionModelDao curUsage = usages.get(0); assertEquals(curUsage.getParentUsageName(), usagePriceOverride.getName()); assertEquals(curUsage.getType(), usagePriceOverride.getUsageType().toString()); final List<CatalogOverrideTierDefinitionModelDao> tiers = catalogOverrideDao.getOverriddenUsageTiers(curUsage.getRecordId(), internalCallContext); assertEquals(tiers.size(), 1); final CatalogOverrideTierDefinitionModelDao curTier = tiers.get(0);
private List<Long> getOverridePhaseDefinitionFromTransaction(final CatalogOverrideUsageDefinitionModelDao[] overrideUsageDefinitionModelDaos, final Handle inTransactionHandle, final InternalCallContext context) { final CatalogOverridePhaseUsageSqlDao sqlDao = inTransactionHandle.attach(CatalogOverridePhaseUsageSqlDao.class); final List<String> keys = new ArrayList<String>(); for (int i = 0; i < overrideUsageDefinitionModelDaos.length; i++) { final CatalogOverrideUsageDefinitionModelDao cur = overrideUsageDefinitionModelDaos[i]; // Each key is the concatenation of the usage_number, usage_definition_record_id if (cur != null) { keys.add(getConcatenatedKey(i, cur.getRecordId()).toString()); } } return keys.size() > 0 ? sqlDao.getTargetPhaseDefinition(keys, keys.size(), context) : null; }
@Override public boolean apply(final CatalogOverrideUsageDefinitionModelDao input) { return input.getParentUsageName().equals(curUsage.getName()); } }).orNull();
@Test(groups = "slow") public void testBasic() throws Exception { final CatalogOverrideUsageDefinitionModelDao obj1 = new CatalogOverrideUsageDefinitionModelDao("u1", "CONSUMABLE", "USD",BigDecimal.ONE,null, clock.getUTCNow()); performTestInTransaction(new WithCatalogOverrideUsageDefinitionSqlDaoTransaction<Void>() { @Override public Void doTransaction(final CatalogOverrideUsageDefinitionSqlDao sqlDao) { sqlDao.create(obj1, internalCallContext); final Long lastInserted = sqlDao.getLastInsertId(); final CatalogOverrideUsageDefinitionModelDao rehydrated = sqlDao.getByRecordId(lastInserted, internalCallContext); assertEquals(rehydrated.getParentUsageName(), obj1.getParentUsageName()); assertEquals(rehydrated.getType(), obj1.getType()); assertEquals(rehydrated.getCurrency(), obj1.getCurrency()); assertEquals(rehydrated.getFixedPrice().compareTo(obj1.getFixedPrice()), 0); return null; } }); }
assertEquals(usages.size(), 1); final CatalogOverrideUsageDefinitionModelDao curUsage = usages.get(0); assertEquals(curUsage.getParentUsageName(), usagePriceOverride.getName()); assertEquals(curUsage.getType(), usagePriceOverride.getUsageType().toString()); final List<CatalogOverrideTierDefinitionModelDao> tiers = catalogOverrideDao.getOverriddenUsageTiers(curUsage.getRecordId(), internalCallContext); assertEquals(tiers.size(), 1); final CatalogOverrideTierDefinitionModelDao curTier = tiers.get(0);
private void checkRehydrated(final List<CatalogOverrideUsageDefinitionModelDao> objList, final CatalogOverrideUsageDefinitionSqlDao sqlDao) { final List<CatalogOverrideUsageDefinitionModelDao> rehydrated = sqlDao.getByAttributes("u1", internalCallContext); assertEquals(rehydrated.size(), 2); assertEquals(rehydrated.get(0).getParentUsageName(), objList.get(0).getParentUsageName()); assertEquals(rehydrated.get(0).getType(), objList.get(0).getType()); assertEquals(rehydrated.get(0).getCurrency(), objList.get(0).getCurrency()); assertEquals(rehydrated.get(1).getParentUsageName(), objList.get(1).getParentUsageName()); assertEquals(rehydrated.get(1).getType(), objList.get(1).getType()); assertEquals(rehydrated.get(1).getCurrency(), objList.get(1).getCurrency()); } });
private void createCatalogOverrideUsageTierFromTransaction(final short tierNum, final CatalogOverrideTierDefinitionModelDao tierDef, final CatalogOverrideUsageDefinitionModelDao usageDef, final Handle inTransactionHandle, final InternalCallContext context) { final CatalogOverrideUsageTierSqlDao sqlDao = inTransactionHandle.attach(CatalogOverrideUsageTierSqlDao.class); final CatalogOverrideUsageTierModelDao modelDao = new CatalogOverrideUsageTierModelDao(tierNum, tierDef.getRecordId(), usageDef.getRecordId()); sqlDao.create(modelDao, context); }
List<UsagePriceOverride> getUsagePriceOverrides(PlanPhase curPhase, CatalogOverridePhaseDefinitionModelDao overriddenPhase, final InternalTenantContext context) { final List<UsagePriceOverride> usagePriceOverrides = new ArrayList<UsagePriceOverride>(); final List<CatalogOverrideUsageDefinitionModelDao> usageDefs = overrideDao.getOverriddenPhaseUsages(overriddenPhase.getRecordId(), context); for (int i = 0; i < curPhase.getUsages().length; i++) { final Usage curUsage = curPhase.getUsages()[i]; final CatalogOverrideUsageDefinitionModelDao overriddenUsage = Iterables.tryFind(usageDefs, new Predicate<CatalogOverrideUsageDefinitionModelDao>() { @Override public boolean apply(final CatalogOverrideUsageDefinitionModelDao input) { return input.getParentUsageName().equals(curUsage.getName()); } }).orNull(); if (overriddenUsage != null) { List<TierPriceOverride> tierPriceOverrides = getTierPriceOverrides(curUsage, overriddenUsage, context); usagePriceOverrides.add(new DefaultUsagePriceOverride(overriddenUsage.getParentUsageName(), curUsage.getUsageType(), tierPriceOverrides)); } } return usagePriceOverrides; }
@Test(groups = "slow") public void testGetByAttributes() throws Exception { final CatalogOverrideUsageDefinitionModelDao sameUsageWithDiffBlockPrice1 = new CatalogOverrideUsageDefinitionModelDao("u1", "CONSUMABLE", "USD", null, null, clock.getUTCNow()); final CatalogOverrideUsageDefinitionModelDao sameUsageWithDiffBlockPrice2 = new CatalogOverrideUsageDefinitionModelDao("u1", "CONSUMABLE", "USD", null, null, clock.getUTCNow()); final CatalogOverrideUsageDefinitionModelDao sameUsageWithDiffBlockPrice3 = new CatalogOverrideUsageDefinitionModelDao("u2", "CONSUMABLE", "USD", null, null, clock.getUTCNow()); performTestInTransaction(new WithCatalogOverrideUsageDefinitionSqlDaoTransaction<Void>() { @Override public Void doTransaction(final CatalogOverrideUsageDefinitionSqlDao sqlDao) { sqlDao.create(sameUsageWithDiffBlockPrice1, internalCallContext); sqlDao.create(sameUsageWithDiffBlockPrice2, internalCallContext); sqlDao.create(sameUsageWithDiffBlockPrice3, internalCallContext); List<CatalogOverrideUsageDefinitionModelDao> objList = new ArrayList<CatalogOverrideUsageDefinitionModelDao>(); objList.add(sameUsageWithDiffBlockPrice1); objList.add(sameUsageWithDiffBlockPrice2); checkRehydrated(objList, sqlDao); return null; } private void checkRehydrated(final List<CatalogOverrideUsageDefinitionModelDao> objList, final CatalogOverrideUsageDefinitionSqlDao sqlDao) { final List<CatalogOverrideUsageDefinitionModelDao> rehydrated = sqlDao.getByAttributes("u1", internalCallContext); assertEquals(rehydrated.size(), 2); assertEquals(rehydrated.get(0).getParentUsageName(), objList.get(0).getParentUsageName()); assertEquals(rehydrated.get(0).getType(), objList.get(0).getType()); assertEquals(rehydrated.get(0).getCurrency(), objList.get(0).getCurrency()); assertEquals(rehydrated.get(1).getParentUsageName(), objList.get(1).getParentUsageName()); assertEquals(rehydrated.get(1).getType(), objList.get(1).getType()); assertEquals(rehydrated.get(1).getCurrency(), objList.get(1).getCurrency()); } }); }
assertEquals(usages.size(), 1); final CatalogOverrideUsageDefinitionModelDao curUsage = usages.get(0); assertEquals(curUsage.getParentUsageName(), usagePriceOverride.getName()); assertEquals(curUsage.getType(), usagePriceOverride.getUsageType().toString()); final List<CatalogOverrideTierDefinitionModelDao> tiers = catalogOverrideDao.getOverriddenUsageTiers(curUsage.getRecordId(), internalCallContext); assertEquals(tiers.size(), 1); final CatalogOverrideTierDefinitionModelDao curTier = tiers.get(0);
@Override public Void doTransaction(final CatalogOverrideUsageDefinitionSqlDao sqlDao) { sqlDao.create(obj1, internalCallContext); final Long lastInserted = sqlDao.getLastInsertId(); final CatalogOverrideUsageDefinitionModelDao rehydrated = sqlDao.getByRecordId(lastInserted, internalCallContext); assertEquals(rehydrated.getParentUsageName(), obj1.getParentUsageName()); assertEquals(rehydrated.getType(), obj1.getType()); assertEquals(rehydrated.getCurrency(), obj1.getCurrency()); assertEquals(rehydrated.getFixedPrice().compareTo(obj1.getFixedPrice()), 0); return null; } });
private void createCatalogOverridePhaseUsageFromTransaction(final short usageNum, final CatalogOverrideUsageDefinitionModelDao usageDef, final CatalogOverridePhaseDefinitionModelDao phaseDef, final Handle inTransactionHandle, final InternalCallContext context) { final CatalogOverridePhaseUsageSqlDao sqlDao = inTransactionHandle.attach(CatalogOverridePhaseUsageSqlDao.class); final CatalogOverridePhaseUsageModelDao modelDao = new CatalogOverridePhaseUsageModelDao(usageNum, usageDef.getRecordId(), phaseDef.getRecordId()); sqlDao.create(modelDao, context); }
private CatalogOverrideUsageDefinitionModelDao getOrCreateOverrideUsageDefinitionFromTransaction(final Usage parentUsage, Currency currency, final DateTime catalogEffectiveDate, final UsagePriceOverride override, final Handle inTransactionHandle, final InternalCallContext context){ final List<TierPriceOverride> resolvedTierOverrides = override.getTierPriceOverrides(); final CatalogOverrideTierDefinitionModelDao[] overrideTierDefinitionModelDaos = new CatalogOverrideTierDefinitionModelDao[resolvedTierOverrides.size()]; for (int i = 0; i < resolvedTierOverrides.size(); i++) { final TierPriceOverride curOverride = resolvedTierOverrides.get(i); if (curOverride != null) { Tier parentTier = parentUsage.getTiers()[i]; final CatalogOverrideTierDefinitionModelDao createdOverrideTierDefinitionModelDao = getOrCreateOverrideTierDefinitionFromTransaction(parentTier, curOverride, currency, catalogEffectiveDate, inTransactionHandle, context); overrideTierDefinitionModelDaos[i] = createdOverrideTierDefinitionModelDao; } } final CatalogOverrideUsageDefinitionSqlDao sqlDao = inTransactionHandle.attach(CatalogOverrideUsageDefinitionSqlDao.class); final List<Long> targetUsageDefinitionRecordIds = getOverrideUsageDefinitionFromTransaction(overrideTierDefinitionModelDaos, inTransactionHandle, context); List<CatalogOverrideUsageDefinitionModelDao> results = sqlDao.getByAttributes(parentUsage.getName(), context); for(CatalogOverrideUsageDefinitionModelDao usage : results) { if (targetUsageDefinitionRecordIds != null && targetUsageDefinitionRecordIds.contains(usage.getRecordId())) { return usage; } } final CatalogOverrideUsageDefinitionModelDao inputUsageDef = new CatalogOverrideUsageDefinitionModelDao(parentUsage.getName(), parentUsage.getUsageType().name(), currency.name(), null, null, catalogEffectiveDate); sqlDao.create(inputUsageDef, context); final Long recordId = sqlDao.getLastInsertId(); final CatalogOverrideUsageDefinitionModelDao resultUsageDef = sqlDao.getByRecordId(recordId, context); for (short i = 0; i < overrideTierDefinitionModelDaos.length; i++) { if (overrideTierDefinitionModelDaos[i] != null) { createCatalogOverrideUsageTierFromTransaction(i, overrideTierDefinitionModelDaos[i], resultUsageDef, inTransactionHandle, context); } } return resultUsageDef; }
@Override public boolean apply(final CatalogOverrideUsageDefinitionModelDao input) { return input.getParentUsageName().equals(curUsage.getName()); } }).orNull();
@Test(groups = "slow") public void testBasic() throws Exception { final CatalogOverrideUsageDefinitionModelDao obj1 = new CatalogOverrideUsageDefinitionModelDao("u1", "CONSUMABLE", "USD",BigDecimal.ONE,null, clock.getUTCNow()); performTestInTransaction(new WithCatalogOverrideUsageDefinitionSqlDaoTransaction<Void>() { @Override public Void doTransaction(final CatalogOverrideUsageDefinitionSqlDao sqlDao) { sqlDao.create(obj1, internalCallContext); final Long lastInserted = sqlDao.getLastInsertId(); final CatalogOverrideUsageDefinitionModelDao rehydrated = sqlDao.getByRecordId(lastInserted, internalCallContext); assertEquals(rehydrated.getParentUsageName(), obj1.getParentUsageName()); assertEquals(rehydrated.getType(), obj1.getType()); assertEquals(rehydrated.getCurrency(), obj1.getCurrency()); assertEquals(rehydrated.getFixedPrice().compareTo(obj1.getFixedPrice()), 0); return null; } }); }
assertEquals(usages.size(), 1); final CatalogOverrideUsageDefinitionModelDao curUsage = usages.get(0); assertEquals(curUsage.getParentUsageName(), usagePriceOverride.getName()); assertEquals(curUsage.getType(), usagePriceOverride.getUsageType().toString()); final List<CatalogOverrideTierDefinitionModelDao> tiers = catalogOverrideDao.getOverriddenUsageTiers(curUsage.getRecordId(), internalCallContext); assertEquals(tiers.size(), 1); final CatalogOverrideTierDefinitionModelDao curTier = tiers.get(0);
final List<CatalogOverrideTierDefinitionModelDao> tierDefs = overrideDao.getOverriddenUsageTiers(overriddenUsage.getRecordId(), context); for (int i = 0; i < curUsage.getTiers().length; i++) { final Tier curTier = curUsage.getTiers()[i];