@Override
 public WorksheetCommandHistory clone() {
   WorksheetCommandHistory worksheetCommandHistory = new WorksheetCommandHistory();
   for (String worksheetId : getAllWorksheetId()) {
     worksheetCommandHistory.historyWorksheetMap.put(worksheetId, new CommandTagListMap());
   }
   for (ICommand command : getAllCommands()) {
     worksheetCommandHistory.insertCommandToHistory(command);
   }
   for (String worksheetId : getAllWorksheetId()) {
     CommandTagListMap newMap = worksheetCommandHistory.historyWorksheetMap.get(worksheetId);
     CommandTagListMap oldMap = this.historyWorksheetMap.get(worksheetId);
     if (oldMap != null && newMap != null) {
       if (oldMap.currentCommand != null) {
         newMap.currentCommand =
             new RedoCommandObject(
                 oldMap.currentCommand.getCommand(),
                 oldMap.currentCommand.getConsolidatedCommand());
       }
       if (oldMap.lastRedoCommand != null) {
         newMap.lastRedoCommand =
             new RedoCommandObject(
                 oldMap.lastRedoCommand.getCommand(),
                 oldMap.lastRedoCommand.getConsolidatedCommand());
       }
       newMap.stale = oldMap.stale;
     }
   }
   return worksheetCommandHistory;
 }
 public void clearRedoCommand(String worksheetId) {
   if (worksheetId == null) {
     worksheetId = IMPORT_COMMANDS;
   }
   CommandTagListMap commandTagListMap = historyWorksheetMap.get(worksheetId);
   if (commandTagListMap != null) {
     commandTagListMap.lastRedoCommand = null;
   }
 }
  public void setLastRedoCommandObject(RedoCommandObject command) {

    String worksheetId = getWorksheetId(command.getCommand());
    if (worksheetId == null) {
      worksheetId = IMPORT_COMMANDS;
    }
    CommandTagListMap commandTagListMap = historyWorksheetMap.get(worksheetId);
    if (commandTagListMap == null) {
      commandTagListMap = new CommandTagListMap();
      historyWorksheetMap.put(worksheetId, commandTagListMap);
    }
    if (commandTagListMap.lastRedoCommand == null) {
      commandTagListMap.lastRedoCommand = command;
    }
  }