/**
*
*/
package org.feature.multi.perspective.model.editor.editors;
import java.util.List;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.feature.model.utilities.ResourceUtil;
import org.feature.multi.perspective.mapping.viewmapping.MappingModel;
import org.feature.multi.perspective.model.viewmodel.GroupModel;
import org.feature.multi.perspective.utilities.FeatureMappingUtil;
/**
* This filter displays only featuremappings that have a given viewmodel model
* set as a solutionspace model.
*
* @author <a href=mailto:info@juliaschroeter.de>Julia Schroeter</a>
*
*/
public class ViewmodelMappingFilter extends ViewerFilter {
private final IFile groupmodelFile;
private List<String> extensions;
public ViewmodelMappingFilter(List<String> extensions, GroupModel groupmodel) {
this.extensions = extensions;
this.groupmodelFile = ResourceUtil.getFile(groupmodel.eResource());
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
boolean result = false;
if (element instanceof IContainer){
result = true;
} else if (element instanceof IFile) {
IFile file = (IFile) element;
boolean select = hasCorrectExtension(file);
if (select) {
IFile groupModelFileFromMapping = getGroupModelFileFromMapping(file);
if (groupmodelFile != null && groupModelFileFromMapping != null) {
result = groupmodelFile.equals(groupModelFileFromMapping);
}
}
}
return result;
}
private IFile getGroupModelFileFromMapping(IFile mappingFile) {
IFile groupModelFileFromMapping = null;
GroupModel groupModel = getGroupModelFromFile(mappingFile);
if (groupModel != null) {
groupModelFileFromMapping = ResourceUtil.getFile(groupModel
.eResource());
}
return groupModelFileFromMapping;
}
private GroupModel getGroupModelFromFile(IFile file) {
GroupModel groupModel = null;
MappingModel mapping = FeatureMappingUtil.getFeatureMapping(file,
new ResourceSetImpl());
if (mapping != null) {
groupModel = mapping.getViewModel();
}
return groupModel;
}
private boolean hasCorrectExtension(IFile element) {
boolean result = false;
String fileExtension = element.getFileExtension();
result = extensions.contains(fileExtension);
return result;
}
}