TOBAGO-2048: Theme.getVersion() returns null
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/context/ThemeImpl.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/context/ThemeImpl.java
index fd6eb0c..92aa282 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/context/ThemeImpl.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/context/ThemeImpl.java
@@ -218,7 +218,9 @@
} else {
builder.append("null");
}
- builder.append(", \nproductionScripts=[");
+ builder.append(" version='");
+ builder.append(version);
+ builder.append("', \nproductionScripts=[");
for (final ThemeScript s : productionScripts) {
builder.append("\n");
builder.append(s);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/config/TobagoConfigParser.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/config/TobagoConfigParser.java
index d1e0df2..4a4fe5a 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/config/TobagoConfigParser.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/config/TobagoConfigParser.java
@@ -94,6 +94,7 @@
*/
@Deprecated
private static final int VERSIONED = -1407102089;
+ private static final int VERSION = 351608024;
private static final int RESOURCES = -1983070683;
private static final int INCLUDES = 90259659;
private static final int EXCLUDES = 1994055129;
@@ -380,6 +381,10 @@
currentTheme = null;
break;
+ case VERSION:
+ currentTheme.setVersion(text);
+ break;
+
case RESOURCES:
production = null;
break;
diff --git a/tobago-core/src/main/resources/org/apache/myfaces/tobago/config/tobago-config-5.0.xsd b/tobago-core/src/main/resources/org/apache/myfaces/tobago/config/tobago-config-5.0.xsd
index 3e7410d..4858b04 100644
--- a/tobago-core/src/main/resources/org/apache/myfaces/tobago/config/tobago-config-5.0.xsd
+++ b/tobago-core/src/main/resources/org/apache/myfaces/tobago/config/tobago-config-5.0.xsd
@@ -319,6 +319,15 @@
</xs:documentation>
</xs:annotation>
</xs:element>
+ <xs:element name="version" type="xs:string">
+ <xs:annotation>
+ <xs:documentation>
+ The version of the theme. The version string will be encoded into the
+ resource path, to avoid caching problems. The version can be accessed by
+ #{tobagoContext.theme.version}.
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
<xs:element name="resources" type="tobago:resources-type" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/TobagoConfigMergingUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/TobagoConfigMergingUnitTest.java
index c051e34..85959f7 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/TobagoConfigMergingUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/internal/config/TobagoConfigMergingUnitTest.java
@@ -19,6 +19,7 @@
package org.apache.myfaces.tobago.internal.config;
+import org.apache.myfaces.tobago.context.Theme;
import org.apache.myfaces.tobago.context.ThemeScript;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -161,9 +162,12 @@
}
config.resolveThemes();
- final ThemeScript[] scripts = config.getDefaultTheme().getScriptResources(true);
+ final Theme defaultTheme = config.getDefaultTheme();
+ final ThemeScript[] scripts = defaultTheme.getScriptResources(true);
Assertions.assertArrayEquals(ex, scripts);
+
+ Assertions.assertEquals("some-version-2", defaultTheme.getVersion());
}
public static TobagoConfigImpl loadAndMerge(final String... names)
diff --git a/tobago-core/src/test/resources/tobago-config-5.0-replace.xml b/tobago-core/src/test/resources/tobago-config-5.0-replace.xml
index c059526..6a1f15a 100644
--- a/tobago-core/src/test/resources/tobago-config-5.0-replace.xml
+++ b/tobago-core/src/test/resources/tobago-config-5.0-replace.xml
@@ -39,6 +39,7 @@
<theme-definition>
<name>my-theme-3</name>
<fallback>my-theme-1</fallback>
+ <version>some-version-2</version>
<resources production="true">
<includes>
<script name="script-3-replacement.js" priority="3"/>
diff --git a/tobago-core/src/test/resources/tobago-config-5.0.xml b/tobago-core/src/test/resources/tobago-config-5.0.xml
index 240ffa9..3ad1320 100644
--- a/tobago-core/src/test/resources/tobago-config-5.0.xml
+++ b/tobago-core/src/test/resources/tobago-config-5.0.xml
@@ -56,6 +56,7 @@
<theme-definition>
<name>my-theme-1</name>
<display-name>My Theme 1</display-name>
+ <version>some-version-1</version>
<resources production="true">
<includes>
<script name="script-1.js" priority="1"/>
@@ -78,6 +79,7 @@
<theme-definition>
<name>my-theme-2</name>
<fallback>my-theme-1</fallback>
+ <version>some-version-1</version>
<resources production="false"/>
</theme-definition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/main.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/main.xhtml
index 548ab30..e83bfbc 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/main.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/main.xhtml
@@ -84,7 +84,7 @@
<tc:operation name="hide" for="info"/>
</tc:button>
</f:facet>
- <tc:out label="Theme:" value="#{themeController.localizedTheme}"/>
+ <tc:out label="Theme:" value="#{themeController.localizedTheme} (#{themeController.theme.version})"/>
<tc:out label="Locale:" value="#{localeController.localizedLocale}"/>
<tc:out label="Project Stage:" value="#{facesContext.application.projectStage}"/>
<tc:out label="CSP mode:" value="#{tobagoConfig.contentSecurityPolicy.mode}"/>
diff --git a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/tobago-config.xml b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/tobago-config.xml
index e61b48f..c71faca 100644
--- a/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/tobago-config.xml
+++ b/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/tobago-config.xml
@@ -33,6 +33,7 @@
<name>charlotteville</name>
<display-name>Charlotteville</display-name>
<fallback>standard</fallback>
+ <version>${project.version}</version>
<resources production="true">
<includes>
<style name="/tobago/charlotteville/${project.version}/css/tobago.min.css"/>
diff --git a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/tobago-config.xml b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/tobago-config.xml
index 74ca743..09200da 100644
--- a/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/tobago-config.xml
+++ b/tobago-theme/tobago-theme-roxborough/src/main/resources/META-INF/tobago-config.xml
@@ -33,6 +33,7 @@
<name>roxborough</name>
<display-name>Roxborough</display-name>
<fallback>standard</fallback>
+ <version>${project.version}</version>
<resources production="true">
<includes>
<style name="/tobago/roxborough/${project.version}/css/tobago.min.css"/>
diff --git a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/tobago-config.xml b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/tobago-config.xml
index 0857c2f..7982e2b 100644
--- a/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/tobago-config.xml
+++ b/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/tobago-config.xml
@@ -33,6 +33,7 @@
<name>scarborough</name>
<display-name>Scarborough</display-name>
<fallback>standard</fallback>
+ <version>${project.version}</version>
<resources production="true">
<includes>
<style name="/tobago/scarborough/${project.version}/css/tobago.min.css"/>
diff --git a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/tobago-config.xml b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/tobago-config.xml
index d7c5d9d..0de2481 100644
--- a/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/tobago-config.xml
+++ b/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/tobago-config.xml
@@ -33,6 +33,7 @@
<name>speyside</name>
<display-name>Speyside</display-name>
<fallback>standard</fallback>
+ <version>${project.version}</version>
<resources production="true">
<includes>
<style name="/tobago/speyside/${project.version}/css/tobago.min.css"/>
diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/tobago-config.xml b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/tobago-config.xml
index 9ab01ee..babb8cc 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/tobago-config.xml
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/tobago-config.xml
@@ -35,6 +35,7 @@
<theme-definition>
<name>standard</name>
<display-name>Standard Theme</display-name>
+ <version>${project.version}</version>
<resources production="true">
<includes>
<script name="/webjars/webcomponents__custom-elements/1.2.1/custom-elements.min.js"/>