From 230a0f43b9d0656d33b32e6f6739b7f69527cd0f Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 4 Feb 2023 23:52:25 +0100
Subject: [PATCH] #186 - convert modern cart design scala classes to java

---
 .../design/ModernCartDesignHandlerImpl.java   | 106 +++++++++++++
 .../design/ModernCartDesignHandlerImpl.scala  |  70 ---------
 .../design/ModernGlobalDesignHandlerImpl.java | 148 ++++++++++++++++++
 .../ModernGlobalDesignHandlerImpl.scala       |  99 ------------
 .../ModernWarningDesignHandlerImpl.java       |  30 ++++
 .../ModernWarningDesignHandlerImpl.scala      |  21 ---
 6 files changed, 284 insertions(+), 190 deletions(-)
 create mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.java
 delete mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala
 create mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.java
 delete mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala
 create mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.java
 delete mode 100644 PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala

diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.java b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.java
new file mode 100644
index 00000000..33457714
--- /dev/null
+++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.java
@@ -0,0 +1,106 @@
+package de.tobias.playpad.design;
+
+import de.thecodelabs.utils.application.ApplicationUtils;
+import de.thecodelabs.utils.application.resources.classpath.ClasspathResource;
+import de.tobias.playpad.design.modern.ModernCartDesignHandler;
+import de.tobias.playpad.design.modern.ModernColor;
+import de.tobias.playpad.design.modern.model.ModernCartDesign;
+import de.tobias.playpad.util.Minifier;
+import de.tobias.playpad.view.PseudoClasses;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.common.TemplateParserContext;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ModernCartDesignHandlerImpl implements ModernCartDesignHandler
+{
+	@Override
+	public String generateCss(ModernCartDesign design, String classSuffix, boolean flat)
+	{
+		String result = "";
+
+		if(design.isEnableCustomBackgroundColor())
+		{
+			result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor(), "");
+			result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor(), MessageFormat.format(":{0}", PseudoClasses.WARN_CLASS.getPseudoClassName()));
+		}
+
+		if(design.isEnableCustomPlayColor())
+		{
+			result += generatePadCss(design, flat, classSuffix, design.getPlayColor(), MessageFormat.format(":{0}", PseudoClasses.PLAY_CLASS.getPseudoClassName()));
+			;
+		}
+
+		if(design.isEnableCustomCueInColor())
+		{
+			result += generateCueInCss(design, flat, classSuffix);
+		}
+
+		return result;
+	}
+
+	private String generatePadCss(ModernCartDesign design, Boolean flat, String padIdentifier, ModernColor color, String styleState)
+	{
+		final Map<String, Object> values = new HashMap<>();
+		values.put("prefix", padIdentifier);
+		values.put("class", styleState);
+		values.put("buttonColor", color.getButtonColor());
+		values.put("playbarTrackColor", color.getPlaybarColor());
+		values.put("playbarBarColor", color.getPlaybarTrackColor());
+
+		if(flat)
+		{
+			values.put("padColor", color.paint());
+		}
+		else
+		{
+			values.put("padColor", color.linearGradient());
+		}
+
+		if(flat)
+		{
+			values.put("padCueInColor", design.getCueInColor().paint());
+		}
+		else
+		{
+			values.put("padCueInColor", design.getCueInColor().linearGradient());
+		}
+
+		values.put("fontColor", color.getFontColor());
+
+		return generateCss("style/modern-pad.css", values);
+	}
+
+	private String generateCueInCss(ModernCartDesign design, Boolean flat, String padIdentifier)
+	{
+		final Map<String, Object> values = new HashMap<>();
+		values.put("prefix", padIdentifier);
+		if(flat)
+		{
+			values.put("padCueInColor", design.getCueInColor().paint());
+		}
+		else
+		{
+			values.put("padCueInColor", design.getCueInColor().linearGradient());
+		}
+
+		return generateCss("style/modern-pad-cue-in.css", values);
+	}
+
+	private String generateCss(String templatePath, Map<String, Object> values)
+	{
+		final ExpressionParser expressionParser = new SpelExpressionParser();
+
+		final StandardEvaluationContext context = new StandardEvaluationContext();
+
+		final ClasspathResource resource = ApplicationUtils.getApplication().getClasspathResource(templatePath);
+		final String content = Minifier.minify(resource.getAsString());
+
+		context.setVariables(values);
+		return expressionParser.parseExpression(content, new TemplateParserContext("${", "}")).getValue(context, String.class);
+	}
+}
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala
deleted file mode 100644
index 51039642..00000000
--- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernCartDesignHandlerImpl.scala
+++ /dev/null
@@ -1,70 +0,0 @@
-package de.tobias.playpad.design
-
-import de.thecodelabs.utils.application.ApplicationUtils
-import de.tobias.playpad.design.modern.model.ModernCartDesign
-import de.tobias.playpad.design.modern.{ModernCartDesignHandler, ModernColor}
-import de.tobias.playpad.util.Minifier
-import de.tobias.playpad.view.PseudoClasses
-import org.springframework.expression.ExpressionParser
-import org.springframework.expression.common.TemplateParserContext
-import org.springframework.expression.spel.standard.SpelExpressionParser
-import org.springframework.expression.spel.support.StandardEvaluationContext
-
-import scala.jdk.CollectionConverters._
-
-class ModernCartDesignHandlerImpl extends ModernCartDesignHandler {
-
-	override def generateCss(design: ModernCartDesign, classSuffix: String, flat: Boolean): String = {
-		var result = ""
-
-		if (design.isEnableCustomBackgroundColor) {
-			result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor)
-			result += generatePadCss(design, flat, classSuffix, design.getBackgroundColor, s":${PseudoClasses.WARN_CLASS.getPseudoClassName}")
-		}
-
-		if (design.isEnableCustomPlayColor) {
-			result += generatePadCss(design, flat, classSuffix, design.getPlayColor, s":${PseudoClasses.PLAY_CLASS.getPseudoClassName}")
-		}
-
-		if (design.isEnableCustomCueInColor) {
-			result += generateCueInCss(design, flat, classSuffix)
-		}
-
-		result
-	}
-
-	private def generatePadCss(design: ModernCartDesign, flat: Boolean, padIdentifier: String, color: ModernColor, styleState: String = ""): String = {
-		val values: Map[String, AnyRef] = Map(
-			"prefix" -> padIdentifier,
-			"class" -> styleState,
-			"buttonColor" -> color.getButtonColor,
-			"playbarTrackColor" -> color.getPlaybarColor,
-			"playbarBarColor" -> color.getPlaybarTrackColor,
-			"padColor" -> (if (flat) color.paint() else color.linearGradient()),
-			"padCueInColor" -> (if (flat) design.getCueInColor.paint() else design.getCueInColor.linearGradient()),
-			"fontColor" -> color.getFontColor
-		)
-
-		generateCss("style/modern-pad.css", values)
-	}
-
-	private def generateCueInCss(design: ModernCartDesign, flat: Boolean, padIdentifier: String): String = {
-		val values: Map[String, AnyRef] = Map(
-			"prefix" -> padIdentifier,
-			"padCueInColor" -> (if (flat) design.getCueInColor.paint() else design.getCueInColor.linearGradient())
-		)
-
-		generateCss("style/modern-pad-cue-in.css", values)
-	}
-
-	private def generateCss(templatePath: String, values: Map[String, AnyRef]): String = {
-		val expressionParser: ExpressionParser = new SpelExpressionParser()
-		val context = new StandardEvaluationContext()
-
-		val resource = ApplicationUtils.getApplication.getClasspathResource(templatePath)
-		val content = Minifier minify resource.getAsString
-
-		context.setVariables(values.asJava)
-		expressionParser.parseExpression(content, new TemplateParserContext("${", "}")).getValue(context, classOf[String])
-	}
-}
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.java b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.java
new file mode 100644
index 00000000..2cde8dfa
--- /dev/null
+++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.java
@@ -0,0 +1,148 @@
+package de.tobias.playpad.design;
+
+import de.thecodelabs.logger.Logger;
+import de.thecodelabs.utils.application.ApplicationUtils;
+import de.thecodelabs.utils.application.container.PathType;
+import de.thecodelabs.utils.application.resources.classpath.ClasspathResource;
+import de.tobias.playpad.DisplayableColor;
+import de.tobias.playpad.PlayPadMain;
+import de.tobias.playpad.design.modern.ModernCartDesignHandler;
+import de.tobias.playpad.design.modern.ModernColor;
+import de.tobias.playpad.design.modern.ModernGlobalDesignHandler;
+import de.tobias.playpad.design.modern.model.ModernCartDesign;
+import de.tobias.playpad.design.modern.model.ModernGlobalDesign;
+import de.tobias.playpad.pad.PadSettings;
+import de.tobias.playpad.project.Project;
+import de.tobias.playpad.util.Minifier;
+import de.tobias.playpad.view.ColorPickerView;
+import de.tobias.playpad.view.PseudoClasses;
+import de.tobias.playpad.viewcontroller.main.IMainViewController;
+import javafx.scene.Node;
+import javafx.scene.paint.Color;
+import javafx.stage.Stage;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.common.TemplateParserContext;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Consumer;
+
+public class ModernGlobalDesignHandlerImpl implements ModernGlobalDesignHandler, ColorModeHandler
+{
+	@Override
+	public void applyStyleSheet(Stage stage)
+	{
+		stage.getScene().getStylesheets().add("style/style.css");
+		stage.getScene().getStylesheets().add("style/modern.css");
+
+		// Custom style for playwall available
+		final Path customCss = ApplicationUtils.getApplication().getPath(PathType.CONFIGURATION, "style.css");
+		if(Files.exists(customCss))
+		{
+			stage.getScene().getStylesheets().add(customCss.toUri().toString());
+		}
+	}
+
+	@Override
+	public void applyStyleSheetToMainViewController(ModernGlobalDesign design, IMainViewController controller, Stage stage, Project project)
+	{
+		applyStyleSheet(stage);
+
+		controller.setGridColor(Color.TRANSPARENT);
+
+		// generate dynamic style sheet
+		final Path customCss = ApplicationUtils.getApplication().getPath(PathType.CONFIGURATION, "custom_style.css");
+		final StringBuilder stringBuilder = new StringBuilder();
+		stringBuilder.append(generateCss(design));
+
+		final ModernCartDesignHandler cartDesignHandler = PlayPadMain.getProgramInstance().getModernDesign().cart();
+		project.getPage(controller.getPage()).getPads().forEach(pad -> {
+			final PadSettings padSettings = pad.getPadSettings();
+
+			final ModernCartDesign cartDesign = padSettings.getDesign();
+			stringBuilder.append(cartDesignHandler.generateCss(cartDesign, String.valueOf(pad.getPadIndex()), design.isFlatDesign()));
+		});
+
+		try
+		{
+			Files.write(customCss, stringBuilder.toString().getBytes());
+		}
+		catch(IOException e)
+		{
+			Logger.error(e);
+		}
+
+		stage.getScene().getStylesheets().remove(customCss.toUri().toString());
+		stage.getScene().getStylesheets().add(customCss.toUri().toString());
+	}
+
+	private String generateCss(ModernGlobalDesign design)
+	{
+		return String.join(
+				generateCss(design, design.getBackgroundColor(), ""),
+				generateCss(design, design.getPlayColor(), MessageFormat.format(":{0}", PseudoClasses.PLAY_CLASS.getPseudoClassName())),
+				generateCss(design, design.getBackgroundColor(), MessageFormat.format(":{0}", PseudoClasses.WARN_CLASS.getPseudoClassName()))
+		);
+	}
+
+	private String generateCss(ModernGlobalDesign design, ModernColor color, String styleState)
+	{
+		final ExpressionParser expressionParser = new SpelExpressionParser();
+		final StandardEvaluationContext context = new StandardEvaluationContext();
+
+		final ClasspathResource resource = ApplicationUtils.getApplication().getClasspathResource("style/modern-global.css");
+		final String content = Minifier.minify(resource.getAsString());
+
+		final Map<String, Object> values = new HashMap<>();
+		values.put("class", styleState);
+		values.put("buttonColor", color.getButtonColor());
+		values.put("playbarTrackColor", color.getPlaybarColor());
+		values.put("playbarBarColor", color.getPlaybarTrackColor());
+
+		if(design.isFlatDesign())
+		{
+			values.put("padColor", color.paint());
+		}
+		else
+		{
+			values.put("padColor", color.linearGradient());
+		}
+
+		if(design.isFlatDesign())
+		{
+			values.put("padCueInColor", design.getCueInColor().paint());
+		}
+		else
+		{
+			values.put("padCueInColor", design.getCueInColor().linearGradient());
+		}
+
+		values.put("fontColor", color.getFontColor());
+		values.put("infoFontSize", String.valueOf(design.getInfoFontSize()));
+		values.put("titleFontSize", String.valueOf(design.getTitleFontSize()));
+
+		context.setVariables(values);
+		return expressionParser.parseExpression(content, new TemplateParserContext("${", "}")).getValue(context, String.class);
+	}
+
+	@Override
+	public Node getColorInterface(Consumer<DisplayableColor> onSelection)
+	{
+		return new ColorPickerView(null, ModernColor.values(), onSelection);
+	}
+
+	@Override
+	public void setColor(ModernCartDesign design, DisplayableColor color)
+	{
+		if(color instanceof ModernColor)
+		{
+			design.setBackgroundColor((ModernColor) color);
+		}
+	}
+}
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala
deleted file mode 100644
index 2f36bbb6..00000000
--- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernGlobalDesignHandlerImpl.scala
+++ /dev/null
@@ -1,99 +0,0 @@
-package de.tobias.playpad.design
-
-import de.thecodelabs.utils.application.ApplicationUtils
-import de.thecodelabs.utils.application.container.PathType
-import de.tobias.playpad.design.modern.model.{ModernCartDesign, ModernGlobalDesign}
-import de.tobias.playpad.design.modern.{ModernColor, ModernGlobalDesignHandler}
-import de.tobias.playpad.project.Project
-import de.tobias.playpad.util.Minifier
-import de.tobias.playpad.view.{ColorPickerView, PseudoClasses}
-import de.tobias.playpad.viewcontroller.main.IMainViewController
-import de.tobias.playpad.{DisplayableColor, PlayPadMain}
-import javafx.scene.paint.Color
-import javafx.stage.Stage
-import org.springframework.expression.ExpressionParser
-import org.springframework.expression.common.TemplateParserContext
-import org.springframework.expression.spel.standard.SpelExpressionParser
-import org.springframework.expression.spel.support.StandardEvaluationContext
-
-import java.nio.file.Files
-import java.util.function.Consumer
-import scala.jdk.CollectionConverters._
-
-class ModernGlobalDesignHandlerImpl extends ModernGlobalDesignHandler with ColorModeHandler {
-
-	override def applyStyleSheet(stage: Stage): Unit = {
-		stage.getScene.getStylesheets.add("style/style.css")
-		stage.getScene.getStylesheets.add("style/modern.css")
-
-		// Custom style for playwall available
-		val customCss = ApplicationUtils.getApplication.getPath(PathType.CONFIGURATION, "style.css")
-		if (Files exists customCss) {
-			stage.getScene.getStylesheets.add(customCss.toUri.toString)
-		}
-	}
-
-	override def applyStyleSheetToMainViewController(design: ModernGlobalDesign, controller: IMainViewController, stage: Stage, project: Project): Unit = {
-		applyStyleSheet(stage)
-
-		controller.setGridColor(Color.TRANSPARENT)
-
-		// generate dynamic style sheet
-		val customCss = ApplicationUtils.getApplication.getPath(PathType.CONFIGURATION, "custom_style.css")
-		val stringBuilder = new StringBuilder()
-		stringBuilder.append(generateCss(design))
-
-		val cartDesignHandler = PlayPadMain.getProgramInstance.getModernDesign.cart
-		project.getPage(controller.getPage).getPads.forEach(pad => {
-			val padSettings = pad.getPadSettings
-
-			val cartDesign = padSettings.getDesign
-			stringBuilder.append(cartDesignHandler.generateCss(cartDesign, s"${pad.getPadIndex}", design.isFlatDesign))
-		})
-		Files.write(customCss, stringBuilder.toString().getBytes())
-
-		stage.getScene.getStylesheets.remove(customCss.toUri.toString)
-		stage.getScene.getStylesheets.add(customCss.toUri.toString)
-	}
-
-	private def generateCss(design: ModernGlobalDesign): String = {
-		String.join(
-			generateCss(design, design.getBackgroundColor),
-			generateCss(design, design.getPlayColor, s":${PseudoClasses.PLAY_CLASS.getPseudoClassName}"),
-			generateCss(design, design.getBackgroundColor, s":${PseudoClasses.WARN_CLASS.getPseudoClassName}")
-		)
-	}
-
-	private def generateCss(design: ModernGlobalDesign, color: ModernColor, styleState: String = ""): String = {
-		val expressionParser: ExpressionParser = new SpelExpressionParser()
-		val context = new StandardEvaluationContext()
-
-		val resource = ApplicationUtils.getApplication.getClasspathResource("style/modern-global.css")
-		val string = Minifier minify resource.getAsString
-
-		val values: Map[String, AnyRef] = Map(
-			"class" -> styleState,
-			"buttonColor" -> color.getButtonColor,
-			"playbarTrackColor" -> color.getPlaybarColor,
-			"playbarBarColor" -> color.getPlaybarTrackColor,
-			"padColor" -> (if (design.isFlatDesign) color.paint() else color.linearGradient()),
-			"padCueInColor" -> (if (design.isFlatDesign) design.getCueInColor.paint() else design.getCueInColor.linearGradient()),
-			"fontColor" -> color.getFontColor,
-			"infoFontSize" -> s"${design.getInfoFontSize}",
-			"titleFontSize" -> s"${design.getTitleFontSize}"
-		)
-
-		context.setVariables(values.asJava)
-		expressionParser.parseExpression(string, new TemplateParserContext("${", "}")).getValue(context, classOf[String])
-	}
-
-	override def getColorInterface(onSelection: Consumer[DisplayableColor]) = new ColorPickerView(null, ModernColor.values.asInstanceOf[Array[DisplayableColor]], onSelection)
-
-	override def setColor(design: ModernCartDesign, color: DisplayableColor): Unit = {
-		color match {
-			case c: ModernColor =>
-				design.setBackgroundColor(c)
-			case _ =>
-		}
-	}
-}
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.java b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.java
new file mode 100644
index 00000000..609f6581
--- /dev/null
+++ b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.java
@@ -0,0 +1,30 @@
+package de.tobias.playpad.design;
+
+import de.tobias.playpad.design.modern.ModernWarningDesignHandler;
+import de.tobias.playpad.design.modern.model.ModernGlobalDesign;
+import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController;
+import de.tobias.playpad.project.api.IPad;
+import de.tobias.playpad.util.FadeableColor;
+import javafx.util.Duration;
+
+public class ModernWarningDesignHandlerImpl implements ModernWarningDesignHandler
+{
+	@Override
+	public void performWarning(ModernGlobalDesign design, FadeableColor fadeStartColor, FadeableColor fadeStopColor, AbstractPadViewController controller, Duration warningDuration)
+	{
+		if(design.isWarnAnimation())
+		{
+			ModernDesignAnimator.animateWarn(controller.getPad(), controller.getView(), fadeStartColor, fadeStopColor, warningDuration);
+		}
+		else
+		{
+			ModernDesignAnimator.warnFlash(controller.getView());
+		}
+	}
+
+	@Override
+	public void stopWarning(IPad pad)
+	{
+		ModernDesignAnimator.stopAnimation(pad);
+	}
+}
diff --git a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala b/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala
deleted file mode 100644
index c849a213..00000000
--- a/PlayWall/src/main/scala/de/tobias/playpad/design/ModernWarningDesignHandlerImpl.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.tobias.playpad.design
-
-import de.tobias.playpad.design.modern.ModernWarningDesignHandler
-import de.tobias.playpad.design.modern.model.ModernGlobalDesign
-import de.tobias.playpad.pad.viewcontroller.AbstractPadViewController
-import de.tobias.playpad.project.api.IPad
-import de.tobias.playpad.util.FadeableColor
-import javafx.util.Duration
-
-class ModernWarningDesignHandlerImpl extends ModernWarningDesignHandler {
-
-	override def performWarning(design: ModernGlobalDesign, fadeStartColor: FadeableColor, fadeStopColor: FadeableColor, controller: AbstractPadViewController, warningDuration: Duration): Unit = {
-		if (design.isWarnAnimation) {
-			ModernDesignAnimator.animateWarn(controller.getPad, controller.getView, fadeStartColor, fadeStopColor, warningDuration)
-		} else {
-			ModernDesignAnimator.warnFlash(controller.getView)
-		}
-	}
-
-	override def stopWarning(pad: IPad): Unit = ModernDesignAnimator.stopAnimation(pad)
-}
-- 
GitLab