Improve timeperiod validation error messages

fixes #8893
This commit is contained in:
Gunnar Beutner 2015-03-29 08:13:11 +02:00
parent a6822fd59a
commit a5c5569324
3 changed files with 13 additions and 34 deletions

View File

@ -289,11 +289,7 @@ void LegacyTimePeriod::ParseTimeRange(const String& timerange, tm *begin, tm *en
String second = def.SubStr(pos + 1);
second.Trim();
try {
ParseTimeSpec(first, begin, NULL, reference);
} catch (std::exception&) {
throw;
}
/* If the second definition starts with a number we need
* to add the first word from the first definition, e.g.:
@ -314,17 +310,9 @@ void LegacyTimePeriod::ParseTimeRange(const String& timerange, tm *begin, tm *en
second = first.SubStr(0, xpos + 1) + second;
}
try {
ParseTimeSpec(second, NULL, end, reference);
} catch (std::exception&) {
throw;
}
} else {
try {
ParseTimeSpec(def, begin, end, reference);
} catch (std::exception&) {
throw;
}
}
}
@ -381,11 +369,7 @@ Dictionary::Ptr LegacyTimePeriod::ProcessTimeRange(const String& timestamp, tm *
{
tm begin, end;
try {
ProcessTimeRangeRaw(timestamp, reference, &begin, &end);
} catch (std::exception&) {
throw;
}
Dictionary::Ptr segment = new Dictionary();
segment->Set("begin", (long)mktime(&begin));
@ -400,12 +384,7 @@ void LegacyTimePeriod::ProcessTimeRanges(const String& timeranges, tm *reference
boost::algorithm::split(ranges, timeranges, boost::is_any_of(","));
BOOST_FOREACH(const String& range, ranges) {
Dictionary::Ptr segment;
try {
segment = ProcessTimeRange(range, reference);
} catch (std::exception&) {
throw;
}
Dictionary::Ptr segment = ProcessTimeRange(range, reference);
if (segment->Get("begin") >= segment->Get("end"))
continue;

View File

@ -197,14 +197,14 @@ void ScheduledDowntime::ValidateRanges(const Dictionary::Ptr& value, const Valid
tm begin_tm, end_tm;
int stride;
LegacyTimePeriod::ParseTimeRange(kv.first, &begin_tm, &end_tm, &stride, &reference);
} catch (std::exception&) {
BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of("ranges"), "Invalid time specification: " + kv.first));
} catch (const std::exception& ex) {
BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of("ranges"), "Invalid time specification '" + kv.first + "': " + ex.what()));
}
try {
LegacyTimePeriod::ProcessTimeRanges(kv.second, &reference, segments);
} catch (std::exception&) {
BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of("ranges"), "Invalid time range definition: " + kv.first));
} catch (const std::exception& ex) {
BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of("ranges"), "Invalid time range definition '" + kv.second + "': " + ex.what()));
}
}
}

View File

@ -322,14 +322,14 @@ void TimePeriod::ValidateRanges(const Dictionary::Ptr& value, const ValidationUt
tm begin_tm, end_tm;
int stride;
LegacyTimePeriod::ParseTimeRange(kv.first, &begin_tm, &end_tm, &stride, &reference);
} catch (std::exception&) {
BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of("ranges"), "Invalid time specification: " + kv.first));
} catch (const std::exception& ex) {
BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of("ranges"), "Invalid time specification '" + kv.first + "': " + ex.what()));
}
try {
LegacyTimePeriod::ProcessTimeRanges(kv.second, &reference, segments);
} catch (std::exception&) {
BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of("ranges"), "Invalid time range definition: " + kv.second));
} catch (const std::exception& ex) {
BOOST_THROW_EXCEPTION(ValidationError(this, boost::assign::list_of("ranges"), "Invalid time range definition '" + kv.second + "': " + ex.what()));
}
}
}