From 7e023cfaa95d7f1746875050be3603b9ffd23fdb Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sat, 13 May 2023 17:55:18 +0200 Subject: [PATCH] Several small bug fixes --- .../org/librecms/pages/PagesController.java | 8 +- .../librecms/pages/models/PageUrlModel.java | 3 + .../libreccm/theming/StaticThemeProvider.java | 115 +++++++---------- .../org/libreccm/theming/utils/L10NUtils.java | 118 ++++++++++-------- 4 files changed, 126 insertions(+), 118 deletions(-) diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesController.java b/ccm-cms/src/main/java/org/librecms/pages/PagesController.java index 26decc332..009c1e417 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/PagesController.java +++ b/ccm-cms/src/main/java/org/librecms/pages/PagesController.java @@ -713,7 +713,7 @@ public class PagesController { private String buildQueryParamsStr( final String previewParam, final String themeParam ) { - return List + final String queryString = List .of( Optional .of(themeParam) @@ -729,6 +729,12 @@ public class PagesController { .stream() .filter(String::isBlank) .collect(Collectors.joining("&", "?", "")); + + if (queryString.length() <= 1) { + return ""; + } + + return queryString; } private ThemeInfo getTheme( diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java index 6afc685e2..b6502d102 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java +++ b/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java @@ -95,6 +95,9 @@ public class PageUrlModel { } public String getQueryString() { + if (queryParameters == null || queryParameters.isEmpty()) { + return ""; + } return queryParameters .entrySet() .stream() diff --git a/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java b/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java index 46f68f4b6..cf60eac5b 100644 --- a/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java +++ b/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java @@ -91,7 +91,7 @@ public class StaticThemeProvider implements ThemeProvider { public String getName() { return "StaticThemeProvider"; } - + @Override public String getClassName() { return StaticThemeProvider.class.getName(); @@ -99,50 +99,41 @@ public class StaticThemeProvider implements ThemeProvider { @Override public List getThemes() { - LOGGER.debug("Retrieving static themes..."); final Reflections reflections = new Reflections( new ConfigurationBuilder() .setUrls(ClasspathHelper.forPackage("")) - .setScanners(new ResourcesScanner() - // .filterResultsBy(new FilterBuilder() - // .include(THEMES_PACKAGE) - // .include(THEMES_PACKAGE + "/([\\w\\d\\s\\.]*)/theme.json") - // .include(THEMES_PACKAGE + "/([\\w\\d\\s\\.]*)/theme.xml") - // .exclude(THEMES_PACKAGE + "(.*)/(.*)") - // ) - )); + .setScanners(new ResourcesScanner()) + ); - final Set jsonThemes = reflections - .getResources(Pattern.compile(THEME_MANIFEST_JSON)); - final Set xmlThemes = reflections - .getResources(Pattern.compile(THEME_MANIFEST_XML)); + final Set jsonThemes = reflections.getResources( + Pattern.compile(THEME_MANIFEST_JSON) + ); + final Set xmlThemes = reflections.getResources( + Pattern.compile(THEME_MANIFEST_XML) + ); final List themes = new ArrayList<>(); - themes.addAll(jsonThemes - .stream() - .filter(themePackage -> { - return themePackage - .matches(THEMES_PACKAGE + "/([\\w\\d\\s\\.\\-_])*/theme.json"); - }) - // .map(themePackage -> { - // return themePackage - // .substring((THEMES_PACKAGE + "/").length(), - // ("/" + THEME_MANIFEST_JSON).length() - 1); - // }) - .collect(Collectors.toList())); - themes.addAll(xmlThemes - .stream() - .filter(themePackage -> { - return themePackage - .matches(THEMES_PACKAGE + "/([\\w\\d\\s\\.])*/theme.xml"); - }) - // .map(themePackage -> { - // return themePackage - // .substring((THEMES_PACKAGE + "/").length(), - // ("/" + THEME_MANIFEST_XML).length() - 1); - // }) - .collect(Collectors.toList())); + themes.addAll( + jsonThemes + .stream() + .filter( + themePackage -> themePackage.matches( + THEMES_PACKAGE + "/([\\w\\d\\s\\.\\-_])*/theme.json" + ) + ) + .collect(Collectors.toList())); + themes.addAll( + xmlThemes + .stream() + .filter( + themePackage -> themePackage + .matches( + THEMES_PACKAGE + "/([\\w\\d\\s\\.])*/theme.xml" + ) + ) + .collect(Collectors.toList()) + ); Collections.sort(themes); LOGGER.debug("Found static themes:"); @@ -151,9 +142,10 @@ public class StaticThemeProvider implements ThemeProvider { for (final String theme : themes) { final InputStream inputStream = StaticThemeProvider.class .getResourceAsStream(String.format("/%s", theme)); - final ThemeManifest manifest = manifestUtil - .loadManifest(inputStream, - theme); + final ThemeManifest manifest = manifestUtil.loadManifest( + inputStream, + theme + ); LOGGER.debug("Got manifest: {}", Objects.toString(manifest)); } @@ -165,19 +157,7 @@ public class StaticThemeProvider implements ThemeProvider { } -// private boolean isThemeDir(final String dirPath) { -// -// Objects.requireNonNull(dirPath); -// -// final URL manifestJsonUrl = StaticThemeProvider.class.getResource( -// String.format(THEME_MANIFEST_JSON_PATH, dirPath)); -// final URL manifestXmlUrl = StaticThemeProvider.class.getResource( -// String.format(THEME_MANIFEST_XML_PATH, dirPath)); -// -// return (manifestJsonUrl != null) || (manifestXmlUrl != null); -// } private ThemeManifest loadThemeManifest(final String manifestPath) { - Objects.requireNonNull(manifestPath); final String pathToManifest; @@ -190,9 +170,7 @@ public class StaticThemeProvider implements ThemeProvider { final ThemeManifest manifest; try (final InputStream inputStream = StaticThemeProvider.class .getResourceAsStream(pathToManifest)) { - manifest = manifestUtil.loadManifest(inputStream, manifestPath); - } catch (IOException ex) { throw new UnexpectedErrorException(ex); } @@ -218,22 +196,23 @@ public class StaticThemeProvider implements ThemeProvider { } @Override - public Optional getThemeInfo(final String theme, - final ThemeVersion version) { - + public Optional getThemeInfo( + final String theme, + final ThemeVersion version + ) { Objects.requireNonNull(theme); - final String manifestJsonPath = String.format("/" + THEMES_PACKAGE - + "/%s/" - + THEME_MANIFEST_JSON, - theme); - final String manifestXmlPath = String.format("/" + THEMES_PACKAGE - + "/%s/" - + THEME_MANIFEST_XML, - theme); + final String manifestJsonPath = String.format( + "/" + THEMES_PACKAGE + "/%s/" + THEME_MANIFEST_JSON, + theme + ); + final String manifestXmlPath = String.format( + "/" + THEMES_PACKAGE + "/%s/" + THEME_MANIFEST_XML, theme + ); - final URL manifestJsonUrl = StaticThemeProvider.class - .getResource(manifestJsonPath); + final URL manifestJsonUrl = StaticThemeProvider.class.getResource( + manifestJsonPath + ); final URL manifestXmlUrl = StaticThemeProvider.class .getResource(manifestXmlPath); diff --git a/ccm-core/src/main/java/org/libreccm/theming/utils/L10NUtils.java b/ccm-core/src/main/java/org/libreccm/theming/utils/L10NUtils.java index 050d0c9b9..d8a73f58e 100644 --- a/ccm-core/src/main/java/org/libreccm/theming/utils/L10NUtils.java +++ b/ccm-core/src/main/java/org/libreccm/theming/utils/L10NUtils.java @@ -39,7 +39,7 @@ import javax.inject.Inject; /** * Utility for getting localized texts for a theme. - * + * * @author Jens Pelzetter */ @RequestScoped @@ -50,40 +50,51 @@ public class L10NUtils implements Serializable { @Inject private GlobalizationHelper globalizationHelper; - public ResourceBundle getBundle(final ThemeInfo fromTheme, - final ThemeProvider themeProvider, - final String bundleName) { - + public ResourceBundle getBundle( + final ThemeInfo fromTheme, + final ThemeProvider themeProvider, + final String bundleName + ) { return ResourceBundle .getBundle( bundleName, globalizationHelper.getNegotiatedLocale(), - new LocalizedResourceBundleControl(fromTheme, - themeProvider)); + new LocalizedResourceBundleControl( + fromTheme, + themeProvider + ) + ); } - public String getText(final ThemeInfo fromTheme, - final ThemeProvider themeProvider, - final String bundleName, - final String key) { - - final ResourceBundle bundle = getBundle(fromTheme, - themeProvider, - bundleName); - + public String getText( + final ThemeInfo fromTheme, + final ThemeProvider themeProvider, + final String bundleName, + final String key + ) { + + final ResourceBundle bundle = getBundle( + fromTheme, + themeProvider, + bundleName + ); + return bundle.getString(key); } - - public String getText(final ThemeInfo fromTheme, - final ThemeProvider themeProvider, - final String bundleName, - final String key, - final String arguments) { - - final ResourceBundle bundle = getBundle(fromTheme, - themeProvider, - bundleName); - + + public String getText( + final ThemeInfo fromTheme, + final ThemeProvider themeProvider, + final String bundleName, + final String key, + final String arguments + ) { + final ResourceBundle bundle = getBundle( + fromTheme, + themeProvider, + bundleName + ); + return MessageFormat.format(bundle.getString(key), arguments); } @@ -91,6 +102,7 @@ public class L10NUtils implements Serializable { extends ResourceBundle.Control { private final ThemeInfo theme; + private final ThemeProvider themeProvider; public LocalizedResourceBundleControl( @@ -109,41 +121,49 @@ public class L10NUtils implements Serializable { } @Override - public ResourceBundle newBundle(final String baseName, - final Locale locale, - final String format, - final ClassLoader classLoader, - final boolean reload) + public ResourceBundle newBundle( + final String baseName, + final Locale locale, + final String format, + final ClassLoader classLoader, + final boolean reload + ) throws IllegalAccessException, InstantiationException, IOException { - if ("java.properties".equals(format)) { - final String bundleName = toBundleName(baseName, locale); final Optional inputStream = themeProvider - .getThemeFileAsStream(theme.getName(), - theme.getVersion(), - String.format("%s.properties", - bundleName)); + .getThemeFileAsStream( + theme.getName(), + theme.getVersion(), + String.format( + "%s.properties", + bundleName + ) + ); if (inputStream.isPresent()) { return new PropertyResourceBundle(inputStream.get()); } else { - return super.newBundle(baseName, - locale, - format, - classLoader, - reload); + return super.newBundle( + baseName, + locale, + format, + classLoader, + reload + ); } - } else { - return super.newBundle(baseName, - locale, - format, - classLoader, - reload); + return super.newBundle( + baseName, + locale, + format, + classLoader, + reload + ); } } } + }