Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DateTime format support in tooltips #421

Merged
merged 8 commits into from
Aug 18, 2021
Prev Previous commit
Next Next commit
Minor changes: new error messages, add function isDateTimeFormat.
  • Loading branch information
OLarionova-HORIS committed Aug 17, 2021
commit b6ba61fd7bd5216d4ebbd349586441ab911da5c7
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class DateTimeFormat(private val spec: List<SpecPart>) {
}

class PatternSpecPart(str: String): SpecPart(str) {
val pattern: Pattern = Pattern.patternByString(str) ?: throw IllegalArgumentException("Wrong pattern: $str")
val pattern: Pattern = Pattern.patternByString(str) ?: throw IllegalArgumentException("Wrong date-time pattern: $str")

override fun exec(dateTime: DateTime): String {
return getValueForPattern(pattern, dateTime)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,7 @@ enum class Pattern(val string: String, val kind: Kind) {
}

fun patternByString(patternString: String) = values().find { it.string == patternString }

fun isDateTimeFormat(patternString: String) = PATTERN_REGEX.containsMatchIn(patternString)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -485,15 +485,8 @@ class NumberFormat(private val spec: Spec) {

fun isValidPattern(spec: String) = NUMBER_REGEX.matches(spec)

fun parseOrNull(pattern: String): NumberFormat? =
try {
NumberFormat(pattern)
} catch (e: Exception) {
null
}

private fun parse(spec: String): Spec {
val matchResult = NUMBER_REGEX.find(spec) ?: throw IllegalArgumentException("Wrong pattern format")
val matchResult = NUMBER_REGEX.find(spec) ?: throw IllegalArgumentException("Wrong number format pattern: '$spec'")

return Spec(
fill = matchResult.groups[1]?.value ?: " ",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package jetbrains.datalore.base.stringFormat

import jetbrains.datalore.base.dateFormat.DateTimeFormat
import jetbrains.datalore.base.dateFormat.Pattern.Companion.isDateTimeFormat
import jetbrains.datalore.base.datetime.Instant
import jetbrains.datalore.base.datetime.tz.TimeZone
import jetbrains.datalore.base.numberFormat.NumberFormat
Expand Down Expand Up @@ -73,7 +74,7 @@ class StringFormat private constructor(
}
when (formatType) {
NUMBER_FORMAT -> {
val numberFormatter = NumberFormat.parseOrNull(formatPattern) ?: error("Wrong pattern of number format: '$formatPattern'")
val numberFormatter = NumberFormat(formatPattern)
return { value: Any ->
when (value) {
is Number -> numberFormatter.apply(value)
Expand Down Expand Up @@ -137,13 +138,9 @@ class StringFormat private constructor(
}

private fun detectFormatType(pattern: String): FormatType {
fun isDateTimeFormatPattern(pattern: String): Boolean {
return DateTimeFormat.parse(pattern).find { it is DateTimeFormat.PatternSpecPart } != null
}

return when {
NumberFormat.isValidPattern(pattern) -> NUMBER_FORMAT
isDateTimeFormatPattern(pattern) -> DATETIME_FORMAT
isDateTimeFormat(pattern) -> DATETIME_FORMAT
else -> STRING_FORMAT
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,11 @@ class StringFormatTest {

@Test
fun `try to format static text as number format`() {
val exception = assertFailsWith(IllegalStateException::class) {
val exception = assertFailsWith(IllegalArgumentException::class) {
StringFormat.create("pattern", type = NUMBER_FORMAT).format("text")
}
assertEquals(
"Wrong pattern of number format: 'pattern'",
"Wrong number format pattern: 'pattern'",
exception.message
)
}
Expand Down