diff --git a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java index 6bf11380bd..2ed9c2af01 100644 --- a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java +++ b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java @@ -35,6 +35,7 @@ package sonia.scm; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.util.IOUtil; import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -65,6 +66,9 @@ public class BasicContextProvider implements SCMContextProvider /** Java system property for the SCM-Manager base directory */ public static final String DIRECTORY_PROPERTY = "scm.home"; + /** Classpath resource for the SCM-Manager base directory */ + public static final String DIRECTORY_RESOURCE = "/scm.properties"; + /** Path to the maven properties file of the scm-core artifact */ public static final String MAVEN_PROPERTIES = "/META-INF/maven/sonia.scm/scm-core/pom.properties"; @@ -139,16 +143,21 @@ public class BasicContextProvider implements SCMContextProvider */ private File findBaseDirectory() { - String path = System.getProperty(DIRECTORY_PROPERTY); + String path = getPathFromResource(); if (Util.isEmpty(path)) { - path = System.getenv(DIRECTORY_ENVIRONMENT); + path = System.getProperty(DIRECTORY_PROPERTY); if (Util.isEmpty(path)) { - path = System.getProperty("user.home").concat(File.separator).concat( - DIRECTORY_DEFAULT); + path = System.getenv(DIRECTORY_ENVIRONMENT); + + if (Util.isEmpty(path)) + { + path = System.getProperty("user.home").concat(File.separator).concat( + DIRECTORY_DEFAULT); + } } } @@ -189,6 +198,46 @@ public class BasicContextProvider implements SCMContextProvider return properties.getProperty(MAVEN_PROPERTY_VERSION, DEFAULT_VERSION); } + //~--- get methods ---------------------------------------------------------- + + /** + * Load path from classpath resource. + * + * + * @return path from classpath resource or null + */ + private String getPathFromResource() + { + String path = null; + InputStream input = null; + + try + { + input = + BasicContextProvider.class.getResourceAsStream(DIRECTORY_RESOURCE); + + if (input != null) + { + Properties properties = new Properties(); + + properties.load(input); + path = properties.getProperty(DIRECTORY_PROPERTY); + } + } + catch (IOException ex) + { + throw new ConfigurationException( + "could not load properties form resource ".concat( + DIRECTORY_RESOURCE), ex); + } + finally + { + IOUtil.close(input); + } + + return path; + } + //~--- fields --------------------------------------------------------------- /** The base directory of the SCM-Manager */ diff --git a/scm-webapp/src/main/resources/scm.properties b/scm-webapp/src/main/resources/scm.properties new file mode 100644 index 0000000000..1e6d477cde --- /dev/null +++ b/scm-webapp/src/main/resources/scm.properties @@ -0,0 +1,31 @@ +# Copyright (c) 2010, Sebastian Sdorra +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# 3. Neither the name of SCM-Manager; nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# http://bitbucket.org/sdorra/scm-manager +# + +# path to the SCM-Manager base directory +# scm.home = /tmp/scm.home \ No newline at end of file