blob: a856e224b4da156834017cae9e357f2766f57ac2 [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.management.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.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRequirement;
import org.osgi.framework.wiring.BundleWire;
import org.osgi.framework.wiring.BundleWiring;
import org.osgi.jmx.framework.wiring.BundleWiringStateMBean;
/**
*
*
*/
public final class OSGiBundleWiring {
private final BundleWiring wiring;
/**
*
* @param wiring
*/
public OSGiBundleWiring(BundleWiring wiring) {
this.wiring = wiring;
}
/**
*
* @param namespace
* @param bundleId
* @param revisionCounter
* @return
*/
public CompositeData asCompositeData(String namespace, long bundleId, OSGiBundleRevisionIdTracker revisionTracker) {
Map<String, Object> items = new HashMap<String, Object>();
int myRevisionId = revisionTracker.getRevisionId(wiring.getRevision());
this.addCapabilityAndRequirementItems(items, namespace);
this.addRevisionedProvidedAndRequiredWireItems(items, namespace, revisionTracker);
items.put(BundleWiringStateMBean.BUNDLE_ID, bundleId);
items.put(BundleWiringStateMBean.BUNDLE_REVISION_ID, myRevisionId);
try {
return new CompositeDataSupport(BundleWiringStateMBean.BUNDLE_WIRING_TYPE, items);
} catch (OpenDataException e) {
throw new IllegalStateException("Cannot form bundle revisions wiring closures open data (" + e.getMessage() + ")", e);
}
}
private void addCapabilityAndRequirementItems(Map<String, Object> items, String namespace) {
List<BundleRequirement> requirements = wiring.getRequirements(namespace);
CompositeData[] requirementsCompositeDate = new CompositeData[requirements.size()];
for (int i = 0; i < requirements.size(); i++) {
requirementsCompositeDate[i] = new OSGiBundleRequirement(requirements.get(i)).asCompositeData();
}
items.put(BundleWiringStateMBean.REQUIREMENTS, requirementsCompositeDate);
List<BundleCapability> capabilities = wiring.getCapabilities(namespace);
CompositeData[] capabilitiesCompositeDate = new CompositeData[capabilities.size()];
for (int i = 0; i < capabilities.size(); i++) {
capabilitiesCompositeDate[i] = new OSGiBundleCapability(capabilities.get(i)).asCompositeData();
}
items.put(BundleWiringStateMBean.CAPABILITIES, capabilitiesCompositeDate);
}
private void addRevisionedProvidedAndRequiredWireItems(Map<String, Object> items, String namespace, OSGiBundleRevisionIdTracker revisionTracker) {
List<BundleWire> requiredWires = wiring.getRequiredWires(namespace);
CompositeData[] requiredWiresCompositeDate = new CompositeData[requiredWires.size()];
for (int i = 0; i < requiredWires.size(); i++) {
requiredWiresCompositeDate[i] = new OSGiBundleWire(requiredWires.get(i)).asCompositeData(revisionTracker);
}
items.put(BundleWiringStateMBean.REQUIRED_WIRES, requiredWiresCompositeDate);
List<BundleWire> providedWires = wiring.getProvidedWires(namespace);
CompositeData[] providedWiresCompositeDate = new CompositeData[providedWires.size()];
for (int i = 0; i < providedWires.size(); i++) {
providedWiresCompositeDate[i] = new OSGiBundleWire(providedWires.get(i)).asCompositeData(revisionTracker);
}
items.put(BundleWiringStateMBean.PROVIDED_WIRES, providedWiresCompositeDate);
}
}