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

org.eclipse.gemini.blueprint.test.AbstractConfigurableOsgiTests Maven / Gradle / Ivy

/******************************************************************************
 * Copyright (c) 2006, 2010 VMware Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Apache License v2.0 which accompanies this distribution. 
 * The Eclipse Public License is available at 
 * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
 * is available at http://www.opensource.org/licenses/apache2.0.php.
 * You may elect to redistribute this code under either of these licenses. 
 * 
 * Contributors:
 *   VMware Inc.
 *****************************************************************************/

package org.eclipse.gemini.blueprint.test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import org.eclipse.gemini.blueprint.test.platform.EquinoxPlatform;
import org.eclipse.gemini.blueprint.test.platform.OsgiPlatform;
import org.eclipse.gemini.blueprint.test.platform.Platforms;
import org.osgi.framework.Constants;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;

/**
 * Abstract JUnit super class which configures an {@link OsgiPlatform}. 

* This class offers more hooks for programmatic and declarative configuration * of the underlying OSGi platform used when running the test suite. * * @author Costin Leau * */ public abstract class AbstractConfigurableOsgiTests extends AbstractOsgiTests { /** * * Default constructor. Constructs a new * AbstractConfigurableOsgiTests instance. */ public AbstractConfigurableOsgiTests() { super(); } /** * Constructs a new AbstractConfigurableOsgiTests instance. * * @param name test name */ public AbstractConfigurableOsgiTests(String name) { super(name); } /** * System property for selecting the appropriate OSGi implementation. */ public static final String OSGI_FRAMEWORK_SELECTOR = "org.eclipse.gemini.blueprint.test.framework"; /** * {@inheritDoc} * *

This implementation determines and creates the OSGi platform used by * the test suite (Equinox by default). It will try to create a Platform * instance based on the getPlatformName, falling back to * Equinox in case of a failure. * * @see #getPlatformName() for an easier alternative. */ protected OsgiPlatform createPlatform() { boolean trace = logger.isTraceEnabled(); String platformClassName = getPlatformName(); OsgiPlatform platform = null; ClassLoader currentCL = getClass().getClassLoader(); if (StringUtils.hasText(platformClassName)) { if (ClassUtils.isPresent(platformClassName, currentCL)) { Class platformClass = ClassUtils.resolveClassName(platformClassName, currentCL); if (OsgiPlatform.class.isAssignableFrom(platformClass)) { if (trace) { logger.trace("Instantiating platform wrapper..."); } try { platform = (OsgiPlatform) platformClass.newInstance(); } catch (Exception ex) { logger.warn("cannot instantiate class [" + platformClass + "]; using default"); } } else { logger.warn("Class [" + platformClass + "] does not implement " + OsgiPlatform.class.getName() + " interface; falling back to defaults"); } } else { logger.warn("OSGi platform starter [" + platformClassName + "] not found; using default"); } } else { logger.trace("No platform specified; using default"); } // fall back if (platform == null) platform = new EquinoxPlatform(); Properties config = platform.getConfigurationProperties(); // add boot delegation config.setProperty(Constants.FRAMEWORK_BOOTDELEGATION, getBootDelegationPackageString()); return platform; } /** * Indicates what OSGi platform should be used by the test suite. By * default, {@link #OSGI_FRAMEWORK_SELECTOR} system property is used. * Subclasses can override this and provide directly the OSGi platform name. * By default, the platform name holds the fully qualified name of the OSGi * platform class. * * @return platform platform name * @see Platforms */ protected String getPlatformName() { String systemProperty = System.getProperty(OSGI_FRAMEWORK_SELECTOR); if (logger.isTraceEnabled()) { logger.trace("System property [" + OSGI_FRAMEWORK_SELECTOR + "] has value=" + systemProperty); } return (!StringUtils.hasText(systemProperty) ? Platforms.EQUINOX : systemProperty); } /** * Returns a String representation of the boot delegation packages list. * * @return boot delegation path */ private String getBootDelegationPackageString() { StringBuilder buf = new StringBuilder(); for (Iterator iter = getBootDelegationPackages().iterator(); iter.hasNext();) { buf.append(iter.next().trim()); if (iter.hasNext()) { buf.append(","); } } return buf.toString(); } /** * Returns the list of OSGi packages that are delegated to the boot * classpath. See the OSGi specification regarding the format of the package * string representation. * * @return the list of strings representing the packages that the OSGi * platform will delegate to the boot class path. */ protected List getBootDelegationPackages() { List defaults = new ArrayList(); // javax packages defaults.add("javax.*"); // sql + transaction + activation? defaults.add("javax.sql.*"); defaults.add("javax.transaction.*"); defaults.add("javax.activation.*"); // XML API available in JDK 1.4 defaults.add("org.w3c.*"); defaults.add("org.xml.*"); // sun packages defaults.add("sun.*"); defaults.add("com.sun.*"); // FIXME: the JAXP package (for 1.4 VMs) should be discovered in an OSGi manner defaults.add("org.apache.xerces.jaxp.*"); return defaults; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy