/** * * Copyright (C) norad.fr * * Licensed 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 fr.norad.visuwall.core.application.common; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.Enumeration; import java.util.jar.Manifest; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.JoranConfigurator; import ch.qos.logback.core.joran.spi.JoranException; import ch.qos.logback.core.util.StatusPrinter; import com.google.common.io.CharStreams; public class ApplicationHelper { private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(ApplicationHelper.class); public static final String UNKNOW_VERSION = "Unknow Version"; public static final String HOME_KEY = "VISUWALL_HOME"; public static final String MANIFEST_VERSION_KEY = "VisuwallVersion"; public static final String LOG_VISUWALL_AWIRED = "log.visuwall.awired"; public static final String LOG_VISUWALL_ROOT = "log.visuwall.root"; private static String version; public static String getVersion() { return getVersion(null); } public static String getVersion(InputStream manifestIn) { if (version == null) { version = findVersion(manifestIn); } return version; } private static String findVersion(InputStream manifestIn) { // runnnable war try { Enumeration<URL> manifests = ApplicationHelper.class.getClassLoader() .getResources("META-INF/MANIFEST.MF"); while (manifests.hasMoreElements()) { URL res = manifests.nextElement(); Manifest manifest = new Manifest(res.openStream()); String versionManifest = manifest.getMainAttributes().getValue(MANIFEST_VERSION_KEY); if (versionManifest != null) { return versionManifest; } } } catch (IOException e) { } // tomcat like try { Manifest manifest = new Manifest(manifestIn); String versionManifest = manifest.getMainAttributes().getValue(MANIFEST_VERSION_KEY); if (versionManifest != null) { return versionManifest; } } catch (IOException e) { } return UNKNOW_VERSION; } public static String findHomeDir() { // TODO redirect to tmp or $TMP or check at start in cli if home is not // writable // if (home == null) { // home = "/tmp"; // } // check JNDI for the home directory first try { InitialContext iniCtxt = new InitialContext(); Context env = (Context) iniCtxt.lookup("java:comp/env"); String value = (String) env.lookup(HOME_KEY); if (value != null && value.trim().length() > 0) { return value.trim(); } value = (String) iniCtxt.lookup(HOME_KEY); if (value != null && value.trim().length() > 0) { return value.trim(); } } catch (NamingException e) { // ignore } // finally check the system property String sysProp = System.getProperty(HOME_KEY); if (sysProp != null) { return sysProp.trim(); } // look at the env var next try { String env = System.getenv(HOME_KEY); if (env != null) { return env.trim(); } } catch (Throwable _) { // when this code runs on JDK1.4, this method fails // fall through to the next method } // if for some reason we can't put it within the webapp, use home // directory. return System.getProperty("user.home") + "/.visuwall"; } public static void changeLogLvl() { try { InputStream logConfStream = ApplicationHelper.class.getResourceAsStream("/visuwall-logback.xml"); String logConfString = CharStreams.toString(new InputStreamReader(logConfStream)); LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); try { JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(lc); lc.reset(); configurator.doConfigure(new ByteArrayInputStream(logConfString.getBytes())); } catch (JoranException je) { je.printStackTrace(); } StatusPrinter.printInCaseOfErrorsOrWarnings(lc); } catch (IOException e) { LOG.error("Can not change application log level", e); } // don't change root lvl as is may put hibernate or jetty in debug // Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); // root.setLevel(loglvl); } }