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);
}
}
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;
}
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));
}
}
}
}
}
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);
}
}
}
}
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);
}
Aggregations