public void execute(T command) throws CommandExecutionException {
		Preconditions.checkNotNull(command, "Attempt to execute an empty command.");
		try {
			this.historyStrategy.execute(command);
			
			for(T futureCmd: this.futureOperations) {
				this.commandInformation.remove(futureCmd);
			}
			this.futureOperations.clear();

			this.commandInformation.put(command, this.buildCommandInfo(command, false));
			this.pastOperations.add(command);
			this.doDiscard();
			this.eventBus.post(new HistoryCommandExecutedEvent<>(this));
		} catch(Throwable thr) {
			throw new CommandExecutionException(thr);
		}
	}