blob: 95aa84c7d2a9ba7aab520c3c6ba4d76f9d0b3600 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Cognos Incorporated, IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package org.eclipse.osgi.framework.internal.core;
import java.util.Properties;
import java.util.PropertyPermission;
/*
* This class should be used in ALL places in the framework implementation to get "system" properties.
* The static methods on this class should be used instead of the System#getProperty, System#setProperty etc methods.
*/
public class FrameworkProperties {
private static Properties properties;
// A flag of some sort will have to be supported.
// Many existing plugins get framework propeties directly from System instead of BundleContext.
// Note that the OSGi TCK is one example where this property MUST be set to false because many TCK bundles set and read system properties.
private static final String USING_SYSTEM_PROPERTIES_KEY = "osgi.framework.useSystemProperties"; //$NON-NLS-1$
static {
Properties systemProperties = System.getProperties();
String usingSystemProperties = systemProperties.getProperty(USING_SYSTEM_PROPERTIES_KEY);
if (usingSystemProperties == null || usingSystemProperties.equalsIgnoreCase(Boolean.TRUE.toString())) {
properties = systemProperties;
} else {
// use systemProperties for a snapshot
// also see requirements in Bundlecontext.getProperty(...))
properties = new Properties();
// snapshot of System properties for uses of getProperties who expect to see framework properties set as System properties
// we need to do this for all system properties because the properties object is used to back
// BundleContext#getProperty method which expects all system properties to be available
properties.putAll(systemProperties);
}
}
public static Properties getProperties() {
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkPropertiesAccess();
return properties;
}
public static String getProperty(String key) {
return getProperty(key, null);
}
public static String getProperty(String key, String defaultValue) {
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkPropertyAccess(key);
return properties.getProperty(key, defaultValue);
}
public static String setProperty(String key, String value) {
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkPermission(new PropertyPermission(key, "write")); //$NON-NLS-1$
return (String) properties.put(key, value);
}
public static String clearProperty(String key) {
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkPermission(new PropertyPermission(key, "write")); //$NON-NLS-1$
return (String) properties.remove(key);
}
}