blob: 235a0ce87d9e0276d961ac9a3a440bf8042b10ba [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.core;
import java.util.Map.Entry;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
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;
import org.eclipse.pde.internal.core.project.PDEProject;
public class WorkspaceFeatureModelManager extends WorkspaceModelManager<IFeatureModel> {
@Override
protected boolean isInterestingProject(IProject project) {
return isFeatureProject(project);
}
@Override
protected void createModel(IProject project, boolean notify) {
IFile featureXml = PDEProject.getFeatureXml(project);
if (featureXml.exists()) {
IFeatureModel model = new WorkspaceFeatureModel(featureXml);
loadModel(model, false);
getModelsMap().put(project, model);
if (notify) {
addChange(model, IModelProviderEvent.MODELS_ADDED);
}
}
}
@Override
protected IFeatureModel removeModel(IProject project) {
IFeatureModel model = getModelsMap().remove(project);
addChange(model, IModelProviderEvent.MODELS_REMOVED);
return model;
}
@Override
protected void handleFileDelta(IResourceDelta delta) {
IFile file = (IFile) delta.getResource();
IProject project = file.getProject();
IFile featureXml = PDEProject.getFeatureXml(project);
if (file.equals(featureXml)) {
IFeatureModel 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(model, true);
addChange(model, IModelProviderEvent.MODELS_CHANGED);
}
}
}
protected IFeatureModel[] getFeatureModels() {
initialize();
return getModelsMap().values().toArray(new IFeatureModel[getModelsMap().size()]);
}
public void removeModel(IFeatureModel iFeatureModel) {
for (Entry<IProject, IFeatureModel> entry : getModelsMap().entrySet()) {
if (entry.getValue() == iFeatureModel) {
this.removeModel(entry.getKey());
break;
}
}
}
}