diff --git a/guacamole-ext/src/main/java/net/sourceforge/guacamole/properties/GuacamoleHome.java b/guacamole-ext/src/main/java/net/sourceforge/guacamole/properties/GuacamoleHome.java new file mode 100644 index 000000000..e66f43eb4 --- /dev/null +++ b/guacamole-ext/src/main/java/net/sourceforge/guacamole/properties/GuacamoleHome.java @@ -0,0 +1,84 @@ + +package net.sourceforge.guacamole.properties; + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is guacamole-ext. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +import java.io.File; + +/** + * Abstract representation of the Guacamole configuration directory. + * + * @author Michael Jumper + */ +public class GuacamoleHome { + + private GuacamoleHome() {} + + /** + * Returns the Guacamole home directory by checking, in order: + * the guacamole.home system property, the GUACAMOLE_HOME environment + * variable, and finally the .guacamole directory in the home directory of + * the user running the servlet container. + * + * @return The File representing the Guacamole home directory, which may + * or may not exist, and may turn out to not be a directory. + */ + public static File getDirectory() { + + // Attempt to find Guacamole home + File guacHome; + + // Use system property by default + String desiredDir = System.getProperty("guacamole.home"); + + // Failing that, try the GUACAMOLE_HOME environment variable + if (desiredDir == null) desiredDir = System.getenv("GUACAMOLE_HOME"); + + // If successful, use explicitly specified directory + if (desiredDir != null) + guacHome = new File(desiredDir); + + // If not explicitly specified, use ~/.guacamole + else + guacHome = new File(System.getProperty("user.home"), ".guacamole"); + + // Return discovered directory + return guacHome; + + } + +} diff --git a/guacamole-ext/src/main/java/net/sourceforge/guacamole/properties/GuacamoleProperties.java b/guacamole-ext/src/main/java/net/sourceforge/guacamole/properties/GuacamoleProperties.java index fb478e202..002281a71 100644 --- a/guacamole-ext/src/main/java/net/sourceforge/guacamole/properties/GuacamoleProperties.java +++ b/guacamole-ext/src/main/java/net/sourceforge/guacamole/properties/GuacamoleProperties.java @@ -91,17 +91,8 @@ public class GuacamoleProperties { try { // Attempt to find Guacamole home - File guacHome; + File guacHome = GuacamoleHome.getDirectory(); - // Get explicitly specified directory, if any - String desiredDir = System.getProperty("guacamole.home"); - if (desiredDir != null) - guacHome = new File(desiredDir); - - // If not explicitly-define directory, use ~/.guacamole - else - guacHome = new File(System.getProperty("user.home"), ".guacamole"); - InputStream stream; // If not a directory, load from classpath