Details
diff --git a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeLoader.java b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeLoader.java
index ce9f34a..63c52f1 100644
--- a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeLoader.java
+++ b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeLoader.java
@@ -6,6 +6,8 @@ import org.keycloak.util.ProviderLoader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
@@ -25,7 +27,17 @@ public class ThemeLoader {
name = DEFAULT;
}
- Iterable<ThemeProvider> providers = ProviderLoader.load(ThemeProvider.class);
+ List<ThemeProvider> providers = new LinkedList();
+ for (ThemeProvider p : ProviderLoader.load(ThemeProvider.class)) {
+ providers.add(p);
+ }
+
+ Collections.sort(providers, new Comparator<ThemeProvider>() {
+ @Override
+ public int compare(ThemeProvider o1, ThemeProvider o2) {
+ return o2.getProviderPriority() - o1.getProviderPriority();
+ }
+ });
Theme theme = findTheme(providers, name, type);
if (theme.getParentName() != null) {
diff --git a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeProvider.java b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeProvider.java
index 31de058..6ca677c 100644
--- a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeProvider.java
+++ b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeProvider.java
@@ -8,6 +8,8 @@ import java.util.Set;
*/
public interface ThemeProvider {
+ public int getProviderPriority();
+
public Theme createTheme(String name, Theme.Type type) throws IOException;
public Set<String> nameSet(Theme.Type type);
diff --git a/forms/common-themes/src/main/java/org/keycloak/theme/DefaultLoginThemeProvider.java b/forms/common-themes/src/main/java/org/keycloak/theme/DefaultLoginThemeProvider.java
index fdfb185..11d38d1 100644
--- a/forms/common-themes/src/main/java/org/keycloak/theme/DefaultLoginThemeProvider.java
+++ b/forms/common-themes/src/main/java/org/keycloak/theme/DefaultLoginThemeProvider.java
@@ -35,6 +35,11 @@ public class DefaultLoginThemeProvider implements ThemeProvider {
}
@Override
+ public int getProviderPriority() {
+ return 0;
+ }
+
+ @Override
public Theme createTheme(String name, Theme.Type type) throws IOException {
if (hasTheme(name, type)) {
return new ClassLoaderTheme(name, type);
diff --git a/forms/common-themes/src/main/java/org/keycloak/theme/FolderThemeProvider.java b/forms/common-themes/src/main/java/org/keycloak/theme/FolderThemeProvider.java
index 0d328b2..9a2ef16 100644
--- a/forms/common-themes/src/main/java/org/keycloak/theme/FolderThemeProvider.java
+++ b/forms/common-themes/src/main/java/org/keycloak/theme/FolderThemeProvider.java
@@ -25,6 +25,11 @@ public class FolderThemeProvider implements ThemeProvider {
}
@Override
+ public int getProviderPriority() {
+ return 100;
+ }
+
+ @Override
public Theme createTheme(String name, Theme.Type type) throws IOException {
if (hasTheme(name, type)) {
return new FolderTheme(new File(getTypeDir(type), name), type);