/** * <copyright> * </copyright> * * */ package org.feature.multi.perspective.mapping.viewmapping.resource.mtext.mopp; public class MtextReferenceResolverSwitch implements org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolverSwitch { /** * This map stores a copy of the options the were set for loading the resource. */ private java.util.Map<Object, Object> options; protected org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MappingModelFeatureModelReferenceResolver mappingModelFeatureModelReferenceResolver = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MappingModelFeatureModelReferenceResolver(); protected org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MappingModelViewModelReferenceResolver mappingModelViewModelReferenceResolver = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MappingModelViewModelReferenceResolver(); protected org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MappingViewgroupReferenceResolver mappingViewgroupReferenceResolver = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MappingViewgroupReferenceResolver(); protected org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MappingFeaturesReferenceResolver mappingFeaturesReferenceResolver = new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.analysis.MappingFeaturesReferenceResolver(); public org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver<org.feature.multi.perspective.mapping.viewmapping.MappingModel, org.js.model.feature.FeatureModel> getMappingModelFeatureModelReferenceResolver() { return getResolverChain(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMappingModel_FeatureModel(), mappingModelFeatureModelReferenceResolver); } public org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver<org.feature.multi.perspective.mapping.viewmapping.MappingModel, org.feature.multi.perspective.model.viewmodel.GroupModel> getMappingModelViewModelReferenceResolver() { return getResolverChain(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMappingModel_ViewModel(), mappingModelViewModelReferenceResolver); } public org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver<org.feature.multi.perspective.mapping.viewmapping.Mapping, org.feature.multi.perspective.model.viewmodel.AbstractGroup> getMappingViewgroupReferenceResolver() { return getResolverChain(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMapping_Viewgroup(), mappingViewgroupReferenceResolver); } public org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver<org.feature.multi.perspective.mapping.viewmapping.Mapping, org.js.model.feature.Feature> getMappingFeaturesReferenceResolver() { return getResolverChain(org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMapping_Features(), mappingFeaturesReferenceResolver); } public void setOptions(java.util.Map<?, ?> options) { if (options != null) { this.options = new java.util.LinkedHashMap<Object, Object>(); this.options.putAll(options); } mappingModelFeatureModelReferenceResolver.setOptions(options); mappingModelViewModelReferenceResolver.setOptions(options); mappingViewgroupReferenceResolver.setOptions(options); mappingFeaturesReferenceResolver.setOptions(options); } public void resolveFuzzy(String identifier, org.eclipse.emf.ecore.EObject container, org.eclipse.emf.ecore.EReference reference, int position, org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolveResult<org.eclipse.emf.ecore.EObject> result) { if (container == null) { return; } if (org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMappingModel().isInstance(container)) { MtextFuzzyResolveResult<org.js.model.feature.FeatureModel> frr = new MtextFuzzyResolveResult<org.js.model.feature.FeatureModel>(result); String referenceName = reference.getName(); org.eclipse.emf.ecore.EStructuralFeature feature = container.eClass().getEStructuralFeature(referenceName); if (feature != null && feature instanceof org.eclipse.emf.ecore.EReference && referenceName != null && referenceName.equals("featureModel")) { mappingModelFeatureModelReferenceResolver.resolve(identifier, (org.feature.multi.perspective.mapping.viewmapping.MappingModel) container, (org.eclipse.emf.ecore.EReference) feature, position, true, frr); } } if (org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMappingModel().isInstance(container)) { MtextFuzzyResolveResult<org.feature.multi.perspective.model.viewmodel.GroupModel> frr = new MtextFuzzyResolveResult<org.feature.multi.perspective.model.viewmodel.GroupModel>(result); String referenceName = reference.getName(); org.eclipse.emf.ecore.EStructuralFeature feature = container.eClass().getEStructuralFeature(referenceName); if (feature != null && feature instanceof org.eclipse.emf.ecore.EReference && referenceName != null && referenceName.equals("viewModel")) { mappingModelViewModelReferenceResolver.resolve(identifier, (org.feature.multi.perspective.mapping.viewmapping.MappingModel) container, (org.eclipse.emf.ecore.EReference) feature, position, true, frr); } } if (org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMapping().isInstance(container)) { MtextFuzzyResolveResult<org.feature.multi.perspective.model.viewmodel.AbstractGroup> frr = new MtextFuzzyResolveResult<org.feature.multi.perspective.model.viewmodel.AbstractGroup>(result); String referenceName = reference.getName(); org.eclipse.emf.ecore.EStructuralFeature feature = container.eClass().getEStructuralFeature(referenceName); if (feature != null && feature instanceof org.eclipse.emf.ecore.EReference && referenceName != null && referenceName.equals("viewgroup")) { mappingViewgroupReferenceResolver.resolve(identifier, (org.feature.multi.perspective.mapping.viewmapping.Mapping) container, (org.eclipse.emf.ecore.EReference) feature, position, true, frr); } } if (org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMapping().isInstance(container)) { MtextFuzzyResolveResult<org.js.model.feature.Feature> frr = new MtextFuzzyResolveResult<org.js.model.feature.Feature>(result); String referenceName = reference.getName(); org.eclipse.emf.ecore.EStructuralFeature feature = container.eClass().getEStructuralFeature(referenceName); if (feature != null && feature instanceof org.eclipse.emf.ecore.EReference && referenceName != null && referenceName.equals("features")) { mappingFeaturesReferenceResolver.resolve(identifier, (org.feature.multi.perspective.mapping.viewmapping.Mapping) container, (org.eclipse.emf.ecore.EReference) feature, position, true, frr); } } } public org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver<? extends org.eclipse.emf.ecore.EObject, ? extends org.eclipse.emf.ecore.EObject> getResolver(org.eclipse.emf.ecore.EStructuralFeature reference) { if (reference == org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMappingModel_FeatureModel()) { return getResolverChain(reference, mappingModelFeatureModelReferenceResolver); } if (reference == org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMappingModel_ViewModel()) { return getResolverChain(reference, mappingModelViewModelReferenceResolver); } if (reference == org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMapping_Viewgroup()) { return getResolverChain(reference, mappingViewgroupReferenceResolver); } if (reference == org.feature.multi.perspective.mapping.viewmapping.ViewmappingPackage.eINSTANCE.getMapping_Features()) { return getResolverChain(reference, mappingFeaturesReferenceResolver); } return null; } @SuppressWarnings({"rawtypes", "unchecked"}) public <ContainerType extends org.eclipse.emf.ecore.EObject, ReferenceType extends org.eclipse.emf.ecore.EObject> org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver<ContainerType, ReferenceType> getResolverChain(org.eclipse.emf.ecore.EStructuralFeature reference, org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver<ContainerType, ReferenceType> originalResolver) { if (options == null) { return originalResolver; } Object value = options.get(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextOptions.ADDITIONAL_REFERENCE_RESOLVERS); if (value == null) { return originalResolver; } if (!(value instanceof java.util.Map)) { // send this to the error log new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util.MtextRuntimeUtil().logWarning("Found value with invalid type for option " + org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextOptions.ADDITIONAL_REFERENCE_RESOLVERS + " (expected " + java.util.Map.class.getName() + ", but was " + value.getClass().getName() + ")", null); return originalResolver; } java.util.Map<?,?> resolverMap = (java.util.Map<?,?>) value; Object resolverValue = resolverMap.get(reference); if (resolverValue == null) { return originalResolver; } if (resolverValue instanceof org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver replacingResolver = (org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver) resolverValue; if (replacingResolver instanceof org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextDelegatingReferenceResolver) { // pass original resolver to the replacing one ((org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextDelegatingReferenceResolver) replacingResolver).setDelegate(originalResolver); } return replacingResolver; } else if (resolverValue instanceof java.util.Collection) { java.util.Collection replacingResolvers = (java.util.Collection) resolverValue; org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver replacingResolver = originalResolver; for (Object next : replacingResolvers) { if (next instanceof org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceCache) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver nextResolver = (org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextReferenceResolver) next; if (nextResolver instanceof org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextDelegatingReferenceResolver) { // pass original resolver to the replacing one ((org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextDelegatingReferenceResolver) nextResolver).setDelegate(replacingResolver); } replacingResolver = nextResolver; } else { // The collection contains a non-resolver. Send a warning to the error log. new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util.MtextRuntimeUtil().logWarning("Found value with invalid type in value map for option " + org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextOptions.ADDITIONAL_REFERENCE_RESOLVERS + " (expected " + org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextDelegatingReferenceResolver.class.getName() + ", but was " + next.getClass().getName() + ")", null); } } return replacingResolver; } else { // The value for the option ADDITIONAL_REFERENCE_RESOLVERS has an unknown type. new org.feature.multi.perspective.mapping.viewmapping.resource.mtext.util.MtextRuntimeUtil().logWarning("Found value with invalid type in value map for option " + org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextOptions.ADDITIONAL_REFERENCE_RESOLVERS + " (expected " + org.feature.multi.perspective.mapping.viewmapping.resource.mtext.IMtextDelegatingReferenceResolver.class.getName() + ", but was " + resolverValue.getClass().getName() + ")", null); return originalResolver; } } }