blob: 0e8e9601e17a9af45862674d0593ddb05d1cc9cc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1997, 2008 by ProSyst Software GmbH
* http://www.prosyst.com
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* ProSyst Software GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.internal.ip.provider.env;
import java.util.*;
import org.eclipse.equinox.internal.ip.ProvisioningInfoProvider;
import org.eclipse.equinox.internal.ip.impl.Log;
import org.eclipse.equinox.internal.ip.impl.ProvisioningAgent;
import org.eclipse.equinox.internal.ip.provider.BaseProvider;
import org.osgi.framework.BundleContext;
import org.osgi.service.provisioning.ProvisioningService;
/**
* Implements ConfiguratorLoader. Reads from system properties and
* BundleContext. Acts as provider.
*
* @author Avgustin Marinov,
* @author Pavlin Dobrev
* @version 1.0
*/
public class EnvironmentInfoProvider extends BaseProvider implements ProvisioningInfoProvider {
/**
* This is a key for property that points if manual setting of info is
* allowed.
*/
public static final String MANUAL_SUPPORT = "equinox.provisioning.env.provider.allowed";
/**
* This is a system properties key that points that the system properties
* starting with this key should be pushed into ProvisioningService If value
* for the key is not set or is "" no system properties are pushed. If "*"
* all are pushed. Else -> only the properties with key started with the
* PUSH_STARTING_WITH are pushed.
*/
public static final String PUSH_STARTING_WITH = "equinox.provisioning.env.provider.push.starting.with";
/** Properties that are to be loaded into dictionary. */
private static final String[] props = {ProvisioningService.PROVISIONING_REFERENCE};
private BundleContext bc;
/**
* If manual support is available starts it.
*
* @see org.eclipse.equinox.internal.ip.impl.provider.BaseProvider#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bc) throws Exception {
boolean manualsupport = true;
if (bc.getProperty(MANUAL_SUPPORT) != null)
if (bc.getProperty(MANUAL_SUPPORT).equals("false"))
manualsupport = false;
if (!manualsupport) {
Log.debug(this + " is not an allowed provider.");
return;
}
this.bc = bc;
super.start(bc);
}
/**
* @see org.eclipse.equinox.internal.ip.ProvisioningInfoProvider#init(org.osgi.service.provisioning.ProvisioningService)
*/
public Dictionary init(ProvisioningService prvSrv) {
Dictionary info = new Hashtable();
for (int i = props.length; i-- > 0;) {
String value = ProvisioningAgent.bc.getProperty(props[i]);
if (value != null) {
info.put(props[i], value);
}
}
if (ProvisioningAgent.bc.getProperty(PUSH_STARTING_WITH) != null) {
String prefix = ProvisioningAgent.bc.getProperty(PUSH_STARTING_WITH).trim();
if (prefix.length() != 0) {
boolean all = "*".equals(prefix);
Dictionary sprops = System.getProperties();
for (Enumeration e = sprops.keys(); e.hasMoreElements();) {
try {
String key = (String) e.nextElement();
if (all || key.startsWith(prefix)) {
info.put(key, sprops.get(key));
}
} catch (Exception _) {
}
}
}
}
return info;
}
/**
* Gets system property
*
* @param key
* the key.
* @return the value.
*/
public Object get(Object key) {
Object value = null;
if (key instanceof String) {
value = ProvisioningAgent.bc.getProperty((String) key);
if (value == null) {
value = bc.getProperty((String) key);
}
}
return value;
}
/**
* Returns name of this provider.
*
* @return the name.
*/
public String toString() {
return "Environment";
}
}