Class MergeManager

java.lang.Object
ghidra.app.merge.MergeManager
All Implemented Interfaces:
MergeProgressModifier, DomainObjectMergeManager
Direct Known Subclasses:
DataTypeArchiveMergeManager, ProgramMultiUserMergeManager

public abstract class MergeManager extends Object implements DomainObjectMergeManager
Top level object that manages each step of the merge/resolve conflicts process.
  • Field Details

    • mergeResolvers

      protected MergeResolver[] mergeResolvers
    • resultDomainObject

      protected DomainObject resultDomainObject
    • myDomainObject

      protected DomainObject myDomainObject
    • originalDomainObject

      protected DomainObject originalDomainObject
    • latestDomainObject

      protected DomainObject latestDomainObject
    • latestChangeSet

      protected DomainObjectChangeSet latestChangeSet
    • myChangeSet

      protected DomainObjectChangeSet myChangeSet
    • mergePlugin

      protected MergeManagerPlugin mergePlugin
    • runManager

      protected RunManager runManager
    • mergeMonitor

      protected TaskMonitor mergeMonitor
    • currentIndex

      protected int currentIndex
    • inputReceived

      protected volatile boolean inputReceived
    • mergeStatus

      protected boolean mergeStatus
    • prompting

      protected volatile boolean prompting
    • mergeCompleted

      protected volatile boolean mergeCompleted
    • mergeToolIsVisible

      protected volatile boolean mergeToolIsVisible
    • mergeTool

      protected volatile ModalPluginTool mergeTool
    • resolveMap

      protected Hashtable<String,Object> resolveMap
    • mergeProgressPanel

      protected MergeProgressPanel mergeProgressPanel
  • Constructor Details

  • Method Details

    • createMergeResolvers

      protected abstract void createMergeResolvers()
    • getDomainObject

      public DomainObject getDomainObject(int version)
      Returns one of the four programs involved in the merge as indicated by the version.
      Parameters:
      version - the program version to return. (LATEST, MY, ORIGINAL, or RESULT).
      Returns:
      the indicated program version or null if a valid version isn't specified.
      See Also:
    • merge

      public boolean merge(TaskMonitor taskMonitor) throws CancelledException
      Description copied from interface: DomainObjectMergeManager
      Merge domain objects and resolve any conflicts.
      Specified by:
      merge in interface DomainObjectMergeManager
      Returns:
      true if the merge process completed successfully
      Throws:
      CancelledException - if the user canceled the merge process
    • createMergeManagerPlugin

      protected abstract MergeManagerPlugin createMergeManagerPlugin(ModalPluginTool mergePluginTool, MergeManager multiUserMergeManager, DomainObject modifiableDomainObject)
    • initializeMerge

      protected abstract void initializeMerge()
    • cleanupMerge

      protected abstract void cleanupMerge()
    • getPreferredMergeToolSize

      protected Dimension getPreferredMergeToolSize()
    • merge

      public boolean merge() throws CancelledException
      Convenience method for Junit tests.
      Throws:
      CancelledException
    • setApplyEnabled

      public void setApplyEnabled(boolean enabled)
      Enable the apply button according to the "enabled" parameter.
      Specified by:
      setApplyEnabled in interface DomainObjectMergeManager
    • clearStatusText

      public void clearStatusText()
      Clear the status text on the merge dialog.
      Specified by:
      clearStatusText in interface DomainObjectMergeManager
    • setStatusText

      public void setStatusText(String msg)
      Set the status text on the merge dialog.
      Specified by:
      setStatusText in interface DomainObjectMergeManager
    • showDefaultMergePanel

      public void showDefaultMergePanel(String description)
      Show the default merge panel. The default merge panel now shows the status of each phase of the merge and also the progress in the current phase.
      Parameters:
      description - description of current merge process near the top of the merge tool.
    • showComponent

      public void showComponent(JComponent comp, String componentID, HelpLocation helpLoc)
      Show the component that is used to resolve conflicts. This method is called by the MergeResolvers when user input is required. If the component is not null, this method blocks until the user either cancels the merge process or resolves a conflict. If comp is null, then the default component is displayed, and the method does not wait for user input.
      Specified by:
      showComponent in interface DomainObjectMergeManager
      Parameters:
      comp - component to show; if component is null, show the default component and do not block
      componentID - id or name for the component
    • removeComponent

      public void removeComponent(JComponent comp)
      Removes the component that is used to resolve conflicts. This method is called by the MergeResolvers when user input is no longer required using the specified component.
      Parameters:
      comp - component to show; if component is null, show the default component and do not block
    • showMergeTool

      protected void showMergeTool()
    • showMonitorComponent

      public void showMonitorComponent(boolean show)
      Shows/hides the monitor component at the bottom of the merge tool.
      Parameters:
      show - true means to show the task monitor at the bottom of the merge tool.
    • showProgressIcon

      public void showProgressIcon(boolean show)
      Shows/hides the progress icon (spinning globe) at the bottom of the merge tool.
      Parameters:
      show - true means to show the icon.
    • isPromptingUser

      public boolean isPromptingUser()
      Determines whether or not the user is being prompted to resolve a conflict.
      Returns:
      true if the user is being prompted for input.
    • processingCompleted

      public boolean processingCompleted()
      Return whether the merge process has completed. (Needed for Junit testing only.)
    • displayErrorAndWait

      public static void displayErrorAndWait(Object originator, String title, String msg)
      Display error message dialog in a blocking fashion.
      Parameters:
      originator - message originator
      title - dialog title
      msg - dialog message
    • waitForInput

      protected void waitForInput()
      Block until the user completes the current merge operation, or cancels the merge process.
    • getResolveInformation

      public Object getResolveInformation(String infoType)
      Gets the resolve information object for the indicated standardized name. This is how information is passed between merge managers.
      For example:
      the data type merger knows what data type in the result is equivalent to a given data type from my checked out program. The code unit and function mergers need to be able to get this information so they don't unknowingly re-introduce a data type that was already eliminated by a data type conflict.
      Parameters:
      infoType - the string indicating the type of resolve information
      Returns:
      the object for the named string or null
    • setResolveInformation

      public void setResolveInformation(String infoType, Object infoObject)
      Sets the resolve information object for the indicated standardized name. This is how information is passed between merge managers.
      Specified by:
      setResolveInformation in interface DomainObjectMergeManager
      Parameters:
      infoType - the string indicating the type of resolve information
      infoObject - the object for the named string. This information is determined by the merge manager that creates it.
      See Also:
    • getMergeResolverByName

      public MergeResolver getMergeResolverByName(String name)
      Returns the named merge resolver from the ones used directly by the MergeManager.
      Parameters:
      name - the name of the desired merge resolver
      Returns:
      the merge resolver or null.
    • getMergeTool

      public PluginTool getMergeTool()
      For Junit tests
      Returns:
      the merge tool
    • isMergeToolVisible

      public boolean isMergeToolVisible()
      Determines if the modal merge tool is currently displayed on the screen.
      Returns:
      true if the merge tool is displayed.
    • getMergeProgressPanel

      public MergeProgressPanel getMergeProgressPanel()
      gets the default merge progress panel that indicates all the phases and their current status.
      Returns:
      the merge panel that indicates progress.
    • getMonitorComponent

      public JComponent getMonitorComponent()
      Gets the TaskMonitor component that is displayed at the bottom of the merge tool.
      Returns:
      the task monitor component.
    • updateProgress

      public void updateProgress(String description)
      Updates the current phase progress area in the default merge panel.
      Specified by:
      updateProgress in interface MergeProgressModifier
      Parameters:
      description - a message describing what is currently occurring in this phase. Null indicates to use the default message.
    • updateProgress

      public void updateProgress(int currentProgressPercentage)
      Updates the current phase progress area in the default merge panel.
      Specified by:
      updateProgress in interface MergeProgressModifier
      Parameters:
      currentProgressPercentage - the progress percentage completed for the current phase. This should be a value from 0 to 100.
    • updateProgress

      public void updateProgress(int currentProgressPercentage, String progressMessage)
      Updates the current phase progress area in the default merge panel.
      Specified by:
      updateProgress in interface MergeProgressModifier
      Parameters:
      currentProgressPercentage - the progress percentage completed for the current phase. This should be a value from 0 to 100.
      progressMessage - a message indicating what is currently occurring in this phase.
    • setInProgress

      public void setInProgress(String[] mergePhase)
      The manager (MergeResolver) for a particular merge phase should call this when its phase or sub-phase begins. The string array should match one that the returned by MergeResolver.getPhases().
      Specified by:
      setInProgress in interface MergeProgressModifier
      Parameters:
      mergePhase - identifier for the merge phase to change to in progress status.
      See Also:
    • setCompleted

      public void setCompleted(String[] mergePhase)
      The manager (MergeResolver) for a particular merge phase should call this when its phase or sub-phase completes. The string array should match one that the returned by MergeResolver.getPhases().
      Specified by:
      setCompleted in interface MergeProgressModifier
      Parameters:
      mergePhase - identifier for the merge phase to change to completed status.
      See Also: