/* * Copyright (c) 2006 Borland Software Corporation * * 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: * Dmitry Stadnik (Borland) - initial API and implementation */ package org.eclipse.gmf.map.editor.providers; import java.util.Iterator; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.gmf.gmfgraph.GMFGraphPackage; import org.eclipse.gmf.map.editor.edit.parts.CanvasMappingInfoEditPart; import org.eclipse.gmf.map.editor.edit.parts.CompartmentMappingInfoEditPart; import org.eclipse.gmf.map.editor.edit.parts.DesignLabelMapping2EditPart; import org.eclipse.gmf.map.editor.edit.parts.DesignLabelMappingEditPart; import org.eclipse.gmf.map.editor.edit.parts.FeatureLabelMapping2EditPart; import org.eclipse.gmf.map.editor.edit.parts.FeatureLabelMappingEditPart; import org.eclipse.gmf.map.editor.edit.parts.LabelMapping2EditPart; import org.eclipse.gmf.map.editor.edit.parts.LabelMappingEditPart; import org.eclipse.gmf.map.editor.edit.parts.LinkMappingInfoEditPart; import org.eclipse.gmf.map.editor.edit.parts.NodeMappingInfoEditPart; import org.eclipse.gmf.map.editor.edit.parts.ReferenceInfo2EditPart; import org.eclipse.gmf.map.editor.edit.parts.ReferenceInfoEditPart; import org.eclipse.gmf.map.editor.part.GMFMapVisualIDRegistry; import org.eclipse.gmf.mappings.CanvasMapping; import org.eclipse.gmf.mappings.CompartmentMapping; import org.eclipse.gmf.mappings.DesignLabelMapping; import org.eclipse.gmf.mappings.FeatureLabelMapping; import org.eclipse.gmf.mappings.GMFMapPackage; import org.eclipse.gmf.mappings.LabelMapping; import org.eclipse.gmf.mappings.LinkMapping; import org.eclipse.gmf.mappings.NodeMapping; import org.eclipse.gmf.mappings.NodeReference; import org.eclipse.gmf.runtime.common.core.command.ICommand; import org.eclipse.gmf.runtime.common.core.command.UnexecutableCommand; import org.eclipse.gmf.runtime.common.core.service.AbstractProvider; import org.eclipse.gmf.runtime.common.core.service.IOperation; import org.eclipse.gmf.runtime.common.ui.services.parser.GetParserOperation; import org.eclipse.gmf.runtime.common.ui.services.parser.IParser; import org.eclipse.gmf.runtime.common.ui.services.parser.IParserProvider; import org.eclipse.gmf.runtime.notation.View; /** * @generated */ public class GMFMapParserProvider extends AbstractProvider implements IParserProvider { private IParser canvasMappingInfoParser; private IParser getCanvasMappingInfoParser() { if (canvasMappingInfoParser == null) { canvasMappingInfoParser = createCanvasMappingInfoParser(); } return canvasMappingInfoParser; } protected IParser createCanvasMappingInfoParser() { GMFMapStructuralFeatureParser parser = new GMFMapStructuralFeatureParser(EcorePackage.eINSTANCE.getENamedElement_Name()) { protected EObject getDomainElement(EObject element) { return element instanceof CanvasMapping ? ((CanvasMapping) element).getDomainMetaElement() : null; } protected boolean isAffectingFeature(Object eventFeature) { return eventFeature == GMFMapPackage.eINSTANCE.getCanvasMapping_DomainMetaElement(); } }; return parser; } private IParser nodeMappingInfoParser; private IParser getNodeMappingInfoParser() { if (nodeMappingInfoParser == null) { nodeMappingInfoParser = createNodeMappingInfoParser(); } return nodeMappingInfoParser; } protected IParser createNodeMappingInfoParser() { GMFMapStructuralFeatureParser parser = new GMFMapStructuralFeatureParser(EcorePackage.eINSTANCE.getENamedElement_Name()) { protected EObject getDomainElement(EObject element) { return element instanceof NodeMapping ? ((NodeMapping) element).getDomainMetaElement() : null; } protected boolean isAffectingFeature(Object eventFeature) { return eventFeature == GMFMapPackage.eINSTANCE.getMappingEntry_DomainMetaElement(); } }; return parser; } private IParser referenceInfoParser; private IParser getReferenceInfoParser() { if (referenceInfoParser == null) { referenceInfoParser = createReferenceInfoParser(); } return referenceInfoParser; } protected IParser createReferenceInfoParser() { GMFMapStructuralFeatureParser parser = new GMFMapStructuralFeatureParser(null) { public String getPrintString(IAdaptable adapter, int flags) { StringBuffer sb = new StringBuffer(); EObject element = (EObject) adapter.getAdapter(EObject.class); if (element instanceof NodeReference) { NodeReference ref = (NodeReference) element; if (ref.getContainmentFeature() != null) { sb.append(ref.getContainmentFeature().getEContainingClass().getName()); sb.append(':'); sb.append(getStringByPattern(ref.getContainmentFeature(), EcorePackage.eINSTANCE.getENamedElement_Name(), DEFAULT_PROCESSOR)); } if (ref.getChildrenFeature() != null) { sb.append(' '); sb.append('('); sb.append(ref.getChildrenFeature().getEContainingClass().getName()); sb.append(':'); sb.append(getStringByPattern(ref.getChildrenFeature(), EcorePackage.eINSTANCE.getENamedElement_Name(), DEFAULT_PROCESSOR)); sb.append(')'); } } return sb.toString(); } protected boolean isAffectingFeature(Object eventFeature) { return eventFeature == GMFMapPackage.eINSTANCE.getNeedsContainment_ContainmentFeature() || eventFeature == GMFMapPackage.eINSTANCE.getNodeReference_ChildrenFeature(); } public ICommand getParseCommand(IAdaptable adapter, String newString, int flags) { return UnexecutableCommand.INSTANCE; } }; return parser; } private IParser compartmentMappingInfoParser; private IParser getCompartmentMappingInfoParser() { if (compartmentMappingInfoParser == null) { compartmentMappingInfoParser = createCompartmentMappingInfoParser(); } return compartmentMappingInfoParser; } protected IParser createCompartmentMappingInfoParser() { GMFMapStructuralFeatureParser parser = new GMFMapStructuralFeatureParser(GMFGraphPackage.eINSTANCE.getIdentity_Name()) { protected EObject getDomainElement(EObject element) { return element instanceof CompartmentMapping ? ((CompartmentMapping) element).getCompartment() : null; } protected boolean isAffectingFeature(Object eventFeature) { return eventFeature == GMFMapPackage.eINSTANCE.getCompartmentMapping_Compartment(); } }; return parser; } private IParser linkMappingInfoParser; private IParser getLinkMappingInfoParser() { if (linkMappingInfoParser == null) { linkMappingInfoParser = createLinkMappingInfoParser(); } return linkMappingInfoParser; } protected IParser createLinkMappingInfoParser() { GMFMapStructuralFeatureParser parser = new GMFMapStructuralFeatureParser(EcorePackage.eINSTANCE.getENamedElement_Name()) { protected EObject getDomainElement(EObject element) { return element instanceof LinkMapping ? ((LinkMapping) element).getDomainMetaElement() : null; } public String getPrintString(IAdaptable adapter, int flags) { StringBuffer sb = new StringBuffer(); EObject element = (EObject) adapter.getAdapter(EObject.class); if (element instanceof LinkMapping) { LinkMapping mapping = (LinkMapping) element; sb.append(super.getPrintString(adapter, flags)); sb.append('('); if (mapping.getSourceMetaFeature() != null) { sb.append(mapping.getSourceMetaFeature().getEContainingClass().getName()); sb.append(':'); sb.append(getStringByPattern(mapping.getSourceMetaFeature(), EcorePackage.eINSTANCE.getENamedElement_Name(), DEFAULT_PROCESSOR)); } sb.append('-'); sb.append('>'); if (mapping.getLinkMetaFeature() != null) { sb.append(mapping.getLinkMetaFeature().getEContainingClass().getName()); sb.append(':'); sb.append(getStringByPattern(mapping.getLinkMetaFeature(), EcorePackage.eINSTANCE.getENamedElement_Name(), DEFAULT_PROCESSOR)); } sb.append(')'); } return sb.toString(); } protected boolean isAffectingFeature(Object eventFeature) { return eventFeature == GMFMapPackage.eINSTANCE.getMappingEntry_DomainMetaElement() || eventFeature == GMFMapPackage.eINSTANCE.getLinkMapping_SourceMetaFeature() || eventFeature == GMFMapPackage.eINSTANCE.getLinkMapping_LinkMetaFeature(); } public ICommand getParseCommand(IAdaptable adapter, String newString, int flags) { return UnexecutableCommand.INSTANCE; } }; return parser; } private IParser labelMappingInfoParser; private IParser getLabelMappingInfoParser() { if (labelMappingInfoParser == null) { labelMappingInfoParser = createLabelMappingInfoParser(); } return labelMappingInfoParser; } protected IParser createLabelMappingInfoParser() { GMFMapStructuralFeatureParser parser = new GMFMapStructuralFeatureParser(null) { public String getPrintString(IAdaptable adapter, int flags) { StringBuffer sb = new StringBuffer(); EObject element = (EObject) adapter.getAdapter(EObject.class); if (element instanceof FeatureLabelMapping) { FeatureLabelMapping mapping = (FeatureLabelMapping) element; for (Iterator it = mapping.getFeatures().iterator(); it.hasNext();) { EStructuralFeature feature = (EStructuralFeature) it.next(); sb.append(feature.getEContainingClass().getName()); sb.append(':'); sb.append(getStringByPattern(feature, EcorePackage.eINSTANCE.getENamedElement_Name(), DEFAULT_PROCESSOR)); if (it.hasNext()) { sb.append(','); sb.append(' '); } } } else if (element instanceof DesignLabelMapping) { sb.append("<design>"); } else if (element instanceof LabelMapping) { sb.append("<custom>"); } return sb.toString(); } protected boolean isAffectingFeature(Object eventFeature) { return eventFeature == GMFMapPackage.eINSTANCE.getFeatureLabelMapping_Features(); } public ICommand getParseCommand(IAdaptable adapter, String newString, int flags) { return UnexecutableCommand.INSTANCE; } }; return parser; } protected IParser getParser(int visualID) { switch (visualID) { case CanvasMappingInfoEditPart.VISUAL_ID: return getCanvasMappingInfoParser(); case NodeMappingInfoEditPart.VISUAL_ID: return getNodeMappingInfoParser(); case ReferenceInfoEditPart.VISUAL_ID: case ReferenceInfo2EditPart.VISUAL_ID: return getReferenceInfoParser(); case CompartmentMappingInfoEditPart.VISUAL_ID: return getCompartmentMappingInfoParser(); case LinkMappingInfoEditPart.VISUAL_ID: return getLinkMappingInfoParser(); case FeatureLabelMappingEditPart.VISUAL_ID: case FeatureLabelMapping2EditPart.VISUAL_ID: case DesignLabelMappingEditPart.VISUAL_ID: case DesignLabelMapping2EditPart.VISUAL_ID: case LabelMappingEditPart.VISUAL_ID: case LabelMapping2EditPart.VISUAL_ID: return getLabelMappingInfoParser(); } return null; } /** * @generated */ public IParser getParser(IAdaptable hint) { String vid = (String) hint.getAdapter(String.class); if (vid != null) { return getParser(GMFMapVisualIDRegistry.getVisualID(vid)); } View view = (View) hint.getAdapter(View.class); if (view != null) { return getParser(GMFMapVisualIDRegistry.getVisualID(view)); } return null; } /** * @generated */ public boolean provides(IOperation operation) { if (operation instanceof GetParserOperation) { IAdaptable hint = ((GetParserOperation) operation).getHint(); if (GMFMapElementTypes.getElement(hint) == null) { return false; } return getParser(hint) != null; } return false; } }