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(themesPath.length());
050 }
051
052 if (_log.isDebugEnabled()) {
053 _log.debug(
054 name + " is associated with the theme loader " +
055 ctxName + " " + themeLoader);
056 }
057
058 File fileStorage = themeLoader.getFileStorage();
059
060 return new File(fileStorage.getPath() + name).toURI().toURL();
061
062 }
063 else {
064 _log.error(
065 name + " is not valid because " + ctxName +
066 " does not map to a theme loader");
067 }
068 }
069
070 return null;
071 }
072
073 private static Log _log = LogFactoryUtil.getLog(
074 ThemeLoaderTemplateLoader.class);
075
076 }