protected void prepareGUIBeforeConflictResolutionStarts() {
    RelationMemberConflictResolverModel relModel = getRelationMemberConflictResolverModel();
    TagConflictResolverModel tagModel = getTagConflictResolverModel();
    getContentPane().removeAll();

    if (relModel.getNumDecisions() > 0 && tagModel.getNumDecisions() > 0) {
      // display both, the dialog for resolving relation conflicts and for resolving tag conflicts
      spTagConflictTypes.setTopComponent(pnlTagConflictResolver);
      spTagConflictTypes.setBottomComponent(pnlRelationMemberConflictResolver);
      getContentPane().add(spTagConflictTypes, BorderLayout.CENTER);
    } else if (relModel.getNumDecisions() > 0) {
      // relation conflicts only
      getContentPane().add(pnlRelationMemberConflictResolver, BorderLayout.CENTER);
    } else if (tagModel.getNumDecisions() > 0) {
      // tag conflicts only
      getContentPane().add(pnlTagConflictResolver, BorderLayout.CENTER);
    } else {
      getContentPane().add(buildEmptyConflictsPanel(), BorderLayout.CENTER);
    }

    getContentPane().add(pnlButtons, BorderLayout.SOUTH);
    validate();
    adjustDividerLocation();
    pnlRelationMemberConflictResolver.prepareForEditing();
  }
  /**
   * Replies the list of {@link Command commands} needed to apply resolution choices.
   *
   * @return The list of {@link Command commands} needed to apply resolution choices.
   */
  public List<Command> buildResolutionCommands() {
    List<Command> cmds = new LinkedList<>();

    TagCollection allResolutions = getTagConflictResolverModel().getAllResolutions();
    if (!allResolutions.isEmpty()) {
      cmds.addAll(buildTagChangeCommand(targetPrimitive, allResolutions));
    }
    for (String p : OsmPrimitive.getDiscardableKeys()) {
      if (targetPrimitive.get(p) != null) {
        cmds.add(new ChangePropertyCommand(targetPrimitive, p, null));
      }
    }

    if (getRelationMemberConflictResolverModel().getNumDecisions() > 0) {
      cmds.addAll(
          getRelationMemberConflictResolverModel().buildResolutionCommands(targetPrimitive));
    }

    Command cmd =
        pnlRelationMemberConflictResolver.buildTagApplyCommands(
            getRelationMemberConflictResolverModel().getModifiedRelations(targetPrimitive));
    if (cmd != null) {
      cmds.add(cmd);
    }
    return cmds;
  }
  protected JPanel buildButtonPanel() {
    JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER));

    // -- apply button
    ApplyAction applyAction = buildApplyAction();
    pnlTagConflictResolver.getModel().addPropertyChangeListener(applyAction);
    pnlRelationMemberConflictResolver.getModel().addPropertyChangeListener(applyAction);
    btnApply = new SideButton(applyAction);
    btnApply.setFocusable(true);
    pnl.add(btnApply);

    // -- cancel button
    CancelAction cancelAction = new CancelAction();
    pnl.add(new SideButton(cancelAction));

    // -- help button
    helpAction = new ContextSensitiveHelpAction();
    pnl.add(new SideButton(helpAction));

    return pnl;
  }
 /**
  * Replies the relation membership conflict resolver model.
  *
  * @return The relation membership conflict resolver model.
  */
 public RelationMemberConflictResolverModel getRelationMemberConflictResolverModel() {
   return pnlRelationMemberConflictResolver.getModel();
 }