/******************************************************************************* * Copyright (c) 2004, 2005 Sybase, Inc. and others. * * 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: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.jsf.facesconfig.ui.pageflow.util; import java.util.Iterator; import org.eclipse.core.resources.IMarker; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.jface.text.source.Annotation; import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.IAnnotationEditPart; import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PFValidator; import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowElementEditPart; import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowLinkEditPart; import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowNodeEditPart; import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowLink; import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowPage; /** * This class can be used to add annotation for the current pageflow model and * decoration for view. * * @author Xiao-guang Zhang * * */ public class PageflowAnnotationUtil { /** * * validate the pageflow and its edit part * * @param containerPart - * it can be null, then the edit part will not be updated */ public static void validatePageflow(final GraphicalEditPart containerPart) { if (containerPart == null) { return; } // removeAllAnnotations(containerPart); // validate the nodes including page and actions. final Iterator iterChild = containerPart.getChildren().iterator(); while (iterChild.hasNext()) { final PageflowElementEditPart element = (PageflowElementEditPart) iterChild .next(); // String errorMessage = null; if (element instanceof PFValidator) { ((PFValidator) element).validate(); } // if (element.getModel() instanceof PageflowPage) { // errorMessage = PageflowValidation.getInstance().getNotifyMessage( // (PageflowPage) element.getModel()); // } // if (errorMessage != null) { // addAnnotation(element, errorMessage); // } else { // removeAnnotation(element); // } // validate the connections. final Iterator iterLinks = element.getSourceConnections().iterator(); while (iterLinks.hasNext()) { final PageflowLinkEditPart link = (PageflowLinkEditPart) iterLinks .next(); link.validate(); // validateLink(link); } } } /** * validate the page based on model and its's edit part. * * @param pagePart - * it can be null, then the edit part will not be updated */ public static void validatePage(final PageflowNodeEditPart pagePart) { if (pagePart != null && pagePart.getParent() != null) { return; } String errorMessage = null; removeAnnotation(pagePart); errorMessage = PageflowValidation.getInstance().getNotifyMessage( (PageflowPage) pagePart.getModel()); if (errorMessage != null) { addAnnotation(pagePart, errorMessage); } else { removeAnnotation(pagePart); } // validate the connections. // Iterator iterLinks = pagePart.getSourceConnections().iterator(); // while (iterLinks.hasNext()) { // PageflowLinkEditPart link = (PageflowLinkEditPart) iterLinks.next(); // // validateLink(link); // } } /** * validate the link based on model and its's edit part. * * @param linkPart - * it can be null, then the edit part will not be updated */ public static void validateLink(final PageflowLinkEditPart linkPart) { if (linkPart != null && linkPart.getParent() != null) { String errorMessage = null; removeAnnotation(linkPart); errorMessage = PageflowValidation.getInstance().isValidLink( (PageflowLink) linkPart.getModel()); if (errorMessage != null) { addAnnotation(linkPart, errorMessage); } else { removeAnnotation(linkPart); } } } /** * add a marker with IMarker.PROBLEM type, IMarker.SEVERITY_ERROR severity, * and message. * * @param editPart * @param model * @param message */ private static void addAnnotation(final GraphicalEditPart editPart, final String message) { if (editPart != null && editPart instanceof IAnnotationEditPart) { final Annotation annotation = new Annotation(IMarker.PROBLEM, false, message); ((IAnnotationEditPart) editPart).addAnnotation(annotation); } } /** * remove a marker * * @param editPart * @param model */ private static void removeAnnotation(final GraphicalEditPart editPart) { if (editPart != null && editPart instanceof IAnnotationEditPart) { ((IAnnotationEditPart) editPart).removeAnnotation(); } } }