All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.core.internal.registry.RegistryProperties Maven / Gradle / Ivy

Go to download

AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based @AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step. This library is a superset of AspectJ weaver and hence also of AspectJ runtime.

There is a newer version: 1.9.22.1
Show newest version
/*******************************************************************************
 * Copyright (c) 2006 Eclipse Foundation and others.
 *
 * 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
 *
 *******************************************************************************/
package org.eclipse.core.internal.registry;

import java.util.Properties;
import org.eclipse.core.internal.runtime.RuntimeLog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;

/**
 * Simple Property mechanism to chain property lookup from local registry properties,
 * to BundleContext properties (if available) or System properties otherwise.
 */
public class RegistryProperties {

	public static final String empty = ""; //$NON-NLS-1$

	private static Properties registryProperties = new Properties();
	private static Object context = null; // BundleContext, but specified as Object to avoid class loading

	public static void setContext(Object object) {
		context = object;
	}

	public static String getProperty(String propertyName) {
		String propertyValue = registryProperties.getProperty(propertyName);
		if (propertyValue != null)
			return propertyValue;

		return getContextProperty(propertyName);
	}

	public static String getProperty(String property, String defaultValue) {
		String result = RegistryProperties.getProperty(property);
		return result == null ? defaultValue : result;
	}

	public static void setProperty(String propertyName, String propertyValue) {
		registryProperties.setProperty(propertyName, propertyValue);
	}

	// The registry could be used as a stand-alone utility without OSGi.
	// Try to obtain the property from the OSGi context, but only use bundleContext if
	// it was already set by Activator indicating that OSGi layer is present.
	private static String getContextProperty(final String propertyName) {
		if (context == null)
			return System.getProperty(propertyName);

		final String[] result = new String[1];
		try {
			// Wrap BundleContext into an inner class to make sure it will only get loaded
			// if OSGi layer is present.
			Runnable innerClass = () -> {
				org.osgi.framework.BundleContext bundleContext = (org.osgi.framework.BundleContext) context;
				result[0] = bundleContext.getProperty(propertyName);
			};
			innerClass.run();
		} catch (Exception e) {
			// If we are here, it is likely means that context was set, but OSGi layer
			// is not present or non-standard. This should not happen, but let's give
			// the program a chance to continue - properties should have reasonable
			// default values.
			IStatus status = new Status(IStatus.ERROR, IRegistryConstants.RUNTIME_NAME, 0, e.getMessage(), e);
			RuntimeLog.log(status);
			return null;
		}
		return result[0];
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy