Archived
0

add callbacks to crawler

This commit is contained in:
iMoHax
2015-07-31 10:58:01 +03:00
parent 40b0f66d8d
commit eb9f42ddb6
18 changed files with 180 additions and 297 deletions

View File

@@ -10,6 +10,7 @@ import javafx.collections.ObservableList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.trader.World;
import ru.trader.analysis.AnalysisCallBack;
import ru.trader.analysis.Route;
import ru.trader.controllers.ProgressController;
import ru.trader.controllers.Screeners;
@@ -67,6 +68,10 @@ public class MarketModel {
return analyzer;
}
public MarketAnalyzer getAnalyzer(AnalysisCallBack callback) {
return analyzer.changeCallBack(callback);
}
public ModelFabric getModeler() {
return modeler;
}

View File

@@ -4,14 +4,8 @@ import javafx.application.Platform;
import javafx.beans.property.LongProperty;
import javafx.beans.property.SimpleLongProperty;
import javafx.concurrent.Task;
import ru.trader.analysis.graph.Vertex;
import ru.trader.analysis.AnalysisCallBack;
import ru.trader.core.MarketAnalyzer;
import ru.trader.core.MarketAnalyzerCallBack;
import ru.trader.core.Place;
import ru.trader.core.Vendor;
import ru.trader.graph.Connectable;
import ru.trader.graph.GraphCallBack;
import ru.trader.graph.RouteSearcherCallBack;
import ru.trader.model.MarketModel;
import ru.trader.view.support.Localization;
@@ -19,8 +13,7 @@ import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
public abstract class AnalyzerTask<T> extends Task<T> {
private final AnalyzerCallBack callback;
protected final MarketAnalyzer analyzer;
private final AnalyzerCallBack callback; protected final MarketAnalyzer analyzer;
private final LongProperty found;
private final AtomicReference<Long> foundUpdate;
@@ -28,9 +21,8 @@ public abstract class AnalyzerTask<T> extends Task<T> {
public AnalyzerTask(MarketModel market) {
foundUpdate = new AtomicReference<>((long) 0);
found = new SimpleLongProperty(0);
analyzer = market.getAnalyzer();
callback = new AnalyzerCallBack();
analyzer.setCallback(callback);
analyzer = market.getAnalyzer(callback);
}
public long getFound() {
@@ -59,7 +51,7 @@ public abstract class AnalyzerTask<T> extends Task<T> {
callback.cancel();
}
private class AnalyzerCallBack extends MarketAnalyzerCallBack {
private class AnalyzerCallBack extends AnalysisCallBack {
private final AtomicLong max;
private final AtomicLong counter;
private final AtomicLong found;
@@ -70,21 +62,20 @@ public abstract class AnalyzerTask<T> extends Task<T> {
found = new AtomicLong(0);
}
@Override
protected RouteSearcherCallBack getRouteSearcherCallBackInstance() {
return new RSCallBack();
}
@Override
protected GraphCallBack<Place> getGraphCallBackInstance() {
return new GCallBack<Place>();
public void startStage(String id) {
super.startStage(id);
}
@Override
protected void onEnd() {
updateProgress(counter.incrementAndGet(), max.get());
updateMessage(Localization.getString("analyser.finish"));
public String getMessage(String key) {
return Localization.getString(key);
}
@Override
public void print(String message) {
super.print(message);
}
@Override
@@ -95,69 +86,12 @@ public abstract class AnalyzerTask<T> extends Task<T> {
@Override
public void inc() {
updateProgress(counter.incrementAndGet(), max.get());
updateFound(found.incrementAndGet());
}
private class RSCallBack extends RouteSearcherCallBack {
@Override
protected GraphCallBack<Vendor> getGraphCallBackInstance() {
return new GCallBack<Vendor>(){
@Override
public void onStartBuild(Vendor from) {
updateMessage(String.format(Localization.getString("analyzer.graph.station.build"), from.getPlace().getName(), from.getName()));
}
@Override
public void onStartFind(Vertex<Vendor> from, Vertex<Vendor> to) {
if (to != null) {
updateMessage(String.format(Localization.getString("analyzer.find.route"),
from.getEntry().getPlace().getName(),
from.getEntry().getName(),
to.getEntry().getPlace().getName(),
to.getEntry().getName()
));
} else {
updateMessage(String.format(Localization.getString("analyzer.find.routes"),
from.getEntry().getPlace().getName(),
from.getEntry().getName()
));
}
}
};
}
}
private class GCallBack<T extends Connectable<T>> extends GraphCallBack<T> {
@Override
public void onStartBuild(T from) {
updateMessage(String.format(Localization.getString("analyzer.graph.build"), from));
}
@Override
public void onEndBuild() {
updateProgress(counter.incrementAndGet(), max.get());
updateMessage(Localization.getString("analyzer.graph.success"));
}
@Override
public void onFound() {
updateFound(found.incrementAndGet());
}
@Override
public void onEndFind() {
updateMessage(String.format(Localization.getString("analyzer.find.success"), found.get()));
}
@Override
public void setMax(long value) {
max.addAndGet(value);
}
@Override
public void inc() {
updateProgress(counter.incrementAndGet(), max.get());
}
@Override
public void endStage(String id) {
updateProgress(counter.incrementAndGet(), max.get());
}
}
}