/******************************************************************************* * Copyright (c) 2008, 2011 Obeo. * 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: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.eef.components.validation; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.eef.components.PropertiesEditionComponent; import org.eclipse.emf.eef.components.PropertiesEditionElement; import org.eclipse.emf.eef.views.Container; import org.eclipse.emf.eef.views.ElementEditor; import org.eclipse.emf.eef.views.View; import org.eclipse.emf.eef.views.ViewElement; import org.eclipse.emf.validation.AbstractModelConstraint; import org.eclipse.emf.validation.EMFEventType; import org.eclipse.emf.validation.IValidationContext; /** * @author <a href="mailto:stephane.bouchet@obeo.fr">Stephane Bouchet</a> */ public class BadReferencedEditorConstraint extends AbstractModelConstraint { /** * {@inheritDoc} * * @see org.eclipse.emf.validation.AbstractModelConstraint#validate(org.eclipse.emf.validation.IValidationContext) */ @Override public IStatus validate(IValidationContext ctx) { EObject eObj = ctx.getTarget(); EMFEventType eType = ctx.getEventType(); // In the case of batch mode. if (eType == EMFEventType.NULL) { if (eObj instanceof PropertiesEditionElement) { for (ElementEditor elementEditor : ((PropertiesEditionElement)eObj).getViews()) { if (!existElementEditorInInvolvedViews((PropertiesEditionComponent)eObj.eContainer(), elementEditor)) return ctx.createFailureStatus(new Object[] {elementEditor, ((PropertiesEditionElement)eObj).getName()}); } } } return ctx.createSuccessStatus(); } /** * @param obj * @return */ private boolean existElementEditorInInvolvedViews(PropertiesEditionComponent pec, ElementEditor elementEditor) { for (View view : pec.getViews()) { for (ViewElement viewElement : view.getElements()) if (existElementEditorInViewElements(viewElement, elementEditor)) return true; } return false; } private boolean existElementEditorInViewElements(ViewElement viewElement, ElementEditor elementEditor) { if (viewElement.equals(elementEditor)) return true; if (viewElement instanceof Container) { for (ViewElement ve2 : ((Container)viewElement).getElements()) { if (existElementEditorInViewElements(ve2, elementEditor)) return true; } } return false; } }