Search in sources :

Example 11 with Node

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);
}
Also used : Locale(java.util.Locale) TableColumnModel(javax.swing.table.TableColumnModel) OutputFreightUtil(net.parostroj.timetable.output2.util.OutputFreightUtil) TableCellRenderer(javax.swing.table.TableCellRenderer) Node(net.parostroj.timetable.model.Node) ArrayList(java.util.ArrayList) TimeInterval(net.parostroj.timetable.model.TimeInterval) ResourceLoader(net.parostroj.timetable.gui.utils.ResourceLoader) Locale(java.util.Locale) AbstractTableModel(javax.swing.table.AbstractTableModel) NodeFreight(net.parostroj.timetable.model.freight.NodeFreight) BorderLayout(java.awt.BorderLayout) JComboBox(javax.swing.JComboBox) Wrapper(net.parostroj.timetable.gui.wrappers.Wrapper) Collator(java.text.Collator) FlowLayout(java.awt.FlowLayout) ItemEvent(java.awt.event.ItemEvent) JButton(javax.swing.JButton) WrapperListModel(net.parostroj.timetable.gui.wrappers.WrapperListModel) Collection(java.util.Collection) GuiComponentUtils(net.parostroj.timetable.gui.utils.GuiComponentUtils) BorderFactory(javax.swing.BorderFactory) Component(java.awt.Component) Collectors(java.util.stream.Collectors) JScrollPane(javax.swing.JScrollPane) List(java.util.List) GuiIcon(net.parostroj.timetable.gui.utils.GuiIcon) Tuple(net.parostroj.timetable.utils.Tuple) JTable(javax.swing.JTable) RxActionHandler(net.parostroj.timetable.gui.actions.execution.RxActionHandler) Comparator(java.util.Comparator) FreightAnalyser(net.parostroj.timetable.model.freight.FreightAnalyser) TrainDiagram(net.parostroj.timetable.model.TrainDiagram) JPanel(javax.swing.JPanel) TimeInterval(net.parostroj.timetable.model.TimeInterval) Tuple(net.parostroj.timetable.utils.Tuple)

Example 12 with Node

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);
}
Also used : Locale(java.util.Locale) TableColumnModel(javax.swing.table.TableColumnModel) OutputFreightUtil(net.parostroj.timetable.output2.util.OutputFreightUtil) TableCellRenderer(javax.swing.table.TableCellRenderer) Node(net.parostroj.timetable.model.Node) ArrayList(java.util.ArrayList) TimeInterval(net.parostroj.timetable.model.TimeInterval) ResourceLoader(net.parostroj.timetable.gui.utils.ResourceLoader) Locale(java.util.Locale) AbstractTableModel(javax.swing.table.AbstractTableModel) NodeFreight(net.parostroj.timetable.model.freight.NodeFreight) BorderLayout(java.awt.BorderLayout) JComboBox(javax.swing.JComboBox) Wrapper(net.parostroj.timetable.gui.wrappers.Wrapper) Collator(java.text.Collator) FlowLayout(java.awt.FlowLayout) ItemEvent(java.awt.event.ItemEvent) JButton(javax.swing.JButton) WrapperListModel(net.parostroj.timetable.gui.wrappers.WrapperListModel) Collection(java.util.Collection) GuiComponentUtils(net.parostroj.timetable.gui.utils.GuiComponentUtils) BorderFactory(javax.swing.BorderFactory) Component(java.awt.Component) Collectors(java.util.stream.Collectors) JScrollPane(javax.swing.JScrollPane) List(java.util.List) GuiIcon(net.parostroj.timetable.gui.utils.GuiIcon) Tuple(net.parostroj.timetable.utils.Tuple) JTable(javax.swing.JTable) RxActionHandler(net.parostroj.timetable.gui.actions.execution.RxActionHandler) Comparator(java.util.Comparator) FreightAnalyser(net.parostroj.timetable.model.freight.FreightAnalyser) TrainDiagram(net.parostroj.timetable.model.TrainDiagram) JPanel(javax.swing.JPanel) TimeInterval(net.parostroj.timetable.model.TimeInterval) Tuple(net.parostroj.timetable.utils.Tuple)

Example 13 with Node

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();
    }
}
Also used : JTextField(javax.swing.JTextField) LoggerFactory(org.slf4j.LoggerFactory) ItemListener(java.awt.event.ItemListener) Node(net.parostroj.timetable.model.Node) DestinationTableModel(net.parostroj.timetable.gui.components.FreightDestinationPanel.DestinationTableModel) ResourceLoader(net.parostroj.timetable.gui.utils.ResourceLoader) ImageIcon(javax.swing.ImageIcon) BorderLayout(java.awt.BorderLayout) JComboBox(javax.swing.JComboBox) Wrapper(net.parostroj.timetable.gui.wrappers.Wrapper) FlowLayout(java.awt.FlowLayout) ItemEvent(java.awt.event.ItemEvent) JButton(javax.swing.JButton) Logger(org.slf4j.Logger) WrapperListModel(net.parostroj.timetable.gui.wrappers.WrapperListModel) GuiComponentUtils(net.parostroj.timetable.gui.utils.GuiComponentUtils) TrainConnection(net.parostroj.timetable.model.freight.TrainConnection) Set(java.util.Set) BorderFactory(javax.swing.BorderFactory) FreightConnectionAnalyser(net.parostroj.timetable.model.freight.FreightConnectionAnalyser) JScrollPane(javax.swing.JScrollPane) DataModel(net.parostroj.timetable.gui.components.FreightDestinationPanel.DataModel) TrainPath(net.parostroj.timetable.model.freight.TrainPath) GuiIcon(net.parostroj.timetable.gui.utils.GuiIcon) JLabel(javax.swing.JLabel) JTable(javax.swing.JTable) RxActionHandler(net.parostroj.timetable.gui.actions.execution.RxActionHandler) ColumnAdjuster(net.parostroj.timetable.gui.components.FreightDestinationPanel.ColumnAdjuster) TrainDiagram(net.parostroj.timetable.model.TrainDiagram) JPanel(javax.swing.JPanel) NodeFreightConnection(net.parostroj.timetable.model.freight.NodeFreightConnection) TimeUtil(net.parostroj.timetable.utils.TimeUtil) Set(java.util.Set) DataModel(net.parostroj.timetable.gui.components.FreightDestinationPanel.DataModel) TrainConnection(net.parostroj.timetable.model.freight.TrainConnection) TrainPath(net.parostroj.timetable.model.freight.TrainPath) FreightConnectionAnalyser(net.parostroj.timetable.model.freight.FreightConnectionAnalyser)

Example 14 with Node

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);
    });
}
Also used : OutputFreightUtil(net.parostroj.timetable.output2.util.OutputFreightUtil) StyleConstants(javax.swing.text.StyleConstants) LoggerFactory(org.slf4j.LoggerFactory) StyledDocument(javax.swing.text.StyledDocument) Node(net.parostroj.timetable.model.Node) ArrayList(java.util.ArrayList) ResourceLoader(net.parostroj.timetable.gui.utils.ResourceLoader) Locale(java.util.Locale) Map(java.util.Map) FreightConnectionStrategy(net.parostroj.timetable.model.freight.FreightConnectionStrategy) ImageIcon(javax.swing.ImageIcon) JTextPane(javax.swing.JTextPane) BorderLayout(java.awt.BorderLayout) AttributeSet(javax.swing.text.AttributeSet) OutputUtil(net.parostroj.timetable.output2.util.OutputUtil) FlowLayout(java.awt.FlowLayout) NodeType(net.parostroj.timetable.model.NodeType) JButton(javax.swing.JButton) Logger(org.slf4j.Logger) ConnectionState(net.parostroj.timetable.model.freight.FreightChecker.ConnectionState) GuiComponentUtils(net.parostroj.timetable.gui.utils.GuiComponentUtils) Set(java.util.Set) BorderFactory(javax.swing.BorderFactory) BadLocationException(javax.swing.text.BadLocationException) Collectors(java.util.stream.Collectors) Collectors.joining(java.util.stream.Collectors.joining) FreightChecker(net.parostroj.timetable.model.freight.FreightChecker) JScrollPane(javax.swing.JScrollPane) List(java.util.List) FontMetrics(java.awt.FontMetrics) Style(javax.swing.text.Style) GuiIcon(net.parostroj.timetable.gui.utils.GuiIcon) NodeConnectionEdges(net.parostroj.timetable.model.freight.NodeConnectionEdges) RxActionHandler(net.parostroj.timetable.gui.actions.execution.RxActionHandler) Pair(net.parostroj.timetable.utils.Pair) Comparator(java.util.Comparator) TrainDiagram(net.parostroj.timetable.model.TrainDiagram) JPanel(javax.swing.JPanel) Node(net.parostroj.timetable.model.Node) FreightConnectionStrategy(net.parostroj.timetable.model.freight.FreightConnectionStrategy) FreightChecker(net.parostroj.timetable.model.freight.FreightChecker) NodeConnectionEdges(net.parostroj.timetable.model.freight.NodeConnectionEdges) ArrayList(java.util.ArrayList) List(java.util.List) ConnectionState(net.parostroj.timetable.model.freight.FreightChecker.ConnectionState)

Example 15 with Node

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());
}
Also used : NodeComparator(net.parostroj.timetable.actions.NodeComparator) Node(net.parostroj.timetable.model.Node) ElementSort(net.parostroj.timetable.actions.ElementSort)

Aggregations

Node (net.parostroj.timetable.model.Node)39 List (java.util.List)10 ArrayList (java.util.ArrayList)9 TimeInterval (net.parostroj.timetable.model.TimeInterval)9 BorderLayout (java.awt.BorderLayout)8 Collection (java.util.Collection)8 Region (net.parostroj.timetable.model.Region)8 TrainDiagram (net.parostroj.timetable.model.TrainDiagram)8 FlowLayout (java.awt.FlowLayout)7 Comparator (java.util.Comparator)7 Set (java.util.Set)7 BorderFactory (javax.swing.BorderFactory)7 JButton (javax.swing.JButton)7 JPanel (javax.swing.JPanel)7 JScrollPane (javax.swing.JScrollPane)7 RxActionHandler (net.parostroj.timetable.gui.actions.execution.RxActionHandler)7 GuiComponentUtils (net.parostroj.timetable.gui.utils.GuiComponentUtils)7 GuiIcon (net.parostroj.timetable.gui.utils.GuiIcon)7 ResourceLoader (net.parostroj.timetable.gui.utils.ResourceLoader)7 ItemEvent (java.awt.event.ItemEvent)6