blob: 85452af091aee54b426f022b99a099fc67c2031e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.tests.dynamicplugins;
import junit.framework.TestCase;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.FrameworkEvent;
import org.osgi.framework.FrameworkListener;
import org.osgi.framework.ServiceReference;
import org.osgi.service.packageadmin.PackageAdmin;
public class TestInstallUtil extends TestCase {
static BundleContext context;
public static void setContext(BundleContext newContext) {
context = newContext;
}
public static Bundle installBundle(String pluginLocation)
throws BundleException, IllegalStateException {
Bundle target = context.installBundle(pluginLocation);
int state = target.getState();
if (state != Bundle.INSTALLED)
throw new IllegalStateException("Bundle " + target
+ " is in a wrong state: " + state);
refreshPackages(new Bundle[] { target });
return target;
}
public static void uninstallBundle(Bundle target) throws BundleException {
target.uninstall();
refreshPackages(null);
}
public static void refreshPackages(Bundle[] bundles) {
ServiceReference packageAdminRef = context
.getServiceReference(PackageAdmin.class.getName());
PackageAdmin packageAdmin = null;
if (packageAdminRef != null) {
packageAdmin = (PackageAdmin) context.getService(packageAdminRef);
if (packageAdmin == null)
return;
}
final boolean[] flag = new boolean[] { false };
FrameworkListener listener = new FrameworkListener() {
public void frameworkEvent(FrameworkEvent event) {
if (event.getType() == FrameworkEvent.PACKAGES_REFRESHED)
synchronized (flag) {
flag[0] = true;
flag.notifyAll();
}
}
};
context.addFrameworkListener(listener);
packageAdmin.refreshPackages(bundles);
synchronized (flag) {
while (!flag[0]) {
try {
flag.wait();
} catch (InterruptedException e) {
}
}
}
context.removeFrameworkListener(listener);
context.ungetService(packageAdminRef);
}
}