keycloak-memoizeit

Changes

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/css/patternfly.css 9168(+0 -9168)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/css/patternfly.min.css 4(+0 -4)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Light-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Light-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Light-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Light-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.svg 146(+0 -146)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.eot 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.svg 34(+0 -34)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.ttf 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.woff 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/img/bg-login.jpg 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/img/brand.png 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/img/brand.svg 84(+0 -84)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/img/brand-lg.png 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/img/logo.png 0(+0 -0)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/img/logo.svg 22(+0 -22)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/js/patternfly.js 68(+0 -68)

forms/common-themes/src/main/resources/theme/login/patternfly/resources/lib/patternfly/js/patternfly.min.js 1(+0 -1)

Details

diff --git a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/Theme.java b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/Theme.java
index c5c7e36..265496c 100644
--- a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/Theme.java
+++ b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/Theme.java
@@ -10,12 +10,14 @@ import java.util.Properties;
  */
 public interface Theme {
 
-    public enum Type { LOGIN, ACCOUNT };
+    public enum Type { LOGIN, ACCOUNT, COMMON };
 
     public String getName();
 
     public String getParentName();
 
+    public String getImportName();
+
     public Type getType();
 
     public URL getTemplate(String name) throws IOException;
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 74132b4..5327979 100755
--- a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeLoader.java
+++ b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/ThemeLoader.java
@@ -1,6 +1,5 @@
 package org.keycloak.freemarker;
 
-import org.jboss.logging.Logger;
 import org.keycloak.models.Config;
 import org.keycloak.util.ProviderLoader;
 
@@ -19,8 +18,6 @@ import java.util.Properties;
  */
 public class ThemeLoader {
 
-    private static final Logger logger = Logger.getLogger(ThemeLoader.class);
-
     public static Theme createTheme(String name, Theme.Type type) throws FreeMarkerException {
         if (name == null) {
             name = Config.getThemeDefault();
@@ -43,6 +40,11 @@ public class ThemeLoader {
             List<Theme> themes = new LinkedList<Theme>();
             themes.add(theme);
 
+            if (theme.getImportName() != null) {
+                String[] s = theme.getImportName().split("/");
+                themes.add(findTheme(providers, s[1], Theme.Type.valueOf(s[0].toUpperCase())));
+            }
+
             for (String parentName = theme.getParentName(); parentName != null; parentName = theme.getParentName()) {
                 theme = findTheme(providers, parentName, type);
                 themes.add(theme);
@@ -54,28 +56,17 @@ public class ThemeLoader {
         }
     }
 
-    private static Theme findTheme(Iterable<ThemeProvider> providers, String name, Theme.Type type) throws FreeMarkerException {
+    private static Theme findTheme(Iterable<ThemeProvider> providers, String name, Theme.Type type) {
         for (ThemeProvider p : providers) {
             if (p.hasTheme(name, type)) {
                 try {
                     return p.createTheme(name, type);
                 } catch (IOException e) {
-                    if (name.equals(Config.getThemeBase())) {
-                        throw new FreeMarkerException("Failed to create " + type.toString().toLowerCase() + " theme", e);
-                    } else {
-                        logger.error("Failed to create " + type.toString().toLowerCase() + " theme", e);
-                        return findTheme(providers, Config.getThemeBase(), type);
-                    }
+                    throw new RuntimeException("Failed to create " + type.toString().toLowerCase() + " theme", e);
                 }
             }
         }
-
-        if (name.equals(Config.getThemeBase())) {
-            throw new FreeMarkerException(type.toString().toLowerCase() + " theme '" + name + "' not found");
-        } else {
-            logger.error(type.toString().toLowerCase() + " theme '" + name + "' not found");
-            return findTheme(providers, Config.getThemeBase(), type);
-        }
+        throw new RuntimeException(type.toString().toLowerCase() + " theme '" + name + "' not found");
     }
 
     public static class ExtendingTheme implements Theme {
@@ -97,6 +88,11 @@ public class ThemeLoader {
         }
 
         @Override
+        public String getImportName() {
+            return themes.get(0).getImportName();
+        }
+
+        @Override
         public Type getType() {
             return themes.get(0).getType();
         }
diff --git a/forms/common-themes/src/main/java/org/keycloak/theme/ClassLoaderTheme.java b/forms/common-themes/src/main/java/org/keycloak/theme/ClassLoaderTheme.java
index 7c6e02c..5a41cf7 100644
--- a/forms/common-themes/src/main/java/org/keycloak/theme/ClassLoaderTheme.java
+++ b/forms/common-themes/src/main/java/org/keycloak/theme/ClassLoaderTheme.java
@@ -16,6 +16,8 @@ public class ClassLoaderTheme implements Theme {
 
     private final String parentName;
 
+    private final String importName;
+
     private final Type type;
 
     private final ClassLoader classLoader;
@@ -44,8 +46,10 @@ public class ClassLoaderTheme implements Theme {
         if (p != null) {
             properties.load(p.openStream());
             this.parentName = properties.getProperty("parent");
+            this.importName = properties.getProperty("import");
         } else {
             this.parentName = null;
+            this.importName = null;
         }
     }
 
@@ -60,6 +64,11 @@ public class ClassLoaderTheme implements Theme {
     }
 
     @Override
+    public String getImportName() {
+        return importName;
+    }
+
+    @Override
     public Type getType() {
         return 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 2a63e17..422b1ac 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
@@ -7,7 +7,9 @@ import org.keycloak.models.Config;
 
 import java.io.IOException;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -19,12 +21,14 @@ public class DefaultLoginThemeProvider implements ThemeProvider {
     public static final String PATTERNFLY = "patternfly";
     public static final String KEYCLOAK = "keycloak";
 
-    private static Set<String> defaultThemes = new HashSet<String>();
+    private static Set<String> ACCOUNT_THEMES = new HashSet<String>();
+    private static Set<String> LOGIN_THEMES = new HashSet<String>();
+    private static Set<String> COMMON_THEMES = new HashSet<String>();
 
     static {
-        defaultThemes.add(BASE);
-        defaultThemes.add(PATTERNFLY);
-        defaultThemes.add(KEYCLOAK);
+        Collections.addAll(ACCOUNT_THEMES, BASE, PATTERNFLY, KEYCLOAK);
+        Collections.addAll(LOGIN_THEMES, BASE, PATTERNFLY, KEYCLOAK);
+        Collections.addAll(COMMON_THEMES, PATTERNFLY);
     }
 
     @Override
@@ -43,10 +47,15 @@ public class DefaultLoginThemeProvider implements ThemeProvider {
 
     @Override
     public Set<String> nameSet(Theme.Type type) {
-        if (type == Theme.Type.LOGIN || type == Theme.Type.ACCOUNT) {
-            return defaultThemes;
-        } else {
-            return Collections.emptySet();
+        switch (type) {
+            case LOGIN:
+                return LOGIN_THEMES;
+            case ACCOUNT:
+                return ACCOUNT_THEMES;
+            case COMMON:
+                return COMMON_THEMES;
+            default:
+                return Collections.emptySet();
         }
     }
 
diff --git a/forms/common-themes/src/main/java/org/keycloak/theme/FolderTheme.java b/forms/common-themes/src/main/java/org/keycloak/theme/FolderTheme.java
index 3737aa1..2427b65 100644
--- a/forms/common-themes/src/main/java/org/keycloak/theme/FolderTheme.java
+++ b/forms/common-themes/src/main/java/org/keycloak/theme/FolderTheme.java
@@ -15,6 +15,7 @@ import java.util.Properties;
 public class FolderTheme implements Theme {
 
     private String parentName;
+    private String importName;
     private File themeDir;
     private Type type;
     private final Properties properties;
@@ -28,6 +29,7 @@ public class FolderTheme implements Theme {
         if (propertiesFile .isFile()) {
             properties.load(new FileInputStream(propertiesFile));
             parentName = properties.getProperty("parent");
+            parentName = properties.getProperty("import");
         }
     }
 
@@ -42,6 +44,11 @@ public class FolderTheme implements Theme {
     }
 
     @Override
+    public String getImportName() {
+        return importName;
+    }
+
+    @Override
     public Type getType() {
         return type;
     }
diff --git a/forms/common-themes/src/main/resources/theme/account/patternfly/theme.properties b/forms/common-themes/src/main/resources/theme/account/patternfly/theme.properties
index c142b5c..8033479 100644
--- a/forms/common-themes/src/main/resources/theme/account/patternfly/theme.properties
+++ b/forms/common-themes/src/main/resources/theme/account/patternfly/theme.properties
@@ -1,2 +1,4 @@
 parent=base
+import=common/patternfly
+
 styles=lib/patternfly/css/patternfly.css css/account.css
\ No newline at end of file
diff --git a/forms/common-themes/src/main/resources/theme/login/patternfly/theme.properties b/forms/common-themes/src/main/resources/theme/login/patternfly/theme.properties
index 720d4ea..6ac168b 100644
--- a/forms/common-themes/src/main/resources/theme/login/patternfly/theme.properties
+++ b/forms/common-themes/src/main/resources/theme/login/patternfly/theme.properties
@@ -1,4 +1,6 @@
 parent=base
+import=common/patternfly
+
 styles=lib/patternfly/css/patternfly.css lib/zocial/zocial.css css/login.css
 meta=viewport==width=device-width,initial-scale=1