Class DiagramValidator

  • All Implemented Interfaces:
    ValidationRule
    Direct Known Subclasses:
    OpenedDiagramValidator

    @OpenApiAll
    public abstract class DiagramValidator
    extends java.lang.Object
    implements ValidationRule
    Rule to validate elements of diagrams by a given scope (all diagrams in project, only active diagrams or diagrams from a specific scope). Rule is triggered after various diagram related events like changes in the owned symbols, switching the active diagram and etc.
    • Field Detail

      • needsRun

        private volatile boolean needsRun
        Flag indicating if the annotations should be recalculated
      • diagramListener

        private com.nomagic.magicdraw.uml.symbols.DiagramListenerAdapter2 diagramListener
        Diagram listener to listen for changes in diagram.
      • usedElementsListener

        private com.nomagic.magicdraw.core.diagram.DiagramUsedElementsChangeListener usedElementsListener
        Listens for changes of used model elements. DiagramListenerAdapter2 does not fire any events if used elements changes for non symbol diagrams
      • scopeProvider

        private com.nomagic.magicdraw.validation.ScopeProvider scopeProvider
      • needRunListener

        private final java.beans.PropertyChangeListener needRunListener
      • scopeChangeListener

        private final com.nomagic.magicdraw.validation.ScopeListener scopeChangeListener
      • configs

        @CheckForNull
        private java.util.Map<java.lang.Class<? extends Element>,​java.util.Collection<SmartListenerConfig>> configs
      • filterDescriptor

        @CheckForNull
        private com.nomagic.magicdraw.validation.ConstrainedElementFilterDescriptor filterDescriptor
    • Constructor Detail

      • DiagramValidator

        public DiagramValidator()
    • Method Detail

      • init

        public void init​(Project project,
                         Constraint constraint)
        Description copied from interface: ValidationRule
        This is the first method that is invoked on the implementation of the ValidationRule interface. Implementation can initialize internal state if required.
        Specified by:
        init in interface ValidationRule
        Parameters:
        project - a project of the constraint
        constraint - a constraint object
      • createDiagramListener

        private com.nomagic.magicdraw.uml.symbols.DiagramListenerAdapter2 createDiagramListener()
      • createDiagramUsedElementsChangeListener

        private com.nomagic.magicdraw.core.diagram.DiagramUsedElementsChangeListener createDiagramUsedElementsChangeListener()
      • needsRun

        protected boolean needsRun​(java.beans.PropertyChangeEvent event)
        Check if validator needs to re-run after given change event occurred.
        Parameters:
        event - event occurred.
        Returns:
        true need to validate.
      • getAnnotations

        public abstract java.util.Set<Annotation> getAnnotations​(Project project,
                                                                 Constraint constraint)
        Return Annotation object for each Element or PresentationElement which should be annotated. Only the elements represented in diagrams returned by getDiagrams() method should be analyzed.
        Parameters:
        project - currently active project
        constraint - a validation rule or a legend item. Use this element to construct Annotation objects.
        Returns:
        annotations targeting elements from the diagrams in scope
      • needsRun

        public boolean needsRun()
        Description copied from interface: ValidationRule
        Returns whether the validation rule needs to run.
        Specified by:
        needsRun in interface ValidationRule
        Returns:
        true if validation rule needs to run, otherwise false
      • setNeedsRun

        protected void setNeedsRun​(boolean run)
        Sets flag if this validator has to be re-run, meaning if getAnnotations(Project, Constraint) method should be called again. Actual re-run is done by the validation engine.
        Parameters:
        run - true to mark validator for rerun
      • dispose

        public void dispose()
        Unregisters all listeners that were registered and releases other resources.
        Specified by:
        dispose in interface ValidationRule
      • getProject

        protected Project getProject()
        Get the project.
        Returns:
        project
      • getDiagramsStream

        protected final java.util.stream.Stream<DiagramPresentationElement> getDiagramsStream()
        Returns:
        Stream of the same diagrams as returned by getDiagrams() method. Convenience method.
      • getPresentationElements

        protected java.util.List<PresentationElement> getPresentationElements​(Element element)
        Parameters:
        element - element to get presentation elements for
        Returns:
        presentation elements of the given element from all diagrams that are currently in scope
      • getPresentationElements

        protected java.util.List<PresentationElement> getPresentationElements​(Element element,
                                                                              java.util.Collection<DiagramPresentationElement> diagrams)
        Parameters:
        element - element to get presentation elements for
        diagrams - diagrams of interest
        Returns:
        presentation elements of the given element from given diagrams
      • setScopeProvider

        void setScopeProvider​(com.nomagic.magicdraw.validation.ScopeProvider scopeProvider)
      • removeScopeListenerFromProvider

        private void removeScopeListenerFromProvider()
      • isElementInScope

        public boolean isElementInScope​(Element element)
        If DiagramValidator is to be used in passive validation, then model part to validate can be selected. So certain elements used in the diagram should be validated (they are in selected model scope) and certain should be ignored.

        Only annotate the element or it's symbol if the element is in scope. Recommendation is to call this method for failing elements only as the last check, since many calls to this method might affect performance in certain scenarios

        Parameters:
        element - element which is used in any of the diagrams in scope
        Returns:
        true if the element is in the model scope for the current validation
      • registerConfigs

        private void registerConfigs()
      • unregisterConfigs

        private void unregisterConfigs()