implement parsing systems and stations Maddavo's files
This commit is contained in:
30
utils/src/main/java/ru/trader/maddavo/CSVParseHandler.java
Normal file
30
utils/src/main/java/ru/trader/maddavo/CSVParseHandler.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package ru.trader.maddavo;
|
||||
|
||||
import au.com.bytecode.opencsv.CSVParser;
|
||||
import ru.trader.core.Market;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public abstract class CSVParseHandler implements ParseHandler {
|
||||
private final CSVParser parser;
|
||||
protected final Market market;
|
||||
|
||||
protected CSVParseHandler(Market market) {
|
||||
this.market = market;
|
||||
parser = new CSVParser(',', '\'');
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parse(String str) throws IOException {
|
||||
String[] values = parser.parseLine(str);
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
String value = values[i];
|
||||
if ("?".equals(value) || "-".equals(value)){
|
||||
values[i] = "";
|
||||
}
|
||||
}
|
||||
doWork(values);
|
||||
}
|
||||
|
||||
protected abstract void doWork(String[] values);
|
||||
}
|
||||
8
utils/src/main/java/ru/trader/maddavo/ParseHandler.java
Normal file
8
utils/src/main/java/ru/trader/maddavo/ParseHandler.java
Normal file
@@ -0,0 +1,8 @@
|
||||
package ru.trader.maddavo;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public interface ParseHandler {
|
||||
|
||||
public void parse(String str) throws IOException;
|
||||
}
|
||||
66
utils/src/main/java/ru/trader/maddavo/StationHandler.java
Normal file
66
utils/src/main/java/ru/trader/maddavo/StationHandler.java
Normal file
@@ -0,0 +1,66 @@
|
||||
package ru.trader.maddavo;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.trader.core.Market;
|
||||
import ru.trader.core.Place;
|
||||
import ru.trader.core.SERVICE_TYPE;
|
||||
import ru.trader.core.Vendor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
public class StationHandler extends CSVParseHandler {
|
||||
private final static Logger LOG = LoggerFactory.getLogger(StationHandler.class);
|
||||
|
||||
protected StationHandler(Market market) {
|
||||
super(market);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doWork(String[] values) {
|
||||
//unq:name@System.system_id,unq:name,ls_from_star,blackmarket,max_pad_size,market,shipyard,modified
|
||||
Place system = market.get(values[0]);
|
||||
if (system == null){
|
||||
LOG.warn("Not found system {}", values[0]);
|
||||
return;
|
||||
}
|
||||
double distance = 0;
|
||||
try {
|
||||
distance = Double.valueOf(values[2]);
|
||||
} catch (NumberFormatException ex){
|
||||
LOG.warn("Distance {} - is not correct", values[2]);
|
||||
}
|
||||
|
||||
Collection<SERVICE_TYPE> adding = new ArrayList<>();
|
||||
Collection<SERVICE_TYPE> removing = new ArrayList<>();
|
||||
|
||||
if ("Y".equals(values[3])) adding.add(SERVICE_TYPE.BLACK_MARKET);
|
||||
if ("N".equals(values[3])) removing.add(SERVICE_TYPE.BLACK_MARKET);
|
||||
|
||||
if ("M".equals(values[4])) {adding.add(SERVICE_TYPE.MEDIUM_LANDPAD); removing.add(SERVICE_TYPE.LARGE_LANDPAD);}
|
||||
if ("L".equals(values[4])) {adding.add(SERVICE_TYPE.MEDIUM_LANDPAD); adding.add(SERVICE_TYPE.LARGE_LANDPAD);}
|
||||
|
||||
if ("Y".equals(values[5])) adding.add(SERVICE_TYPE.MARKET);
|
||||
if ("N".equals(values[5])) removing.add(SERVICE_TYPE.MARKET);
|
||||
|
||||
if ("Y".equals(values[6])) adding.add(SERVICE_TYPE.SHIPYARD);
|
||||
if ("N".equals(values[6])) removing.add(SERVICE_TYPE.SHIPYARD);
|
||||
|
||||
updateStation(system, values[1], distance, adding, removing);
|
||||
}
|
||||
|
||||
private void updateStation(Place system, String name, double distance, Collection<SERVICE_TYPE> addServices, Collection<SERVICE_TYPE> removeServices){
|
||||
Vendor station = system.get(name);
|
||||
if (station == null){
|
||||
LOG.debug("{} - is new station, adding", name);
|
||||
station = system.addVendor(name);
|
||||
}
|
||||
if (distance > 0 && distance != station.getDistance()) {
|
||||
station.setDistance(distance);
|
||||
}
|
||||
|
||||
addServices.forEach(station::add);
|
||||
removeServices.forEach(station::remove);
|
||||
}
|
||||
}
|
||||
45
utils/src/main/java/ru/trader/maddavo/SystemHandler.java
Normal file
45
utils/src/main/java/ru/trader/maddavo/SystemHandler.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package ru.trader.maddavo;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.trader.core.Market;
|
||||
import ru.trader.core.Place;
|
||||
|
||||
|
||||
public class SystemHandler extends CSVParseHandler {
|
||||
private final static Logger LOG = LoggerFactory.getLogger(SystemHandler.class);
|
||||
|
||||
protected SystemHandler(Market market) {
|
||||
super(market);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doWork(String[] values) {
|
||||
//unq:name,pos_x,pos_y,pos_z,name@Added.added_id,modified
|
||||
|
||||
double x = Double.NaN, y = Double.NaN, z = Double.NaN;
|
||||
try {
|
||||
x = Double.valueOf(values[1]);
|
||||
y = Double.valueOf(values[2]);
|
||||
z = Double.valueOf(values[3]);
|
||||
|
||||
} catch (NumberFormatException ex){
|
||||
LOG.warn("Position {}, {}, {} - is not correct", values[1], values[2], values[3]);
|
||||
}
|
||||
|
||||
updateSystem(market, values[0], x, y, z);
|
||||
}
|
||||
|
||||
private void updateSystem(Market market, String name, double x, double y, double z){
|
||||
Place system = market.get(name);
|
||||
if (system == null){
|
||||
LOG.debug("{} - is new system, adding", name);
|
||||
market.addPlace(name, x, y, z);
|
||||
} else {
|
||||
if (!Double.isNaN(x) && !Double.isNaN(y) && !Double.isNaN(z) &&
|
||||
(x != system.getX() || y != system.getY() || z != system.getZ())){
|
||||
system.setPosition(x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
134
utils/src/test/java/ru/trader/maddavo/StationImportTest.java
Normal file
134
utils/src/test/java/ru/trader/maddavo/StationImportTest.java
Normal file
@@ -0,0 +1,134 @@
|
||||
package ru.trader.maddavo;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import ru.trader.core.Market;
|
||||
import ru.trader.core.Place;
|
||||
import ru.trader.core.SERVICE_TYPE;
|
||||
import ru.trader.core.Vendor;
|
||||
import ru.trader.store.simple.SimpleMarket;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class StationImportTest extends Assert {
|
||||
|
||||
private static final String CSVStrings =
|
||||
"'1 GEMINORUM','Collins Settlement',2585,'?','M','Y','N','2015-02-27 04:50:41'\n" +
|
||||
"'1 GEMINORUM','Zholobov Orbital',3428,'?','M','N','N','2015-02-27 04:51:21'\n" +
|
||||
"'1 HYDRAE','Arber Terminal',0,'?','M','N','N','2015-02-27 04:54:28'\n" +
|
||||
"'1 HYDRAE','Feustel Port',null,'?','-','N','Y','2015-02-27 04:54:46'\n" +
|
||||
"'1 HYDRAE','Hieb Orbital',160,'?','M','Y','N','2015-02-27 04:52:17'\n" +
|
||||
"'1 HYDRAE','Afanasyev Port',200,'?','M','Y','N','2015-02-27 04:52:55'\n" +
|
||||
"'1 HYDRAE','Hutton Port',279,'?','L','Y','Y','2015-02-27 04:53:31'\n" +
|
||||
"'1 HYDRAE','Yurchikhin Port',369,'?','M','N','N','2015-02-27 04:54:08'\n" +
|
||||
"'1 HYDRAE','Voss Hub',823,'Y','L','Y','Y','2015-02-27 04:55:18'\n" +
|
||||
"'1 HYDRAE','Hornby Dock',1457,'?','L','Y','Y','2015-02-27 04:55:56'\n" +
|
||||
"'1 HYDRAE','Whitney Station',2106,'?','M','N','N','2015-02-27 04:56:35'\n" +
|
||||
"'1 I CENTAURI','Armstrong Ring',1093,'?','L','Y','Y','2015-02-27 04:57:33'\n" +
|
||||
"'1 I CENTAURI','Ampere Dock',1498,'Y','L','Y','Y','2015-02-25 01:31:54'\n" +
|
||||
"'1 KAPPA CYGNI','Hauck Enterprise',0,'?','M','?','?','2015-02-23 23:54:35'\n" +
|
||||
"'1 KAPPA CYGNI','Kinsey Ring',0,'?','M','Y','?','2015-02-24 14:31:52'\n" +
|
||||
"'1 KAPPA CYGNI','Wohler Port',0,'?','L','?','?','2015-02-23 23:54:35'\n" +
|
||||
"'10 CANUM VENATICORUM','Litke Port',0,'?','M','Y','?','2015-02-23 23:54:35'\n" +
|
||||
"'10 CANUM VENATICORUM','Collins Port',16,'?','M','Y','?','2015-02-23 23:54:35'\n" +
|
||||
"'10 CANUM VENATICORUM','He Port',495,'?','L','Y','?','2015-02-23 23:54:35'\n" +
|
||||
"'10 CANUM VENATICORUM','Trevithick Hub',957,'N','L','N','N','2015-02-25 01:31:54'\n" +
|
||||
"'10 CANUM VENATICORUM','Spedding Park',1369,'?','M','?','?','2015-02-23 23:54:35'\n" +
|
||||
"'10 CANUM VENATICORUM','Creamer Hub',1812,'?','M','?','?','2015-02-23 23:54:35'\n" +
|
||||
"'10 G. CANIS MAJORIS','Rushd Enterprise',0,'?','L','Y','Y','2015-02-27 05:01:06'";
|
||||
|
||||
private static final String[] lines = CSVStrings.split("\\n");
|
||||
|
||||
private Market createMarket(){
|
||||
Market market = new SimpleMarket();
|
||||
market.addPlace("1 Hydrae",0,0,0);
|
||||
market.addPlace("1 Kappa Cygni",0,0,0);
|
||||
Place system = market.addPlace("10 CANUM VENATICORUM", 0, 0, 0);
|
||||
Vendor station = system.addVendor("Trevithick Hub");
|
||||
station.setDistance(2000);
|
||||
station.add(SERVICE_TYPE.MARKET);
|
||||
station.add(SERVICE_TYPE.BLACK_MARKET);
|
||||
station.add(SERVICE_TYPE.OUTFIT);
|
||||
station.add(SERVICE_TYPE.MEDIUM_LANDPAD);
|
||||
|
||||
station = system.addVendor("Litke Port");
|
||||
station.setDistance(2000);
|
||||
station.add(SERVICE_TYPE.BLACK_MARKET);
|
||||
station.add(SERVICE_TYPE.OUTFIT);
|
||||
station.add(SERVICE_TYPE.SHIPYARD);
|
||||
|
||||
|
||||
system = market.addPlace("Test sys", 0, 0, 0);
|
||||
system.addVendor("Test stat");
|
||||
|
||||
return market;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImport() throws Exception {
|
||||
Market market = createMarket();
|
||||
StationHandler handler = new StationHandler(market);
|
||||
for (String line : lines) {
|
||||
handler.parse(line);
|
||||
}
|
||||
|
||||
Collection<Vendor> vendors = market.getVendors();
|
||||
assertEquals("Vendors count distinct", 19, vendors.size());
|
||||
|
||||
Vendor station = market.get("1 Hydrae").get("Hieb Orbital");
|
||||
assertNotNull(station);
|
||||
assertEquals(160, station.getDistance(), 0.00001);
|
||||
assertFalse(station.has(SERVICE_TYPE.BLACK_MARKET));
|
||||
assertTrue(station.has(SERVICE_TYPE.MEDIUM_LANDPAD));
|
||||
assertFalse(station.has(SERVICE_TYPE.LARGE_LANDPAD));
|
||||
assertTrue(station.has(SERVICE_TYPE.MARKET));
|
||||
assertFalse(station.has(SERVICE_TYPE.SHIPYARD));
|
||||
assertFalse(station.has(SERVICE_TYPE.OUTFIT));
|
||||
assertFalse(station.has(SERVICE_TYPE.MUNITION));
|
||||
|
||||
station = market.get("1 Hydrae").get("Voss Hub");
|
||||
assertNotNull(station);
|
||||
assertEquals(823, station.getDistance(), 0.00001);
|
||||
assertTrue(station.has(SERVICE_TYPE.BLACK_MARKET));
|
||||
assertTrue(station.has(SERVICE_TYPE.MEDIUM_LANDPAD));
|
||||
assertTrue(station.has(SERVICE_TYPE.LARGE_LANDPAD));
|
||||
assertTrue(station.has(SERVICE_TYPE.MARKET));
|
||||
assertTrue(station.has(SERVICE_TYPE.SHIPYARD));
|
||||
assertFalse(station.has(SERVICE_TYPE.OUTFIT));
|
||||
assertFalse(station.has(SERVICE_TYPE.MUNITION));
|
||||
|
||||
station = market.get("1 Hydrae").get("Feustel Port");
|
||||
assertNotNull(station);
|
||||
assertEquals(0, station.getDistance(), 0.00001);
|
||||
assertFalse(station.has(SERVICE_TYPE.BLACK_MARKET));
|
||||
assertFalse(station.has(SERVICE_TYPE.MEDIUM_LANDPAD));
|
||||
assertFalse(station.has(SERVICE_TYPE.LARGE_LANDPAD));
|
||||
assertFalse(station.has(SERVICE_TYPE.MARKET));
|
||||
assertTrue(station.has(SERVICE_TYPE.SHIPYARD));
|
||||
assertFalse(station.has(SERVICE_TYPE.OUTFIT));
|
||||
assertFalse(station.has(SERVICE_TYPE.MUNITION));
|
||||
|
||||
station = market.get("10 CANUM VENATICORUM").get("Trevithick Hub");
|
||||
assertNotNull(station);
|
||||
assertEquals(957, station.getDistance(), 0.00001);
|
||||
assertFalse(station.has(SERVICE_TYPE.BLACK_MARKET));
|
||||
assertTrue(station.has(SERVICE_TYPE.MEDIUM_LANDPAD));
|
||||
assertTrue(station.has(SERVICE_TYPE.LARGE_LANDPAD));
|
||||
assertFalse(station.has(SERVICE_TYPE.MARKET));
|
||||
assertFalse(station.has(SERVICE_TYPE.SHIPYARD));
|
||||
assertTrue(station.has(SERVICE_TYPE.OUTFIT));
|
||||
assertFalse(station.has(SERVICE_TYPE.MUNITION));
|
||||
|
||||
station = market.get("10 CANUM VENATICORUM").get("Litke Port");
|
||||
assertNotNull(station);
|
||||
assertEquals(2000, station.getDistance(), 0.00001);
|
||||
assertTrue(station.has(SERVICE_TYPE.BLACK_MARKET));
|
||||
assertTrue(station.has(SERVICE_TYPE.MEDIUM_LANDPAD));
|
||||
assertFalse(station.has(SERVICE_TYPE.LARGE_LANDPAD));
|
||||
assertTrue(station.has(SERVICE_TYPE.MARKET));
|
||||
assertTrue(station.has(SERVICE_TYPE.SHIPYARD));
|
||||
assertTrue(station.has(SERVICE_TYPE.OUTFIT));
|
||||
assertFalse(station.has(SERVICE_TYPE.MUNITION));
|
||||
|
||||
}
|
||||
}
|
||||
61
utils/src/test/java/ru/trader/maddavo/SystemImportTest.java
Normal file
61
utils/src/test/java/ru/trader/maddavo/SystemImportTest.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package ru.trader.maddavo;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import ru.trader.core.Market;
|
||||
import ru.trader.core.Place;
|
||||
import ru.trader.store.simple.SimpleMarket;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class SystemImportTest extends Assert {
|
||||
|
||||
private static final String CSVStrings =
|
||||
"'DJOWENET',37.6875,-23.96875,117.0,'Gamma','2014-11-27 11:33:44'\n" +
|
||||
"'DJUHTI',-6.8125,92.65625,24.8125,'Gamma','2014-11-27 11:33:44'\n" +
|
||||
"'DJUHTY',-17.84375,-131.375,-32.1875,'Gamma','2014-11-27 11:33:44'\n" +
|
||||
"'DK LEONIS',24.90625,61.15625,-36.1875,'Gamma','2014-11-27 11:33:44'\n" +
|
||||
"'DK URSAE MAJORIS',-48.96875,66.03125,-63.9375,'Gamma','2014-11-27 11:33:44'\n" +
|
||||
"'DN DRACONIS',-27.09375,21.625,0.78125,'Beta1','2014-10-21 17:16:31'\n" +
|
||||
"'DO CANUM VENATICORUM',-28.125,80.375,-22.03125,'Release 1.00-EDStar','2015-01-12 15:20:07'\n" +
|
||||
"'DOBUNN',-55.25,5.25,118.5625,'Gamma','2014-11-27 11:33:44'\n" +
|
||||
"'DOCLEACHI',76.96875,-2.9375,21.15625,'Gamma','2014-11-27 11:33:44'\n" +
|
||||
"'DOGONEJA',,,,'Gamma','2014-11-27 11:33:44'\n" +
|
||||
"'DOHKWIBUR',109.71875,16.875,-95.96875,'Gamma','2014-11-27 11:33:44'";
|
||||
|
||||
private static final String[] lines = CSVStrings.split("\\n");
|
||||
|
||||
private Market createMarket(){
|
||||
Market market = new SimpleMarket();
|
||||
market.addPlace("1 Hydrae",0,0,0);
|
||||
market.addPlace("Djuhty",15,20,30);
|
||||
market.addPlace("DOGONEJA",15,20,30);
|
||||
|
||||
return market;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImport() throws Exception {
|
||||
Market market = createMarket();
|
||||
SystemHandler handler = new SystemHandler(market);
|
||||
for (String line : lines) {
|
||||
handler.parse(line);
|
||||
}
|
||||
|
||||
Collection<Place> systems = market.get();
|
||||
assertEquals("Systems count distinct", 12, systems.size());
|
||||
|
||||
Place system = market.get("Djuhty");
|
||||
assertNotNull(system);
|
||||
assertEquals(system.getX(), -17.84375, 0.0);
|
||||
assertEquals(system.getY(), -131.375, 0.0);
|
||||
assertEquals(system.getZ(), -32.1875, 0.0);
|
||||
|
||||
system = market.get("DOGONEJA");
|
||||
assertNotNull(system);
|
||||
assertEquals(system.getX(), 15, 0.0);
|
||||
assertEquals(system.getY(), 20, 0.0);
|
||||
assertEquals(system.getZ(), 30, 0.0);
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user