blob: c3504f9cebcdb3559caffcb5705cf15c267136e5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 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.equinox.internal.p2.exemplarysetup;
import org.eclipse.equinox.internal.p2.core.ProvisioningEventBus;
import org.eclipse.equinox.internal.p2.director.SimpleDirector;
import org.eclipse.equinox.internal.p2.director.SimplePlanner;
import org.eclipse.equinox.internal.p2.engine.MetadataCache;
import org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry;
import org.eclipse.equinox.internal.p2.garbagecollector.GarbageCollector;
import org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager;
import org.eclipse.equinox.internal.provisional.p2.core.eventbus.IProvisioningEventBus;
import org.eclipse.equinox.internal.provisional.p2.director.IDirector;
import org.eclipse.equinox.internal.provisional.p2.director.IPlanner;
import org.eclipse.equinox.internal.provisional.p2.engine.IProfileRegistry;
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager;
import org.osgi.framework.*;
public class Activator implements BundleActivator {
public static BundleContext context;
private IProvisioningEventBus bus;
private ServiceRegistration registrationBus;
private MetadataRepositoryManager defaultManager;
private ServiceRegistration registrationDefaultManager;
// private ArtifactRepositoryManager artifactRepoManager;
// private ServiceRegistration registrationArtifactRepoManager;
private IProfileRegistry profileRegistry;
private ServiceRegistration registrationProfileRegistry;
private IDirector director;
private ServiceRegistration registrationDirector;
private IPlanner planner;
private ServiceRegistration registrationPlanner;
public void start(BundleContext aContext) throws Exception {
//Need to do the configuration of all the bits and pieces:
Activator.context = aContext;
registerEventBus();
//create the profile registry
registerProfileRegistry();
//create metadata repositories
registerDefaultMetadataRepoManager();
registerMetadataCache();
//create the director and planner. The planner must be
//registered first because the director finds it in its constructor.
registerPlanner();
registerDirector();
startGarbageCollector();
//create artifact repositories
// registerDefaultArtifactRepoManager();
}
private void startGarbageCollector() {
new GarbageCollector();
}
public void stop(BundleContext aContext) throws Exception {
// unregisterDefaultArtifactRepoManager();
unregisterDirector();
unregisterPlanner();
unregisterDefaultMetadataRepoManager();
unregisterProfileRegistry();
unregisterEventBus();
Activator.context = null;
}
private void registerDirector() {
director = new SimpleDirector();
registrationDirector = context.registerService(IDirector.class.getName(), director, null);
}
private void unregisterDirector() {
registrationDirector.unregister();
registrationDirector = null;
director = null;
}
private void registerPlanner() {
planner = new SimplePlanner();
registrationPlanner = context.registerService(IPlanner.class.getName(), planner, null);
}
private void unregisterPlanner() {
registrationPlanner.unregister();
registrationPlanner = null;
planner = null;
}
private void registerProfileRegistry() {
profileRegistry = new SimpleProfileRegistry();
registrationProfileRegistry = context.registerService(IProfileRegistry.class.getName(), profileRegistry, null);
}
private void unregisterProfileRegistry() {
registrationProfileRegistry.unregister();
registrationProfileRegistry = null;
profileRegistry = null;
}
private void registerDefaultMetadataRepoManager() {
defaultManager = new MetadataRepositoryManager();
registrationDefaultManager = context.registerService(IMetadataRepositoryManager.class.getName(), defaultManager, null);
}
private void unregisterDefaultMetadataRepoManager() {
registrationDefaultManager.unregister();
registrationDefaultManager = null;
defaultManager = null;
}
// private void registerDefaultArtifactRepoManager() {
// artifactRepoManager = new ArtifactRepositoryManager();
// registrationArtifactRepoManager = context.registerService(IArtifactRepositoryManager.class.getName(), artifactRepoManager, null);
// }
//
// private void unregisterDefaultArtifactRepoManager() {
// registrationArtifactRepoManager.unregister();
// artifactRepoManager = null;
// }
private void registerMetadataCache() {
//TODO: we need to start metadata cache at a specific time, because it relies on IMetadataRepositoryManager
//being present. Really, MetadataCache should just wait until metadata repository service
//is available and then initialize itself
new MetadataCache();
}
private void registerEventBus() {
bus = new ProvisioningEventBus();
registrationBus = context.registerService(IProvisioningEventBus.SERVICE_NAME, bus, null);
}
private void unregisterEventBus() {
registrationBus.unregister();
registrationBus = null;
bus.close();
}
}