try add item, if it not found on import json of EDCE
implement import json of EDCE from file
This commit is contained in:
@@ -17,6 +17,9 @@ import ru.trader.edce.entities.System;
|
||||
import ru.trader.model.*;
|
||||
import ru.trader.model.support.StationUpdater;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@@ -81,6 +84,16 @@ public class EDCE {
|
||||
cache.remove(0);
|
||||
}
|
||||
Platform.runLater(() -> {
|
||||
imp(packet);
|
||||
forceUpdate = false;
|
||||
});
|
||||
} catch (IOException e) {
|
||||
LOG.warn("Error on parse json:");
|
||||
LOG.warn("{}", json);
|
||||
}
|
||||
}
|
||||
|
||||
private void imp(EDPacket packet){
|
||||
checkCmd(packet.getCommander());
|
||||
if (checkSystem(packet.getLastSystem())){
|
||||
if (packet.getCommander().isDocked()) {
|
||||
@@ -92,12 +105,6 @@ public class EDCE {
|
||||
}
|
||||
}
|
||||
checkShip(packet.getShip());
|
||||
forceUpdate = false;
|
||||
});
|
||||
} catch (IOException e) {
|
||||
LOG.warn("Error on parse json:");
|
||||
LOG.warn("{}", json);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkCmd(Commander commander){
|
||||
@@ -153,6 +160,17 @@ public class EDCE {
|
||||
continue;
|
||||
}
|
||||
Optional<ItemModel> item = world.getItem(id);
|
||||
if (!item.isPresent()){
|
||||
LOG.warn("Not found {}, id={}, adding", commodity, id);
|
||||
String gid = Converter.getGroupId(commodity.getCategoryname());
|
||||
Optional<GroupModel> group = world.getGroups().stream().filter(g -> g.getId().equals(gid)).findAny();
|
||||
if (group.isPresent()) {
|
||||
ItemModel i = world.add(id, group.get());
|
||||
item = Optional.ofNullable(i);
|
||||
} else {
|
||||
LOG.warn("Not found group, id={}, skip item", gid);
|
||||
}
|
||||
}
|
||||
if (item.isPresent()){
|
||||
Optional<StationUpdater.FakeOffer> offer = updater.getOffer(item.get());
|
||||
if (offer.isPresent()){
|
||||
@@ -160,8 +178,6 @@ public class EDCE {
|
||||
} else {
|
||||
LOG.error("Not found offer in updater, item: {}", item.get());
|
||||
}
|
||||
} else {
|
||||
LOG.warn("Not found {}, id={}", commodity, id);
|
||||
}
|
||||
}
|
||||
Shipyard shipyard = starport.getShips();
|
||||
@@ -303,6 +319,17 @@ public class EDCE {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void parseFile(File file) {
|
||||
String line = null;
|
||||
try (BufferedReader reader = new BufferedReader(new FileReader(file))){
|
||||
while ((line = reader.readLine()) != null){
|
||||
EDPacket packet = EDCEParser.parseJSON(line);
|
||||
imp(packet);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
LOG.warn("Error on parse json:");
|
||||
LOG.warn("{}", line);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.xml.sax.SAXException;
|
||||
import ru.trader.Main;
|
||||
import ru.trader.ServicesManager;
|
||||
import ru.trader.World;
|
||||
import ru.trader.model.*;
|
||||
import ru.trader.services.MaddavoParserTask;
|
||||
@@ -124,6 +125,18 @@ public class MainController {
|
||||
profController.initEDCEBtn();
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void importEDCE() {
|
||||
FileChooser fileChooser = new FileChooser();
|
||||
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("JSON files (*.json)", "*.json");
|
||||
fileChooser.getExtensionFilters().add(extFilter);
|
||||
fileChooser.setInitialDirectory(new File("."));
|
||||
File file = fileChooser.showOpenDialog(null);
|
||||
if (file !=null) {
|
||||
ServicesManager.getEdce().parseFile(file);
|
||||
}
|
||||
}
|
||||
|
||||
public void save() {
|
||||
try {
|
||||
World.save();
|
||||
|
||||
@@ -31,6 +31,7 @@ public class StationUpdater {
|
||||
|
||||
public StationUpdater(MarketModel market) {
|
||||
this.market = market;
|
||||
market.getNotificator().add(marketListener);
|
||||
this.offers = BindingsHelper.observableList(MainController.getMarket().itemsProperty(), FakeOffer::new);
|
||||
this.name = new SimpleStringProperty();
|
||||
this.type = new SimpleObjectProperty<>();
|
||||
@@ -206,8 +207,14 @@ public class StationUpdater {
|
||||
}
|
||||
|
||||
public void add(int index, ItemModel item){
|
||||
Optional<FakeOffer> offer = getOffer(item);
|
||||
if (offer.isPresent()){
|
||||
offers.remove(offer.get());
|
||||
offers.add(index, offer.get());
|
||||
} else {
|
||||
offers.add(index, new FakeOffer(item));
|
||||
}
|
||||
}
|
||||
|
||||
public StationModel commit(){
|
||||
LOG.debug("Save changes of {}", station);
|
||||
@@ -476,4 +483,15 @@ public class StationUpdater {
|
||||
}
|
||||
}
|
||||
|
||||
private final ChangeMarketListener marketListener = new ChangeMarketListener(){
|
||||
@Override
|
||||
public void add(ItemModel item) {
|
||||
offers.add(new FakeOffer(item));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(ItemModel item) {
|
||||
offers.removeIf(o -> o.hasItem(item));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
<MenuItem text="%market.offers" onAction="#impMadOffers"/>
|
||||
</Menu>
|
||||
<MenuItem text="XML" onAction="#importWorld"/>
|
||||
<MenuItem text="EDCE JSON" onAction="#importEDCE"/>
|
||||
</Menu>
|
||||
<MenuItem text="%main.menu.file.export" onAction="#exportWorld"/>
|
||||
</Menu>
|
||||
|
||||
Reference in New Issue
Block a user