Search in sources :

Example 1 with Region

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

the class RegionValidator method checkCommonSuperRegion.

// checks that all regions have the same super-region
private void checkCommonSuperRegion(Node node) {
    Set<Region> regions = node.getRegions();
    Iterator<Region> iterator = regions.iterator();
    List<Region> toBeRemovedRegions = null;
    if (regions.size() > 1 && iterator.hasNext()) {
        Region commonSuperRegion = iterator.next().getSuperRegion();
        while (iterator.hasNext()) {
            Region region = iterator.next();
            Region superRegion = region.getSuperRegion();
            if (superRegion != commonSuperRegion) {
                if (toBeRemovedRegions == null)
                    toBeRemovedRegions = new ArrayList<>();
                toBeRemovedRegions.add(region);
            }
        }
    }
    if (toBeRemovedRegions != null) {
        for (Region removedRegion : toBeRemovedRegions) {
            regions = removeRegion(regions, removedRegion);
        }
        node.setAttribute(Node.ATTR_REGIONS, regions);
    }
}
Also used : ArrayList(java.util.ArrayList) Region(net.parostroj.timetable.model.Region)

Example 2 with Region

use of net.parostroj.timetable.model.Region 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 3 with Region

use of net.parostroj.timetable.model.Region 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 Region

use of net.parostroj.timetable.model.Region 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 Region

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

the class LSRegion method createRegion.

public DelayedAttributes<Region> createRegion(TrainDiagram diagram) throws LSException {
    Region region = diagram.getPartFactory().createRegion(id);
    // expected value -> null (for compatibility before version 4.18.2)
    region.setName(name);
    return new DelayedAttributes<>(region, attributes, diagram::getObjectById);
}
Also used : Region(net.parostroj.timetable.model.Region)

Aggregations

Region (net.parostroj.timetable.model.Region)15 Node (net.parostroj.timetable.model.Node)7 FreightColor (net.parostroj.timetable.model.FreightColor)4 ArrayList (java.util.ArrayList)2 Collection (java.util.Collection)2 Set (java.util.Set)2 Net (net.parostroj.timetable.model.Net)2 TimeInterval (net.parostroj.timetable.model.TimeInterval)2 ModelVersion (net.parostroj.timetable.model.ls.ModelVersion)2 java.awt (java.awt)1 ActionListener (java.awt.event.ActionListener)1 Collections (java.util.Collections)1 EnumMap (java.util.EnumMap)1 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Locale (java.util.Locale)1 Map (java.util.Map)1 Function (java.util.function.Function)1 Predicate (java.util.function.Predicate)1