use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class RegionValidator method validate.
@Override
public boolean validate(Event event) {
if (event.getSource() instanceof Net && event.getType() == Type.REMOVED && event.getObject() instanceof Region) {
this.cancelSuperRegion((Region) event.getObject());
this.removeRegionFromNet((Region) event.getObject());
return true;
}
if (event.getType() == Type.OBJECT_ATTRIBUTE && event.getObject() instanceof Region) {
checkObjectAttributeOfRegion(event);
}
// in case region is used - cannot be used as super-region
if (event.getSource() instanceof Node && event.getType() == Type.ATTRIBUTE && event.getAttributeChange().checkName(Node.ATTR_REGIONS)) {
for (Region region : ((Node) event.getSource()).getRegions()) {
if (region.hasSubRegions())
this.cancelSuperRegion(region);
}
checkCommonSuperRegion((Node) event.getSource());
}
return false;
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class TrainTimetableWriter method writeTrainTimetable.
/**
* writes train timetable.
*
* @param train train
* @param str appendable
*/
public void writeTrainTimetable(Train train, Appendable str) throws IOException {
TimeConverter c = train.getDiagram().getTimeConverter();
str.append("Train: ");
str.append(train.getDefaultCompleteName()).append('\n');
for (TimeInterval time : train.getNodeIntervals()) {
Node node = time.getOwnerAsNode();
@SuppressWarnings("resource") Formatter f = new Formatter(str);
f.format("%1$-20s", node.getName());
if (time.isFirst() || !time.isStop()) {
str.append(" ").append(c.convertIntToText(time.getEnd(), true)).append("\n");
} else if (time.isLast()) {
str.append(c.convertIntToText(time.getStart(), true)).append("\n");
} else if (time.isStop()) {
str.append(c.convertIntToText(time.getStart(), true)).append(" ");
str.append(c.convertIntToText(time.getEnd(), true)).append("\n");
} else {
str.append('\n');
}
f.flush();
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class LoadFilter4d18 method checkDiagram.
@Override
public void checkDiagram(TrainDiagram diagram, ModelVersion version) {
if (version.compareTo(new ModelVersion(4, 18, 3)) <= 0) {
// adjust complete name templates
TextTemplate template = diagram.getTrainsData().getTrainCompleteNameTemplate();
diagram.getTrainsData().setTrainCompleteNameTemplate(this.adjustDescription(template));
for (TrainType type : diagram.getTrainTypes()) {
template = type.getTrainCompleteNameTemplate();
if (template != null) {
type.setTrainCompleteNameTemplate(this.adjustDescription(template));
}
}
}
if (version.compareTo(new ModelVersion(4, 18, 4)) <= 0) {
// multiple regions allowed per node (even centers)
for (Node node : diagram.getNet().getNodes()) {
Region region = (Region) node.removeAttribute("region");
if (region != null) {
Boolean regionCenter = (Boolean) node.removeAttribute("region.start");
node.setAttribute(Node.ATTR_REGIONS, Collections.singleton(region));
if (regionCenter != null && regionCenter) {
node.setAttribute(Node.ATTR_CENTER_OF_REGIONS, Collections.singleton(region));
}
}
}
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class LoadFilter4d22 method checkDiagram.
@Override
public void checkDiagram(TrainDiagram diagram, ModelVersion version) {
if (version.compareTo(new ModelVersion(4, 22, 0)) <= 0) {
for (Node node : diagram.getNet().getNodes()) {
node.getAttributes().setSkipListeners(true);
try {
Collection<Region> regions = node.getAttributeAsCollection(Node.ATTR_REGIONS, Region.class);
if (regions != null && !(regions instanceof Set)) {
node.setAttribute(Node.ATTR_REGIONS, new HashSet<>(regions));
}
Collection<Region> centerRegions = node.getAttributeAsCollection(Node.ATTR_CENTER_OF_REGIONS, Region.class);
if (centerRegions != null && !(centerRegions instanceof Set)) {
node.setAttribute(Node.ATTR_CENTER_OF_REGIONS, new HashSet<>(centerRegions));
}
Collection<FreightColor> freightColors = node.getAttributeAsCollection(Node.ATTR_FREIGHT_COLORS, FreightColor.class);
if (freightColors != null && !(freightColors instanceof Set)) {
node.setAttribute(Node.ATTR_FREIGHT_COLORS, new HashSet<>(freightColors));
}
} finally {
node.getAttributes().setSkipListeners(false);
}
}
}
}
use of net.parostroj.timetable.model.Node in project grafikon by jub77.
the class LSTrain method createTrain.
public Train createTrain(TrainDiagram diagram) {
Train train = diagram.getPartFactory().createTrain(id);
train.setNumber(number);
train.getAttributes().add(attributes.createAttributes());
train.setDescription(desc);
train.setTopSpeed(topSpeed);
train.setType(diagram.getTrainTypes().getById(type));
// build time interval list
TrainIntervalsBuilder builder = new TrainIntervalsBuilder(train, start);
for (Object routePart : getRoute()) {
if (routePart instanceof LSTrainRoutePartNode) {
LSTrainRoutePartNode nodePart = (LSTrainRoutePartNode) routePart;
Node node = diagram.getNet().getNodeById(nodePart.getNodeId());
NodeTrack nodeTrack = node.getTrackById(nodePart.getTrackId());
builder.addNode(nodePart.getIntervalId(), node, nodeTrack, nodePart.getStop(), nodePart.getAttributes().createAttributes());
} else {
LSTrainRoutePartLine linePart = (LSTrainRoutePartLine) routePart;
Line line = diagram.getNet().getLineById(linePart.getLineId());
LineTrack lineTrack = line.getTrackById(linePart.getTrackId());
builder.addLine(linePart.getIntervalId(), line, lineTrack, linePart.getSpeed(), 0, linePart.getAttributes().createAttributes());
}
}
builder.finish();
// set technological time
train.setTimeBefore(this.timeBefore);
train.setTimeAfter(this.timeAfter);
return train;
}
Aggregations