/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ro.nextreports.server.web.themes;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.nextreports.server.web.NextServerApplication;
public class ThemesManager {
private static final Logger LOG = LoggerFactory.getLogger(ThemesManager.class);
public static final String DEFAULT_THEME = "default";
public static final String GREEN_THEME = "green";
public static final String RED_THEME = "red";
public static final String BLUE_THEME = "blue";
public static final String GREEN_THEME_FILE_NAME = "theme-green-apple";
public static final String RED_THEME_FILE_NAME = "theme-red-rose";
public static final String BLUE_THEME_FILE_NAME = "theme-blue-sea";
public static List<String> THEMES = new ArrayList<String>();
private String theme = DEFAULT_THEME;
public static ThemesManager INSTANCE;
private ThemesManager() {
// for new themes you must add in all other i18n files the property:
// Settings.personalize.theme.<theme_folder> to see it in seetings
// test first for path inside installer and then if not found for path inside Java IDE
long start = System.currentTimeMillis();
File themesPath = new File("./webapps/nextreports-server/themes");
if (!themesPath.exists()) {
themesPath = new File("./webapp/themes");
}
// test for themes path when we use the war inside another webserver
if (!themesPath.exists()) {
themesPath = new File(NextServerApplication.get().getServletContext().getRealPath("/") + "/themes");
}
LOG.info("Check directory '" + themesPath.getAbsolutePath() + " for themes ...");
String[] directories = themesPath.list(new FilenameFilter() {
@Override
public boolean accept(File current, String name) {
return new File(current, name).isDirectory();
}
});
for (String dir : directories) {
THEMES.add(dir);
}
long end = System.currentTimeMillis();
LOG.info("Current theme is " + getThemeRelativePathCss());
LOG.info("Found "+ THEMES.size() + " theme files in " + (end-start) + " ms.");
}
public static synchronized ThemesManager getInstance() {
if (INSTANCE == null) {
INSTANCE = new ThemesManager();
}
return INSTANCE;
}
public void setTheme(String theme) {
this.theme = theme;
}
public String getThemeRelativePathCss() {
return "../themes/" + theme + "/style.css";
}
//@todo
public String getOutsideThemeRelativePathCss() {
return "../../themes/" + theme + "/style.css";
}
public String get3rdThemeRelativePathCss() {
return "../../../themes/" + theme + "/style.css";
}
public static String getTickImage(String theme, NextServerApplication application ) {
if (ThemesManager.RED_THEME.equals(theme)) {
return "tick_red.png";
} else if (ThemesManager.BLUE_THEME.equals(theme)) {
return "tick_blue.png";
} else if (ThemesManager.GREEN_THEME.equals(theme)) {
return "tick_green.png";
}
String file = "tick_" + theme + ".png";
ServletContext context = application.getServletContext();
File imgFile = new File(context.getRealPath("/images/" + file));
if (imgFile.exists()) {
return file;
} else {
return "tick_green.png";
}
}
}