blob: 34d4a71fcd144634d6ecb17b8ef6a9b413e9be8f [file] [log] [blame]
/*******************************************************************************
* 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.framework.internal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.OpenDataException;
import org.eclipse.gemini.mgmt.framework.CustomBundleWiringStateMBean;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRequirement;
import org.osgi.framework.wiring.BundleRevision;
/**
* Utility methods for retrieving JMX data from a {@link BundleRevision}
*
*/
public final class OSGiBundleRevision {
private final BundleRevision bundleRevision;
/**
* @param bundleRevision
*/
public OSGiBundleRevision(BundleRevision bundleRevision) {
this.bundleRevision = bundleRevision;
}
/**
* @param namespace - namespace to retrieve capabilities from
* @return {@link CompositeData} array representation of the capabilities
*/
public CompositeData[] capabilitiesAsCompositeDataArray(String namespace){
return this.getBundleCapabilityItems(namespace);
}
/**
* @param namespace - namespace to retrieve requirements from
* @return {@link CompositeData} array representation of the requirements
*/
public CompositeData[] requirementsAsCompositeDataArray(String namespace){
return this.getBundleRequirementItems(namespace);
}
/**
* @param namespace - namespace to retrieve capabilities from
* @param revisionCounter - an id number for this revision
* @return {@link CompositeData} representation of the capabilities
*/
public CompositeData capabilitiesAsCompositeData(String namespace, int revisionCounter){
Map<String, Object> items = new HashMap<String, Object>();
items.put(CustomBundleWiringStateMBean.CAPABILITIES, this.getBundleCapabilityItems(namespace));
items.put(CustomBundleWiringStateMBean.BUNDLE_REVISION_ID, revisionCounter);
try {
return new CompositeDataSupport(CustomBundleWiringStateMBean.BUNDLE_REVISION_CAPABILITIES_TYPE, items);
} catch (OpenDataException e) {
throw new IllegalStateException("Cannot form bundle revision capabilities open data", e);
}
}
/**
* @param namespace - namespace to retrieve requirements from
* @param revisionCounter - an id number for this revision
* @return {@link CompositeData} representation of the requirements
*/
public CompositeData requirementsAsCompositeData(String namespace, int revisionCounter){
Map<String, Object> items = new HashMap<String, Object>();
items.put(CustomBundleWiringStateMBean.REQUIREMENTS, this.getBundleRequirementItems(namespace));
items.put(CustomBundleWiringStateMBean.BUNDLE_REVISION_ID, revisionCounter);
try {
return new CompositeDataSupport(CustomBundleWiringStateMBean.BUNDLE_REVISION_REQUIREMENTS_TYPE, items);
} catch (OpenDataException e) {
throw new IllegalStateException("Cannot form bundle revision requirements open data", e);
}
}
private CompositeData[] getBundleCapabilityItems(String namespace){
List<BundleCapability> declaredCapabilities = bundleRevision.getDeclaredCapabilities(namespace);
CompositeData[] requirementsCompositeDatas = new CompositeData[declaredCapabilities.size()];
for (int i = 0; i < declaredCapabilities.size(); i++) {
requirementsCompositeDatas[i] = new OSGiBundleCapability(declaredCapabilities.get(i)).asCompositeData();
}
return requirementsCompositeDatas;
}
private CompositeData[] getBundleRequirementItems(String namespace){
List<BundleRequirement> declaredRequirements = bundleRevision.getDeclaredRequirements(namespace);
CompositeData[] requirementsCompositeDatas = new CompositeData[declaredRequirements.size()];
for (int i = 0; i < declaredRequirements.size(); i++) {
requirementsCompositeDatas[i] = new OSGiBundleRequirement(declaredRequirements.get(i)).asCompositeData();
}
return requirementsCompositeDatas;
}
}