package org.eclipse.uml2.diagram.csd.providers;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.diagram.core.providers.AbstractViewProvider;
import org.eclipse.gmf.runtime.emf.type.core.IElementType;
import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationInstanceEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationInstanceSourceEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationInstanceTargetEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationName2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationName3EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationName4EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationName5EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationName6EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationName7EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.AssociationNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.Class2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.Class3EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ClassAttributesEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ClassClass_contentsEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ClassClassesEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ClassEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ClassName2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ClassNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ClassOperationsEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ClassQualifiedNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.CollaborationContentsEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.CollaborationEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.CollaborationNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.CollaborationUse2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.CollaborationUseName2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConnectorEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConnectorName2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConnectorName3EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConnectorName4EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConnectorName5EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConnectorName6EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConnectorName7EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConnectorNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConstraintConstrainedElementEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConstraintEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ConstraintNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.DependencyEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.DependencyNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ElementImportEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.InstanceSpecificationEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.InstanceSpecificationNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.InstanceSpecificationSlotsEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.InterfaceEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.InterfaceNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.InterfaceRealizationEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.OperationEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.Package2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PackageEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PackageImportsEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PackageNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ParameterEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.ParameterNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.Port2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.Port3EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PortEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PortIsBehavior2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PortIsBehaviorEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PortName2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PortName3EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PortNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PortProvidedEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PortRequiredEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.Property2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.Property3EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PropertyEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PropertyName2EditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.PropertyNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.SlotEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.SlotNameEditPart;
import org.eclipse.uml2.diagram.csd.edit.parts.UsageEditPart;
import org.eclipse.uml2.diagram.csd.part.UMLVisualIDRegistry;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationInstanceSourceViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationInstanceTargetViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationInstanceViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationName2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationName3ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationName4ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationName5ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationName6ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationName7ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.AssociationViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.Class2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.Class3ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ClassAttributesViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ClassClass_contentsViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ClassClassesViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ClassName2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ClassNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ClassOperationsViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ClassQualifiedNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ClassViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.CollaborationContentsViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.CollaborationNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.CollaborationUse2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.CollaborationUseName2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.CollaborationViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConnectorName2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConnectorName3ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConnectorName4ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConnectorName5ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConnectorName6ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConnectorName7ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConnectorNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConnectorViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConstraintConstrainedElementViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConstraintNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ConstraintViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.DependencyNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.DependencyViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ElementImportViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.InstanceSpecificationNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.InstanceSpecificationSlotsViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.InstanceSpecificationViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.InterfaceNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.InterfaceRealizationViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.InterfaceViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.OperationViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.Package2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PackageImportsViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PackageNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PackageViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ParameterNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.ParameterViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.Port2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.Port3ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PortIsBehavior2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PortIsBehaviorViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PortName2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PortName3ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PortNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PortProvidedViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PortRequiredViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PortViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.Property2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.Property3ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PropertyName2ViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PropertyNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.PropertyViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.SlotNameViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.SlotViewFactory;
import org.eclipse.uml2.diagram.csd.view.factories.UsageViewFactory;

/**
 * @generated
 */
public class UMLViewProvider extends AbstractViewProvider {

	/**
	 * @generated
	 */
	protected Class getDiagramViewClass(IAdaptable semanticAdapter, String diagramKind) {
		EObject semanticElement = getSemanticElement(semanticAdapter);
		if (PackageEditPart.MODEL_ID.equals(diagramKind) && UMLVisualIDRegistry.getDiagramVisualID(semanticElement) != -1) {
			return PackageViewFactory.class;
		}
		return null;
	}

	/**
	 * @generated
	 */
	protected Class getNodeViewClass(IAdaptable semanticAdapter, View containerView, String semanticHint) {
		if (containerView == null) {
			return null;
		}
		IElementType elementType = getSemanticElementType(semanticAdapter);
		EObject domainElement = getSemanticElement(semanticAdapter);
		int visualID;
		if (semanticHint == null) {
			// Semantic hint is not specified. Can be a result of call from CanonicalEditPolicy.
			// In this situation there should be NO elementType, visualID will be determined
			// by VisualIDRegistry.getNodeVisualID() for domainElement.
			if (elementType != null || domainElement == null) {
				return null;
			}
			visualID = UMLVisualIDRegistry.getNodeVisualID(containerView, domainElement);
		} else {
			visualID = UMLVisualIDRegistry.getVisualID(semanticHint);
			if (elementType != null) {
				// Semantic hint is specified together with element type.
				// Both parameters should describe exactly the same diagram element.
				// In addition we check that visualID returned by VisualIDRegistry.getNodeVisualID() for
				// domainElement (if specified) is the same as in element type.
				if (!UMLElementTypes.isKnownElementType(elementType) || (!(elementType instanceof IHintedType))) {
					return null; // foreign element type
				}
				String elementTypeHint = ((IHintedType) elementType).getSemanticHint();
				if (!semanticHint.equals(elementTypeHint)) {
					return null; // if semantic hint is specified it should be the same as in element type
				}
				if (domainElement != null && visualID != UMLVisualIDRegistry.getNodeVisualID(containerView, domainElement)) {
					return null; // visual id for node EClass should match visual id from element type
				}
			} else {
				// Element type is not specified. Domain element should be present.
				// This method is called with EObjectAdapter as parameter from:
				//   - ViewService.createNode(View container, EObject eObject, String type, PreferencesHint preferencesHint) 
				//   - generated ViewFactory.decorateView() for parent element
				if (!PackageEditPart.MODEL_ID.equals(UMLVisualIDRegistry.getModelID(containerView))) {
					return null; // foreign diagram
				}
				switch (visualID) {
				case ClassEditPart.VISUAL_ID: {
					if (domainElement == null) {
						return null;
					}

					int suggestedID = UMLVisualIDRegistry.getNodeVisualID(containerView, domainElement);
					if (visualID != suggestedID && Class3EditPart.VISUAL_ID != suggestedID && true) {
						return null;
					}
					break;
				}
				case Class3EditPart.VISUAL_ID: {
					if (domainElement == null) {
						return null;
					}

					int suggestedID = UMLVisualIDRegistry.getNodeVisualID(containerView, domainElement);
					if (visualID != suggestedID && ClassEditPart.VISUAL_ID != suggestedID && true) {
						return null;
					}
					break;
				}
				case CollaborationEditPart.VISUAL_ID:
				case Package2EditPart.VISUAL_ID:
				case InterfaceEditPart.VISUAL_ID:
				case InstanceSpecificationEditPart.VISUAL_ID:
				case ConstraintEditPart.VISUAL_ID:
				case CollaborationUse2EditPart.VISUAL_ID:
				case PropertyEditPart.VISUAL_ID:
				case ParameterEditPart.VISUAL_ID:
				case Property2EditPart.VISUAL_ID:
				case OperationEditPart.VISUAL_ID:
				case Class2EditPart.VISUAL_ID:
				case PortEditPart.VISUAL_ID:
				case ElementImportEditPart.VISUAL_ID:
				case Property3EditPart.VISUAL_ID:
				case Port2EditPart.VISUAL_ID:
				case Port3EditPart.VISUAL_ID:
				case SlotEditPart.VISUAL_ID:
					if (domainElement == null || visualID != UMLVisualIDRegistry.getNodeVisualID(containerView, domainElement)) {
						return null; // visual id in semantic hint should match visual id for domain element
					}
					break;
				case CollaborationNameEditPart.VISUAL_ID:
				case CollaborationContentsEditPart.VISUAL_ID:
					if (CollaborationEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case ClassNameEditPart.VISUAL_ID:
				case ClassQualifiedNameEditPart.VISUAL_ID:
				case ClassAttributesEditPart.VISUAL_ID:
				case ClassOperationsEditPart.VISUAL_ID:
				case ClassClassesEditPart.VISUAL_ID:
					if (ClassEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case PackageNameEditPart.VISUAL_ID:
				case PackageImportsEditPart.VISUAL_ID:
					if (Package2EditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case ClassName2EditPart.VISUAL_ID:
				case ClassClass_contentsEditPart.VISUAL_ID:
					if (Class3EditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case InterfaceNameEditPart.VISUAL_ID:
					if (InterfaceEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case InstanceSpecificationNameEditPart.VISUAL_ID:
				case InstanceSpecificationSlotsEditPart.VISUAL_ID:
					if (InstanceSpecificationEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case ConstraintNameEditPart.VISUAL_ID:
					if (ConstraintEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case CollaborationUseName2EditPart.VISUAL_ID:
					if (CollaborationUse2EditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case PropertyNameEditPart.VISUAL_ID:
					if (PropertyEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case ParameterNameEditPart.VISUAL_ID:
					if (ParameterEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case PortNameEditPart.VISUAL_ID:
				case PortIsBehaviorEditPart.VISUAL_ID:
					if (PortEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case PropertyName2EditPart.VISUAL_ID:
					if (Property3EditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case PortName2EditPart.VISUAL_ID:
					if (Port2EditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case PortName3EditPart.VISUAL_ID:
				case PortIsBehavior2EditPart.VISUAL_ID:
					if (Port3EditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case ConnectorNameEditPart.VISUAL_ID:
				case ConnectorName2EditPart.VISUAL_ID:
				case ConnectorName3EditPart.VISUAL_ID:
				case ConnectorName4EditPart.VISUAL_ID:
				case ConnectorName5EditPart.VISUAL_ID:
				case ConnectorName6EditPart.VISUAL_ID:
				case ConnectorName7EditPart.VISUAL_ID:
					if (ConnectorEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case DependencyNameEditPart.VISUAL_ID:
					if (DependencyEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case AssociationNameEditPart.VISUAL_ID:
				case AssociationName2EditPart.VISUAL_ID:
				case AssociationName3EditPart.VISUAL_ID:
				case AssociationName4EditPart.VISUAL_ID:
				case AssociationName5EditPart.VISUAL_ID:
				case AssociationName6EditPart.VISUAL_ID:
				case AssociationName7EditPart.VISUAL_ID:
					if (AssociationEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				case AssociationInstanceSourceEditPart.VISUAL_ID:
				case AssociationInstanceTargetEditPart.VISUAL_ID:
					if (AssociationInstanceEditPart.VISUAL_ID != UMLVisualIDRegistry.getVisualID(containerView) || containerView.getElement() != domainElement) {
						return null; // wrong container
					}
					break;
				default:
					return null;
				}
			}
		}
		return getNodeViewClass(containerView, visualID);
	}

	/**
	 * @generated
	 */
	protected Class getNodeViewClass(View containerView, int visualID) {
		if (containerView == null || !UMLVisualIDRegistry.canCreateNode(containerView, visualID)) {
			return null;
		}
		switch (visualID) {
		case CollaborationEditPart.VISUAL_ID:
			return CollaborationViewFactory.class;
		case CollaborationNameEditPart.VISUAL_ID:
			return CollaborationNameViewFactory.class;
		case ClassEditPart.VISUAL_ID:
			return ClassViewFactory.class;
		case ClassNameEditPart.VISUAL_ID:
			return ClassNameViewFactory.class;
		case ClassQualifiedNameEditPart.VISUAL_ID:
			return ClassQualifiedNameViewFactory.class;
		case Package2EditPart.VISUAL_ID:
			return Package2ViewFactory.class;
		case PackageNameEditPart.VISUAL_ID:
			return PackageNameViewFactory.class;
		case Class3EditPart.VISUAL_ID:
			return Class3ViewFactory.class;
		case ClassName2EditPart.VISUAL_ID:
			return ClassName2ViewFactory.class;
		case InterfaceEditPart.VISUAL_ID:
			return InterfaceViewFactory.class;
		case InterfaceNameEditPart.VISUAL_ID:
			return InterfaceNameViewFactory.class;
		case InstanceSpecificationEditPart.VISUAL_ID:
			return InstanceSpecificationViewFactory.class;
		case InstanceSpecificationNameEditPart.VISUAL_ID:
			return InstanceSpecificationNameViewFactory.class;
		case ConstraintEditPart.VISUAL_ID:
			return ConstraintViewFactory.class;
		case ConstraintNameEditPart.VISUAL_ID:
			return ConstraintNameViewFactory.class;
		case CollaborationUse2EditPart.VISUAL_ID:
			return CollaborationUse2ViewFactory.class;
		case CollaborationUseName2EditPart.VISUAL_ID:
			return CollaborationUseName2ViewFactory.class;
		case PropertyEditPart.VISUAL_ID:
			return PropertyViewFactory.class;
		case PropertyNameEditPart.VISUAL_ID:
			return PropertyNameViewFactory.class;
		case ParameterEditPart.VISUAL_ID:
			return ParameterViewFactory.class;
		case ParameterNameEditPart.VISUAL_ID:
			return ParameterNameViewFactory.class;
		case Property2EditPart.VISUAL_ID:
			return Property2ViewFactory.class;
		case OperationEditPart.VISUAL_ID:
			return OperationViewFactory.class;
		case Class2EditPart.VISUAL_ID:
			return Class2ViewFactory.class;
		case PortEditPart.VISUAL_ID:
			return PortViewFactory.class;
		case PortNameEditPart.VISUAL_ID:
			return PortNameViewFactory.class;
		case PortIsBehaviorEditPart.VISUAL_ID:
			return PortIsBehaviorViewFactory.class;
		case ElementImportEditPart.VISUAL_ID:
			return ElementImportViewFactory.class;
		case Property3EditPart.VISUAL_ID:
			return Property3ViewFactory.class;
		case PropertyName2EditPart.VISUAL_ID:
			return PropertyName2ViewFactory.class;
		case Port2EditPart.VISUAL_ID:
			return Port2ViewFactory.class;
		case PortName2EditPart.VISUAL_ID:
			return PortName2ViewFactory.class;
		case Port3EditPart.VISUAL_ID:
			return Port3ViewFactory.class;
		case PortName3EditPart.VISUAL_ID:
			return PortName3ViewFactory.class;
		case PortIsBehavior2EditPart.VISUAL_ID:
			return PortIsBehavior2ViewFactory.class;
		case SlotEditPart.VISUAL_ID:
			return SlotViewFactory.class;
		case CollaborationContentsEditPart.VISUAL_ID:
			return CollaborationContentsViewFactory.class;
		case ClassAttributesEditPart.VISUAL_ID:
			return ClassAttributesViewFactory.class;
		case ClassOperationsEditPart.VISUAL_ID:
			return ClassOperationsViewFactory.class;
		case ClassClassesEditPart.VISUAL_ID:
			return ClassClassesViewFactory.class;
		case PackageImportsEditPart.VISUAL_ID:
			return PackageImportsViewFactory.class;
		case ClassClass_contentsEditPart.VISUAL_ID:
			return ClassClass_contentsViewFactory.class;
		case InstanceSpecificationSlotsEditPart.VISUAL_ID:
			return InstanceSpecificationSlotsViewFactory.class;
		case ConnectorNameEditPart.VISUAL_ID:
			return ConnectorNameViewFactory.class;
		case ConnectorName2EditPart.VISUAL_ID:
			return ConnectorName2ViewFactory.class;
		case ConnectorName3EditPart.VISUAL_ID:
			return ConnectorName3ViewFactory.class;
		case ConnectorName4EditPart.VISUAL_ID:
			return ConnectorName4ViewFactory.class;
		case ConnectorName5EditPart.VISUAL_ID:
			return ConnectorName5ViewFactory.class;
		case ConnectorName6EditPart.VISUAL_ID:
			return ConnectorName6ViewFactory.class;
		case ConnectorName7EditPart.VISUAL_ID:
			return ConnectorName7ViewFactory.class;
		case DependencyNameEditPart.VISUAL_ID:
			return DependencyNameViewFactory.class;
		case AssociationNameEditPart.VISUAL_ID:
			return AssociationNameViewFactory.class;
		case AssociationName2EditPart.VISUAL_ID:
			return AssociationName2ViewFactory.class;
		case AssociationName3EditPart.VISUAL_ID:
			return AssociationName3ViewFactory.class;
		case AssociationName4EditPart.VISUAL_ID:
			return AssociationName4ViewFactory.class;
		case AssociationName5EditPart.VISUAL_ID:
			return AssociationName5ViewFactory.class;
		case AssociationName6EditPart.VISUAL_ID:
			return AssociationName6ViewFactory.class;
		case AssociationName7EditPart.VISUAL_ID:
			return AssociationName7ViewFactory.class;
		case AssociationInstanceSourceEditPart.VISUAL_ID:
			return AssociationInstanceSourceViewFactory.class;
		case AssociationInstanceTargetEditPart.VISUAL_ID:
			return AssociationInstanceTargetViewFactory.class;
		}
		return null;
	}

	/**
	 * @generated
	 */
	protected Class getEdgeViewClass(IAdaptable semanticAdapter, View containerView, String semanticHint) {
		IElementType elementType = getSemanticElementType(semanticAdapter);
		if (!UMLElementTypes.isKnownElementType(elementType) || (!(elementType instanceof IHintedType))) {
			return null; // foreign element type
		}
		String elementTypeHint = ((IHintedType) elementType).getSemanticHint();
		if (elementTypeHint == null) {
			return null; // our hint is visual id and must be specified
		}
		if (semanticHint != null && !semanticHint.equals(elementTypeHint)) {
			return null; // if semantic hint is specified it should be the same as in element type
		}
		int visualID = UMLVisualIDRegistry.getVisualID(elementTypeHint);
		EObject domainElement = getSemanticElement(semanticAdapter);
		if (domainElement != null && visualID != UMLVisualIDRegistry.getLinkWithClassVisualID(domainElement)) {
			return null; // visual id for link EClass should match visual id from element type
		}
		return getEdgeViewClass(visualID);
	}

	/**
	 * @generated
	 */
	protected Class getEdgeViewClass(int visualID) {
		switch (visualID) {
		case ConnectorEditPart.VISUAL_ID:
			return ConnectorViewFactory.class;
		case DependencyEditPart.VISUAL_ID:
			return DependencyViewFactory.class;
		case InterfaceRealizationEditPart.VISUAL_ID:
			return InterfaceRealizationViewFactory.class;
		case UsageEditPart.VISUAL_ID:
			return UsageViewFactory.class;
		case PortProvidedEditPart.VISUAL_ID:
			return PortProvidedViewFactory.class;
		case AssociationEditPart.VISUAL_ID:
			return AssociationViewFactory.class;
		case ConstraintConstrainedElementEditPart.VISUAL_ID:
			return ConstraintConstrainedElementViewFactory.class;
		case PortRequiredEditPart.VISUAL_ID:
			return PortRequiredViewFactory.class;
		case AssociationInstanceEditPart.VISUAL_ID:
			return AssociationInstanceViewFactory.class;
		}
		return null;
	}

	/**
	 * @generated
	 */
	private IElementType getSemanticElementType(IAdaptable semanticAdapter) {
		if (semanticAdapter == null) {
			return null;
		}
		return (IElementType) semanticAdapter.getAdapter(IElementType.class);
	}

}
