bool GNERouteProbReroute::isValid(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: return isValidAdditionalID(value); case SUMO_ATTR_ROUTE: return SUMOXMLDefinitions::isValidVehicleID(value); case SUMO_ATTR_PROB: return canParse<double>(value); case GNE_ATTR_GENERIC: return isGenericParametersValid(value); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
bool GNEClosingLaneReroute::isValid(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: return isValidAdditionalID(value); case SUMO_ATTR_LANE: return (myViewNet->getNet()->retrieveLane(value, false) != nullptr); case SUMO_ATTR_ALLOW: case SUMO_ATTR_DISALLOW: return canParseVehicleClasses(value); case GNE_ATTR_GENERIC: return isGenericParametersValid(value); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
bool GNECalibrator::isValid(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: return isValidAdditionalID(value); case SUMO_ATTR_EDGE: if (myViewNet->getNet()->retrieveEdge(value, false) != nullptr) { return true; } else { return false; } case SUMO_ATTR_LANE: if (myViewNet->getNet()->retrieveLane(value, false) != nullptr) { return true; } else { return false; } case SUMO_ATTR_POSITION: if (canParse<double>(value)) { // obtain position and check if is valid double newPosition = parse<double>(value); PositionVector shape = (getLaneParents().size() > 0) ? getLaneParents().front()->getGeometry().shape : getEdgeParents().front()->getLanes().at(0)->getGeometry().shape; if ((newPosition < 0) || (newPosition > shape.length())) { return false; } else { return true; } } else { return false; } case SUMO_ATTR_FREQUENCY: return (canParse<double>(value) && parse<double>(value) >= 0); case SUMO_ATTR_NAME: return SUMOXMLDefinitions::isValidAttribute(value); case SUMO_ATTR_OUTPUT: return SUMOXMLDefinitions::isValidFilename(value); case SUMO_ATTR_ROUTEPROBE: return SUMOXMLDefinitions::isValidNetID(value); case GNE_ATTR_SELECTED: return canParse<bool>(value); case GNE_ATTR_GENERIC: return isGenericParametersValid(value); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
bool GNEAccess::isValid(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: return isValidAdditionalID(value); case SUMO_ATTR_LANE: { GNELane* lane = myViewNet->getNet()->retrieveLane(value, false); if (lane != nullptr) { if (getLaneParents().front()->getParentEdge().getID() != lane->getParentEdge().getID()) { return GNEAdditionalHandler::accessCanBeCreated(getAdditionalParents().at(0), lane->getParentEdge()); } else { return true; } } else { return false; } } case SUMO_ATTR_POSITION: if (value.empty()) { return true; } else { return canParse<double>(value); } case SUMO_ATTR_LENGTH: if (value.empty()) { return true; } else { return (canParse<double>(value) && (parse<double>(value) >= 0)); } case SUMO_ATTR_FRIENDLY_POS: return canParse<bool>(value); case GNE_ATTR_BLOCK_MOVEMENT: return canParse<bool>(value); case GNE_ATTR_SELECTED: return canParse<bool>(value); case GNE_ATTR_GENERIC: return isGenericParametersValid(value); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
bool GNEDetectorExit::isValid(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: return isValidAdditionalID(value); case SUMO_ATTR_LANE: return (myViewNet->getNet()->retrieveLane(value, false) != nullptr); case SUMO_ATTR_POSITION: return canParse<double>(value); case SUMO_ATTR_FRIENDLY_POS: return canParse<bool>(value); case GNE_ATTR_BLOCK_MOVEMENT: return canParse<bool>(value); case GNE_ATTR_PARENT: return (myViewNet->getNet()->retrieveAdditional(SUMO_TAG_E3DETECTOR, value, false) != nullptr); case GNE_ATTR_SELECTED: return canParse<bool>(value); case GNE_ATTR_GENERIC: return isGenericParametersValid(value); default: throw InvalidArgument(toString(getTag()) + " doesn't have an attribute of type '" + toString(key) + "'"); } }
bool GNECalibratorFlow::isValid(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: return isValidAdditionalID(value); case SUMO_ATTR_TYPE: return SUMOXMLDefinitions::isValidTypeID(value) && (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_VTYPE, value, false) != nullptr); case SUMO_ATTR_ROUTE: return SUMOXMLDefinitions::isValidVehicleID(value) && (myViewNet->getNet()->retrieveAdditional(SUMO_TAG_ROUTE, value, false) != nullptr); case SUMO_ATTR_VEHSPERHOUR: if (value.empty()) { // speed and vehsPerHour cannot be empty at the same time if (mySpeed.empty()) { return false; } else { return true; } } else if (canParse<double>(value)) { return (parse<double>(value) >= 0); } else { return false; } case SUMO_ATTR_SPEED: if (value.empty()) { // speed and vehsPerHour cannot be empty at the same time if (myVehsPerHour.empty()) { return false; } else { return true; } } else if (canParse<double>(value)) { return (parse<double>(value) >= 0); } else { return false; } case SUMO_ATTR_COLOR: return canParse<RGBColor>(value); case SUMO_ATTR_BEGIN: return canParse<double>(value) && (parse<double>(value) >= 0); case SUMO_ATTR_END: return canParse<double>(value) && (parse<double>(value) >= 0); case SUMO_ATTR_DEPARTLANE: if ((value == "random") || (value == "free") || (value == "allowed") || (value == "best") || (value == "first")) { return true; } else { return (myViewNet->getNet()->retrieveLane(value, false) != nullptr); } case SUMO_ATTR_DEPARTPOS: if ((value == "random") || (value == "free") || (value == "random_free") || (value == "base") || (value == "last")) { return true; } else { return canParse<double>(value); } case SUMO_ATTR_DEPARTSPEED: if ((value == "random") || (value == "max")) { return true; } else { return canParse<double>(value); } case SUMO_ATTR_ARRIVALLANE: if (value == "current") { return true; } else { return (myViewNet->getNet()->retrieveLane(value, false) != nullptr); } case SUMO_ATTR_ARRIVALPOS: if ((value == "random") || (value == "max")) { return true; } else { return canParse<double>(value); } case SUMO_ATTR_ARRIVALSPEED: if (value == "current") { return true; } else { return canParse<double>(value); } case SUMO_ATTR_LINE: return true; case SUMO_ATTR_PERSON_NUMBER: return canParse<int>(value) && parse<int>(value) >= 0; case SUMO_ATTR_CONTAINER_NUMBER: return canParse<int>(value) && parse<int>(value) >= 0; case SUMO_ATTR_REROUTE: return canParse<bool>(value); case SUMO_ATTR_DEPARTPOS_LAT: return SUMOXMLDefinitions::LateralAlignments.hasString(value); case SUMO_ATTR_ARRIVALPOS_LAT: return SUMOXMLDefinitions::LateralAlignments.hasString(value); case GNE_ATTR_GENERIC: return isGenericParametersValid(value); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }