import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
// private final static Log log = LogFactory.getLog(BundleCmsTheme.class);
+ private CmsTheme parentTheme;
+
private String themeId;
private Set<String> webCssPaths = new TreeSet<>();
private Set<String> rapCssPaths = new TreeSet<>();
private String headerCss;
private List<String> fonts = new ArrayList<>();
- private String bodyHtml="<body></body>";
+ private String bodyHtml = "<body></body>";
private String basePath;
private String styleCssPath;
if (bodyUrl != null) {
loadBodyHtml(bodyUrl);
}
-}
+ }
public String getHtmlHeaders() {
StringBuilder sb = new StringBuilder();
else
return sb.toString();
}
-
-
@Override
public String getBodyHtml() {
void loadBodyHtml(URL url) {
try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), UTF_8))) {
- bodyHtml= IOUtils.toString(url,StandardCharsets.UTF_8);
+ bodyHtml = IOUtils.toString(url, StandardCharsets.UTF_8);
} catch (IOException e) {
throw new IllegalArgumentException("Cannot load URL " + url, e);
}
URL res = themeBundle.getEntry(resourceName);
if (res == null) {
res = themeBundle.getResource(resourceName);
- if (res == null)
- return null;
-// throw new IllegalArgumentException(
-// "Resource " + resourceName + " not found in bundle " + themeBundle.getSymbolicName());
+ if (res == null) {
+ if (parentTheme == null)
+ return null;
+ return parentTheme.getResourceAsStream(resourceName);
+ }
}
return res.openStream();
}
return themeId;
}
-// public void setThemeId(String themeId) {
-// this.themeId = themeId;
-// }
-//
-// public String getBasePath() {
-// return basePath;
-// }
-//
-// public void setBasePath(String basePath) {
-// this.basePath = basePath;
-// }
-//
-// public String getRapCssPath() {
-// return rapCssPath;
-// }
-//
-// public void setRapCssPath(String cssPath) {
-// this.rapCssPath = cssPath;
-// }
-
@Override
public Set<String> getWebCssPaths() {
+ if (parentTheme != null) {
+ Set<String> res = new HashSet<>(parentTheme.getWebCssPaths());
+ res.addAll(webCssPaths);
+ return res;
+ }
return webCssPaths;
}
@Override
public Set<String> getRapCssPaths() {
+ if (parentTheme != null) {
+ Set<String> res = new HashSet<>(parentTheme.getRapCssPaths());
+ res.addAll(rapCssPaths);
+ return res;
+ }
return rapCssPaths;
}
@Override
public Set<String> getSwtCssPaths() {
+ if (parentTheme != null) {
+ Set<String> res = new HashSet<>(parentTheme.getSwtCssPaths());
+ res.addAll(swtCssPaths);
+ return res;
+ }
return swtCssPaths;
}
@Override
public Set<String> getImagesPaths() {
+ if (parentTheme != null) {
+ Set<String> res = new HashSet<>(parentTheme.getImagesPaths());
+ res.addAll(imagesPaths);
+ return res;
+ }
return imagesPaths;
}
@Override
public InputStream loadPath(String path) throws IOException {
URL url = themeBundle.getResource(path);
- if (url == null)
- throw new IllegalArgumentException(
- "Path " + path + " not found in bundle " + themeBundle.getSymbolicName());
- return url.openStream();
+ if (url == null) {
+ if (parentTheme != null)
+ return parentTheme.loadPath(path);
+ else
+ throw new IllegalArgumentException(
+ "Path " + path + " not found in bundle " + themeBundle.getSymbolicName());
+ } else {
+ return url.openStream();
+ }
}
private static Bundle findThemeBundle(BundleContext bundleContext, String themeId) {
return "Bundle CMS Theme " + themeId;
}
+ public void setParentTheme(CmsTheme parentTheme) {
+ this.parentTheme = parentTheme;
+ }
+
}