use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class LSLibraryItem method createLibraryItem.
public LibraryItem createLibraryItem(LibraryBuilder libraryBuilder) throws LSException {
LibraryItemType type = LibraryItemType.valueOf(getType());
ObjectWithId object = null;
switch(type) {
case ENGINE_CLASS:
object = ((LSEngineClass) getObject()).createEngineClass(id -> {
ObjectWithId foundObject = libraryBuilder.getObjectById(id);
return foundObject instanceof LineClass ? (LineClass) foundObject : null;
});
break;
case LINE_CLASS:
object = ((LSLineClass) getObject()).createLineClass();
break;
case NODE:
object = ((LSNode) getObject()).createNode(libraryBuilder.getPartFactory(), libraryBuilder::getObjectById);
break;
case OUTPUT_TEMPLATE:
object = ((LSOutputTemplate) getObject()).createOutputTemplate(libraryBuilder.getPartFactory(), libraryBuilder::getObjectById);
break;
case TRAIN_TYPE:
object = ((LSTrainType) getObject()).createTrainType(libraryBuilder.getPartFactory(), libraryBuilder::getObjectById, id -> {
ObjectWithId foundObject = libraryBuilder.getObjectById(id);
return foundObject instanceof TrainTypeCategory ? (TrainTypeCategory) foundObject : null;
});
break;
case TRAIN_TYPE_CATEGORY:
object = ((LSTrainTypeCategory) getObject()).createTrainTypeCategory();
break;
}
LibraryItem item = libraryBuilder.addObject(object);
item.getAttributes().add(this.getAttributes().createAttributes(libraryBuilder::getObjectById));
return item;
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class TrainTimetablesExtractor method getConcurrentTrains.
private Pair<Boolean, List<TranslatedString>> getConcurrentTrains(TimeInterval interval) {
TrainComparator comparator = diagram.getTrainsData().getTrainComparator();
Node node = interval.getOwnerAsNode();
TimeInterval toBeChecked = interval;
Train train = interval.getTrain();
if (interval.isFirst() && train.getTimeIntervalBefore() != null)
toBeChecked = train.getTimeIntervalBefore();
else if (interval.isLast() && train.getTimeIntervalAfter() != null)
toBeChecked = train.getTimeIntervalAfter();
Set<TimeInterval> over = node.getOverlappingTimeIntervals(toBeChecked);
boolean first = true;
// check if the train is first in the station (start be marked with trapezoid)
if (!interval.isFirst())
for (Iterator<TimeInterval> i = over.iterator(); i.hasNext(); ) {
TimeInterval checked = i.next();
if (interval.getStart() > checked.getStart() || (interval.getStart() == checked.getStart() && comparator.compare(interval.getTrain(), checked.getTrain()) >= 0)) {
first = false;
break;
}
}
if (over.isEmpty()) {
return null;
} else {
List<Train> tTrains = new ArrayList<>(over.size());
for (TimeInterval ti : over) {
if (!tTrains.contains(ti.getTrain()))
tTrains.add(ti.getTrain());
}
ElementSort<Train> s = new ElementSort<>(new TrainComparator(node.getDiagram().getTrainsData().getTrainSortPattern()));
tTrains = s.sort(tTrains);
List<TranslatedString> result = new LinkedList<>();
for (Train t : tTrains) {
result.add(t.getName());
}
return new Pair<>(first, result);
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class TrainTimetablesExtractor method extractLengthData.
private void extractLengthData(Train train, TrainTimetable timetable) {
if (train.getAttributes().getBool(Train.ATTR_SHOW_STATION_LENGTH)) {
// compute maximal length
Pair<Node, Integer> length = TrainsHelper.getNextLength(train.getStartNode(), train, TrainsHelper.NextType.LAST_STATION);
if (length != null && length.second != null) {
// get length unit
LengthUnit lengthUnitObj = diagram.getAttribute(TrainDiagram.ATTR_LENGTH_UNIT, LengthUnit.class);
LengthData data = new LengthData();
data.setLength(length.second);
data.setLengthInAxles(LengthUnit.AXLE == lengthUnitObj);
data.setLengthUnit(lengthUnitObj);
timetable.setLengthData(data);
}
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class EditFNConnetionDialog method addSelectionPanel.
private void addSelectionPanel(FilterType filterType, JTabbedPane tabbedPane) {
ElementSelectionPanel<Node> selectionPanel = new ElementSelectionPanel<Node>();
selectionPanels.put(filterType, selectionPanel);
selectionPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
tabbedPane.addTab(ResourceLoader.getString(filterType.getResourceKey()), null, selectionPanel, null);
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class FreightDestinationPanel method addFreightToNodes.
private void addFreightToNodes(DataModel model, NodeFreight nodeFreight) {
Locale locale = Locale.getDefault();
Collator collator = Collator.getInstance();
List<Tuple<String>> lines = nodeFreight.getNodeConnections().stream().filter(e -> e.getTo().isVisible()).map(e -> {
String node = util.freightNodeToString(e.getTo(), locale, false);
String trains = util.intervalsToString(diagram, e.getTransport().getTrains(), locale).stream().collect(Collectors.joining(", "));
return new Tuple<>(node, trains);
}).sorted(comparator(collator)).collect(Collectors.toList());
model.addLinesWithEmpty(lines);
}
Aggregations