diff --git a/epa/build.gradle.kts b/epa/build.gradle.kts index b19f301f..9eaecd06 100644 --- a/epa/build.gradle.kts +++ b/epa/build.gradle.kts @@ -3,9 +3,9 @@ import java.net.InetAddress plugins { alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.dataframe) alias(libs.plugins.kotlin.serialization) application - kotlin("plugin.dataframe") version "2.4.20" } application { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 140cfc75..23f2afa6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,11 +11,11 @@ csv-jvm = "1.10.0" selfie = "3.1.1" kotlin = "2.4.20" gradle-buildconfig = "6.1.0" -compose-version = "1.12.0" +compose-version = "1.11.1" jewel = "0.40.0-262.10315.125" intelliJPlatformBuild = "262.9437.288" jna = "5.19.1" -filekit = "0.16.0" +filekit = "0.15.0" kotlinx-serialization = "1.11.0" let-plot-compose = "3.2.2" let-plot-multiplatform = "4.11.0" @@ -95,6 +95,7 @@ smile = ["smile-core", "smile-kotlin"] [plugins] kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +kotlin-dataframe = { id = "org.jetbrains.kotlin.plugin.dataframe", version.ref = "kotlin" } compose = { id = "org.jetbrains.compose", version.ref = "compose-version" } kotlin-plugin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } gradle-buildconfig-plugin = { id = "com.github.gmazzo.buildconfig", version.ref = "gradle-buildconfig" } diff --git a/ui/build.gradle.kts b/ui/build.gradle.kts index dd8a4de3..8dd7ebc3 100644 --- a/ui/build.gradle.kts +++ b/ui/build.gradle.kts @@ -9,7 +9,7 @@ plugins { } group = "moritz.lindner.masterarbeit" -version = "1.19.9" +version = "1.20.0" val createMetrics = false kotlin { diff --git a/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/EPAVisualizerMain.kt b/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/EPAVisualizerMain.kt index 5e9f23bb..54b793eb 100644 --- a/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/EPAVisualizerMain.kt +++ b/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/EPAVisualizerMain.kt @@ -17,7 +17,8 @@ import androidx.compose.ui.window.application import io.github.oshai.kotlinlogging.KotlinLogging import moritz.lindner.masterarbeit.buildconfig.BuildConfig import moritz.lindner.masterarbeit.ui.common.AboutPanel.showAboutDialog -import moritz.lindner.masterarbeit.ui.common.Constants.APPLICATION_NAME +import moritz.lindner.masterarbeit.ui.common.Constants.APPLICATION_NAME_LONG +import moritz.lindner.masterarbeit.ui.common.Constants.APPLICATION_NAME_SHORT import moritz.lindner.masterarbeit.ui.common.Icons import moritz.lindner.masterarbeit.ui.components.EPAVisualizerUi import moritz.lindner.masterarbeit.ui.generated.resources.Res @@ -56,7 +57,7 @@ val logger = KotlinLogging.logger {} @ExperimentalJewelApi fun main() { try { - logger.info { "Starting EPA-Visualizer ${BuildConfig.APP_VERSION}" } + logger.info { "Starting VisEPA ${BuildConfig.APP_VERSION}" } setSystemProperties() setupMemoryMonitoring() runApplication() @@ -70,10 +71,10 @@ fun main() { @Composable private fun AppTitleWithLogo() { Tooltip( - tooltip = { Text("$APPLICATION_NAME version ${BuildConfig.APP_VERSION}") } + tooltip = { Text("$APPLICATION_NAME_SHORT version ${BuildConfig.APP_VERSION}") } ) { Row(verticalAlignment = Alignment.CenterVertically) { - Text(APPLICATION_NAME) + Text(APPLICATION_NAME_SHORT) Icon(Icons.logo, "App Logo", modifier = Modifier.size(32.dp)) } } @@ -82,7 +83,7 @@ private fun AppTitleWithLogo() { @OptIn(ExperimentalFoundationApi::class) @Composable private fun GitHubButton() { - Tooltip({ Text("Open the $APPLICATION_NAME repository on Github") }) { + Tooltip({ Text("Open the $APPLICATION_NAME_SHORT repository on Github") }) { IconButton( onClick = { runCatching { @@ -135,7 +136,7 @@ private fun runApplication() { placement = WindowPlacement.Maximized, isMinimized = false, ), - title = APPLICATION_NAME, + title = APPLICATION_NAME_SHORT, icon = painterResource(Res.drawable.logo), ) { LaunchedEffect(Unit) { @@ -183,7 +184,7 @@ private fun setupMemoryMonitoring() { private fun setSystemProperties() { val properties = mapOf( - "apple.awt.application.name" to APPLICATION_NAME, + "apple.awt.application.name" to APPLICATION_NAME_LONG, "awt.useSystemAAFontSettings" to "on", "swing.aatext" to "true", "sun.awt.useSystemAAFontSettings" to "on", diff --git a/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/common/AboutPanel.kt b/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/common/AboutPanel.kt index 0991c728..46fcaac9 100644 --- a/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/common/AboutPanel.kt +++ b/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/common/AboutPanel.kt @@ -1,7 +1,7 @@ package moritz.lindner.masterarbeit.ui.common import moritz.lindner.masterarbeit.buildconfig.BuildConfig -import moritz.lindner.masterarbeit.ui.common.Constants.APPLICATION_NAME +import moritz.lindner.masterarbeit.ui.common.Constants.APPLICATION_NAME_LONG import javax.swing.JOptionPane import javax.swing.JOptionPane.showMessageDialog @@ -10,22 +10,22 @@ object AboutPanel { showMessageDialog( null, """ - $APPLICATION_NAME + $APPLICATION_NAME_LONG Version: ${BuildConfig.APP_VERSION} Interactive Visualization of Extended Prefix Automaton A tool for analyzing trace variants in large, complex event logs using - Extended Prefix Automata (EPA) and different semantic and hierarchical tree layouts. + enhanced Extended Prefix Automata (EPA*) and different semantic and hierarchical tree layouts. This visualization approach encodes thousands of trace variants while minimizing visual clutter, supporting interactive filtering and analysis. Built as part of a Master's Thesis at Humboldt-Universität zu Berlin. - This application and the master thesis is currently under development and not finished. + This application. Built with Kotlin and Compose Desktop - Process Mining • Event Log Visualization • Variant Analysis + Process mining • Variant Analysis • Visual analytics • Extended Prefix Automata • Filter • Layout Author: Moritz Lindner Supervisor: Prof. Dr. Jan Mendling @@ -34,7 +34,7 @@ object AboutPanel { © 2025-2026 Moritz Lindner """.trimIndent(), - "About $APPLICATION_NAME", + "About $APPLICATION_NAME_LONG", JOptionPane.INFORMATION_MESSAGE ) } diff --git a/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/common/Constants.kt b/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/common/Constants.kt index a0d29ece..eeedb270 100644 --- a/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/common/Constants.kt +++ b/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/common/Constants.kt @@ -1,5 +1,6 @@ package moritz.lindner.masterarbeit.ui.common object Constants { - const val APPLICATION_NAME = "EPA Visualizer" + const val APPLICATION_NAME_LONG = "Variant Analysis Visualization through Enhanced Extended Prefix Automata" + const val APPLICATION_NAME_SHORT = "VisEPA" } \ No newline at end of file diff --git a/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/components/projectselection/ProjectSelectionUi.kt b/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/components/projectselection/ProjectSelectionUi.kt index 5f0b3a06..4232c50d 100644 --- a/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/components/projectselection/ProjectSelectionUi.kt +++ b/ui/src/main/kotlin/moritz/lindner/masterarbeit/ui/components/projectselection/ProjectSelectionUi.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import io.github.vinceglb.filekit.dialogs.compose.rememberDirectoryPickerLauncher import moritz.lindner.masterarbeit.epa.project.Project -import moritz.lindner.masterarbeit.ui.common.Constants.APPLICATION_NAME +import moritz.lindner.masterarbeit.ui.common.Constants.APPLICATION_NAME_LONG import moritz.lindner.masterarbeit.ui.common.Icons import moritz.lindner.masterarbeit.ui.logger import org.jetbrains.jewel.foundation.theme.JewelTheme @@ -63,7 +63,7 @@ fun ProjectSelectionUi( Spacer(modifier = Modifier.height(24.dp)) Text( - text = "Welcome to $APPLICATION_NAME", + text = "Welcome to $APPLICATION_NAME_LONG", style = JewelTheme.typography.h1TextStyle )