/** * 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: * bblajer - initial API and implementation */ package org.eclipse.gmf.runtime.lite.edit.parts.update.canonical; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.editparts.AbstractEditPart; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.View; /** * Implementation of {@link IViewService} that uses EditPartRegistry to match views with domain elements. * In order for this service to work correctly, edit parts must register themselves against domain elements in {@link AbstractEditPart#registerModel()} method. */ public class EditPartRegistryBasedViewService extends DelegatingViewService { public EditPartRegistryBasedViewService(EditPartViewer viewer) { super(new ExactMatchViewService(viewer)); } private static class ExactMatchViewService implements IExactMatchFinder { private final EditPartViewer myViewer; public ExactMatchViewService(EditPartViewer viewer) { myViewer = viewer; } public View findView(EObject modelElement) { EditPart editPart = (EditPart) myViewer.getEditPartRegistry().get(modelElement); if (editPart != null && editPart.isActive() && editPart.getModel() instanceof View) { return (View) editPart.getModel(); } return null; } public Diagram getDiagram() { return (Diagram) myViewer.getContents().getModel(); } } }