Package OntoUML.diagram.part

Source Code of OntoUML.diagram.part.ValidateAction

package OntoUML.diagram.part;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.transaction.util.TransactionUtil;
import org.eclipse.emf.validation.model.EvaluationMode;
import org.eclipse.emf.validation.model.IConstraintStatus;
import org.eclipse.emf.validation.service.IBatchValidator;
import org.eclipse.emf.validation.service.ModelValidationService;
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gmf.runtime.common.ui.util.IWorkbenchPartDescriptor;
import org.eclipse.gmf.runtime.diagram.ui.OffscreenEditPartFactory;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;

/**
* @generated
*/
public class ValidateAction extends Action {

  /**
   * @generated
   */
  public static final String VALIDATE_ACTION_KEY = "validateAction"; //$NON-NLS-1$

  /**
   * @generated
   */
  private IWorkbenchPartDescriptor workbenchPartDescriptor;

  /**
   * @generated
   */
  public ValidateAction(IWorkbenchPartDescriptor workbenchPartDescriptor) {
    setId(VALIDATE_ACTION_KEY);
    setText(OntoUML.diagram.part.Messages.ValidateActionMessage);
    this.workbenchPartDescriptor = workbenchPartDescriptor;
  }

  /**
   * @generated
   */
  public void run() {
    IWorkbenchPart workbenchPart = workbenchPartDescriptor.getPartPage()
        .getActivePart();
    if (workbenchPart instanceof IDiagramWorkbenchPart) {
      final IDiagramWorkbenchPart part = (IDiagramWorkbenchPart) workbenchPart;
      try {
        new IRunnableWithProgress() {

          public void run(IProgressMonitor monitor)
              throws InterruptedException,
              InvocationTargetException {
            runValidation(part.getDiagramEditPart(), part
                .getDiagram());
          }
        }.run(new NullProgressMonitor());
      } catch (Exception e) {
        OntoUML.diagram.part.OntoUMLDiagramEditorPlugin.getInstance()
            .logError("Validation action failed", e); //$NON-NLS-1$
      }
    }
  }

  /**
   * @generated
   */
  public static void runValidation(View view) {
    try {
      if (OntoUML.diagram.part.OntoUMLDiagramEditorUtil.openDiagram(view
          .eResource())) {
        IEditorPart editorPart = PlatformUI.getWorkbench()
            .getActiveWorkbenchWindow().getActivePage()
            .getActiveEditor();
        if (editorPart instanceof IDiagramWorkbenchPart) {
          runValidation(((IDiagramWorkbenchPart) editorPart)
              .getDiagramEditPart(), view);
        } else {
          runNonUIValidation(view);
        }
      }
    } catch (Exception e) {
      OntoUML.diagram.part.OntoUMLDiagramEditorPlugin.getInstance()
          .logError("Validation action failed", e); //$NON-NLS-1$
    }
  }

  /**
   * @generated
   */
  public static void runNonUIValidation(View view) {
    DiagramEditPart diagramEditPart = OffscreenEditPartFactory
        .getInstance().createDiagramEditPart(view.getDiagram());
    runValidation(diagramEditPart, view);
  }

  /**
   * @generated
   */
  public static void runValidation(DiagramEditPart diagramEditPart, View view) {
    final DiagramEditPart fpart = diagramEditPart;
    final View fview = view;
    TransactionalEditingDomain txDomain = TransactionUtil
        .getEditingDomain(view);
    OntoUML.diagram.providers.OntoUMLValidationProvider.runWithConstraints(
        txDomain, new Runnable() {

          public void run() {
            validate(fpart, fview);
          }
        });
  }

  /**
   * @generated
   */
  private static Diagnostic runEMFValidator(View target) {
    if (target.isSetElement() && target.getElement() != null) {
      return new Diagnostician() {

        public String getObjectLabel(EObject eObject) {
          return EMFCoreUtil.getQualifiedName(eObject, true);
        }
      }.validate(target.getElement());
    }
    return Diagnostic.OK_INSTANCE;
  }

  /**
   * @generated
   */
  private static void validate(DiagramEditPart diagramEditPart, View view) {
    View target = view;
    OntoUML.diagram.part.ValidationMarker.removeAllMarkers(diagramEditPart
        .getViewer());
    Diagnostic diagnostic = runEMFValidator(view);
    createMarkers(target, diagnostic, diagramEditPart);
    IBatchValidator validator = (IBatchValidator) ModelValidationService
        .getInstance().newValidator(EvaluationMode.BATCH);
    validator.setIncludeLiveConstraints(true);
    if (view.isSetElement() && view.getElement() != null) {
      IStatus status = validator.validate(view.getElement());
      createMarkers(target, status, diagramEditPart);
    }
    OntoUML.diagram.providers.OntoUMLValidationDecoratorProvider
        .refreshDecorators(view);
    for (Iterator it = view.eAllContents(); it.hasNext();) {
      EObject next = (EObject) it.next();
      if (next instanceof View) {
        OntoUML.diagram.providers.OntoUMLValidationDecoratorProvider
            .refreshDecorators((View) next);
      }
    }
  }

  /**
   * @generated
   */
  private static void createMarkers(View target, IStatus validationStatus,
      DiagramEditPart diagramEditPart) {
    if (validationStatus.isOK()) {
      return;
    }
    final IStatus rootStatus = validationStatus;
    List allStatuses = new ArrayList();
    OntoUML.diagram.part.OntoUMLDiagramEditorUtil.LazyElement2ViewMap element2ViewMap = new OntoUML.diagram.part.OntoUMLDiagramEditorUtil.LazyElement2ViewMap(
        diagramEditPart.getDiagramView(), collectTargetElements(
            rootStatus, new HashSet(), allStatuses));
    for (Iterator it = allStatuses.iterator(); it.hasNext();) {
      IConstraintStatus nextStatus = (IConstraintStatus) it.next();
      View view = OntoUML.diagram.part.OntoUMLDiagramEditorUtil.findView(
          diagramEditPart, nextStatus.getTarget(), element2ViewMap);
      addMarker(diagramEditPart.getViewer(), target, view.eResource()
          .getURIFragment(view), EMFCoreUtil.getQualifiedName(
          nextStatus.getTarget(), true), nextStatus.getMessage(),
          nextStatus.getSeverity());
    }
  }

  /**
   * @generated
   */
  private static void createMarkers(View target,
      Diagnostic emfValidationStatus, DiagramEditPart diagramEditPart) {
    if (emfValidationStatus.getSeverity() == Diagnostic.OK) {
      return;
    }
    final Diagnostic rootStatus = emfValidationStatus;
    List allDiagnostics = new ArrayList();
    OntoUML.diagram.part.OntoUMLDiagramEditorUtil.LazyElement2ViewMap element2ViewMap = new OntoUML.diagram.part.OntoUMLDiagramEditorUtil.LazyElement2ViewMap(
        diagramEditPart.getDiagramView(), collectTargetElements(
            rootStatus, new HashSet(), allDiagnostics));
    for (Iterator it = emfValidationStatus.getChildren().iterator(); it
        .hasNext();) {
      Diagnostic nextDiagnostic = (Diagnostic) it.next();
      List data = nextDiagnostic.getData();
      if (data != null && !data.isEmpty()
          && data.get(0) instanceof EObject) {
        EObject element = (EObject) data.get(0);
        View view = OntoUML.diagram.part.OntoUMLDiagramEditorUtil
            .findView(diagramEditPart, element, element2ViewMap);
        addMarker(
            diagramEditPart.getViewer(),
            target,
            view.eResource().getURIFragment(view),
            EMFCoreUtil.getQualifiedName(element, true),
            nextDiagnostic.getMessage(),
            diagnosticToStatusSeverity(nextDiagnostic.getSeverity()));
      }
    }
  }

  /**
   * @generated
   */
  private static void addMarker(EditPartViewer viewer, View target,
      String elementId, String location, String message,
      int statusSeverity) {
    if (target == null) {
      return;
    }
    new OntoUML.diagram.part.ValidationMarker(location, message,
        statusSeverity).add(viewer, elementId);
  }

  /**
   * @generated
   */
  private static int diagnosticToStatusSeverity(int diagnosticSeverity) {
    if (diagnosticSeverity == Diagnostic.OK) {
      return IStatus.OK;
    } else if (diagnosticSeverity == Diagnostic.INFO) {
      return IStatus.INFO;
    } else if (diagnosticSeverity == Diagnostic.WARNING) {
      return IStatus.WARNING;
    } else if (diagnosticSeverity == Diagnostic.ERROR
        || diagnosticSeverity == Diagnostic.CANCEL) {
      return IStatus.ERROR;
    }
    return IStatus.INFO;
  }

  /**
   * @generated
   */
  private static Set collectTargetElements(IStatus status,
      Set targetElementCollector, List allConstraintStatuses) {
    if (status instanceof IConstraintStatus) {
      targetElementCollector
          .add(((IConstraintStatus) status).getTarget());
      allConstraintStatuses.add(status);
    }
    if (status.isMultiStatus()) {
      IStatus[] children = status.getChildren();
      for (int i = 0; i < children.length; i++) {
        collectTargetElements(children[i], targetElementCollector,
            allConstraintStatuses);
      }
    }
    return targetElementCollector;
  }

  /**
   * @generated
   */
  private static Set collectTargetElements(Diagnostic diagnostic,
      Set targetElementCollector, List allDiagnostics) {
    List data = diagnostic.getData();
    EObject target = null;
    if (data != null && !data.isEmpty() && data.get(0) instanceof EObject) {
      target = (EObject) data.get(0);
      targetElementCollector.add(target);
      allDiagnostics.add(diagnostic);
    }
    if (diagnostic.getChildren() != null
        && !diagnostic.getChildren().isEmpty()) {
      for (Iterator it = diagnostic.getChildren().iterator(); it
          .hasNext();) {
        collectTargetElements((Diagnostic) it.next(),
            targetElementCollector, allDiagnostics);
      }
    }
    return targetElementCollector;
  }
}
TOP

Related Classes of OntoUML.diagram.part.ValidateAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.