From a640bfaef9f9ecd009e87cf5565472049735da5a Mon Sep 17 00:00:00 2001 From: Mo Date: Thu, 22 Oct 2015 22:33:07 +0300 Subject: [PATCH] add all vendors contains in specificator to search --- .../ru/trader/analysis/CrawlerSpecificator.java | 12 +++++++++--- .../ru/trader/analysis/RouteSpecification.java | 17 +++++++++++++++++ .../analysis/RouteSpecificationByPair.java | 6 ++++++ .../analysis/RouteSpecificationByTargets.java | 5 +++++ .../java/ru/trader/analysis/VendorsCrawler.java | 2 +- .../java/ru/trader/analysis/graph/Crawler.java | 4 ++++ .../java/ru/trader/core/MarketAnalyzer.java | 10 ++++++---- 7 files changed, 48 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/ru/trader/analysis/CrawlerSpecificator.java b/core/src/main/java/ru/trader/analysis/CrawlerSpecificator.java index 1e25712..101edc8 100644 --- a/core/src/main/java/ru/trader/analysis/CrawlerSpecificator.java +++ b/core/src/main/java/ru/trader/analysis/CrawlerSpecificator.java @@ -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 getVendors(Collection vendors){ + Set v = new HashSet<>(containsAny); + v.addAll(any); + v.addAll(all); + v.addAll(vendors); + return v; + } + private RouteSpecification buildOffersSpec(Collection vendors){ RouteSpecification res = null; for (Offer offer : offers) { diff --git a/core/src/main/java/ru/trader/analysis/RouteSpecification.java b/core/src/main/java/ru/trader/analysis/RouteSpecification.java index 1c5f7c4..20457a0 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSpecification.java +++ b/core/src/main/java/ru/trader/analysis/RouteSpecification.java @@ -6,6 +6,7 @@ import ru.trader.analysis.graph.Traversal; public interface RouteSpecification { public boolean specified(Edge edge, Traversal entry); + default boolean content(Edge edge, Traversal entry){return specified(edge, entry);} public default int lastFound(Edge edge, Traversal entry){ return specified(edge, entry) ? 0 : matchCount(); } @@ -25,6 +26,11 @@ public interface RouteSpecification { return RouteSpecification.this.specified(edge, entry) && other.specified(edge, entry); } + @Override + public boolean content(Edge edge, Traversal entry) { + return RouteSpecification.this.content(edge, entry) || other.content(edge, entry); + } + @Override public int lastFound(Edge edge, Traversal entry) { return RouteSpecification.this.lastFound(edge, entry) + other.lastFound(edge, entry); @@ -73,6 +79,11 @@ public interface RouteSpecification { return RouteSpecification.this.specified(edge, entry) || other.specified(edge, entry); } + @Override + public boolean content(Edge edge, Traversal entry) { + return RouteSpecification.this.content(edge, entry) || other.content(edge, entry); + } + @Override public int lastFound(Edge edge, Traversal entry) { return Math.min(RouteSpecification.this.lastFound(edge, entry), other.lastFound(edge, entry)); @@ -120,6 +131,12 @@ public interface RouteSpecification { return !RouteSpecification.this.specified(edge, entry); } + + @Override + public boolean content(Edge edge, Traversal entry) { + return !RouteSpecification.this.content(edge, entry); + } + @Override public int lastFound(Edge edge, Traversal entry) { return RouteSpecification.this.lastFound(edge, entry); diff --git a/core/src/main/java/ru/trader/analysis/RouteSpecificationByPair.java b/core/src/main/java/ru/trader/analysis/RouteSpecificationByPair.java index 7f2892b..3cc9ecf 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSpecificationByPair.java +++ b/core/src/main/java/ru/trader/analysis/RouteSpecificationByPair.java @@ -30,6 +30,12 @@ public class RouteSpecificationByPair implements RouteSpecification { return searchPair(edge, entry) == 0; } + @Override + public boolean content(Edge edge, Traversal entry) { + T obj = edge.getTarget().getEntry(); + return second.equals(obj) || first.contains(obj); + } + @Override public int lastFound(Edge edge, Traversal entry) { return searchPair(edge, entry); diff --git a/core/src/main/java/ru/trader/analysis/RouteSpecificationByTargets.java b/core/src/main/java/ru/trader/analysis/RouteSpecificationByTargets.java index b71a599..ecd34a3 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSpecificationByTargets.java +++ b/core/src/main/java/ru/trader/analysis/RouteSpecificationByTargets.java @@ -24,6 +24,11 @@ public class RouteSpecificationByTargets implements RouteSpecification { return all ? containsAll(edge, entry) == 0 : containsAny(edge, entry) == 0; } + @Override + public boolean content(Edge edge, Traversal entry) { + return targets.contains(edge.getTarget().getEntry()); + } + @Override public int lastFound(Edge edge, Traversal entry) { return all ? containsAll(edge, entry) : containsAny(edge, entry); diff --git a/core/src/main/java/ru/trader/analysis/VendorsCrawler.java b/core/src/main/java/ru/trader/analysis/VendorsCrawler.java index 5a91726..1d9a124 100644 --- a/core/src/main/java/ru/trader/analysis/VendorsCrawler.java +++ b/core/src/main/java/ru/trader/analysis/VendorsCrawler.java @@ -69,7 +69,7 @@ public class VendorsCrawler extends Crawler { protected boolean check(Edge 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 e) { diff --git a/core/src/main/java/ru/trader/analysis/graph/Crawler.java b/core/src/main/java/ru/trader/analysis/graph/Crawler.java index 48aeb70..03b9956 100644 --- a/core/src/main/java/ru/trader/analysis/graph/Crawler.java +++ b/core/src/main/java/ru/trader/analysis/graph/Crawler.java @@ -61,6 +61,10 @@ public class Crawler { return edge.isConnect(this.target); } + protected boolean isContent(Edge edge, Traversal head){ + return specification.content(edge, head); + } + protected boolean isFound(Edge edge, Traversal head){ return specification.specified(edge, head); } diff --git a/core/src/main/java/ru/trader/core/MarketAnalyzer.java b/core/src/main/java/ru/trader/core/MarketAnalyzer.java index 5d324c7..1370b14 100644 --- a/core/src/main/java/ru/trader/core/MarketAnalyzer.java +++ b/core/src/main/java/ru/trader/core/MarketAnalyzer.java @@ -284,14 +284,16 @@ public class MarketAnalyzer { return market.get().collect(Collectors.toList()); } - private List getVendors(CrawlerSpecificator specificator){ - List vendors; + private Collection getVendors(CrawlerSpecificator specificator){ + Collection 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 getVendors(Place place){