keycloak-aplcache

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);