cache vendor offers
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
Reference in New Issue
Block a user