blob: aaa382c615b692107d652139247e64260e56230a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2007 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.pde.internal.core;
import java.util.HashMap;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.pde.core.IModelProviderEvent;
import org.eclipse.pde.internal.core.feature.WorkspaceFeatureModel;
import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
public class WorkspaceFeatureModelManager extends WorkspaceModelManager {
protected boolean isInterestingProject(IProject project) {
return isFeatureProject(project);
}
protected void createModel(IProject project, boolean notify) {
if (project.exists(ICoreConstants.FEATURE_PATH)) {
WorkspaceFeatureModel model = new WorkspaceFeatureModel(project.getFile(ICoreConstants.FEATURE_PATH));
loadModel(model, false);
if (fModels == null)
fModels = new HashMap();
fModels.put(project, model);
if (notify)
addChange(model, IModelProviderEvent.MODELS_ADDED);
}
}
protected void handleFileDelta(IResourceDelta delta) {
IFile file = (IFile) delta.getResource();
if (file.getProjectRelativePath().equals(ICoreConstants.FEATURE_PATH)) {
IProject project = file.getProject();
Object model = getModel(project);
int kind = delta.getKind();
if (kind == IResourceDelta.REMOVED && model != null) {
removeModel(project);
} else if (kind == IResourceDelta.ADDED || model == null) {
createModel(file.getProject(), true);
} else if (kind == IResourceDelta.CHANGED && (IResourceDelta.CONTENT & delta.getFlags()) != 0) {
loadModel((IFeatureModel) model, true);
addChange(model, IModelProviderEvent.MODELS_CHANGED);
}
}
}
protected void addListeners() {
int event = IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.POST_CHANGE;
PDECore.getWorkspace().addResourceChangeListener(this, event);
}
protected void removeListeners() {
PDECore.getWorkspace().removeResourceChangeListener(this);
super.removeListeners();
}
protected IFeatureModel[] getFeatureModels() {
initialize();
return (IFeatureModel[]) fModels.values().toArray(new IFeatureModel[fModels.size()]);
}
protected IFeatureModel getFeatureModel(IProject project) {
return (IFeatureModel) getModel(project);
}
}