use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightConnectionAnalyser method analyse.
/**
* Returns freight connections between stations - if some exists.
*
* @param from start node
* @param to end node
* @return shortest freight connection
*/
public Set<NodeFreightConnection> analyse(Node from, Node to) {
FreightConnectionAnalysis analysis = new FreightConnectionAnalysis(new FreightConnectionFinder(analyser), from, to);
Context context = analysis.createContext();
while (context != null) {
switch(context.stage) {
case START:
analysis.init(context);
break;
case TO_NODE:
analysis.toNode(context);
break;
case TO_CENTER:
analysis.toCenter(context);
break;
case BETWEEN_CENTERS:
analysis.betweenCenters(context);
break;
case CONNECTION:
case NO_CONNECTION:
// get next context
context = analysis.getNextContext();
break;
default:
throw new IllegalStateException("Unknown state");
}
}
return analysis.getContexts().stream().<NodeFreightConnection>map(ctx -> new NodeFreightConnection() {
private Integer weight;
@Override
public Node getFrom() {
return from;
}
@Override
public Node getTo() {
return to;
}
@Override
public List<DirectNodeConnection> getSteps() {
return ctx.steps.stream().collect(toList());
}
@Override
public boolean isComplete() {
return ctx.stage == Stage.CONNECTION;
}
@Override
public int getLength() {
if (weight == null) {
weight = isComplete() ? getLengthOfPath(ctx.steps) : Integer.MAX_VALUE;
}
return weight.intValue();
}
private int getLengthOfPath(List<StepImpl> steps) {
return steps.stream().mapToInt(StepImpl::getWeight).sum();
}
}).collect(toSet());
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class RegionGraphDelegate method getRegionGraph.
Graph<Node, DirectNodeConnection> getRegionGraph() {
SimpleDirectedWeightedGraph<Node, DirectNodeConnection> graph = new SimpleDirectedWeightedGraph<>(DirectNodeConnection.class);
net.getNodes().stream().filter(Node::isCenterOfRegions).forEach(graph::addVertex);
for (Node node : graph.vertexSet()) {
getRegionConnections(node).forEach(connection -> {
Node n1 = connection.getFrom();
Node n2 = connection.getTo().getNode();
DirectNodeConnectionImpl edge = (DirectNodeConnectionImpl) graph.getEdge(n1, n2);
if (edge == null) {
edge = new DirectNodeConnectionImpl(connection.getPath());
graph.addEdge(n1, n2, edge);
} else {
edge.connections.add(connection.getPath());
}
});
}
return graph;
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class LibraryBuilder method importNode.
public LibraryItem importNode(Node node) {
Node nodeCopy = copyFactory.copy(node, node.getId());
addHandler.stripObjectIdAttributes(nodeCopy);
for (NodeTrack track : nodeCopy.getTracks()) {
addHandler.stripObjectIdAttributes(track);
}
// create item and add it to library
return addImpl(nodeCopy, LibraryItemType.NODE);
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class SelectNodesDialog method initComponents.
private void initComponents() {
nodesPanel = new javax.swing.JPanel();
nodesPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
nodesComboBox = new javax.swing.JComboBox<Node>();
javax.swing.JPanel buttonsPanel = new javax.swing.JPanel();
javax.swing.JButton okButton = new javax.swing.JButton();
javax.swing.JButton cancelButton = new javax.swing.JButton();
nodesPanel.setLayout(new BorderLayout(0, 0));
nodesPanel.add(nodesComboBox, BorderLayout.NORTH);
getContentPane().add(nodesPanel, java.awt.BorderLayout.CENTER);
buttonsPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
// NOI18N
okButton.setText(ResourceLoader.getString("button.ok"));
okButton.addActionListener(evt -> {
selectedNode = (Node) nodesComboBox.getSelectedItem();
setVisible(false);
});
buttonsPanel.add(okButton);
// NOI18N
cancelButton.setText(ResourceLoader.getString("button.cancel"));
cancelButton.addActionListener(evt -> {
selectedNode = null;
setVisible(false);
});
buttonsPanel.add(cancelButton);
getContentPane().add(buttonsPanel, java.awt.BorderLayout.SOUTH);
setResizable(false);
pack();
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class ThroughNodesDialog method setNodes.
/**
* sets list of nodes.
*
* @param nodes list of nodes
*/
public void setNodes(List<Node> nodes, Collection<Node> allNodes) {
this.nodes = nodes;
// update values for nodes
ElementSort<Node> sort = new ElementSort<Node>(new NodeComparator());
List<Node> sorted = sort.sort(allNodes);
nodeComboBox.removeAllItems();
for (Node node : sorted) {
nodeComboBox.addItem(node);
}
// update list
nodeModel = new WrapperListModel<Node>(false);
for (Node n : nodes) {
nodeModel.addWrapper(Wrapper.getWrapper(n));
}
nodeList.setModel(nodeModel);
this.pack();
}
Aggregations