001
014
015 package com.liferay.portal.freemarker;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.theme.ThemeLoader;
020 import com.liferay.portal.theme.ThemeLoaderFactory;
021
022 import java.io.File;
023 import java.io.IOException;
024
025 import java.net.URL;
026
027
030 public class ThemeLoaderTemplateLoader extends URLTemplateLoader {
031
032 @Override
033 public URL getURL(String name) throws IOException {
034 int pos = name.indexOf(THEME_LOADER_SEPARATOR);
035
036 if (pos != -1) {
037 String ctxName = name.substring(0, pos);
038
039 ThemeLoader themeLoader = ThemeLoaderFactory.getThemeLoader(
040 ctxName);
041
042 if (themeLoader != null) {
043 String templateName = name.substring(
044 pos + THEME_LOADER_SEPARATOR.length());
045
046 String themesPath = themeLoader.getThemesPath();
047
048 if (templateName.startsWith(themesPath)) {
049 name = templateName.substring(
050 themesPath.length(), templateName.length());
051 }
052
053 if (_log.isDebugEnabled()) {
054 _log.debug(
055 name + " is associated with the theme loader " +
056 ctxName + " " + themeLoader);
057 }
058
059 File fileStorage = themeLoader.getFileStorage();
060
061 return new File(fileStorage.getPath() + name).toURI().toURL();
062
063 }
064 else {
065 _log.error(
066 name + " is not valid because " + ctxName +
067 " does not map to a theme loader");
068 }
069 }
070
071 return null;
072 }
073
074 private static Log _log = LogFactoryUtil.getLog(
075 ThemeLoaderTemplateLoader.class);
076
077 }