Class CmiComparisonParticipant

java.lang.Object
com._1c.g5.v8.dt.compare.participant.AbstractEmfBasedComparisonParticipant
com._1c.g5.v8.dt.internal.cmi.compare.CmiComparisonParticipant
All Implemented Interfaces:
IComparisonParticipant

public class CmiComparisonParticipant extends AbstractEmfBasedComparisonParticipant
The CMI module comparison participant.
  • Constructor Details

    • CmiComparisonParticipant

      public CmiComparisonParticipant()
      Creates an instance of the participant.
    • CmiComparisonParticipant

      public CmiComparisonParticipant(org.eclipse.xtext.scoping.IScopeProvider scopeProvider)
      Creates an instance of the participant with the specified scope provider.
      Parameters:
      scopeProvider - The scope provider for CMI objects.
  • Method Details

    • ableToBreakCorrespondence

      public boolean ableToBreakCorrespondence(ComparisonNode node)
      Description copied from interface: IComparisonParticipant
      Tells whether to able to break the correspondence for the specified node.
      Parameters:
      node - the comparison node to check, not null
      Returns:
      true if it is possible to break the correspondence, false otherwise
    • breakCorrespondence

      public void breakCorrespondence(ComparisonContext comparisonContext, ComparisonNode node)
      Description copied from interface: IComparisonParticipant
      Breaks the correspondence for the specified node.
      Parameters:
      comparisonContext - the comparison context, not null
      node - the node with the correspondence to break, not null
    • combineOneSideNodes

      public void combineOneSideNodes(ComparisonContext comparisonContext, ComparisonNode mainNode, ComparisonNode otherNode, List<Long> newNodeIds)
      Description copied from interface: IComparisonParticipant
      Combines the specified two one-side nodes. The participant fills array of new node Ids created while combining the specified nodes. These node Ids must be scheduled for comparison in the external code.
      Parameters:
      comparisonContext - the comparison context, not null
      mainNode - the one-side MAIN node to be combined, not null
      otherNode - the one-side OTHER node to be combined, not null
      newNodeIds - the list of new node Ids to fill, not null
    • compare

      public List<Long> compare(TopComparisonNode node, ComparisonContext comparisonContext, org.eclipse.core.runtime.IProgressMonitor monitor)
      Description copied from interface: IComparisonParticipant
      Compares objects contained in the specified model top node and returns a list of child nodes to be compared.
      Parameters:
      node - the top node to run comparison for, not null
      comparisonContext - the comparison context, not null
      monitor - the progress monitor, can be null. The clients are not supposed to report work to the monitor, except for the top object matching phase
      Returns:
      a list of model node identifiers, never null
    • getPotentialCorrespondingNodes

      public List<ComparisonNode> getPotentialCorrespondingNodes(ComparisonNode node, ComparisonSide sourceSide)
      Description copied from interface: IComparisonParticipant
      Returns a list of candidate nodes for setting as corresponding to the specified node.
      Parameters:
      node - the comparison result node to find potential correspondences for, not null
      sourceSide - the source side of the correspondence, not null
      Returns:
      a list of comparison result nodes, may be empty, never null
    • createMergeContext

      public MergeContext createMergeContext(TopComparisonNode node, IMergeSession mergeSession, ComparisonContext comparisonContext)
      Description copied from interface: IComparisonParticipant
      Creates merge context for an upcoming merge operation.
      Parameters:
      node - the top node to be merged, not null
      mergeSession - the current merge session, not null
      comparisonContext - the comparison context, not null
      Returns:
    • merge

      public org.eclipse.core.runtime.IStatus merge(TopComparisonNode node, MergeContext context, org.eclipse.core.runtime.IProgressMonitor monitor)
      Description copied from interface: IComparisonParticipant
      Merges the differences in the specified top node in the specified merge session. This may include deletion of the main object if the other object is absent, or, conversely, import ("copying") of the other object if the main object is absent.
      Parameters:
      node - the top node to run merge for, not null
      context - the current merge context, not null
      monitor - the progress monitor, not null
      Returns:
      the result of the merge operation
    • retrieveComparedObjects

      public ComparedCmiObjects retrieveComparedObjects(ComparisonContext comparisonContext, ComparisonNode node)
      Description copied from interface: IComparisonParticipant
      Returns a compared EObjects triple for the specified model node.
      Parameters:
      comparisonContext - the comparison context, not null
      node - the model node, cannot be null
      Returns:
      the compared objects triple, never null
    • adoptExternalProperty

      public boolean adoptExternalProperty(IComparisonSession session, ExternalPropertyComparisonData extPropData)
      Description copied from interface: IComparisonParticipant
      Adopts the given external property if it is supported by the participant instance. If adopting is possible, the method fills the provided comparison data container by its own data to be used for adoption.
      Parameters:
      session - the comparison session, not null
      extPropData - the data of the external property to be adopted, cannot be null
      Returns:
      true if adopting is possible, false otherwise
    • supports

      public boolean supports(ComparisonNode node)
      Description copied from interface: IComparisonParticipant
      Indicates whether the participant supports comparison and merging of the specified node.
      Parameters:
      node - the node, not null
      Returns:
      true if the participant supports comparison and merging, false otherwise
    • getModelPackage

      public org.eclipse.emf.ecore.EPackage getModelPackage()
      Description copied from interface: IComparisonParticipant
      Get EMF model package.
      Returns:
      the EMF model packge. Never code null.
    • updateComparison

      public void updateComparison(ComparisonContext comparisonContext, ComparisonNode node, List<Long> newNodeIds)
      Description copied from interface: IComparisonParticipant
      Updates comparison for the given result node. Participants could introduce their own specific logic for managing internal states on comparison update.
      Parameters:
      comparisonContext - the comparison context, not null
      node - the node to update comparison for, not null
      newNodeIds - the list of created new node Ids to fill, not null
    • addNewTopObjectToComparison

      public TopComparisonNode addNewTopObjectToComparison(IComparisonSession comparisonSession, String mainSymlink, org.eclipse.emf.ecore.EClass eClass)
      Description copied from interface: IComparisonParticipant
      Adds a new node to the comparison for the top object. Participants could introduce their own specific logic for managing internal states on comparison update.
      Parameters:
      comparisonSession - the comparison session hosting the model, not null
      mainSymlink - the symlink for the top object to add, not null
      eClass - of the object ot add, not null
      Returns:
      The created result node for the object if supports. null otherwise.
    • validateMerge

      public void validateMerge(IMergeSession mergeSession, ComparisonContext comparisonContext, ComparisonNode node, List<MergeValidationProblem> validationProblems)
      Description copied from interface: IComparisonParticipant
      Validates the process of merge of the specified model node.
      Parameters:
      mergeSession - the merge session, not null
      comparisonContext - the comparison context, not null
      node - the model node
      validationProblems - the list of collected validation problems to add new problem to
    • supportsPrioritizedMerging

      public boolean supportsPrioritizedMerging(ComparisonNode node, IComparisonSession session)
      Description copied from interface: IComparisonParticipant
      Tells whether the given node supports prioritized merging.
      Specified by:
      supportsPrioritizedMerging in interface IComparisonParticipant
      Overrides:
      supportsPrioritizedMerging in class AbstractEmfBasedComparisonParticipant
      Parameters:
      node - the node to check, cannot be null
      session - the comparison session, cannot be null
      Returns:
      true if the node supports prioritized merging, false otherwise
    • breakMainSideCorrespondence

      public void breakMainSideCorrespondence(IComparisonSession session, ComparisonNode node)
      Description copied from interface: IComparisonParticipant
      Breaks the main side correspondence represented by the specified model node.
      Parameters:
      session - the comparison session hosting the model, can not be null
      node - the node with the correspondence to break, can not be null
    • getDefaultMergeRule

      public MergeRule getDefaultMergeRule(ComparisonNode node, IComparisonSession session)
      Description copied from interface: IComparisonParticipant
      Returns the default merge rule for the given node.
      Parameters:
      node - the node to get default merge rule for, can not be null
      session - the comparison session, can not be null
      Returns:
      the default merge rule or null if it wasn't specified
    • getDefaultMustBeMerged

      public Boolean getDefaultMustBeMerged(ComparisonNode node, IComparisonSession session)
      Description copied from interface: IComparisonParticipant
      Returns the default must be merged value for the given node.
      Parameters:
      node - the node to get default must be merged value for, can not be null
      session - the comparison session, can not be null
      Returns:
      the default must be merged value or null if it wasn't specified
    • createImportedEObject

      protected org.eclipse.emf.ecore.EObject createImportedEObject(org.eclipse.emf.ecore.EObject otherObject, IMergeSession mergeSession)
      Specified by:
      createImportedEObject in class AbstractEmfBasedComparisonParticipant
    • getCustomMatcher

      protected IEmfObjectMatcher getCustomMatcher(TopComparisonNode topNode, org.eclipse.emf.ecore.EReference reference, ComparisonContext comparisonContext)
      Description copied from class: AbstractEmfBasedComparisonParticipant
      Returns a custom matcher for the specified reference.
      Overrides:
      getCustomMatcher in class AbstractEmfBasedComparisonParticipant
      Parameters:
      topNode - the top node
      reference - the reference to get a custom matcher for
      comparisonContext - the current comparison context, cannot be null
      Returns:
      a custom matcher or null if no custom matcher can be found
    • getExternalPropertyQualifyingType

      protected String getExternalPropertyQualifyingType(org.eclipse.emf.ecore.EObject eObject, org.eclipse.emf.ecore.EReference externalProperty)
      Description copied from class: AbstractEmfBasedComparisonParticipant
      Returns the EClass of the specified external property of the specified EObject.
      Specified by:
      getExternalPropertyQualifyingType in class AbstractEmfBasedComparisonParticipant
      Returns:
    • getExternalPropertySymlink

      protected String getExternalPropertySymlink(TopComparisonNode node, org.eclipse.emf.ecore.EReference externalProperty, ComparisonSide side, org.eclipse.emf.ecore.EObject eObject)
      Description copied from class: AbstractEmfBasedComparisonParticipant
      Returns the symbolic link (FQN) of the specified external property.
      Specified by:
      getExternalPropertySymlink in class AbstractEmfBasedComparisonParticipant
      Parameters:
      node - the node with the external property
      externalProperty - the EReference to the external property
      side - the comparison side
      eObject - the EObject referencing the external property
      Returns:
      the symbolic link
    • isFeatureWithCustomMerge

      protected boolean isFeatureWithCustomMerge(org.eclipse.emf.ecore.EStructuralFeature feature)
      Specified by:
      isFeatureWithCustomMerge in class AbstractEmfBasedComparisonParticipant