add all vendors contains in specificator to search
This commit is contained in:
@@ -4,9 +4,7 @@ import ru.trader.analysis.graph.Edge;
|
||||
import ru.trader.core.Offer;
|
||||
import ru.trader.core.Vendor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -89,6 +87,14 @@ public class CrawlerSpecificator {
|
||||
return false;
|
||||
}
|
||||
|
||||
public Collection<Vendor> getVendors(Collection<Vendor> vendors){
|
||||
Set<Vendor> v = new HashSet<>(containsAny);
|
||||
v.addAll(any);
|
||||
v.addAll(all);
|
||||
v.addAll(vendors);
|
||||
return v;
|
||||
}
|
||||
|
||||
private RouteSpecification<Vendor> buildOffersSpec(Collection<Vendor> vendors){
|
||||
RouteSpecification<Vendor> res = null;
|
||||
for (Offer offer : offers) {
|
||||
|
||||
@@ -6,6 +6,7 @@ import ru.trader.analysis.graph.Traversal;
|
||||
public interface RouteSpecification<T> {
|
||||
|
||||
public boolean specified(Edge<T> edge, Traversal<T> entry);
|
||||
default boolean content(Edge<T> edge, Traversal<T> entry){return specified(edge, entry);}
|
||||
public default int lastFound(Edge<T> edge, Traversal<T> entry){
|
||||
return specified(edge, entry) ? 0 : matchCount();
|
||||
}
|
||||
@@ -25,6 +26,11 @@ public interface RouteSpecification<T> {
|
||||
return RouteSpecification.this.specified(edge, entry) && other.specified(edge, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||
return RouteSpecification.this.content(edge, entry) || other.content(edge, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||
return RouteSpecification.this.lastFound(edge, entry) + other.lastFound(edge, entry);
|
||||
@@ -73,6 +79,11 @@ public interface RouteSpecification<T> {
|
||||
return RouteSpecification.this.specified(edge, entry) || other.specified(edge, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||
return RouteSpecification.this.content(edge, entry) || other.content(edge, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||
return Math.min(RouteSpecification.this.lastFound(edge, entry), other.lastFound(edge, entry));
|
||||
@@ -120,6 +131,12 @@ public interface RouteSpecification<T> {
|
||||
return !RouteSpecification.this.specified(edge, entry);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||
return !RouteSpecification.this.content(edge, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||
return RouteSpecification.this.lastFound(edge, entry);
|
||||
|
||||
@@ -30,6 +30,12 @@ public class RouteSpecificationByPair<T> implements RouteSpecification<T> {
|
||||
return searchPair(edge, entry) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||
T obj = edge.getTarget().getEntry();
|
||||
return second.equals(obj) || first.contains(obj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||
return searchPair(edge, entry);
|
||||
|
||||
@@ -24,6 +24,11 @@ public class RouteSpecificationByTargets<T> implements RouteSpecification<T> {
|
||||
return all ? containsAll(edge, entry) == 0 : containsAny(edge, entry) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||
return targets.contains(edge.getTarget().getEntry());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||
return all ? containsAll(edge, entry) : containsAny(edge, entry);
|
||||
|
||||
@@ -69,7 +69,7 @@ public class VendorsCrawler extends Crawler<Vendor> {
|
||||
protected boolean check(Edge<Vendor> e){
|
||||
VendorsGraph.VendorsBuildEdge edge = (VendorsGraph.VendorsBuildEdge) e;
|
||||
return fuel <= edge.getMaxFuel() && (fuel >= edge.getMinFuel() || edge.getSource().getEntry().canRefill())
|
||||
&& (edge.getProfit() > 0 || VendorsCrawler.this.isFound(edge, this));
|
||||
&& (edge.getProfit() > 0 || VendorsCrawler.this.isContent(edge, this));
|
||||
}
|
||||
|
||||
protected VendorsEdge wrap(Edge<Vendor> e) {
|
||||
|
||||
@@ -61,6 +61,10 @@ public class Crawler<T> {
|
||||
return edge.isConnect(this.target);
|
||||
}
|
||||
|
||||
protected boolean isContent(Edge<T> edge, Traversal<T> head){
|
||||
return specification.content(edge, head);
|
||||
}
|
||||
|
||||
protected boolean isFound(Edge<T> edge, Traversal<T> head){
|
||||
return specification.specified(edge, head);
|
||||
}
|
||||
|
||||
@@ -284,14 +284,16 @@ public class MarketAnalyzer {
|
||||
return market.get().collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private List<Vendor> getVendors(CrawlerSpecificator specificator){
|
||||
List<Vendor> vendors;
|
||||
private Collection<Vendor> getVendors(CrawlerSpecificator specificator){
|
||||
Collection<Vendor> vendors;
|
||||
if (specificator.getMinHop() >= profile.getLands()){
|
||||
vendors = market.get().map(Place::asTransit).collect(Collectors.toList());
|
||||
market.getVendors().filter(specificator::contains).forEach(vendors::add);
|
||||
return vendors;
|
||||
} else {
|
||||
vendors = market.getMarkets(true).collect(Collectors.toList());
|
||||
vendors = specificator.getVendors(vendors);
|
||||
}
|
||||
return market.getMarkets(true).collect(Collectors.toList());
|
||||
return vendors;
|
||||
}
|
||||
|
||||
private List<Vendor> getVendors(Place place){
|
||||
|
||||
Reference in New Issue
Block a user