Search in sources :

Example 1 with Node

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

Example 2 with Node

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();
    }
}
Also used : TimeInterval(net.parostroj.timetable.model.TimeInterval) Formatter(java.util.Formatter) Node(net.parostroj.timetable.model.Node) TimeConverter(net.parostroj.timetable.model.TimeConverter)

Example 3 with Node

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));
                }
            }
        }
    }
}
Also used : Node(net.parostroj.timetable.model.Node) Region(net.parostroj.timetable.model.Region) ModelVersion(net.parostroj.timetable.model.ls.ModelVersion) TrainType(net.parostroj.timetable.model.TrainType) TextTemplate(net.parostroj.timetable.model.TextTemplate)

Example 4 with Node

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);
            }
        }
    }
}
Also used : HashSet(java.util.HashSet) Set(java.util.Set) Node(net.parostroj.timetable.model.Node) Region(net.parostroj.timetable.model.Region) ModelVersion(net.parostroj.timetable.model.ls.ModelVersion) FreightColor(net.parostroj.timetable.model.FreightColor)

Example 5 with Node

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;
}
Also used : NodeTrack(net.parostroj.timetable.model.NodeTrack) Line(net.parostroj.timetable.model.Line) TrainIntervalsBuilder(net.parostroj.timetable.actions.TrainIntervalsBuilder) Node(net.parostroj.timetable.model.Node) Train(net.parostroj.timetable.model.Train) LineTrack(net.parostroj.timetable.model.LineTrack)

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