/** * <copyright> * </copyright> * * */ package org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.EcoreUtil; import org.feature.multi.perspective.mapping.viewmapping.MappingModel; import org.feature.multi.perspective.model.viewmodel.AbstractGroup; import org.feature.multi.perspective.model.viewmodel.GroupModel; public class MappingViewgroupReferenceResolver implements org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver<org.feature.multi.perspective.mapping.viewmapping.Mapping, org.feature.multi.perspective.model.viewmodel.AbstractGroup> { private org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MtextDefaultResolverDelegate<org.feature.multi.perspective.mapping.viewmapping.Mapping, org.feature.multi.perspective.model.viewmodel.AbstractGroup> delegate = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MtextDefaultResolverDelegate<org.feature.multi.perspective.mapping.viewmapping.Mapping, org.feature.multi.perspective.model.viewmodel.AbstractGroup>(); public void resolve(String identifier, org.feature.multi.perspective.mapping.viewmapping.Mapping container, org.eclipse.emf.ecore.EReference reference, int position, boolean resolveFuzzy, final org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolveResult<org.feature.multi.perspective.model.viewmodel.AbstractGroup> result) { EObject model = EcoreUtil.getRootContainer(container); if (model instanceof MappingModel) { MappingModel mappingModel = (MappingModel) model; GroupModel viewModel = mappingModel.getViewModel(); AbstractGroup group = traverseTree(viewModel, identifier); if (group != null) { result.addMapping(identifier, group); } } else { delegate.resolve(identifier, container, reference, position, resolveFuzzy, result); } } private AbstractGroup traverseTree(GroupModel viewModel, String identifier) { AbstractGroup result = null; TreeIterator<EObject> eAllContents = viewModel.eAllContents(); while (eAllContents.hasNext()) { EObject next = eAllContents.next(); if (next instanceof AbstractGroup) { AbstractGroup containedGroup = (AbstractGroup) next; if (isEqual(identifier, containedGroup)) { result = containedGroup; break; } } } return result; } private boolean isEqual(String identifier, AbstractGroup group) { return identifier.equals(group.getName()); } public String deResolve(org.feature.multi.perspective.model.viewmodel.AbstractGroup element, org.feature.multi.perspective.mapping.viewmapping.Mapping container, org.eclipse.emf.ecore.EReference reference) { if (element != null) { return element.getName(); } else { return delegate.deResolve(element, container, reference); } } public void setOptions(java.util.Map< ? , ? > options) { // save options in a field or leave method empty if this resolver does not depend // on any option } }