TaskManager.java

package hhn.temp.project;

import hhn.temp.project.expections.TaskAlreadyExistsException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TaskManager {

  private Map<Integer, Task> taskMap;

  public TaskManager() {
    taskMap = new HashMap<>();
  }

  public Task createTask(String name, String description) {
    if (name == null || description == null ) {

      throw new IllegalArgumentException("Name/Description is null!");
    }
    if(name.isEmpty()) {
      throw new IllegalArgumentException("Name is empty!");
    }

    if(!checkOnlyLetterOrDigit(name)) {
      throw new IllegalArgumentException("Only Letters or Digit are allowed in the name: " + name);
    }


    boolean taskExited = this.taskMap.values().stream().anyMatch(task -> task.getName().equals(name));
    if(taskExited) {
      throw new TaskAlreadyExistsException("Task already exits, with the name: " + name);
    }


    Task task = new Task(name, description);
    taskMap.put(task.getTaskID(), task);
    return task;
  }

  public List<Task> getTaskList() {
    return new ArrayList<>(this.taskMap.values());
  }

  public Task getTask(String name) {
    return taskMap.values().stream().filter(t -> t.getName().equals(name)).findFirst()
            .orElseThrow(() -> new IllegalArgumentException("Wrong name"));
  }
  public Task getTask(int taskID) {
    if(!this.taskMap.containsKey(taskID)) {
      throw new IllegalArgumentException("Wrong id");
    }
    return this.taskMap.get(taskID);
  }

  public void deleteTask(String name) {
    if (name == null ) {

      throw new IllegalArgumentException("Name is null!");
    }
    if(name.isEmpty() || this.taskMap.values().stream().noneMatch(t -> t.getName().equals(name))) {
      throw new IllegalArgumentException("Wrong name!");
    }

    this.taskMap.remove(this.taskMap.values().stream().filter(t -> t.getName().equals(name)).findFirst()
            .orElseThrow().getTaskID());

  }

  private boolean checkOnlyLetterOrDigit(String text) {
    boolean result = true;

    for(int i = 0; i < text.length(); i++) {
      char c = text.charAt(i);
      if(!Character.isLetterOrDigit(c)) {
        result = false;
        break;
      }
    }
    return result;
  }
//  private boolean checkOnlyLetter(String text) {
//    boolean result = true;
//
//    for(int i = 0; i < text.length(); i++) {
//      char c = text.charAt(i);
//      if(!Character.isLetter(c)) {
//        result = false;
//        break;
//      }
//    }
//    return result;
//  }
}