From aba19c6e5971a852409cad7658a7e1e298f5b49c Mon Sep 17 00:00:00 2001 From: iMoHax Date: Tue, 18 Aug 2015 11:50:32 +0300 Subject: [PATCH] improve maddavo parser --- .../java/ru/trader/maddavo/ItemConverter.java | 171 +++++++++--------- .../java/ru/trader/maddavo/OffersHandler.java | 26 +-- 2 files changed, 101 insertions(+), 96 deletions(-) diff --git a/utils/src/main/java/ru/trader/maddavo/ItemConverter.java b/utils/src/main/java/ru/trader/maddavo/ItemConverter.java index 5a700e2..c841276 100644 --- a/utils/src/main/java/ru/trader/maddavo/ItemConverter.java +++ b/utils/src/main/java/ru/trader/maddavo/ItemConverter.java @@ -8,93 +8,96 @@ public class ItemConverter { static { - IDS.put("Explosives", "explosives"); - IDS.put("Hydrogen Fuel", "hydrogenfuel"); - IDS.put("Mineral Oil", "mineraloil"); - IDS.put("Pesticides", "pesticides"); - IDS.put("Clothing", "clothing"); - IDS.put("Consumer Technology", "consumertechnology"); - IDS.put("Domestic Appliances", "domesticappliances"); - IDS.put("Algae", "algae"); - IDS.put("Animal Meat", "animalmeat"); - IDS.put("Coffee", "coffee"); - IDS.put("Energy Drinks", "energydrinks"); - IDS.put("Fish", "fish"); - IDS.put("Food Cartridges", "foodcartridges"); - IDS.put("Fruit And Vegetables", "fruitandvegetables"); - IDS.put("Grain", "grain"); - IDS.put("Synthetic Meat", "syntheticmeat"); - IDS.put("Tea", "tea"); - IDS.put("Polymers", "polymers"); - IDS.put("Semiconductors", "semiconductors"); - IDS.put("Superconductors", "superconductors"); - IDS.put("Legal Drugs", "group.drugs"); - IDS.put("Beer", "beer"); - IDS.put("Liquor", "liquor"); - IDS.put("Narcotics", "basicnarcotics"); - IDS.put("Tobacco", "tobacco"); - IDS.put("Wine", "wine"); - IDS.put("Atmospheric Processors", "atmosphericprocessors"); - IDS.put("Crop Harvesters", "cropharvesters"); - IDS.put("Marine Equipment", "marinesupplies"); - IDS.put("Microbial Furnaces", "microbialfurnaces"); - IDS.put("Mineral Extractors", "mineralextractors"); - IDS.put("Power Generators", "powergenerators"); - IDS.put("Water Purifiers", "waterpurifiers"); - IDS.put("Agri-Medicines", "agriculturalmedicines"); - IDS.put("Basic Medicines", "basicmedicines"); - IDS.put("Combat Stabilisers", "combatstabilisers"); - IDS.put("Performance Enhancers", "performanceenhancers"); - IDS.put("Progenitor Cells", "progenitorcells"); - IDS.put("Aluminium", "aluminium"); - IDS.put("Beryllium", "beryllium"); - IDS.put("Copper", "copper"); - IDS.put("Cobalt", "cobalt"); - IDS.put("Gallium", "gallium"); - IDS.put("Gold", "gold"); - IDS.put("Indium", "indium"); - IDS.put("Lithium", "lithium"); - IDS.put("Palladium", "palladium"); - IDS.put("Platinum", "platinum"); - IDS.put("Tantalum", "tantalum"); - IDS.put("Titanium", "titanium"); - IDS.put("Silver", "silver"); - IDS.put("Uranium", "uranium"); - IDS.put("Minerals", "group.minerals"); - IDS.put("Bauxite", "bauxite"); - IDS.put("Bertrandite", "bertrandite"); - IDS.put("Coltan", "coltan"); - IDS.put("Gallite", "gallite"); - IDS.put("Indite", "indite"); - IDS.put("Lepidolite", "lepidolite"); - IDS.put("Rutile", "rutile"); - IDS.put("Uraninite", "uraninite"); - IDS.put("Imperial Slaves", "imperialslaves"); - IDS.put("Slaves", "slaves"); - IDS.put("Advanced Catalysers", "advancedcatalysers"); - IDS.put("Animal Monitors", "animalmonitors"); - IDS.put("Aquaponic Systems", "aquaponicsystems"); - IDS.put("Auto-Fabricators", "autofabricators"); - IDS.put("Bioreducing Lichen", "bioreducinglichen"); - IDS.put("Computer Components", "computercomponents"); - IDS.put("H.E. Suits", "hazardousenvironmentsuits"); - IDS.put("Resonating Separators", "resonatingseparators"); - IDS.put("Robotics", "robotics"); - IDS.put("Land Enrichment Systems", "landenrichmentsystems"); - IDS.put("Leather", "leather"); - IDS.put("Natural Fabrics", "naturalfabrics"); - IDS.put("Synthetic Fabrics", "syntheticfabrics"); - IDS.put("Biowaste", "biowaste"); - IDS.put("Chemical Waste", "chemicalwaste"); - IDS.put("Scrap", "scrap"); - IDS.put("Battle Weapons", "battleweapons"); - IDS.put("Non-Lethal Weapons", "nonlethalweapons"); - IDS.put("Personal Weapons", "personalweapons"); - IDS.put("Reactive Armour", "reactivearmour"); + IDS.put("explosives", "explosives"); + IDS.put("hydrogen fuel", "hydrogenfuel"); + IDS.put("mineral oil", "mineraloil"); + IDS.put("pesticides", "pesticides"); + IDS.put("clothing", "clothing"); + IDS.put("consumer technology", "consumertechnology"); + IDS.put("domestic appliances", "domesticappliances"); + IDS.put("algae", "algae"); + IDS.put("animal meat", "animalmeat"); + IDS.put("coffee", "coffee"); + IDS.put("energy drinks", "energydrinks"); + IDS.put("fish", "fish"); + IDS.put("food cartridges", "foodcartridges"); + IDS.put("fruit and vegetables", "fruitandvegetables"); + IDS.put("grain", "grain"); + IDS.put("synthetic meat", "syntheticmeat"); + IDS.put("tea", "tea"); + IDS.put("polymers", "polymers"); + IDS.put("semiconductors", "semiconductors"); + IDS.put("superconductors", "superconductors"); + IDS.put("beer", "beer"); + IDS.put("liquor", "liquor"); + IDS.put("narcotics", "basicnarcotics"); + IDS.put("tobacco", "tobacco"); + IDS.put("wine", "wine"); + IDS.put("atmospheric processors", "atmosphericprocessors"); + IDS.put("crop harvesters", "cropharvesters"); + IDS.put("marine equipment", "marinesupplies"); + IDS.put("microbial furnaces", "microbialfurnaces"); + IDS.put("mineral extractors", "mineralextractors"); + IDS.put("power generators", "powergenerators"); + IDS.put("water purifiers", "waterpurifiers"); + IDS.put("agri-medicines", "agriculturalmedicines"); + IDS.put("basic medicines", "basicmedicines"); + IDS.put("combat stabilisers", "combatstabilisers"); + IDS.put("performance enhancers", "performanceenhancers"); + IDS.put("progenitor cells", "progenitorcells"); + IDS.put("aluminium", "aluminium"); + IDS.put("beryllium", "beryllium"); + IDS.put("copper", "copper"); + IDS.put("cobalt", "cobalt"); + IDS.put("gallium", "gallium"); + IDS.put("gold", "gold"); + IDS.put("indium", "indium"); + IDS.put("lithium", "lithium"); + IDS.put("osmium", "osmium"); + IDS.put("palladium", "palladium"); + IDS.put("platinum", "platinum"); + IDS.put("tantalum", "tantalum"); + IDS.put("titanium", "titanium"); + IDS.put("silver", "silver"); + IDS.put("uranium", "uranium"); + IDS.put("minerals", "group.minerals"); + IDS.put("bauxite", "bauxite"); + IDS.put("bertrandite", "bertrandite"); + IDS.put("coltan", "coltan"); + IDS.put("gallite", "gallite"); + IDS.put("indite", "indite"); + IDS.put("lepidolite", "lepidolite"); + IDS.put("painite", "painite"); + IDS.put("rutile", "rutile"); + IDS.put("uraninite", "uraninite"); + IDS.put("imperial slaves", "imperialslaves"); + IDS.put("slaves", "slaves"); + IDS.put("sap 8 core container", "sap8corecontainer"); + IDS.put("advanced catalysers", "advancedcatalysers"); + IDS.put("animal monitors", "animalmonitors"); + IDS.put("aquaponic systems", "aquaponicsystems"); + IDS.put("auto-fabricators", "autofabricators"); + IDS.put("bioreducing lichen", "bioreducinglichen"); + IDS.put("computer components", "computercomponents"); + IDS.put("h.e. suits", "hazardousenvironmentsuits"); + IDS.put("resonating separators", "resonatingseparators"); + IDS.put("robotics", "robotics"); + IDS.put("land enrichment systems", "landenrichmentsystems"); + IDS.put("leather", "leather"); + IDS.put("natural fabrics", "naturalfabrics"); + IDS.put("synthetic fabrics", "syntheticfabrics"); + IDS.put("biowaste", "biowaste"); + IDS.put("chemical waste", "chemicalwaste"); + IDS.put("scrap", "scrap"); + IDS.put("battle weapons", "battleweapons"); + IDS.put("non-lethal weapons", "nonlethalweapons"); + IDS.put("personal weapons", "personalweapons"); + IDS.put("reactive armour", "reactivearmour"); } public static String getItemId(String name){ + name = name.toLowerCase(); String id = IDS.get(name); - return id != null ? id : name; + return id != null ? id : name.replace(" ","_"); } } diff --git a/utils/src/main/java/ru/trader/maddavo/OffersHandler.java b/utils/src/main/java/ru/trader/maddavo/OffersHandler.java index 9a4d5e8..7c49c52 100644 --- a/utils/src/main/java/ru/trader/maddavo/OffersHandler.java +++ b/utils/src/main/java/ru/trader/maddavo/OffersHandler.java @@ -9,11 +9,13 @@ import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; public class OffersHandler implements ParseHandler { private final static Logger LOG = LoggerFactory.getLogger(OffersHandler.class); - private final Market market; + private final Map items; + private final Map stations; private final boolean withRemove; private Vendor station; @@ -22,8 +24,13 @@ public class OffersHandler implements ParseHandler { private final Map buyUpdates = new HashMap<>(100, 0.9f); protected OffersHandler(Market market, boolean withRemove) { - this.market = market; this.withRemove = withRemove; + items = market.getItems().stream().collect(Collectors.toMap(Item::getName, i -> i)); + stations = market.getVendors().stream().collect(Collectors.toMap(this::getStationId, s -> s)); + } + + private String getStationId(Vendor vendor){ + return vendor.getPlace().getName()+"/"+vendor.getName(); } @Override @@ -106,15 +113,10 @@ public class OffersHandler implements ParseHandler { name = sb.toString(); LOG.trace("system: {}, station: {}", system, name); - - Place sys = market.get(system); - if (sys != null){ - station = sys.get(name); - if (station == null){ - LOG.warn("Station {} not found", name); - } - } else { - LOG.warn("System {} not found", system); + String id = system + "/" +name; + station = stations.get(id); + if (station == null){ + LOG.warn("Station {} not found", id); } } @@ -133,7 +135,7 @@ public class OffersHandler implements ParseHandler { Double sell = getDoubleValue(matcher.group(3)); Long demand = getLongValue(matcher.group(4)); Long supply = getLongValue(matcher.group(6)); - Item item = market.getItem(ItemConverter.getItemId(name)); + Item item = items.get(ItemConverter.getItemId(name)); if (item != null){ if (buy != null && buy > 0){ buyUpdates.put(item, new OfferData(buy, demand));