- extract abstract classes
- move simple implementation to ru.trader.store.simple package
This commit is contained in:
@@ -3,9 +3,9 @@ package ru.trader;
|
|||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
import ru.trader.core.Market;
|
import ru.trader.core.Market;
|
||||||
import ru.trader.core.MarketAnalyzer;
|
import ru.trader.core.MarketAnalyzer;
|
||||||
import ru.trader.core.SimpleMarket;
|
import ru.trader.store.simple.SimpleMarket;
|
||||||
import ru.trader.model.ModelFabrica;
|
import ru.trader.model.ModelFabrica;
|
||||||
import ru.trader.store.Store;
|
import ru.trader.store.simple.Store;
|
||||||
import ru.trader.store.XSSFImporter;
|
import ru.trader.store.XSSFImporter;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package ru.trader.model;
|
package ru.trader.model;
|
||||||
|
|
||||||
import ru.trader.core.*;
|
import ru.trader.core.*;
|
||||||
|
import ru.trader.store.simple.SimpleItem;
|
||||||
|
import ru.trader.store.simple.SimpleOffer;
|
||||||
|
import ru.trader.store.simple.SimpleVendor;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -14,7 +17,7 @@ public class ModelFabrica {
|
|||||||
private static final HashMap<ItemStat, WeakReference<ItemStatModel>> stats = new HashMap<>();
|
private static final HashMap<ItemStat, WeakReference<ItemStatModel>> stats = new HashMap<>();
|
||||||
|
|
||||||
public static ItemModel buildItemModel(String name, MarketModel market){
|
public static ItemModel buildItemModel(String name, MarketModel market){
|
||||||
return getModel(new Item(name), market);
|
return getModel(new SimpleItem(name), market);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static VendorModel buildModel(String name, MarketModel market){
|
public static VendorModel buildModel(String name, MarketModel market){
|
||||||
@@ -22,7 +25,7 @@ public class ModelFabrica {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static OfferModel buildModel(OFFER_TYPE type, ItemModel item, double price, MarketModel market) {
|
public static OfferModel buildModel(OFFER_TYPE type, ItemModel item, double price, MarketModel market) {
|
||||||
return getModel(new Offer(type, item.getItem(), price), market);
|
return getModel(new SimpleOffer(type, item.getItem(), price), market);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemDescModel buildModel(ItemModel item, ItemStat sell, ItemStat buy, MarketModel market) {
|
public static ItemDescModel buildModel(ItemModel item, ItemStat sell, ItemStat buy, MarketModel market) {
|
||||||
|
|||||||
@@ -1,31 +1,19 @@
|
|||||||
package ru.trader.core;
|
package ru.trader.core;
|
||||||
|
|
||||||
public class Group {
|
public abstract class Group {
|
||||||
private final String name;
|
public abstract String getName();
|
||||||
private final GROUP_TYPE type;
|
public abstract GROUP_TYPE getType();
|
||||||
|
|
||||||
public Group(String name, GROUP_TYPE type) {
|
|
||||||
this.name = name;
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isMarket(){
|
public boolean isMarket(){
|
||||||
return GROUP_TYPE.MARKET.equals(type);
|
return GROUP_TYPE.MARKET.equals(getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isShip(){
|
public boolean isShip(){
|
||||||
return GROUP_TYPE.SHIP.equals(type);
|
return GROUP_TYPE.SHIP.equals(getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOutfit(){
|
public boolean isOutfit(){
|
||||||
return GROUP_TYPE.OUTFIT.equals(type);
|
return GROUP_TYPE.OUTFIT.equals(getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
public GROUP_TYPE getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,21 +4,13 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class Item implements Comparable<Item>{
|
public abstract class Item implements Comparable<Item> {
|
||||||
private String name;
|
|
||||||
private Group group;
|
|
||||||
|
|
||||||
public Item(String name) {
|
public abstract String getName();
|
||||||
setName(name);
|
protected abstract void setName(String name);
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
public abstract Group getGroup();
|
||||||
this.name = name;
|
public abstract void setGroup(Group group);
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString(){
|
public String toString(){
|
||||||
@@ -29,14 +21,9 @@ public class Item implements Comparable<Item>{
|
|||||||
public int compareTo(@NotNull Item other){
|
public int compareTo(@NotNull Item other){
|
||||||
Objects.requireNonNull(other, "Not compare with null");
|
Objects.requireNonNull(other, "Not compare with null");
|
||||||
if (this == other) return 0;
|
if (this == other) return 0;
|
||||||
return name != null ? other.name != null ? name.compareTo(other.name) : -1 : 0;
|
String name = getName();
|
||||||
|
String otherName = other.getName();
|
||||||
|
return name != null ? otherName != null ? name.compareTo(otherName) : -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Group getGroup() {
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGroup(Group group) {
|
|
||||||
this.group = group;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,116 +1,53 @@
|
|||||||
package ru.trader.core;
|
package ru.trader.core;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import java.util.ArrayList;
|
||||||
import org.slf4j.LoggerFactory;
|
import java.util.Collection;
|
||||||
|
import java.util.NavigableSet;
|
||||||
|
|
||||||
import java.util.*;
|
public abstract class ItemStat {
|
||||||
import java.util.concurrent.ConcurrentSkipListSet;
|
|
||||||
|
|
||||||
public class ItemStat {
|
protected abstract void update(Offer offer, double price);
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(ItemStat.class);
|
|
||||||
|
|
||||||
private final Item item;
|
public abstract OFFER_TYPE getType();
|
||||||
private final OFFER_TYPE type;
|
|
||||||
private final NavigableSet<Offer> offers;
|
|
||||||
private volatile double sum;
|
|
||||||
private volatile double avg;
|
|
||||||
|
|
||||||
|
public abstract Item getItem();
|
||||||
|
|
||||||
public ItemStat(Item item, OFFER_TYPE offerType) {
|
public abstract double getAvg();
|
||||||
this.offers = new ConcurrentSkipListSet<>();
|
|
||||||
this.item = item;
|
public abstract Offer getBest();
|
||||||
this.type = offerType;
|
|
||||||
this.sum = 0;
|
public abstract int getOffersCount();
|
||||||
this.avg = Double.NaN;
|
|
||||||
|
public abstract NavigableSet<Offer> getOffers();
|
||||||
|
|
||||||
|
public abstract Offer getMin();
|
||||||
|
|
||||||
|
public abstract Offer getMax();
|
||||||
|
|
||||||
|
public abstract boolean isEmpty();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof ItemStat)) return false;
|
||||||
|
|
||||||
|
ItemStat itemStat = (ItemStat) o;
|
||||||
|
return getType() == itemStat.getType() && getItem().equals(itemStat.getItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized void put(Offer offer){
|
@Override
|
||||||
LOG.trace("Put offer {} to item stat {}", offer, this);
|
public int hashCode() {
|
||||||
assert offer.hasType(type) && offer.hasItem(item);
|
int result = getItem().hashCode();
|
||||||
if (offers.add(offer)){
|
result = 31 * result + getType().hashCode();
|
||||||
double price = offer.getPrice();
|
return result;
|
||||||
sum += price;
|
|
||||||
avg = sum / offers.size();
|
|
||||||
LOG.trace("After this = {}", this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized void remove(Offer offer){
|
|
||||||
LOG.trace("Remove offer {} from item stat {}", offer, this);
|
|
||||||
assert offer.hasType(type) && offer.hasItem(item);
|
|
||||||
if (offers.remove(offer)){
|
|
||||||
if (offers.size()>0){
|
|
||||||
double price = offer.getPrice();
|
|
||||||
sum -= price;
|
|
||||||
avg = sum / offers.size();
|
|
||||||
} else {
|
|
||||||
sum = 0; avg = Double.NaN;
|
|
||||||
}
|
|
||||||
LOG.trace("After this = {}", this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized void update(Offer offer, double price){
|
|
||||||
LOG.trace("Update offer {} from item stat {}", offer, this);
|
|
||||||
assert offer.hasType(type) && offer.hasItem(item) && offers.contains(offer);
|
|
||||||
double oldPrice = offer.getPrice();
|
|
||||||
offers.remove(offer);
|
|
||||||
offer.setPrice(price);
|
|
||||||
offers.add(offer);
|
|
||||||
sum += price - oldPrice;
|
|
||||||
avg = sum / offers.size();
|
|
||||||
LOG.trace("After update this = {}", this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public OFFER_TYPE getType(){
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Item getItem() {
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized double getAvg(){
|
|
||||||
return avg;
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized Offer getBest() {
|
|
||||||
if (offers.isEmpty()) return getFake();
|
|
||||||
return type.getOrder() > 0 ? offers.first() : offers.last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized int getOffersCount(){
|
|
||||||
return offers.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized NavigableSet<Offer> getOffers() {
|
|
||||||
return Collections.unmodifiableNavigableSet(offers);
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized Offer getMin() {
|
|
||||||
if (offers.isEmpty()) return getFake();
|
|
||||||
return offers.first();
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized Offer getMax() {
|
|
||||||
if (offers.isEmpty()) return getFake();
|
|
||||||
return offers.last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized boolean isEmpty(){
|
|
||||||
return offers.isEmpty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
final StringBuilder sb = new StringBuilder("{");
|
final StringBuilder sb = new StringBuilder("{");
|
||||||
sb.append(item);
|
sb.append(getItem());
|
||||||
sb.append(", ").append(type);
|
sb.append(", ").append(getType());
|
||||||
if (LOG.isTraceEnabled()){
|
sb.append(", avg=").append(getAvg());
|
||||||
sb.append(", count=").append(offers.size());
|
|
||||||
sb.append(", sum=").append(sum);
|
|
||||||
}
|
|
||||||
sb.append(", avg=").append(avg);
|
|
||||||
sb.append(", best=").append(getBest());
|
sb.append(", best=").append(getBest());
|
||||||
sb.append(", min=").append(getMin());
|
sb.append(", min=").append(getMin());
|
||||||
sb.append(", max=").append(getMax());
|
sb.append(", max=").append(getMax());
|
||||||
@@ -119,18 +56,17 @@ public class ItemStat {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Offer getFake() {
|
||||||
private Offer getFake() {
|
|
||||||
return new Offer() {
|
return new Offer() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item getItem() {
|
public Item getItem() {
|
||||||
return item;
|
return getItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OFFER_TYPE getType() {
|
public OFFER_TYPE getType() {
|
||||||
return type;
|
return getType();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -154,12 +90,12 @@ public class ItemStat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void setPrice(double price) {
|
protected void setPrice(double price) {
|
||||||
throw new UnsupportedOperationException("Is fake offer, change unsupported");
|
throw new UnsupportedOperationException("Is fake offer, change unsupported");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void setVendor(Vendor vendor) {
|
protected void setVendor(Vendor vendor) {
|
||||||
throw new UnsupportedOperationException("Is fake offer, change unsupported");
|
throw new UnsupportedOperationException("Is fake offer, change unsupported");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -206,23 +142,35 @@ public class ItemStat {
|
|||||||
public void setName(String name) {
|
public void setName(String name) {
|
||||||
throw new UnsupportedOperationException("Is fake vendor, change unsupported");
|
throw new UnsupportedOperationException("Is fake vendor, change unsupported");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getX() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setX(double x) {
|
||||||
|
throw new UnsupportedOperationException("Is fake vendor, change unsupported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getY() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setY(double y) {
|
||||||
|
throw new UnsupportedOperationException("Is fake vendor, change unsupported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getZ() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setZ(double z) {
|
||||||
|
throw new UnsupportedOperationException("Is fake vendor, change unsupported");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (!(o instanceof ItemStat)) return false;
|
|
||||||
|
|
||||||
ItemStat itemStat = (ItemStat) o;
|
|
||||||
|
|
||||||
return type == itemStat.type && item.equals(itemStat.item);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = item.hashCode();
|
|
||||||
result = 31 * result + type.hashCode();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,102 +6,70 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class Offer implements Comparable<Offer>{
|
public abstract class Offer implements Comparable<Offer> {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(Offer.class);
|
private final static Logger LOG = LoggerFactory.getLogger(Offer.class);
|
||||||
|
|
||||||
private Vendor vendor;
|
public abstract Item getItem();
|
||||||
private final Item item;
|
|
||||||
private final OFFER_TYPE type;
|
|
||||||
private volatile double price;
|
|
||||||
|
|
||||||
Offer(){
|
public abstract OFFER_TYPE getType();
|
||||||
item = null;
|
|
||||||
type = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Offer(OFFER_TYPE type, Item item, double price) {
|
public abstract double getPrice();
|
||||||
this.item = item;
|
protected abstract void setPrice(double price);
|
||||||
this.type = type;
|
|
||||||
setPrice(price);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Item getItem() {
|
public abstract Vendor getVendor();
|
||||||
return item;
|
protected abstract void setVendor(Vendor vendor);
|
||||||
}
|
|
||||||
|
|
||||||
public OFFER_TYPE getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getPrice() {
|
|
||||||
return price;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setPrice(double price) {
|
|
||||||
this.price = price;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vendor getVendor() {
|
|
||||||
return vendor;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setVendor(Vendor vendor) {
|
|
||||||
LOG.trace("Set vendor {} to item {}", vendor, this);
|
|
||||||
this.vendor = vendor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
final StringBuilder sb = new StringBuilder("{");
|
|
||||||
sb.append("").append(vendor);
|
|
||||||
sb.append(", ").append(item);
|
|
||||||
sb.append(", ").append(type);
|
|
||||||
if (LOG.isTraceEnabled()){
|
|
||||||
sb.append(", ").append(price);
|
|
||||||
} else {
|
|
||||||
sb.append(", ").append(getPrice());
|
|
||||||
}
|
|
||||||
sb.append('}');
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasType(OFFER_TYPE offerType) {
|
public boolean hasType(OFFER_TYPE offerType) {
|
||||||
return this.type.equals(offerType);
|
return getType().equals(offerType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasItem(Item item) {
|
public boolean hasItem(Item item) {
|
||||||
return this.item.equals(item);
|
return getItem().equals(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean equalsPrice(Offer offer){
|
public boolean equalsPrice(Offer offer){
|
||||||
return equalsType(offer) && price==offer.price;
|
return equalsType(offer) && getPrice() == offer.getPrice();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean equalsType(Offer offer){
|
public boolean equalsType(Offer offer){
|
||||||
return offer != null &&
|
return offer != null &&
|
||||||
type.equals(offer.type) &&
|
getType().equals(offer.getType()) &&
|
||||||
item.equals(offer.item);
|
getItem().equals(offer.getItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(@NotNull Offer other) {
|
public int compareTo(@NotNull Offer other) {
|
||||||
Objects.requireNonNull(other, "Not compare with null");
|
Objects.requireNonNull(other, "Not compare with null");
|
||||||
if (this == other) return 0;
|
if (this == other) return 0;
|
||||||
int cmp = type.compareTo(other.type);
|
int cmp = getType().compareTo(other.getType());
|
||||||
if (cmp!=0) return cmp;
|
if (cmp!=0) return cmp;
|
||||||
cmp = Double.compare(price, other.price);
|
cmp = Double.compare(getPrice(), other.getPrice());
|
||||||
if (cmp!=0) return cmp;
|
if (cmp!=0) return cmp;
|
||||||
cmp = vendor.compareTo(other.vendor);
|
cmp = getVendor().compareTo(other.getVendor());
|
||||||
if (cmp!=0) return cmp;
|
if (cmp!=0) return cmp;
|
||||||
return item.compareTo(other.item);
|
return getItem().compareTo(other.getItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toVString(){
|
public String toVString(){
|
||||||
return String.format("%s (%.0f)", getVendor().getName(), price);
|
return String.format("%s (%.0f)", getVendor().getName(), getPrice());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toIString(){
|
public String toIString(){
|
||||||
return String.format("%s (%.0f)", item.getName(), price);
|
return String.format("%s (%.0f)", getItem().getName(), getPrice());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
final StringBuilder sb = new StringBuilder("{");
|
||||||
|
sb.append("").append(getVendor());
|
||||||
|
sb.append(", ").append(getItem());
|
||||||
|
sb.append(", ").append(getType());
|
||||||
|
if (LOG.isTraceEnabled()){
|
||||||
|
sb.append(", ").append(getPrice());
|
||||||
|
} else {
|
||||||
|
sb.append(", ").append(getPrice());
|
||||||
|
}
|
||||||
|
sb.append('}');
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,10 +14,18 @@ import java.util.stream.Collectors;
|
|||||||
public abstract class Vendor implements Comparable<Vendor>, Connectable<Vendor> {
|
public abstract class Vendor implements Comparable<Vendor>, Connectable<Vendor> {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(Vendor.class);
|
private final static Logger LOG = LoggerFactory.getLogger(Vendor.class);
|
||||||
|
|
||||||
private String name;
|
public abstract String getName();
|
||||||
private double x;
|
public abstract void setName(String name);
|
||||||
private double y;
|
|
||||||
private double z;
|
public abstract double getX();
|
||||||
|
public abstract void setX(double x);
|
||||||
|
|
||||||
|
public abstract double getY();
|
||||||
|
public abstract void setY(double y);
|
||||||
|
|
||||||
|
public abstract double getZ();
|
||||||
|
public abstract void setZ(double z);
|
||||||
|
|
||||||
|
|
||||||
protected abstract Collection<Offer> getOffers();
|
protected abstract Collection<Offer> getOffers();
|
||||||
protected abstract Collection<Item> getItems(OFFER_TYPE offerType);
|
protected abstract Collection<Item> getItems(OFFER_TYPE offerType);
|
||||||
@@ -26,13 +34,6 @@ public abstract class Vendor implements Comparable<Vendor>, Connectable<Vendor>
|
|||||||
protected abstract void addOffer(Offer offer);
|
protected abstract void addOffer(Offer offer);
|
||||||
protected abstract void removeOffer(Offer offer);
|
protected abstract void removeOffer(Offer offer);
|
||||||
|
|
||||||
protected Vendor() {
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Vendor(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Collection<Offer> getOffers(OFFER_TYPE offerType){
|
protected Collection<Offer> getOffers(OFFER_TYPE offerType){
|
||||||
List<Offer> offers = getOffers()
|
List<Offer> offers = getOffers()
|
||||||
.stream()
|
.stream()
|
||||||
@@ -74,7 +75,6 @@ public abstract class Vendor implements Comparable<Vendor>, Connectable<Vendor>
|
|||||||
LOG.trace("Add offer {} to vendor {}", offer, this);
|
LOG.trace("Add offer {} to vendor {}", offer, this);
|
||||||
offer.setVendor(this);
|
offer.setVendor(this);
|
||||||
addOffer(offer);
|
addOffer(offer);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void remove(Offer offer){
|
public final void remove(Offer offer){
|
||||||
@@ -83,7 +83,6 @@ public abstract class Vendor implements Comparable<Vendor>, Connectable<Vendor>
|
|||||||
removeOffer(offer);
|
removeOffer(offer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public final Collection<Item> getSellItems() {
|
public final Collection<Item> getSellItems() {
|
||||||
return getItems(OFFER_TYPE.SELL);
|
return getItems(OFFER_TYPE.SELL);
|
||||||
}
|
}
|
||||||
@@ -92,14 +91,6 @@ public abstract class Vendor implements Comparable<Vendor>, Connectable<Vendor>
|
|||||||
return getItems(OFFER_TYPE.BUY);
|
return getItems(OFFER_TYPE.BUY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return getName();
|
return getName();
|
||||||
@@ -109,12 +100,14 @@ public abstract class Vendor implements Comparable<Vendor>, Connectable<Vendor>
|
|||||||
public int compareTo(@NotNull Vendor other) {
|
public int compareTo(@NotNull Vendor other) {
|
||||||
Objects.requireNonNull(other, "Not compare with null");
|
Objects.requireNonNull(other, "Not compare with null");
|
||||||
if (this == other) return 0;
|
if (this == other) return 0;
|
||||||
return name != null ? other.name != null ? name.compareTo(other.name) : -1 : 0;
|
String name = getName();
|
||||||
|
String otherName = other.getName();
|
||||||
|
return name != null ? otherName != null ? name.compareTo(otherName) : -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getDistance(Vendor other){
|
public double getDistance(Vendor other){
|
||||||
return getDistance(other.x, other.y, other.z);
|
return getDistance(other.getX(), other.getY(), other.getZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -123,31 +116,8 @@ public abstract class Vendor implements Comparable<Vendor>, Connectable<Vendor>
|
|||||||
}
|
}
|
||||||
|
|
||||||
public double getDistance(double x, double y, double z){
|
public double getDistance(double x, double y, double z){
|
||||||
return Math.sqrt(Math.pow(x - this.x, 2) + Math.pow(y-this.y, 2) + Math.pow(z - this.z, 2));
|
return Math.sqrt(Math.pow(x - getX(), 2) + Math.pow(y - getY(), 2) + Math.pow(z - getZ(), 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public double getX() {
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setX(double x) {
|
|
||||||
this.x = x;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getY() {
|
|
||||||
return y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setY(double y) {
|
|
||||||
this.y = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getZ() {
|
|
||||||
return z;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setZ(double z) {
|
|
||||||
this.z = z;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package ru.trader.store;
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -9,7 +9,6 @@ import org.xml.sax.helpers.DefaultHandler;
|
|||||||
import ru.trader.core.*;
|
import ru.trader.core.*;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.OptionalLong;
|
|
||||||
|
|
||||||
public class MarketDocHandler extends DefaultHandler {
|
public class MarketDocHandler extends DefaultHandler {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(MarketDocHandler.class);
|
private final static Logger LOG = LoggerFactory.getLogger(MarketDocHandler.class);
|
||||||
@@ -104,7 +103,7 @@ public class MarketDocHandler extends DefaultHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void onOffer(OFFER_TYPE offerType, Item item, double price){
|
protected void onOffer(OFFER_TYPE offerType, Item item, double price){
|
||||||
Offer offer = new Offer(offerType, item, price);
|
Offer offer = new SimpleOffer(offerType, item, price);
|
||||||
curVendor.add(offer);
|
curVendor.add(offer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,14 +115,14 @@ public class MarketDocHandler extends DefaultHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void onItem(String name, String id) {
|
protected void onItem(String name, String id) {
|
||||||
Item item = new Item(name);
|
Item item = new SimpleItem(name);
|
||||||
item.setGroup(curGroup);
|
item.setGroup(curGroup);
|
||||||
world.add(item);
|
world.add(item);
|
||||||
items.put(id, item);
|
items.put(id, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onGroup(String name, GROUP_TYPE type) {
|
protected void onGroup(String name, GROUP_TYPE type) {
|
||||||
curGroup = new Group(name, type);
|
curGroup = new SimpleGroup(name, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Market getWorld(){
|
public Market getWorld(){
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package ru.trader.store;
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
24
core/src/main/java/ru/trader/store/simple/SimpleGroup.java
Normal file
24
core/src/main/java/ru/trader/store/simple/SimpleGroup.java
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
|
import ru.trader.core.GROUP_TYPE;
|
||||||
|
import ru.trader.core.Group;
|
||||||
|
|
||||||
|
public class SimpleGroup extends Group {
|
||||||
|
private final String name;
|
||||||
|
private final GROUP_TYPE type;
|
||||||
|
|
||||||
|
public SimpleGroup(String name, GROUP_TYPE type) {
|
||||||
|
this.name = name;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GROUP_TYPE getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
33
core/src/main/java/ru/trader/store/simple/SimpleItem.java
Normal file
33
core/src/main/java/ru/trader/store/simple/SimpleItem.java
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
|
import ru.trader.core.Group;
|
||||||
|
import ru.trader.core.Item;
|
||||||
|
|
||||||
|
public class SimpleItem extends Item {
|
||||||
|
private String name;
|
||||||
|
private Group group;
|
||||||
|
|
||||||
|
public SimpleItem(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Group getGroup() {
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGroup(Group group) {
|
||||||
|
this.group = group;
|
||||||
|
}
|
||||||
|
}
|
||||||
138
core/src/main/java/ru/trader/store/simple/SimpleItemStat.java
Normal file
138
core/src/main/java/ru/trader/store/simple/SimpleItemStat.java
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import ru.trader.core.Item;
|
||||||
|
import ru.trader.core.ItemStat;
|
||||||
|
import ru.trader.core.OFFER_TYPE;
|
||||||
|
import ru.trader.core.Offer;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ConcurrentSkipListSet;
|
||||||
|
|
||||||
|
public class SimpleItemStat extends ItemStat {
|
||||||
|
private final static Logger LOG = LoggerFactory.getLogger(SimpleItemStat.class);
|
||||||
|
|
||||||
|
private final Item item;
|
||||||
|
private final OFFER_TYPE type;
|
||||||
|
private final NavigableSet<Offer> offers;
|
||||||
|
private volatile double sum;
|
||||||
|
private volatile double avg;
|
||||||
|
|
||||||
|
|
||||||
|
public SimpleItemStat(Item item, OFFER_TYPE offerType) {
|
||||||
|
this.offers = new ConcurrentSkipListSet<>();
|
||||||
|
this.item = item;
|
||||||
|
this.type = offerType;
|
||||||
|
this.sum = 0;
|
||||||
|
this.avg = Double.NaN;
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized void put(Offer offer){
|
||||||
|
LOG.trace("Put offer {} to item stat {}", offer, this);
|
||||||
|
assert offer.hasType(type) && offer.hasItem(item);
|
||||||
|
if (offers.add(offer)){
|
||||||
|
double price = offer.getPrice();
|
||||||
|
sum += price;
|
||||||
|
avg = sum / offers.size();
|
||||||
|
LOG.trace("After this = {}", this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized void remove(Offer offer){
|
||||||
|
LOG.trace("Remove offer {} from item stat {}", offer, this);
|
||||||
|
assert offer.hasType(type) && offer.hasItem(item);
|
||||||
|
if (offers.remove(offer)){
|
||||||
|
if (offers.size()>0){
|
||||||
|
double price = offer.getPrice();
|
||||||
|
sum -= price;
|
||||||
|
avg = sum / offers.size();
|
||||||
|
} else {
|
||||||
|
sum = 0; avg = Double.NaN;
|
||||||
|
}
|
||||||
|
LOG.trace("After this = {}", this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected synchronized void update(Offer offer, double price){
|
||||||
|
LOG.trace("Update offer {} from item stat {}", offer, this);
|
||||||
|
assert offer.hasType(type) && offer.hasItem(item) && offers.contains(offer);
|
||||||
|
double oldPrice = offer.getPrice();
|
||||||
|
offers.remove(offer);
|
||||||
|
((SimpleOffer)offer).setPrice(price);
|
||||||
|
offers.add(offer);
|
||||||
|
sum += price - oldPrice;
|
||||||
|
avg = sum / offers.size();
|
||||||
|
LOG.trace("After update this = {}", this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OFFER_TYPE getType(){
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item getItem() {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized double getAvg(){
|
||||||
|
return avg;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized Offer getBest() {
|
||||||
|
if (offers.isEmpty()) return getFake();
|
||||||
|
return type.getOrder() > 0 ? offers.first() : offers.last();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized int getOffersCount(){
|
||||||
|
return offers.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized NavigableSet<Offer> getOffers() {
|
||||||
|
return Collections.unmodifiableNavigableSet(offers);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized Offer getMin() {
|
||||||
|
if (offers.isEmpty()) return getFake();
|
||||||
|
return offers.first();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized Offer getMax() {
|
||||||
|
if (offers.isEmpty()) return getFake();
|
||||||
|
return offers.last();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized boolean isEmpty(){
|
||||||
|
return offers.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
final StringBuilder sb = new StringBuilder("{");
|
||||||
|
sb.append(getItem());
|
||||||
|
sb.append(", ").append(getType());
|
||||||
|
if (SimpleItemStat.LOG.isTraceEnabled()){
|
||||||
|
sb.append(", count=").append(offers.size());
|
||||||
|
sb.append(", sum=").append(sum);
|
||||||
|
}
|
||||||
|
sb.append(", avg=").append(getAvg());
|
||||||
|
sb.append(", best=").append(getBest());
|
||||||
|
sb.append(", min=").append(getMin());
|
||||||
|
sb.append(", max=").append(getMax());
|
||||||
|
|
||||||
|
sb.append("}");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
package ru.trader.core;
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
|
import ru.trader.core.*;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -8,8 +10,8 @@ public class SimpleMarket extends MarketSupport {
|
|||||||
protected List<Item> items;
|
protected List<Item> items;
|
||||||
|
|
||||||
//caching
|
//caching
|
||||||
private final Map<Item,ItemStat> sellItems = new HashMap<>();
|
private final Map<Item,SimpleItemStat> sellItems = new HashMap<>();
|
||||||
private final Map<Item,ItemStat> buyItems = new HashMap<>();
|
private final Map<Item,SimpleItemStat> buyItems = new HashMap<>();
|
||||||
|
|
||||||
public SimpleMarket() {
|
public SimpleMarket() {
|
||||||
init();
|
init();
|
||||||
@@ -20,7 +22,7 @@ public class SimpleMarket extends MarketSupport {
|
|||||||
items = new ArrayList<>();
|
items = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<Item,ItemStat> getItemCache(OFFER_TYPE offerType){
|
private Map<Item,SimpleItemStat> getItemCache(OFFER_TYPE offerType){
|
||||||
switch (offerType) {
|
switch (offerType) {
|
||||||
case SELL: return sellItems;
|
case SELL: return sellItems;
|
||||||
case BUY: return buyItems;
|
case BUY: return buyItems;
|
||||||
@@ -29,23 +31,19 @@ public class SimpleMarket extends MarketSupport {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void put(Map<Item, ItemStat> cache, Offer offer){
|
private void put(Map<Item, SimpleItemStat> cache, Offer offer){
|
||||||
Item item = offer.getItem();
|
Item item = offer.getItem();
|
||||||
ItemStat entry = cache.get(item);
|
SimpleItemStat entry = cache.get(item);
|
||||||
if (entry==null){
|
if (entry==null){
|
||||||
entry = newItemStat(item, offer.getType());
|
entry = new SimpleItemStat(item, offer.getType());
|
||||||
cache.put(item, entry);
|
cache.put(item, entry);
|
||||||
}
|
}
|
||||||
entry.put(offer);
|
entry.put(offer);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ItemStat newItemStat(Item item, OFFER_TYPE offerType){
|
private void remove(Map<Item, SimpleItemStat> cache, Offer offer){
|
||||||
return new ItemStat(item, offerType);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void remove(Map<Item, ItemStat> cache, Offer offer){
|
|
||||||
Item item = offer.getItem();
|
Item item = offer.getItem();
|
||||||
ItemStat entry = cache.get(item);
|
SimpleItemStat entry = cache.get(item);
|
||||||
if (entry!=null){
|
if (entry!=null){
|
||||||
entry.remove(offer);
|
entry.remove(offer);
|
||||||
if (entry.getOffersCount()==0)
|
if (entry.getOffersCount()==0)
|
||||||
@@ -114,7 +112,7 @@ public class SimpleMarket extends MarketSupport {
|
|||||||
@Override
|
@Override
|
||||||
public ItemStat getStat(OFFER_TYPE offerType, Item item) {
|
public ItemStat getStat(OFFER_TYPE offerType, Item item) {
|
||||||
ItemStat entry = getItemCache(offerType).get(item);
|
ItemStat entry = getItemCache(offerType).get(item);
|
||||||
return entry!=null ? entry : newItemStat(item, offerType);
|
return entry != null ? entry : new SimpleItemStat(item, offerType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
55
core/src/main/java/ru/trader/store/simple/SimpleOffer.java
Normal file
55
core/src/main/java/ru/trader/store/simple/SimpleOffer.java
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import ru.trader.core.Item;
|
||||||
|
import ru.trader.core.OFFER_TYPE;
|
||||||
|
import ru.trader.core.Offer;
|
||||||
|
import ru.trader.core.Vendor;
|
||||||
|
|
||||||
|
public class SimpleOffer extends Offer {
|
||||||
|
private final static Logger LOG = LoggerFactory.getLogger(SimpleOffer.class);
|
||||||
|
|
||||||
|
private Vendor vendor;
|
||||||
|
private final Item item;
|
||||||
|
private final OFFER_TYPE type;
|
||||||
|
private volatile double price;
|
||||||
|
|
||||||
|
public SimpleOffer(OFFER_TYPE type, Item item, double price) {
|
||||||
|
this.item = item;
|
||||||
|
this.type = type;
|
||||||
|
setPrice(price);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item getItem() {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OFFER_TYPE getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getPrice() {
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setPrice(double price) {
|
||||||
|
this.price = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vendor getVendor() {
|
||||||
|
return vendor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setVendor(Vendor vendor) {
|
||||||
|
LOG.trace("Set vendor {} to item {}", vendor, this);
|
||||||
|
this.vendor = vendor;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,20 +1,28 @@
|
|||||||
package ru.trader.core;
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
|
import ru.trader.core.Item;
|
||||||
|
import ru.trader.core.OFFER_TYPE;
|
||||||
|
import ru.trader.core.Offer;
|
||||||
|
import ru.trader.core.Vendor;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class SimpleVendor extends Vendor {
|
public class SimpleVendor extends Vendor {
|
||||||
|
private String name;
|
||||||
|
private double x;
|
||||||
|
private double y;
|
||||||
|
private double z;
|
||||||
|
|
||||||
protected Map<Item, Offer> sell;
|
protected Map<Item, Offer> sell;
|
||||||
protected Map<Item, Offer> buy;
|
protected Map<Item, Offer> buy;
|
||||||
|
|
||||||
public SimpleVendor() {
|
public SimpleVendor() {
|
||||||
super();
|
|
||||||
initOffers();
|
initOffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SimpleVendor(String name) {
|
public SimpleVendor(String name) {
|
||||||
super(name);
|
this.name = name;
|
||||||
initOffers();
|
initOffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,6 +31,46 @@ public class SimpleVendor extends Vendor {
|
|||||||
buy = new ConcurrentHashMap<>(20, 0.9f, 2);
|
buy = new ConcurrentHashMap<>(20, 0.9f, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getX() {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setX(double x) {
|
||||||
|
this.x = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getY() {
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setY(double y) {
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getZ() {
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setZ(double z) {
|
||||||
|
this.z = z;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<Offer> getOffers(OFFER_TYPE offerType) {
|
protected Collection<Offer> getOffers(OFFER_TYPE offerType) {
|
||||||
switch (offerType) {
|
switch (offerType) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package ru.trader.store;
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
package ru.trader.core;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
|
|
||||||
public class ItemStatTest extends Assert {
|
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(ItemStatTest.class);
|
|
||||||
|
|
||||||
private final static Item ITEM1 = new Item("Item1");
|
|
||||||
|
|
||||||
|
|
||||||
private ItemStat itemSellStat = new ItemStat(ITEM1, OFFER_TYPE.SELL);
|
|
||||||
private ItemStat itemBuyStat = new ItemStat(ITEM1, OFFER_TYPE.BUY);
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void fill(){
|
|
||||||
itemSellStat.put(new Offer(OFFER_TYPE.SELL, ITEM1, 10));
|
|
||||||
itemSellStat.put(new Offer(OFFER_TYPE.SELL, ITEM1, 20));
|
|
||||||
itemSellStat.put(new Offer(OFFER_TYPE.SELL, ITEM1, 30));
|
|
||||||
itemSellStat.put(new Offer(OFFER_TYPE.SELL, ITEM1, 40));
|
|
||||||
|
|
||||||
itemBuyStat.put(new Offer(OFFER_TYPE.BUY, ITEM1, 100));
|
|
||||||
itemBuyStat.put(new Offer(OFFER_TYPE.BUY, ITEM1, 200));
|
|
||||||
itemBuyStat.put(new Offer(OFFER_TYPE.BUY, ITEM1, 300));
|
|
||||||
itemBuyStat.put(new Offer(OFFER_TYPE.BUY, ITEM1, 400));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSell(){
|
|
||||||
LOG.info("Start sell test");
|
|
||||||
assertEquals(itemSellStat.getAvg(), (10+20+30+40)/4, 0);
|
|
||||||
assertEquals(itemSellStat.getBest().getPrice(), 10d, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testBuy(){
|
|
||||||
LOG.info("Start buy test");
|
|
||||||
assertEquals(itemBuyStat.getAvg(), (100+200+300+400)/4, 0);
|
|
||||||
assertEquals(itemBuyStat.getBest().getPrice(), 400d, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -8,6 +8,10 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.trader.TestUtil;
|
import ru.trader.TestUtil;
|
||||||
import ru.trader.graph.Path;
|
import ru.trader.graph.Path;
|
||||||
|
import ru.trader.store.simple.SimpleItem;
|
||||||
|
import ru.trader.store.simple.SimpleMarket;
|
||||||
|
import ru.trader.store.simple.SimpleOffer;
|
||||||
|
import ru.trader.store.simple.SimpleVendor;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
@@ -26,9 +30,9 @@ public class MarketAnalyzerTest extends Assert {
|
|||||||
private static Vendor v9;
|
private static Vendor v9;
|
||||||
private static Vendor v10;
|
private static Vendor v10;
|
||||||
private static Vendor v11;
|
private static Vendor v11;
|
||||||
private static Item ITEM1 = new Item("ITEM1");
|
private static Item ITEM1 = new SimpleItem("ITEM1");
|
||||||
private static Item ITEM2 = new Item("ITEM2");
|
private static Item ITEM2 = new SimpleItem("ITEM2");
|
||||||
private static Item ITEM3 = new Item("ITEM3");
|
private static Item ITEM3 = new SimpleItem("ITEM3");
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
@@ -69,19 +73,19 @@ public class MarketAnalyzerTest extends Assert {
|
|||||||
market.add(v10);
|
market.add(v10);
|
||||||
market.add(v11);
|
market.add(v11);
|
||||||
|
|
||||||
market.add(v6, new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
market.add(v6, new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
market.add(v7, new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
market.add(v7, new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
market.add(v9, new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
market.add(v9, new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
market.add(v10, new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
market.add(v10, new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
market.add(v6, new Offer(OFFER_TYPE.BUY, ITEM1, 50));
|
market.add(v6, new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 50));
|
||||||
market.add(v7, new Offer(OFFER_TYPE.BUY, ITEM1, 120));
|
market.add(v7, new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 120));
|
||||||
market.add(v9, new Offer(OFFER_TYPE.BUY, ITEM1, 200));
|
market.add(v9, new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200));
|
||||||
market.add(v10, new Offer(OFFER_TYPE.BUY, ITEM1, 150));
|
market.add(v10, new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 150));
|
||||||
market.add(v9, new Offer(OFFER_TYPE.SELL, ITEM2, 100));
|
market.add(v9, new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 100));
|
||||||
market.add(v6, new Offer(OFFER_TYPE.BUY, ITEM2, 140));
|
market.add(v6, new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 140));
|
||||||
market.add(v7, new Offer(OFFER_TYPE.SELL, ITEM3, 154));
|
market.add(v7, new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 154));
|
||||||
market.add(v10, new Offer(OFFER_TYPE.BUY, ITEM3, 140));
|
market.add(v10, new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 140));
|
||||||
market.add(v11, new Offer(OFFER_TYPE.BUY, ITEM3, 500));
|
market.add(v11, new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 500));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import ru.trader.TestUtil;
|
import ru.trader.TestUtil;
|
||||||
import ru.trader.graph.PathRoute;
|
import ru.trader.graph.PathRoute;
|
||||||
import ru.trader.store.Store;
|
import ru.trader.store.simple.Store;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|||||||
@@ -5,22 +5,26 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import ru.trader.store.simple.SimpleItem;
|
||||||
|
import ru.trader.store.simple.SimpleMarket;
|
||||||
|
import ru.trader.store.simple.SimpleOffer;
|
||||||
|
import ru.trader.store.simple.SimpleVendor;
|
||||||
|
|
||||||
public class MarketTest1 extends Assert {
|
public class MarketTest1 extends Assert {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(MarketTest1.class);
|
private final static Logger LOG = LoggerFactory.getLogger(MarketTest1.class);
|
||||||
|
|
||||||
private final static Item ITEM1 = new Item("Item1");
|
private final static Item ITEM1 = new SimpleItem("Item1");
|
||||||
private final static Item ITEM2 = new Item("Item2");
|
private final static Item ITEM2 = new SimpleItem("Item2");
|
||||||
private final static Item ITEM3 = new Item("Item3");
|
private final static Item ITEM3 = new SimpleItem("Item3");
|
||||||
|
|
||||||
private final static Offer bestSellOffer1 = new Offer(OFFER_TYPE.SELL,ITEM1,10);
|
private final static Offer bestSellOffer1 = new SimpleOffer(OFFER_TYPE.SELL,ITEM1,10);
|
||||||
private final static Offer bestSellOffer2 = new Offer(OFFER_TYPE.SELL,ITEM2,15);
|
private final static Offer bestSellOffer2 = new SimpleOffer(OFFER_TYPE.SELL,ITEM2,15);
|
||||||
private final static Offer bestSellOffer3 = new Offer(OFFER_TYPE.SELL,ITEM3,20);
|
private final static Offer bestSellOffer3 = new SimpleOffer(OFFER_TYPE.SELL,ITEM3,20);
|
||||||
|
|
||||||
private final static Offer bestBuyOffer1 = new Offer(OFFER_TYPE.BUY,ITEM1,100);
|
private final static Offer bestBuyOffer1 = new SimpleOffer(OFFER_TYPE.BUY,ITEM1,100);
|
||||||
private final static Offer bestBuyOffer2 = new Offer(OFFER_TYPE.BUY,ITEM2,200);
|
private final static Offer bestBuyOffer2 = new SimpleOffer(OFFER_TYPE.BUY,ITEM2,200);
|
||||||
private final static Offer bestBuyOffer3 = new Offer(OFFER_TYPE.BUY,ITEM3,100);
|
private final static Offer bestBuyOffer3 = new SimpleOffer(OFFER_TYPE.BUY,ITEM3,100);
|
||||||
private final static Offer bestBuyOffer4 = new Offer(OFFER_TYPE.BUY,ITEM2,150);
|
private final static Offer bestBuyOffer4 = new SimpleOffer(OFFER_TYPE.BUY,ITEM2,150);
|
||||||
|
|
||||||
|
|
||||||
private final static Vendor sellVendor1 = new SimpleVendor();
|
private final static Vendor sellVendor1 = new SimpleVendor();
|
||||||
@@ -37,22 +41,22 @@ public class MarketTest1 extends Assert {
|
|||||||
@Before
|
@Before
|
||||||
public void fillMarket(){
|
public void fillMarket(){
|
||||||
sellVendor1.add(bestSellOffer1);
|
sellVendor1.add(bestSellOffer1);
|
||||||
sellVendor1.add(new Offer(OFFER_TYPE.SELL,ITEM2,100));
|
sellVendor1.add(new SimpleOffer(OFFER_TYPE.SELL,ITEM2,100));
|
||||||
sellVendor2.add(new Offer(OFFER_TYPE.SELL,ITEM3,200));
|
sellVendor2.add(new SimpleOffer(OFFER_TYPE.SELL,ITEM3,200));
|
||||||
sellVendor2.add(bestSellOffer2);
|
sellVendor2.add(bestSellOffer2);
|
||||||
sellVendor3.add(new Offer(OFFER_TYPE.SELL,ITEM1,300));
|
sellVendor3.add(new SimpleOffer(OFFER_TYPE.SELL,ITEM1,300));
|
||||||
sellVendor3.add(new Offer(OFFER_TYPE.SELL,ITEM2,300));
|
sellVendor3.add(new SimpleOffer(OFFER_TYPE.SELL,ITEM2,300));
|
||||||
sellVendor3.add(bestSellOffer3);
|
sellVendor3.add(bestSellOffer3);
|
||||||
sellVendor4.add(new Offer(OFFER_TYPE.SELL,ITEM2,150));
|
sellVendor4.add(new SimpleOffer(OFFER_TYPE.SELL,ITEM2,150));
|
||||||
|
|
||||||
buyVendor1.add(new Offer(OFFER_TYPE.BUY,ITEM2,50));
|
buyVendor1.add(new SimpleOffer(OFFER_TYPE.BUY,ITEM2,50));
|
||||||
buyVendor1.add(bestBuyOffer1);
|
buyVendor1.add(bestBuyOffer1);
|
||||||
buyVendor2.add(new Offer(OFFER_TYPE.BUY,ITEM1,40));
|
buyVendor2.add(new SimpleOffer(OFFER_TYPE.BUY,ITEM1,40));
|
||||||
buyVendor2.add(bestBuyOffer2);
|
buyVendor2.add(bestBuyOffer2);
|
||||||
buyVendor2.add(new Offer(OFFER_TYPE.BUY,ITEM3,50));
|
buyVendor2.add(new SimpleOffer(OFFER_TYPE.BUY,ITEM3,50));
|
||||||
buyVendor3.add(bestBuyOffer3);
|
buyVendor3.add(bestBuyOffer3);
|
||||||
buyVendor3.add(new Offer(OFFER_TYPE.BUY,ITEM2,20));
|
buyVendor3.add(new SimpleOffer(OFFER_TYPE.BUY,ITEM2,20));
|
||||||
buyVendor4.add(new Offer(OFFER_TYPE.BUY,ITEM1,80));
|
buyVendor4.add(new SimpleOffer(OFFER_TYPE.BUY,ITEM1,80));
|
||||||
buyVendor4.add(bestBuyOffer4);
|
buyVendor4.add(bestBuyOffer4);
|
||||||
|
|
||||||
market = new SimpleMarket();
|
market = new SimpleMarket();
|
||||||
|
|||||||
@@ -5,15 +5,18 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import ru.trader.store.simple.SimpleItem;
|
||||||
|
import ru.trader.store.simple.SimpleOffer;
|
||||||
|
import ru.trader.store.simple.SimpleVendor;
|
||||||
|
|
||||||
|
|
||||||
public class VendorTest extends Assert {
|
public class VendorTest extends Assert {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(VendorTest.class);
|
private final static Logger LOG = LoggerFactory.getLogger(VendorTest.class);
|
||||||
|
|
||||||
private final static Item ITEM1 = new Item("Item1");
|
private final static Item ITEM1 = new SimpleItem("Item1");
|
||||||
private final static Item ITEM2 = new Item("Item2");
|
private final static Item ITEM2 = new SimpleItem("Item2");
|
||||||
private final static Offer SELL_OFFER = new Offer(OFFER_TYPE.SELL, ITEM1, 10);
|
private final static Offer SELL_OFFER = new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 10);
|
||||||
private final static Offer BUY_OFFER = new Offer(OFFER_TYPE.BUY, ITEM1, 10);
|
private final static Offer BUY_OFFER = new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 10);
|
||||||
|
|
||||||
private Vendor sellVendor;
|
private Vendor sellVendor;
|
||||||
private Vendor buyVendor;
|
private Vendor buyVendor;
|
||||||
|
|||||||
@@ -6,24 +6,27 @@ import org.junit.Test;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.trader.TestUtil;
|
import ru.trader.TestUtil;
|
||||||
|
import ru.trader.store.simple.SimpleItem;
|
||||||
|
import ru.trader.store.simple.SimpleOffer;
|
||||||
|
import ru.trader.store.simple.SimpleVendor;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class VendorTest2 extends Assert {
|
public class VendorTest2 extends Assert {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(VendorTest2.class);
|
private final static Logger LOG = LoggerFactory.getLogger(VendorTest2.class);
|
||||||
|
|
||||||
private final static Item ITEM1 = new Item("Item1");
|
private final static Item ITEM1 = new SimpleItem("Item1");
|
||||||
private final static Item ITEM2 = new Item("Item2");
|
private final static Item ITEM2 = new SimpleItem("Item2");
|
||||||
private final static Item ITEM3 = new Item("Item3");
|
private final static Item ITEM3 = new SimpleItem("Item3");
|
||||||
private final static Offer SELL_OFFER1 = new Offer(OFFER_TYPE.SELL, ITEM1, 10);
|
private final static Offer SELL_OFFER1 = new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 10);
|
||||||
private final static Offer SELL_OFFER2 = new Offer(OFFER_TYPE.SELL, ITEM2, 10);
|
private final static Offer SELL_OFFER2 = new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 10);
|
||||||
private final static Offer SELL_OFFER3 = new Offer(OFFER_TYPE.SELL, ITEM3, 10);
|
private final static Offer SELL_OFFER3 = new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 10);
|
||||||
private final static Offer DUBLE_SELL_OFFER1 = new Offer(OFFER_TYPE.SELL, ITEM1, 100);
|
private final static Offer DUBLE_SELL_OFFER1 = new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100);
|
||||||
|
|
||||||
private final static Offer BUY_OFFER1 = new Offer(OFFER_TYPE.BUY, ITEM1, 100);
|
private final static Offer BUY_OFFER1 = new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 100);
|
||||||
private final static Offer BUY_OFFER2 = new Offer(OFFER_TYPE.BUY, ITEM2, 10);
|
private final static Offer BUY_OFFER2 = new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 10);
|
||||||
private final static Offer BUY_OFFER3 = new Offer(OFFER_TYPE.BUY, ITEM3, 10);
|
private final static Offer BUY_OFFER3 = new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 10);
|
||||||
private final static Offer DUBLE_BUY_OFFER1 = new Offer(OFFER_TYPE.BUY, ITEM1, 10);
|
private final static Offer DUBLE_BUY_OFFER1 = new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 10);
|
||||||
|
|
||||||
|
|
||||||
private Vendor sellVendor;
|
private Vendor sellVendor;
|
||||||
|
|||||||
@@ -6,15 +6,18 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.trader.TestUtil;
|
import ru.trader.TestUtil;
|
||||||
import ru.trader.core.*;
|
import ru.trader.core.*;
|
||||||
|
import ru.trader.store.simple.SimpleItem;
|
||||||
|
import ru.trader.store.simple.SimpleOffer;
|
||||||
|
import ru.trader.store.simple.SimpleVendor;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class PathRouteTest extends Assert {
|
public class PathRouteTest extends Assert {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(PathRouteTest.class);
|
private final static Logger LOG = LoggerFactory.getLogger(PathRouteTest.class);
|
||||||
|
|
||||||
private final static Item ITEM1 = new Item("ITEM1");
|
private final static Item ITEM1 = new SimpleItem("ITEM1");
|
||||||
private final static Item ITEM2 = new Item("ITEM2");
|
private final static Item ITEM2 = new SimpleItem("ITEM2");
|
||||||
private final static Item ITEM3 = new Item("ITEM3");
|
private final static Item ITEM3 = new SimpleItem("ITEM3");
|
||||||
private static Vendor v1;
|
private static Vendor v1;
|
||||||
private static Vendor v2;
|
private static Vendor v2;
|
||||||
private static Vendor v3;
|
private static Vendor v3;
|
||||||
@@ -26,12 +29,12 @@ public class PathRouteTest extends Assert {
|
|||||||
v1 = new SimpleVendor("v1");
|
v1 = new SimpleVendor("v1");
|
||||||
v2 = new SimpleVendor("v2");
|
v2 = new SimpleVendor("v2");
|
||||||
|
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM2, 200));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM3, 300));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300));
|
||||||
v2.add(new Offer(OFFER_TYPE.BUY, ITEM1, 300));
|
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 300));
|
||||||
v2.add(new Offer(OFFER_TYPE.BUY, ITEM2, 350));
|
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 350));
|
||||||
v2.add(new Offer(OFFER_TYPE.BUY, ITEM3, 400));
|
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 400));
|
||||||
|
|
||||||
PathRoute res = new PathRoute(new Vertex<>(v1));
|
PathRoute res = new PathRoute(new Vertex<>(v1));
|
||||||
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
||||||
@@ -67,12 +70,12 @@ public class PathRouteTest extends Assert {
|
|||||||
v2 = new SimpleVendor("v2");
|
v2 = new SimpleVendor("v2");
|
||||||
v3 = new SimpleVendor("v3");
|
v3 = new SimpleVendor("v3");
|
||||||
|
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM3, 300));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM2, 200));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200));
|
||||||
v3.add(new Offer(OFFER_TYPE.BUY, ITEM1, 300));
|
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 300));
|
||||||
v3.add(new Offer(OFFER_TYPE.BUY, ITEM2, 350));
|
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 350));
|
||||||
v3.add(new Offer(OFFER_TYPE.BUY, ITEM3, 400));
|
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 400));
|
||||||
|
|
||||||
PathRoute res = new PathRoute(new Vertex<>(v1));
|
PathRoute res = new PathRoute(new Vertex<>(v1));
|
||||||
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
||||||
@@ -115,16 +118,16 @@ public class PathRouteTest extends Assert {
|
|||||||
v3 = new SimpleVendor("v3");
|
v3 = new SimpleVendor("v3");
|
||||||
v4 = new SimpleVendor("v4");
|
v4 = new SimpleVendor("v4");
|
||||||
|
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM2, 200));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM3, 300));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM1, 150));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM3, 320));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320));
|
||||||
v3.add(new Offer(OFFER_TYPE.SELL, ITEM3, 390));
|
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390));
|
||||||
|
|
||||||
v2.add(new Offer(OFFER_TYPE.BUY, ITEM2, 225));
|
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225));
|
||||||
v3.add(new Offer(OFFER_TYPE.BUY, ITEM1, 200));
|
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200));
|
||||||
v4.add(new Offer(OFFER_TYPE.BUY, ITEM3, 450));
|
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450));
|
||||||
|
|
||||||
PathRoute res = new PathRoute(new Vertex<>(v1));
|
PathRoute res = new PathRoute(new Vertex<>(v1));
|
||||||
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
||||||
@@ -179,16 +182,16 @@ public class PathRouteTest extends Assert {
|
|||||||
v4 = new SimpleVendor("v4");
|
v4 = new SimpleVendor("v4");
|
||||||
v5 = new SimpleVendor("v5");
|
v5 = new SimpleVendor("v5");
|
||||||
|
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM1, 410));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 410));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM2, 200));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM3, 300));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM2, 270));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 270));
|
||||||
v4.add(new Offer(OFFER_TYPE.SELL, ITEM1, 300));
|
v4.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 300));
|
||||||
|
|
||||||
v2.add(new Offer(OFFER_TYPE.BUY, ITEM1, 470));
|
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 470));
|
||||||
v3.add(new Offer(OFFER_TYPE.BUY, ITEM2, 300));
|
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 300));
|
||||||
v4.add(new Offer(OFFER_TYPE.BUY, ITEM3, 370));
|
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 370));
|
||||||
v5.add(new Offer(OFFER_TYPE.BUY, ITEM1, 400));
|
v5.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 400));
|
||||||
|
|
||||||
PathRoute res = new PathRoute(new Vertex<>(v1));
|
PathRoute res = new PathRoute(new Vertex<>(v1));
|
||||||
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
||||||
@@ -251,16 +254,16 @@ public class PathRouteTest extends Assert {
|
|||||||
v3 = new SimpleVendor("v3");
|
v3 = new SimpleVendor("v3");
|
||||||
v4 = new SimpleVendor("v4");
|
v4 = new SimpleVendor("v4");
|
||||||
|
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM2, 200));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM3, 300));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM1, 150));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM3, 320));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320));
|
||||||
v3.add(new Offer(OFFER_TYPE.SELL, ITEM3, 390));
|
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390));
|
||||||
|
|
||||||
v2.add(new Offer(OFFER_TYPE.BUY, ITEM2, 225));
|
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225));
|
||||||
v3.add(new Offer(OFFER_TYPE.BUY, ITEM1, 200));
|
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200));
|
||||||
v4.add(new Offer(OFFER_TYPE.BUY, ITEM3, 450));
|
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450));
|
||||||
|
|
||||||
PathRoute res = new PathRoute(new Vertex<>(v1));
|
PathRoute res = new PathRoute(new Vertex<>(v1));
|
||||||
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
||||||
@@ -314,13 +317,13 @@ public class PathRouteTest extends Assert {
|
|||||||
v1 = new SimpleVendor("v1");
|
v1 = new SimpleVendor("v1");
|
||||||
v2 = new SimpleVendor("v2");
|
v2 = new SimpleVendor("v2");
|
||||||
|
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM2, 200));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM3, 300));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM1, 150));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM3, 320));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320));
|
||||||
|
|
||||||
v2.add(new Offer(OFFER_TYPE.BUY, ITEM2, 225));
|
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225));
|
||||||
|
|
||||||
PathRoute res = new PathRoute(new Vertex<>(v1));
|
PathRoute res = new PathRoute(new Vertex<>(v1));
|
||||||
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
res = (PathRoute) res.connectTo(new Vertex<>(v2), false);
|
||||||
@@ -334,10 +337,10 @@ public class PathRouteTest extends Assert {
|
|||||||
v3 = new SimpleVendor("v3");
|
v3 = new SimpleVendor("v3");
|
||||||
v4 = new SimpleVendor("v4");
|
v4 = new SimpleVendor("v4");
|
||||||
|
|
||||||
v3.add(new Offer(OFFER_TYPE.SELL, ITEM3, 390));
|
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390));
|
||||||
|
|
||||||
v3.add(new Offer(OFFER_TYPE.BUY, ITEM1, 200));
|
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200));
|
||||||
v4.add(new Offer(OFFER_TYPE.BUY, ITEM3, 450));
|
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450));
|
||||||
|
|
||||||
PathRoute res = new PathRoute(new Vertex<>(v2));
|
PathRoute res = new PathRoute(new Vertex<>(v2));
|
||||||
res = (PathRoute) res.connectTo(new Vertex<>(v3), false);
|
res = (PathRoute) res.connectTo(new Vertex<>(v3), false);
|
||||||
|
|||||||
@@ -5,15 +5,19 @@ import org.junit.Test;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.trader.core.*;
|
import ru.trader.core.*;
|
||||||
|
import ru.trader.store.simple.SimpleItem;
|
||||||
|
import ru.trader.store.simple.SimpleMarket;
|
||||||
|
import ru.trader.store.simple.SimpleOffer;
|
||||||
|
import ru.trader.store.simple.SimpleVendor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class RouteGraphTest extends Assert {
|
public class RouteGraphTest extends Assert {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(RouteGraphTest.class);
|
private final static Logger LOG = LoggerFactory.getLogger(RouteGraphTest.class);
|
||||||
private final static Market market = new SimpleMarket();
|
private final static Market market = new SimpleMarket();
|
||||||
private final static Item ITEM1 = new Item("ITEM1");
|
private final static Item ITEM1 = new SimpleItem("ITEM1");
|
||||||
private final static Item ITEM2 = new Item("ITEM2");
|
private final static Item ITEM2 = new SimpleItem("ITEM2");
|
||||||
private final static Item ITEM3 = new Item("ITEM3");
|
private final static Item ITEM3 = new SimpleItem("ITEM3");
|
||||||
private static Vendor v1;
|
private static Vendor v1;
|
||||||
private static Vendor v2;
|
private static Vendor v2;
|
||||||
private static Vendor v3;
|
private static Vendor v3;
|
||||||
@@ -25,16 +29,16 @@ public class RouteGraphTest extends Assert {
|
|||||||
v3 = new SimpleVendor("v3");
|
v3 = new SimpleVendor("v3");
|
||||||
v4 = new SimpleVendor("v4");
|
v4 = new SimpleVendor("v4");
|
||||||
|
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM1, 100));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM2, 200));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200));
|
||||||
v1.add(new Offer(OFFER_TYPE.SELL, ITEM3, 300));
|
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM1, 150));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150));
|
||||||
v2.add(new Offer(OFFER_TYPE.SELL, ITEM3, 320));
|
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320));
|
||||||
v3.add(new Offer(OFFER_TYPE.SELL, ITEM3, 390));
|
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390));
|
||||||
|
|
||||||
v2.add(new Offer(OFFER_TYPE.BUY, ITEM2, 225));
|
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225));
|
||||||
v3.add(new Offer(OFFER_TYPE.BUY, ITEM1, 200));
|
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200));
|
||||||
v4.add(new Offer(OFFER_TYPE.BUY, ITEM3, 450));
|
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450));
|
||||||
|
|
||||||
market.add(v1);market.add(v2);market.add(v3);market.add(v4);
|
market.add(v1);market.add(v2);market.add(v3);market.add(v4);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import ru.trader.core.Market;
|
import ru.trader.core.Market;
|
||||||
import ru.trader.core.Vendor;
|
import ru.trader.core.Vendor;
|
||||||
import ru.trader.store.Store;
|
import ru.trader.store.simple.Store;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
import ru.trader.core.Market;
|
import ru.trader.core.Market;
|
||||||
|
import ru.trader.store.simple.Store;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|||||||
51
core/src/test/java/ru/trader/store/simple/ItemStatTest.java
Normal file
51
core/src/test/java/ru/trader/store/simple/ItemStatTest.java
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
package ru.trader.store.simple;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import ru.trader.core.Item;
|
||||||
|
import ru.trader.core.OFFER_TYPE;
|
||||||
|
|
||||||
|
|
||||||
|
public class ItemStatTest extends Assert {
|
||||||
|
private final static Logger LOG = LoggerFactory.getLogger(ItemStatTest.class);
|
||||||
|
|
||||||
|
private final static Item ITEM1 = new SimpleItem("Item1");
|
||||||
|
|
||||||
|
|
||||||
|
private SimpleItemStat itemSellStat = new SimpleItemStat(ITEM1, OFFER_TYPE.SELL);
|
||||||
|
private SimpleItemStat itemBuyStat = new SimpleItemStat(ITEM1, OFFER_TYPE.BUY);
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void fill(){
|
||||||
|
itemSellStat.put(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 10));
|
||||||
|
itemSellStat.put(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 20));
|
||||||
|
itemSellStat.put(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 30));
|
||||||
|
itemSellStat.put(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 40));
|
||||||
|
|
||||||
|
itemBuyStat.put(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 100));
|
||||||
|
itemBuyStat.put(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200));
|
||||||
|
itemBuyStat.put(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 300));
|
||||||
|
itemBuyStat.put(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 400));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSell(){
|
||||||
|
LOG.info("Start sell test");
|
||||||
|
assertEquals(itemSellStat.getAvg(), (10+20+30+40)/4, 0);
|
||||||
|
assertEquals(itemSellStat.getBest().getPrice(), 10d, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBuy(){
|
||||||
|
LOG.info("Start buy test");
|
||||||
|
assertEquals(itemBuyStat.getAvg(), (100+200+300+400)/4, 0);
|
||||||
|
assertEquals(itemBuyStat.getBest().getPrice(), 400d, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -15,6 +15,10 @@ import org.xml.sax.SAXException;
|
|||||||
import org.xml.sax.XMLReader;
|
import org.xml.sax.XMLReader;
|
||||||
import org.xml.sax.helpers.XMLReaderFactory;
|
import org.xml.sax.helpers.XMLReaderFactory;
|
||||||
import ru.trader.core.*;
|
import ru.trader.core.*;
|
||||||
|
import ru.trader.store.simple.SimpleItem;
|
||||||
|
import ru.trader.store.simple.SimpleMarket;
|
||||||
|
import ru.trader.store.simple.SimpleOffer;
|
||||||
|
import ru.trader.store.simple.SimpleVendor;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -105,11 +109,11 @@ public class XSSFImporter {
|
|||||||
} else if (cell.row>2){
|
} else if (cell.row>2){
|
||||||
if (cell.column == 1){
|
if (cell.column == 1){
|
||||||
LOG.trace("create item");
|
LOG.trace("create item");
|
||||||
item = new Item(formattedValue);
|
item = new SimpleItem(formattedValue);
|
||||||
market.add(item);
|
market.add(item);
|
||||||
} else {
|
} else {
|
||||||
LOG.trace("add offer");
|
LOG.trace("add offer");
|
||||||
Offer offer = new Offer(cell.column % 2 == 0? OFFER_TYPE.BUY : OFFER_TYPE.SELL, item, Double.valueOf(formattedValue));
|
Offer offer = new SimpleOffer(cell.column % 2 == 0? OFFER_TYPE.BUY : OFFER_TYPE.SELL, item, Double.valueOf(formattedValue));
|
||||||
vendors.get(cell.column/2 -1).add(offer);
|
vendors.get(cell.column/2 -1).add(offer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user