Skip to content

Commit

Permalink
Merge branch 'main' of github.com:eclipse-sumo/sumo into Netedit_dev
Browse files Browse the repository at this point in the history
  • Loading branch information
palvarezlopez committed Dec 19, 2024
2 parents a15985e + a1f8ddd commit 0a0d4e7
Show file tree
Hide file tree
Showing 17 changed files with 550 additions and 167 deletions.
2 changes: 1 addition & 1 deletion src/netedit/elements/demand/GNERouteHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ GNERouteHandler::buildEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* su
} else {
// parse route edges
const auto edges = parseEdges(SUMO_TAG_ROUTE, vehicleParameters.id, edgeIDs);
if (edges.size() > 0) {
if (edges.empty()) {
return false;
} else {
// obtain type
Expand Down
232 changes: 149 additions & 83 deletions src/utils/handlers/AdditionalHandler.cpp

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions src/utils/handlers/AdditionalHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -736,11 +736,11 @@ class AdditionalHandler : public CommonHandler {
/// @brief parse juPedSim obstacle attributes
void parseJpsObstacleAttributes(const SUMOSAXAttributes& attrs);

/// @brief parse generic parameters
void parseParameters(const SUMOSAXAttributes& attrs);

/// @}

/// @brief check calibrator flow parents
bool checkCalibratorFlowParents();

/// @brief check detect persons
bool checkDetectPersons(const SumoXMLTag currentTag, const std::string& id, const std::string& detectPersons);

Expand Down
34 changes: 33 additions & 1 deletion src/utils/handlers/CommonHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,38 @@ CommonHandler::isErrorCreatingElement() const {
}


void
CommonHandler::parseParameters(const SUMOSAXAttributes& attrs) {
// declare Ok Flag
bool parsedOk = true;
// get key
const std::string key = attrs.get<std::string>(SUMO_ATTR_KEY, nullptr, parsedOk);
// get SumoBaseObject parent
CommonXMLStructure::SumoBaseObject* SumoBaseObjectParent = myCommonXMLStructure.getCurrentSumoBaseObject()->getParentSumoBaseObject();
// check parent
if ((SumoBaseObjectParent == nullptr) || (SumoBaseObjectParent->getTag() == SUMO_TAG_ROOTFILE)) {
writeError(TL("Parameters must be defined within an object"));
} else if (SumoBaseObjectParent->getTag() == SUMO_TAG_PARAM) {
writeError(TL("Parameters cannot be defined within another parameter."));
} else if ((SumoBaseObjectParent->getTag() == SUMO_TAG_NOTHING) && parsedOk) {
// get tag str
const std::string parentTagStr = toString(SumoBaseObjectParent->getTag());
// circumventing empty string value
const std::string value = attrs.hasAttribute(SUMO_ATTR_VALUE) ? attrs.getString(SUMO_ATTR_VALUE) : "";
// show warnings if values are invalid
if (key.empty()) {
writeError(TLF("Error parsing key from % generic parameter. Key cannot be empty", parentTagStr));
} else if (!SUMOXMLDefinitions::isValidParameterKey(key)) {
writeError(TLF("Error parsing key from % generic parameter. Key contains invalid characters", parentTagStr));
} else {
WRITE_DEBUG("Inserting generic parameter '" + key + "|" + value + "' into " + parentTagStr);
// insert parameter in SumoBaseObjectParent
SumoBaseObjectParent->addParameter(key, value);
}
}
}


void
CommonHandler::checkParsedParent(const SumoXMLTag currentTag, const std::vector<SumoXMLTag>& parentTags, bool& ok) {
if (parentTags.size() > 0) {
Expand All @@ -61,7 +93,7 @@ CommonHandler::checkParsedParent(const SumoXMLTag currentTag, const std::vector<
CommonXMLStructure::SumoBaseObject* const parent = myCommonXMLStructure.getCurrentSumoBaseObject()->getParentSumoBaseObject();
if (parent == nullptr) {
ok = writeError(TLF("'%' must be defined within the definition of a %.", toString(currentTag), tagsStr));
} else if (std::find(parentTags.begin(), parentTags.end(), parent->getTag()) == parentTags.end()) {
} else if ((parent->getTag() != SUMO_TAG_NOTHING) && std::find(parentTags.begin(), parentTags.end(), parent->getTag()) == parentTags.end()) {
if (parent->hasStringAttribute(SUMO_ATTR_ID)) {
ok = writeError(TLF("'%' must be defined within the definition of a '%' (found % '%').", toString(currentTag), tagsStr,
toString(parent->getTag()), parent->getStringAttribute(SUMO_ATTR_ID)));
Expand Down
3 changes: 3 additions & 0 deletions src/utils/handlers/CommonHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ class CommonHandler {
/// @brief flag for mark if a element wasn't created
bool myErrorCreatingElement = false;

/// @brief parse generic parameters
void parseParameters(const SUMOSAXAttributes& attrs);

/// @name check functions
/// @{
/// @brief check parsed parents
Expand Down
8 changes: 8 additions & 0 deletions src/utils/handlers/DataHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,8 @@ DataHandler::parseInterval(const SUMOSAXAttributes& attrs) {
myCommonXMLStructure.getCurrentSumoBaseObject()->addStringAttribute(SUMO_ATTR_ID, id);
myCommonXMLStructure.getCurrentSumoBaseObject()->addDoubleAttribute(SUMO_ATTR_BEGIN, begin);
myCommonXMLStructure.getCurrentSumoBaseObject()->addDoubleAttribute(SUMO_ATTR_END, end);
} else {
myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_NOTHING);
}
}

Expand All @@ -187,6 +189,8 @@ DataHandler::parseEdgeData(const SUMOSAXAttributes& attrs) {
myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_EDGE);
// add all attributes
myCommonXMLStructure.getCurrentSumoBaseObject()->addStringAttribute(SUMO_ATTR_ID, id);
} else {
myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_NOTHING);
}
}

Expand All @@ -207,6 +211,8 @@ DataHandler::parseEdgeRelationData(const SUMOSAXAttributes& attrs) {
// add all attributes
myCommonXMLStructure.getCurrentSumoBaseObject()->addStringAttribute(SUMO_ATTR_FROM, from);
myCommonXMLStructure.getCurrentSumoBaseObject()->addStringAttribute(SUMO_ATTR_TO, to);
} else {
myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_NOTHING);
}
}

Expand All @@ -227,6 +233,8 @@ DataHandler::parseTAZRelationData(const SUMOSAXAttributes& attrs) {
// add all attributes
myCommonXMLStructure.getCurrentSumoBaseObject()->addStringAttribute(SUMO_ATTR_FROM, from);
myCommonXMLStructure.getCurrentSumoBaseObject()->addStringAttribute(SUMO_ATTR_TO, to);
} else {
myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_NOTHING);
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/utils/handlers/MeanDataHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,8 @@ MeanDataHandler::parseEdgeMeanData(const SUMOSAXAttributes& attrs) {
myCommonXMLStructure.getCurrentSumoBaseObject()->addDoubleAttribute(SUMO_ATTR_MAX_TRAVELTIME, maxTravel);
myCommonXMLStructure.getCurrentSumoBaseObject()->addStringListAttribute(SUMO_ATTR_VTYPES, vTypes);
myCommonXMLStructure.getCurrentSumoBaseObject()->addDoubleAttribute(SUMO_ATTR_HALTING_SPEED_THRESHOLD, speedThreshold);
} else {
myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_NOTHING);
}
}

Expand Down Expand Up @@ -240,6 +242,8 @@ MeanDataHandler::parseLaneMeanData(const SUMOSAXAttributes& attrs) {
myCommonXMLStructure.getCurrentSumoBaseObject()->addDoubleAttribute(SUMO_ATTR_MAX_TRAVELTIME, maxTravel);
myCommonXMLStructure.getCurrentSumoBaseObject()->addStringListAttribute(SUMO_ATTR_VTYPES, vTypes);
myCommonXMLStructure.getCurrentSumoBaseObject()->addDoubleAttribute(SUMO_ATTR_HALTING_SPEED_THRESHOLD, speedThreshold);
} else {
myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_NOTHING);
}
}

Expand Down
Loading

0 comments on commit 0a0d4e7

Please sign in to comment.