Search in sources :

Example 31 with Node

use of net.parostroj.timetable.model.Node in project grafikon by jub77.

the class FreightConnectionAnalysis method toCenter.

void toCenter(final Context context) {
    Collection<ToRegionConnection> regions = getToCenterRegions(context);
    if (regions.isEmpty()) {
        context.stage = Stage.NO_CONNECTION;
    } else {
        for (ToRegionConnection conn : regions) {
            Context nContext = conn.context;
            Node centerNode = conn.center;
            Set<TrainPath> set = finder.getConnectionFromTo(nContext.current, centerNode).stream().map(FreightConnectionPath::getPath).collect(toSet());
            if (!set.isEmpty()) {
                nContext.steps.add(new StepImpl(nContext.current, centerNode, set));
                nContext.current = centerNode;
                boolean noDirectConnection = finder.getConnectionFromTo(nContext.current, to).isEmpty();
                if (noDirectConnection && conn.transitive) {
                    nContext.stage = Stage.BETWEEN_CENTERS;
                } else if (conn.transitive || intersects(to.getRegions(), centerNode.getCenterRegions())) {
                    nContext.stage = Stage.TO_NODE;
                } else {
                    nContext.stage = Stage.NO_CONNECTION;
                }
            } else {
                nContext.stage = Stage.NO_CONNECTION;
            }
        }
    }
}
Also used : Node(net.parostroj.timetable.model.Node)

Example 32 with Node

use of net.parostroj.timetable.model.Node in project grafikon by jub77.

the class FreightConnectionAnalysis method betweenCenters.

void betweenCenters(final Context context) {
    Collection<ToRegionConnection> regions = this.getBetweenCenterRegions(context);
    if (regions.isEmpty()) {
        context.stage = Stage.NO_CONNECTION;
    } else {
        for (ToRegionConnection pair : regions) {
            Context nContext = pair.context;
            Node centerNode = pair.center;
            Optional<NodeConnectionEdges> regionConn = finder.getRegionConnections().stream().filter(c -> c.getFrom() == nContext.current && c.getTo() == centerNode).findAny();
            if (regionConn.isPresent()) {
                NodeConnectionEdges conn = regionConn.get();
                conn.getEdges().stream().map(StepImpl::new).forEach(nContext.steps::add);
                nContext.current = centerNode;
                nContext.stage = centerNode == to ? Stage.CONNECTION : Stage.TO_NODE;
            } else {
                nContext.stage = Stage.NO_CONNECTION;
            }
        }
    }
}
Also used : Collection(java.util.Collection) Region(net.parostroj.timetable.model.Region) Set(java.util.Set) Node(net.parostroj.timetable.model.Node) ArrayList(java.util.ArrayList) Objects(java.util.Objects) Collectors.toList(java.util.stream.Collectors.toList) List(java.util.List) Stream(java.util.stream.Stream) Optional(java.util.Optional) Queue(java.util.Queue) ObjectsUtil.intersects(net.parostroj.timetable.utils.ObjectsUtil.intersects) LinkedList(java.util.LinkedList) Collectors.toSet(java.util.stream.Collectors.toSet) Node(net.parostroj.timetable.model.Node)

Example 33 with Node

use of net.parostroj.timetable.model.Node in project grafikon by jub77.

the class NodeFreightImpl method merge.

private FreightConnectionVia merge(List<? extends FreightConnectionVia> connections, Function<FreightConnection, FreightDestination> destinationCreation) {
    if (connections.size() == 1) {
        return connections.get(0);
    } else {
        // merge
        FreightDestination destination = connections.stream().findAny().map(destinationCreation).get();
        Transport transport = connections.stream().map(FreightConnectionVia::getTransport).reduce(Transport::merge).get();
        Node lFrom = connections.stream().findAny().map(FreightConnectionVia::getFrom).get();
        return FreightFactory.createFreightNodeConnection(lFrom, destination, transport);
    }
}
Also used : Node(net.parostroj.timetable.model.Node)

Example 34 with Node

use of net.parostroj.timetable.model.Node in project grafikon by jub77.

the class NetGraphComponent method createConnectionHandler.

@Override
protected mxConnectionHandler createConnectionHandler() {
    return new mxConnectionHandler(this) {

        @Override
        public boolean isValidTarget(Object cell) {
            if (cell != null) {
                Object object = ((mxCell) cell).getValue();
                if (object instanceof Node) {
                    Graph<Node, Line> net = getNet();
                    Node targetNode = (Node) object;
                    Node sourceNode = (Node) ((mxCell) source.getCell()).getValue();
                    return !net.containsEdge(sourceNode, targetNode);
                }
            }
            return super.isValidTarget(cell);
        }
    };
}
Also used : Line(net.parostroj.timetable.model.Line) com.mxgraph.model.mxCell(com.mxgraph.model.mxCell) Node(net.parostroj.timetable.model.Node) com.mxgraph.swing.handler.mxConnectionHandler(com.mxgraph.swing.handler.mxConnectionHandler)

Example 35 with Node

use of net.parostroj.timetable.model.Node in project grafikon by jub77.

the class TrainDiagramBuilder method setNet.

public void setNet(LSNet lsNet) throws LSException {
    Net net = lsNet.createNet(this.diagram);
    this.diagram.setNet(net);
    // add regions
    if (lsNet.getRegions() != null) {
        Collection<DelayedAttributes<Region>> regions = new ArrayList<>();
        for (LSRegion lsRegion : lsNet.getRegions()) {
            DelayedAttributes<Region> daRegion = lsRegion.createRegion(diagram);
            net.getRegions().add(daRegion.getObject());
            regions.add(daRegion);
        }
        for (DelayedAttributes<Region> daRegion : regions) {
            daRegion.addAttributes();
        }
    }
    // add line classes
    if (lsNet.getLineClasses() != null) {
        for (LSLineClass lsLineClass : lsNet.getLineClasses()) {
            net.getLineClasses().add(lsLineClass.createLineClass());
        }
    }
    // create nodes ...
    if (lsNet.getNodes() != null) {
        for (LSNode lsNode : lsNet.getNodes()) {
            Node node = lsNode.createNode(diagram.getPartFactory(), diagram::getObjectById);
            net.addNode(node);
        }
    }
    // create lines ...
    if (lsNet.getLines() != null) {
        for (LSLine lsLine : lsNet.getLines()) {
            Line line = lsLine.createLine(diagram);
            Node from = net.getNodeById(lsLine.getFrom());
            Node to = net.getNodeById(lsLine.getTo());
            net.addLine(from, to, line);
        }
    }
}
Also used : Node(net.parostroj.timetable.model.Node) ArrayList(java.util.ArrayList) Line(net.parostroj.timetable.model.Line) Region(net.parostroj.timetable.model.Region) Net(net.parostroj.timetable.model.Net) FreightNet(net.parostroj.timetable.model.FreightNet)

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