/******************************************************************************* | |
* Copyright (c) 2011 VMware Inc. | |
* 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 | |
* | |
* Contributors: | |
* VMware Inc. - initial contribution | |
*******************************************************************************/ | |
package org.eclipse.gemini.mgmt; | |
import javax.management.ObjectName; | |
import org.osgi.framework.Bundle; | |
import org.osgi.framework.BundleContext; | |
/** | |
* {@link DefaultObjectNameTranslator} is a default implementation of {@link ObjectNameTranslator} which maps each | |
* {@link ObjectName} to itself. | |
* <p /> | |
* | |
* <strong>Concurrent Semantics</strong><br /> | |
* Thread safe. | |
*/ | |
final class DefaultObjectNameTranslator implements ObjectNameTranslator { | |
/** | |
* {@inheritDoc} | |
*/ | |
@Override | |
public ObjectName translate(ObjectName objectName) { | |
return objectName; | |
} | |
/** | |
* Creates an {@link ObjectNameTranslator} instance based on the headers of the given bundle. This is either one | |
* configured by an attached fragment or, by default, an instance of this class. | |
* | |
* @param bundleContext the bundle which may contain a header to define an {@link ObjectNameTranslator} | |
* @return an {@link ObjectNameTranslator} | |
* @throws ClassNotFoundException if the configured class cannot be loaded | |
* @throws InstantiationException if the configured class cannot be instantiated | |
* @throws IllegalAccessException if the configured class or its default constructor is not accessible | |
*/ | |
static ObjectNameTranslator initialiseObjectNameTranslator(BundleContext bundleContext) throws ClassNotFoundException, InstantiationException, | |
IllegalAccessException { | |
Bundle bundle = bundleContext.getBundle(); | |
String ontClassName = bundle.getHeaders().get(ObjectNameTranslator.HEADER_NAME); | |
if (ontClassName == null) { | |
return new DefaultObjectNameTranslator(); | |
} | |
// Attempt to load and instantiate the specified class, allowing exceptions to percolate. | |
@SuppressWarnings("unchecked") | |
Class<ObjectNameTranslator> ontClass = (Class<ObjectNameTranslator>) bundle.loadClass(ontClassName); | |
return ontClass.newInstance(); | |
} | |
} |