01: /*******************************************************************************
02: * Copyright (c) 2006, 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 java.util.HashMap;
13:
14: import org.eclipse.core.resources.IFile;
15: import org.eclipse.core.resources.IProject;
16: import org.eclipse.core.resources.IResourceChangeEvent;
17: import org.eclipse.core.resources.IResourceDelta;
18: import org.eclipse.pde.core.IModelProviderEvent;
19: import org.eclipse.pde.internal.core.feature.WorkspaceFeatureModel;
20: import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
21:
22: public class WorkspaceFeatureModelManager extends WorkspaceModelManager {
23:
24: protected boolean isInterestingProject(IProject project) {
25: return isFeatureProject(project);
26: }
27:
28: protected void createModel(IProject project, boolean notify) {
29: if (project.exists(ICoreConstants.FEATURE_PATH)) {
30: WorkspaceFeatureModel model = new WorkspaceFeatureModel(
31: project.getFile(ICoreConstants.FEATURE_PATH));
32: loadModel(model, false);
33: if (fModels == null)
34: fModels = new HashMap();
35: fModels.put(project, model);
36: if (notify)
37: addChange(model, IModelProviderEvent.MODELS_ADDED);
38: }
39: }
40:
41: protected void handleFileDelta(IResourceDelta delta) {
42: IFile file = (IFile) delta.getResource();
43: if (file.getProjectRelativePath().equals(
44: ICoreConstants.FEATURE_PATH)) {
45: IProject project = file.getProject();
46: Object model = getModel(project);
47: int kind = delta.getKind();
48: if (kind == IResourceDelta.REMOVED && model != null) {
49: removeModel(project);
50: } else if (kind == IResourceDelta.ADDED || model == null) {
51: createModel(file.getProject(), true);
52: } else if (kind == IResourceDelta.CHANGED
53: && (IResourceDelta.CONTENT & delta.getFlags()) != 0) {
54: loadModel((IFeatureModel) model, true);
55: addChange(model, IModelProviderEvent.MODELS_CHANGED);
56: }
57: }
58: }
59:
60: protected void addListeners() {
61: int event = IResourceChangeEvent.PRE_CLOSE
62: | IResourceChangeEvent.POST_CHANGE;
63: PDECore.getWorkspace().addResourceChangeListener(this , event);
64: }
65:
66: protected void removeListeners() {
67: PDECore.getWorkspace().removeResourceChangeListener(this );
68: super .removeListeners();
69: }
70:
71: protected IFeatureModel[] getFeatureModels() {
72: initialize();
73: return (IFeatureModel[]) fModels.values().toArray(
74: new IFeatureModel[fModels.size()]);
75: }
76:
77: protected IFeatureModel getFeatureModel(IProject project) {
78: return (IFeatureModel) getModel(project);
79: }
80:
81: }
|