use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightDestinationPanel method addFreightTrainsFromNode.
private void addFreightTrainsFromNode(DataModel model, Node node, FreightAnalyser analyser) {
Locale locale = Locale.getDefault();
List<TimeInterval> intervalsFrom = analyser.getFreightIntervalsFrom(node);
List<Tuple<String>> trains = intervalsFrom.stream().map(i -> new Tuple<>(util.intervalToString(diagram, i, locale), util.freightListToString(analyser.getConnectionStrategy().getFreightToNodes(i), locale).stream().collect(Collectors.joining(", ")))).collect(Collectors.toList());
model.addLinesWithEmpty(trains);
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightDestinationPanel method addFreightTrainUnitsFromNode.
private void addFreightTrainUnitsFromNode(DataModel model, Node node, FreightAnalyser analyser) {
Locale locale = Locale.getDefault();
List<TimeInterval> intervals = analyser.getFreightTrainUnitIntervals(node);
List<Tuple<String>> trains = intervals.stream().map(i -> new Tuple<>(util.intervalToString(diagram, i, locale), util.intervalFreightTrainUnitToString(diagram, i).stream().collect(Collectors.joining(", ")))).collect(Collectors.toList());
model.addLinesWithEmpty(trains);
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightTrainPathPanel method updateView.
public void updateView(Node from, Node to, int shuntDuration, int startTime) {
// update selection
if (fromNode.getSelectedObject() != from) {
fromNode.setSelectedObject(from);
}
if (toNode.getSelectedObject() != to) {
toNode.setSelectedObject(to);
}
tableModel.clear();
stateIconLabel.setIcon(null);
if (from != null && to != null && from != to) {
DataModel model = new DataModel();
RxActionHandler.getInstance().newExecution("freight_path", GuiComponentUtils.getTopLevelComponent(this), diagram).addConsumer((c, diagram) -> {
c.setWaitMessage(ResourceLoader.getString("wait.message.processing"));
c.setWaitDialogVisible(true);
}).onBackground().addConsumer((c, diagram) -> {
FreightConnectionAnalyser connectionAnalyser = new FreightConnectionAnalyser(diagram.getFreightNet().getConnectionStrategy());
Set<NodeFreightConnection> conns = connectionAnalyser.analyse(from, to);
TrainPath trainPath = connectionAnalyser.getTrainPath(conns, startTime, shuntDuration);
stateIconLabel.setIcon(!trainPath.isEmpty() ? okIcon : errorIcon);
Integer time = null;
for (TrainConnection tc : trainPath) {
String right = convertConnectionTrain(tc);
String left = convertNode(tc.getFrom().getOwnerAsNode(), time == null ? null : TimeUtil.difference(time, tc.getStartTime()));
time = tc.getEndTime();
model.addLine(left, right);
}
if (!trainPath.isEmpty()) {
model.addLine(convertNode(to, null), "");
}
}).onEdt().addConsumer((c, diagram) -> {
tableModel.addLines(model);
adjustColumnWidth.run();
}).execute();
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightCheckPanel method checkFreight.
private void checkFreight(TextBuffer buffer) {
FreightConnectionStrategy strategy = FreightConnectionStrategy.createCached(diagram.getFreightNet().getConnectionStrategy());
// check
FreightChecker checker = new FreightChecker(strategy);
// check all centers
buffer.appendText(ResourceLoader.getString("freight.check.centers") + ":\n", boldUnderlineStyle);
diagram.getNet().getNodes().stream().filter(n -> n.isCenterOfRegions()).forEach(n -> {
Set<Node> noConnToNodes = checker.getNoConnectionsToNodes(n, notFreightTypes);
Set<Node> noConnToCenter = checker.getNoConnectionToCenter(n, notFreightTypes);
buffer.appendText("-", noConnToCenter.isEmpty() && noConnToNodes.isEmpty() ? okStyle : errorStyle);
buffer.appendText(String.format(" %s\n", nodeWithRegionToString(n)), null);
for (Node ncNode : noConnToNodes) {
buffer.appendText(String.format(" %s → %s\n", n.getName(), ncNode.getName()), null);
}
for (Node ncNode : noConnToCenter) {
buffer.appendText(String.format(" %s → %s\n", ncNode.getName(), n.getName()), null);
}
});
buffer.appendText(ResourceLoader.getString("freight.check.center.connections") + ":\n", boldUnderlineStyle);
Map<Node, List<ConnectionState<NodeConnectionEdges>>> centerConnMap = checker.analyseCenterConnections(diagram.getNet()).stream().collect(Collectors.groupingBy(c -> c.getFrom()));
centerConnMap.entrySet().stream().sorted(Comparator.comparing(e -> e.getKey().getName(), comparator)).forEach(c -> {
boolean exists = c.getValue().stream().allMatch(ConnectionState::exists);
buffer.appendText("-", exists ? okStyle : errorStyle);
buffer.appendText(String.format(" %s\n", nodeWithRegionToString(c.getKey())), null);
c.getValue().stream().filter(cx -> !cx.exists()).forEach(cx -> {
buffer.appendText(String.format(" %s → %s\n", cx.getFrom().getName(), nodeWithRegionToString(cx.getTo())), null);
});
});
buffer.appendText(ResourceLoader.getString("freight.check.node.connections") + ":\n", boldUnderlineStyle);
checker.analyseNodeConnections(diagram.getNet(), notFreightTypes).stream().filter(c -> !c.exists()).sorted(compareConnections()).forEach(c -> {
buffer.appendText("-", errorStyle);
buffer.appendText(String.format(" %s → %s\n", c.getFrom().getName(), c.getTo().getName()), null);
});
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class CreateRouteDialog method setValues.
private void setValues(TrainDiagram diagram, List<? extends RouteSegment<?>> route) {
ElementSort<Node> sort = new ElementSort<Node>(new NodeComparator());
availableNodes = sort.sort(diagram.getNet().getNodes());
fromComboBox.removeAllItems();
toComboBox.removeAllItems();
for (Wrapper<Node> w : Wrapper.getWrapperList(availableNodes)) {
fromComboBox.addItem(w);
toComboBox.addItem(w);
}
throughNodes = new LinkedList<Node>();
if (route != null && route.size() >= 2) {
fromComboBox.setSelectedItem(Wrapper.getWrapper(route.get(0)));
toComboBox.setSelectedItem(Wrapper.getWrapper(route.get(route.size() - 1)));
for (int i = 1; i < route.size() - 1; i++) {
RouteSegment<?> segment = route.get(i);
if (segment.isNode()) {
throughNodes.add(segment.asNode());
}
}
}
throughTextField.setText(throughNodes.toString());
}
Aggregations