void GNEClosingReroute::setAttribute(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: changeAdditionalID(value); break; case SUMO_ATTR_EDGE: myClosedEdge = myViewNet->getNet()->retrieveEdge(value); break; case SUMO_ATTR_ALLOW: myPermissions = parseVehicleClasses(value); break; case SUMO_ATTR_DISALLOW: myPermissions = invertPermissions(parseVehicleClasses(value)); break; case GNE_ATTR_GENERIC: setGenericParametersStr(value); break; default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } // check if updated attribute requieres update geometry if (myTagProperty.hasAttribute(key) && myTagProperty.getAttributeProperties(key).requiereUpdateGeometry()) { updateGeometry(); } }
SVCPermissions parseVehicleClasses(const std::string& allowedS, const std::string& disallowedS) { if (allowedS.size() == 0 && disallowedS.size() == 0) { return SVCAll; } else if (allowedS.size() > 0 && disallowedS.size() > 0) { WRITE_WARNING("SVCPermissions must be specified either via 'allow' or 'disallow'. Ignoring 'disallow'"); return parseVehicleClasses(allowedS); } else if (allowedS.size() > 0) { return parseVehicleClasses(allowedS); } else { return invertPermissions(parseVehicleClasses(disallowedS)); } }
std::string GNEClosingReroute::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return getAdditionalID(); case SUMO_ATTR_EDGE: return myClosedEdge->getID(); case SUMO_ATTR_ALLOW: return getVehicleClassNames(myPermissions); case SUMO_ATTR_DISALLOW: return getVehicleClassNames(invertPermissions(myPermissions)); case GNE_ATTR_PARENT: return getAdditionalParents().at(0)->getID(); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }