Archived
0

cache vendor offers

This commit is contained in:
iMoHax
2015-01-14 17:24:05 +03:00
parent 038e920883
commit 04957e5a86
2 changed files with 27 additions and 6 deletions

View File

@@ -5,15 +5,35 @@ import ru.trader.store.berkeley.entities.BDBOffer;
import ru.trader.store.berkeley.entities.BDBVendor; import ru.trader.store.berkeley.entities.BDBVendor;
import java.util.Collection; import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class VendorProxy extends AbstractVendor { public class VendorProxy extends AbstractVendor {
private final BDBVendor vendor; private final BDBVendor vendor;
private final BDBStore store; private final BDBStore store;
private Place place; private Place place;
protected Map<Long, Offer> sell;
protected Map<Long, Offer> buy;
public VendorProxy(BDBVendor vendor, BDBStore store) { public VendorProxy(BDBVendor vendor, BDBStore store) {
this.vendor = vendor; this.vendor = vendor;
this.store = store; this.store = store;
init();
}
private void init(){
sell = new ConcurrentHashMap<>(20, 0.9f, 2);
buy = new ConcurrentHashMap<>(20, 0.9f, 2);
for (Offer offer : store.getOfferAccessor().getAllByType(vendor.getId(), OFFER_TYPE.SELL)) {
sell.put(((ItemProxy)offer.getItem()).getId(), offer);
}
for (Offer offer : store.getOfferAccessor().getAllByType(vendor.getId(), OFFER_TYPE.BUY)) {
buy.put(((ItemProxy)offer.getItem()).getId(), offer);
}
}
private Map<Long, Offer> getCache(OFFER_TYPE type){
return type == OFFER_TYPE.SELL ? sell : buy;
} }
protected long getId(){ protected long getId(){
@@ -69,11 +89,14 @@ public class VendorProxy extends AbstractVendor {
OfferProxy oProxy = ((OfferProxy)offer); OfferProxy oProxy = ((OfferProxy)offer);
oProxy.setVendor(this); oProxy.setVendor(this);
store.getOfferAccessor().put(oProxy.getEntity()); store.getOfferAccessor().put(oProxy.getEntity());
getCache(offer.getType()).put(((ItemProxy)oProxy.getItem()).getId(), oProxy);
} }
@Override @Override
protected void removeOffer(Offer offer) { protected void removeOffer(Offer offer) {
store.getOfferAccessor().delete(((OfferProxy) offer).getEntity()); OfferProxy oProxy = ((OfferProxy)offer);
getCache(offer.getType()).remove(((ItemProxy)oProxy.getItem()).getId());
store.getOfferAccessor().delete(oProxy.getEntity());
} }
@@ -102,17 +125,17 @@ public class VendorProxy extends AbstractVendor {
@Override @Override
public Collection<Offer> get(OFFER_TYPE type) { public Collection<Offer> get(OFFER_TYPE type) {
return store.getOfferAccessor().getAllByType(vendor.getId(), type); return getCache(type).values();
} }
@Override @Override
public Offer get(OFFER_TYPE type, Item item) { public Offer get(OFFER_TYPE type, Item item) {
return store.getOfferAccessor().get(vendor.getId(), type, ((ItemProxy)item).getId()); return getCache(type).get(((ItemProxy)item).getId());
} }
@Override @Override
public boolean has(OFFER_TYPE type, Item item) { public boolean has(OFFER_TYPE type, Item item) {
return store.getOfferAccessor().has(vendor.getId(), type, ((ItemProxy)item).getId()); return getCache(type).containsKey(((ItemProxy)item).getId());
} }
@Override @Override

View File

@@ -340,8 +340,6 @@ public class MarketTest extends Assert {
assertEquals(0, market.getSell(item1).size()); assertEquals(0, market.getSell(item1).size());
assertEquals(0, market.getBuy(item1).size()); assertEquals(0, market.getBuy(item1).size());
assertEquals(0, vendor1.getAllBuyOffers().size());
assertEquals(0, vendor1.getAllSellOffers().size());
assertEquals(0, market.getVendors().size()); assertEquals(0, market.getVendors().size());
assertEquals(0, market.get().size()); assertEquals(0, market.get().size());
assertEquals(0, sellStat.getOffers().size()); assertEquals(0, sellStat.getOffers().size());