📄 env.java
字号:
/*
* Copyright (c) 2001 Sun Microsystems, Inc. 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. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Sun Microsystems, Inc. for Project JXTA."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact Project JXTA at http://www.jxta.org.
*
* 5. Products derived from this software may not be called "JXTA",
* nor may "JXTA" appear in their name, without prior written
* permission of Sun.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR
* ITS 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.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of Project JXTA. For more
* information on Project JXTA, please see
* <http://www.jxta.org/>.
*
* This license is based on the BSD license adopted by the Apache Foundation.
*
* $Id: Env.java,v 1.42 2007/04/11 19:02:36 nano Exp $
*/
package net.jxta.myjxta.util;
import net.jxta.ext.config.Resource;
import net.jxta.ext.config.ResourceManager;
import net.jxta.ext.config.ResourceNotFoundException;
import net.jxta.logging.Logging;
import net.sf.component.config.ConfigHelper;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* A class that defined various environment variables
*
* @author james todd [gonzo at jxta dot org]
* @author mike mcangus [mcangus at jxta dot org]
* @version $Id: Env.java,v 1.42 2007/04/11 19:02:36 nano Exp $
*/
public class Env {
/**
* The directory relative to which all path information is handled
*/
public static final String MYJXTA = "JXTA_HOME";
public static final String DEFAULT_HOME = "user.home";
public static final String HTTP_PROXY_HOST = "http.proxyHost";
public static final String HTTP_PROXY_PORT = "http.proxyPort";
/**
* The directory in which preference and configuration info is saved
*/
public static final String HOME = ".myjxta";
public static final String PREFS = "prefs.xml";
public static final String DEFAULT_PREFS = "/net/jxta/myjxta/resources/" + PREFS;
/**
* The directory structure under which runtime config and property
* files reside
*/
public static final String RESOURCES = "/resources/";
/**
* The environment string that indicates the user name
*/
public static final String PRINCIPAL = "net.jxta.tls.principal";
/**
* The environment string that indicated the selected password
*/
public static final String PASSWORD = "net.jxta.tls.password";
public static final String CONFIG_URL = "net.jxta.myjxta.config.url";
/**
* The file the contains configuration information written by
* the platform code
*/
public static final String PLATFORM = "PlatformConfig";
public static final String PSE = "pse";
public static final String RECONFIGURE = "reconf";
public static final String DEFAULT_CONFIG =
"file:conf/PublicAdminRules.xml";
public static final String CONFIGURATION = "profile.xml";
public static final String DEFAULT_CONFIGURATION =
"/net/jxta/myjxta/resources/" + CONFIGURATION;
public static final String LOG4J = "log4j.xml";
public static final String DEFAULT_LOG4J =
"/net/jxta/myjxta/resources/" + LOG4J;
public static final String CMS = "data";
public static final String SHARE = "share";
public static final String TMP = "tmp";
public static final String TCP_PORT = System.getProperty("jxta.tcp.port");
public static final String CONSTANTS =
"/net/jxta/myjxta/resources/myjxta.xml";
public static final String PLATFORM_CONFIG = "config.properties";
public static final String PLATFORM_CONFIG_COMMENT =
"generated from myjxta.xml";
public static final String JXTA_CACHE = "cm";
public static final String ADMINISTRATION_PORT = "myjxta.sid";
public static final int DEFAULT_ADMINISTRATION_PORT = 10701;
public static final int MAX_ADMINISTRATION_PORT_TRY = 1000;
public static final int MAX_ADMINISTRATION_TIME = 7 * 1000;
/**
* The number of minutes before we res-send a ping signal on the ManyToMany Chat
*/
public static final int PING_INTERVAL = 5;
/**
* The interval between tree updates in minutes
*/
public static final int TREE_UPDATE_PERIOD = 3;
/**
* The ping message to send
*/
public static final String PING_MESSAGE = "**** ping ****";
public static final String PING_COMMAND = "ping";
private static final String COLON = ":";
private static final String SLASH = "/";
// private static final String PIPE = "|";
private static final String URI_DELIMITER = COLON + SLASH;
private static final String URL_DELIMITER = URI_DELIMITER + SLASH;
private static final Logger LOG = Logger.getLogger(Env.class.getName());
/**
* Home directory for configuration and log files.
*/
private static URI myjxta = null;
private static String log4jConfigFilePath = null;
private static boolean log4jConfigFileXml = false;
private static boolean isInitialized = false;
/**
* Initialzes the Env object with a default
* preference directory of
* {@link #HOME HOME} and a preference path
*/
public static void initialize() {
initialize(HOME);
}
/**
* Initializes the Env class attributes, ensures that required files exists and initializes Log4J logging.
*
* @param base the base directory for the configuration information, relative to the user's home directory.
*/
public static synchronized void initialize(String base) {
// retrieve the desired working directory
if (!isInitialized) {
String home = initHome(base);
if (!home.endsWith(File.separator)) {
home += File.separator;
}
initMyJxtaConfig(home);
isInitialized = true;
}
}
/**
* Initializes base directory URI, {@link #myjxta}, and returns a String
* representing the URI.
*
* @param base the base directory for the configuration information, relative to the user's home directory.
*/
private static String initHome(String base) {
// retrieve the desired working directory
base = base != null ? base.trim() : HOME;
if (base.length() == 0) {
base = HOME;
}
String mh = System.getProperty(MYJXTA);
mh = mh != null ? mh.trim() : null;
if (mh == null ||
mh.length() == 0) {
// If it is not found use the user home directory
// and create the missing configuration directory
//String uh = System.getProperty(DEFAULT_HOME);
String uh = ConfigHelper.getDataHome()+"/data/p2pim/";
mh = base.startsWith(uh) ? base : uh + File.separator + base;
System.setProperty(MYJXTA, mh);
}
File f = new File(mh);
try {
mh = f.getCanonicalPath();
} catch (IOException ignored) {
// Can't get the Canonical path, so we'll settle for the Absolute path.
mh = f.getAbsolutePath();
}
if (!f.exists()) {
f.mkdirs();
}
// xxx: nuke in time
// try {
// myjxta = Conversion.toURI(FILE_SCHEME + URI_DELIMITER + mh);
// } catch (ConversionException ce) {
// if (LOG.isEnabledFor(Level.SEVERE)) {
// LOG.error("Caught unexpected Exception", ce);
// }
// }
myjxta = f.toURI();
return getHomeDirPath();
}
/**
* Ensures that the application config files exist in the base directory.
*
* @param home The base directory for the configuration information, relative to the user's home directory.
*/
private static void initMyJxtaConfig(String home) {
// retrieve the desired working directory
File f = new File(home + CONFIGURATION);
// xxx: drop profile.xml for a period of time; see issue #1514
//delete(f);
if (!f.exists()) {
try {
createFile(f, DEFAULT_CONFIGURATION);
} catch (IOException e) {
LOG.log(Level.SEVERE,
"Unable to create file " + f.getAbsolutePath(), e);
}
}
String rc = new File(CONSTANTS).getName();
f = new File(home + rc);
// xxx: legacy support hack
Resource r = new Resource();
try {
r.load(f.toURL());
} catch (MalformedURLException mue) {
if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) {
LOG.log(Level.SEVERE, "Caught unexpected Exception", mue);
}
} catch (ResourceNotFoundException rnfe) {
// Ignored. We deal with missing myjxta.xml below.
}
if (!f.exists() ||
r.get(Constants.NETWORK) == null) {
try {
createFile(f, CONSTANTS);
} catch (IOException e) {
LOG.log(Level.SEVERE,
"Unable to create file " + f.getAbsolutePath(), e);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -