From 8667234fe392524078cbf26e7e57f45d70023458 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 19 Apr 2021 19:43:45 +0000
Subject: [PATCH] EmphasizedLogSupport from ProjectForge copied.

---
 borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt           |  134 ++++++++++++++++++++++++++++++++++++++++++++
 borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt |   16 +++--
 borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt             |   18 +++---
 3 files changed, 153 insertions(+), 15 deletions(-)

diff --git a/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt b/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt
new file mode 100644
index 0000000..b720941
--- /dev/null
+++ b/borgbutler-core/src/main/kotlin/de/micromata/borgbutler/EmphasizedLogSupport.kt
@@ -0,0 +1,134 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// Project ProjectForge Community Edition
+//         www.projectforge.org
+//
+// Copyright (C) 2001-2021 Micromata GmbH, Germany (www.micromata.com)
+//
+// ProjectForge is dual-licensed.
+//
+// This community edition is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as published
+// by the Free Software Foundation; version 3 of the License.
+//
+// This community edition is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+// Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, see http://www.gnu.org/licenses/.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+package de.micromata.borgbutler
+
+import mu.KLogger
+import mu.KotlinLogging
+import org.apache.commons.lang3.StringUtils
+
+/**
+ * Helper for logging very important information and warnings.
+ */
+class EmphasizedLogSupport @JvmOverloads constructor(
+    private val log: KLogger,
+    priority: Priority? = Priority.IMPORTANT,
+    private val alignment: Alignment = Alignment.CENTER
+) {
+    private var number = 0
+    private val innerLength: Int
+    var logLevel = LogLevel.INFO
+    private var started = false
+
+    constructor(log: KLogger, alignment: Alignment= Alignment.CENTER) : this(log, Priority.IMPORTANT, alignment)
+
+    enum class Priority {
+        NORMAL, IMPORTANT, VERY_IMPORTANT
+    }
+
+    enum class Alignment {
+        CENTER, LEFT
+    }
+
+    enum class LogLevel {
+        ERROR, WARN, INFO
+    }
+
+    private fun ensureStart() {
+        if (!started) {
+            started = true
+            logStartSeparator()
+        }
+    }
+
+    /**
+     * @return this for chaining.
+     */
+    private fun logStartSeparator(): EmphasizedLogSupport {
+        for (i in 0 until number) {
+            logSeparatorLine()
+        }
+        return log("")
+    }
+
+    /**
+     * @return this for chaining.
+     */
+    fun logEnd(): EmphasizedLogSupport {
+        ensureStart()
+        log("")
+        for (i in 0 until number) {
+            logSeparatorLine()
+        }
+        return this
+    }
+
+    private fun logSeparatorLine() {
+        logLine(StringUtils.rightPad("", innerLength, '*') + asterisks(number * 2 + 2))
+    }
+
+    fun log(text: String?): EmphasizedLogSupport {
+        ensureStart()
+        if (text?.contains("\n") == true) {
+            for (line in StringUtils.splitPreserveAllTokens(text, '\n')) {
+                logLineText(line)
+            }
+        } else {
+            logLineText(text)
+        }
+        return this
+    }
+
+    private fun logLineText(line: String?) {
+        val padText = if (alignment == Alignment.LEFT)
+            StringUtils.rightPad(line, innerLength)
+        else
+            StringUtils.center(line, innerLength)
+        logLine(asterisks(number) + " " + padText + " " + asterisks(number))
+    }
+
+    private fun logLine(msg: String) {
+        if (logLevel == LogLevel.ERROR) log.error(msg) else if (logLevel == LogLevel.WARN) log.warn(msg) else log.info(
+            msg
+        )
+    }
+
+    companion object {
+        private const val CONSOLE_LENGTH = 120
+        private fun asterisks(number: Int): String {
+            return StringUtils.rightPad("*", number, '*')
+        }
+    }
+
+    init {
+        when (priority) {
+            Priority.NORMAL -> number = 1
+            Priority.VERY_IMPORTANT -> {
+                number = 5
+                logLevel = LogLevel.WARN
+            }
+            else -> number = 2
+        }
+        innerLength = CONSOLE_LENGTH - 2 * number
+    }
+}
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
index d577112..935dc57 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/BorgButlerApplication.kt
@@ -1,5 +1,6 @@
 package de.micromata.borgbutler.server
 
+import de.micromata.borgbutler.EmphasizedLogSupport
 import de.micromata.borgbutler.cache.ButlerCache
 import de.micromata.borgbutler.config.ConfigurationHandler
 import de.micromata.borgbutler.config.ConfigurationHandler.Companion.init
@@ -119,23 +120,26 @@
             }
             val uri = URI.create(url)
             val quietMode = line.hasOption('q')
+            val emphasizedLog = EmphasizedLogSupport(log)
             if (!quietMode && RunningMode.desktopSupportsBrowse) {
                 try {
-                    log.info { "Trying to open your local web browser: $uri" }
+                    emphasizedLog.log("Trying to open your local web browser: $uri")
                     Desktop.getDesktop().browse(uri)
                 } catch (ex: Exception) {
-                    log.info("Can't open web browser: " + ex.message, ex)
-                    log.info("Desktop not available. Please open your browser manually: $uri")
+                    emphasizedLog.logLevel = EmphasizedLogSupport.LogLevel.ERROR
+                    emphasizedLog.log("Can't open web browser: " + ex.message)
+                    emphasizedLog.log("Desktop not available. Please open your browser manually: $uri")
                 }
             } else {
                 if (quietMode) {
-                    log.info("Server started in quiet mode (option -q). Please open your browser manually: $uri")
+                    emphasizedLog.log("Server started in quiet mode (option -q). Please open your browser manually: $uri")
                 } else if (RunningMode.headlessMode) {
-                    log.info("Desktop not available in headless mode. Please open your browser manually: $uri")
+                    emphasizedLog.log("Desktop not available in headless mode. Please open your browser manually: $uri")
                 } else if (!RunningMode.desktopSupportsBrowse) {
-                    log.info("Desktop not available. Please open your browser manually: $uri")
+                    emphasizedLog.log("Desktop not available. Please open your browser manually: $uri")
                 }
             }
+            emphasizedLog.logEnd()
         } catch (ex: ParseException) {
             // oops, something went wrong
             System.err.println("Parsing failed.  Reason: " + ex.message)
diff --git a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
index b7f45b0..1e4783a 100644
--- a/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
+++ b/borgbutler-server/src/main/kotlin/de/micromata/borgbutler/server/WebConfig.kt
@@ -1,5 +1,6 @@
 package de.micromata.borgbutler.server
 
+import de.micromata.borgbutler.EmphasizedLogSupport
 import mu.KotlinLogging
 import org.springframework.context.annotation.Bean
 import org.springframework.context.annotation.Configuration
@@ -56,15 +57,14 @@
 
     override fun addCorsMappings(registry: CorsRegistry) {
         if (RunningMode.webDevelopment) {
-            log.warn("************************************")
-            log.warn("***********               **********")
-            log.warn("*********** ATTENTION!    **********")
-            log.warn("***********               **********")
-            log.warn("*********** Running in    **********")
-            log.warn("*********** web dev mode! **********")
-            log.warn("***********               **********")
-            log.warn("************************************")
-            log.warn("Don't deliver this app in dev mode due to security reasons (CrossOriginFilter is set)!")
+            val emphasizedLog = EmphasizedLogSupport(log)
+            emphasizedLog.logLevel = EmphasizedLogSupport.LogLevel.WARN
+            emphasizedLog.log("ATTENTION!")
+            emphasizedLog.log("")
+            emphasizedLog.log("Running in web dev mode!")
+            emphasizedLog.log("")
+            emphasizedLog.log("Don't deliver this app in dev mode due to security reasons (CrossOriginFilter is set)!")
+            emphasizedLog.logEnd()
             registry.addMapping("/**")
         }
     }

--
Gitblit v1.10.0