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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user