01: /*******************************************************************************
02: * Copyright (c) 2007 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.pde.internal.core;
11:
12: import org.eclipse.core.runtime.IProgressMonitor;
13: import org.eclipse.core.runtime.IStatus;
14: import org.eclipse.core.runtime.Status;
15: import org.eclipse.core.runtime.jobs.Job;
16: import org.eclipse.pde.core.plugin.IPluginModelBase;
17:
18: public class TargetPlatformResetJob extends Job {
19:
20: private PDEState fState;
21:
22: public TargetPlatformResetJob(PDEState newState) {
23: super (PDECoreMessages.TargetPlatformResetJob_resetTarget);
24: fState = newState;
25: }
26:
27: protected IStatus run(IProgressMonitor monitor) {
28: EclipseHomeInitializer.resetEclipseHomeVariable();
29: PDECore.getDefault().getSourceLocationManager().reset();
30: PDECore.getDefault().getJavadocLocationManager().reset();
31: IPluginModelBase[] models = fState.getTargetModels();
32: removeDisabledBundles(models);
33: PluginModelManager manager = PDECore.getDefault()
34: .getModelManager();
35: manager.getExternalModelManager().setModels(models);
36: // trigger Extension Registry reloaded before resetState call so listeners can update their extensions points accurately when target is reloaded
37: PDECore.getDefault().getExtensionsRegistry().targetReloaded();
38: manager.resetState(fState);
39: PDECore.getDefault().getFeatureModelManager().targetReloaded();
40: monitor.done();
41: return Status.OK_STATUS;
42: }
43:
44: private void removeDisabledBundles(IPluginModelBase[] models) {
45: int number = models.length;
46: for (int i = 0; i < models.length; i++) {
47: if (!models[i].isEnabled()) {
48: fState.removeBundleDescription(models[i]
49: .getBundleDescription());
50: number -= 1;
51: }
52: }
53: if (number < models.length)
54: fState.resolveState(true);
55: }
56:
57: }
|