Improve CMS UI utilities.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / util / BundleCmsTheme.java
index c86ba3601950022cd5367e172236dc7adb4728df..9a3cf9d47d87b653fcb5de6d346284e27950dc2c 100644 (file)
@@ -33,6 +33,9 @@ public class BundleCmsTheme extends AbstractCmsTheme {
        public final static String CMS_THEME_PROPERTY = "argeo.cms.theme";
        public final static String CMS_THEME_BUNDLE_PROPERTY = "argeo.cms.theme.bundle";
 
+       private final static String HEADER_CSS = "header.css";
+       private final static String FONTS_TXT = "fonts.txt";
+
 //     private final static Log log = LogFactory.getLog(BundleCmsTheme.class);
 
        private String themeId;
@@ -40,6 +43,7 @@ public class BundleCmsTheme extends AbstractCmsTheme {
        private Set<String> rapCssPaths = new TreeSet<>();
        private Set<String> swtCssPaths = new TreeSet<>();
        private Set<String> imagesPaths = new TreeSet<>();
+       private Set<String> fontsPaths = new TreeSet<>();
 
        private String headerCss;
        private List<String> fonts = new ArrayList<>();
@@ -91,22 +95,28 @@ public class BundleCmsTheme extends AbstractCmsTheme {
                webCssPaths = addCss(themeBundle, "/css/");
                rapCssPaths = addCss(themeBundle, "/rap/");
                swtCssPaths = addCss(themeBundle, "/swt/");
-               addResources("*.png");
-               addResources("*.gif");
-               addResources("*.jpg");
-               addResources("*.jpeg");
-               addResources("*.svg");
-               addResources("*.ico");
+               addImages("*.png");
+               addImages("*.gif");
+               addImages("*.jpg");
+               addImages("*.jpeg");
+               addImages("*.svg");
+               addImages("*.ico");
+
+               addFonts("*.woff");
+               addFonts("*.woff2");
 
                // fonts
-               URL fontsUrl = themeBundle.getEntry(basePath + "fonts.txt");
+               URL fontsUrl = themeBundle.getEntry(basePath + FONTS_TXT);
                if (fontsUrl != null) {
                        loadFontsUrl(fontsUrl);
                }
 
                // common CSS header (plain CSS)
-               URL headerCssUrl = themeBundle.getEntry(basePath + "header.css");
+               URL headerCssUrl = themeBundle.getEntry(basePath + HEADER_CSS);
                if (headerCssUrl != null) {
+                       // added to plain Web CSS
+                       webCssPaths.add(basePath + HEADER_CSS);
+                       // and it will also be used by RAP:
                        try (BufferedReader buffer = new BufferedReader(new InputStreamReader(headerCssUrl.openStream(), UTF_8))) {
                                headerCss = buffer.lines().collect(Collectors.joining("\n"));
                        } catch (IOException e) {
@@ -178,7 +188,7 @@ public class BundleCmsTheme extends AbstractCmsTheme {
                }
        }
 
-       void addResources(String pattern) {
+       void addImages(String pattern) {
                Enumeration<URL> themeResources = themeBundle.findEntries(basePath, pattern, true);
                if (themeResources == null)
                        return;
@@ -197,6 +207,25 @@ public class BundleCmsTheme extends AbstractCmsTheme {
 
        }
 
+       void addFonts(String pattern) {
+               Enumeration<URL> themeResources = themeBundle.findEntries(basePath, pattern, true);
+               if (themeResources == null)
+                       return;
+               while (themeResources.hasMoreElements()) {
+                       String resource = themeResources.nextElement().getPath();
+                       // remove first '/' so that RWT registers it
+                       resource = resource.substring(1);
+                       if (!resource.endsWith("/")) {
+//                             if (resources.containsKey(resource))
+//                                     log.warn("Overriding " + resource + " from " + themeBundle.getSymbolicName());
+//                             resources.put(resource, themeBRL);
+                               fontsPaths.add(resource);
+                       }
+
+               }
+
+       }
+
        @Override
        public InputStream getResourceAsStream(String resourceName) throws IOException {
                URL res = themeBundle.getEntry(resourceName);
@@ -254,6 +283,11 @@ public class BundleCmsTheme extends AbstractCmsTheme {
                return imagesPaths;
        }
 
+       @Override
+       public Set<String> getFontsPaths() {
+               return fontsPaths;
+       }
+
        @Override
        public InputStream loadPath(String path) throws IOException {
                URL url = themeBundle.getResource(path);