Advertisement
dzocesrce

[NP] Task Builder

Apr 25th, 2025
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.92 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.ArrayList;
  3. import java.util.Comparator;
  4. import java.util.List;
  5. import java.util.Objects;
  6. import java.util.stream.Collectors;
  7. import java.time.LocalDateTime;
  8. class InvalidDeadlineException extends Exception {
  9.     public InvalidDeadlineException(LocalDateTime dueDate) {
  10.         super(String.format("The deadline %s has already passed",dueDate));
  11.     }
  12. }
  13.  
  14. class Task {
  15.     private final String category;
  16.     private final String name;
  17.     private final String description;
  18.     private final LocalDateTime dueDate;
  19.     private final Integer priority;
  20.  
  21.     private Task(Builder builder) {
  22.         this.category = builder.category;
  23.         this.name = builder.name;
  24.         this.description = builder.description;
  25.         this.dueDate = builder.dueDate;
  26.         this.priority = builder.priority;
  27.     }
  28.  
  29.     public static class Builder {
  30.         private final String category;
  31.         private final String name;
  32.         private final String description;
  33.         private LocalDateTime dueDate;
  34.         private Integer priority;
  35.  
  36.         public Builder(String category, String name, String description) {
  37.             this.category = category;
  38.             this.name = name;
  39.             this.description = description;
  40.         }
  41.  
  42.         public Builder dueDate(LocalDateTime dueDate) throws InvalidDeadlineException {
  43.             if (dueDate != null && dueDate.isBefore(LocalDateTime.of(2020, 6, 2, 0, 0))) {
  44.                 throw new InvalidDeadlineException(dueDate);
  45.             }
  46.             this.dueDate = dueDate;
  47.             return this;
  48.         }
  49.  
  50.         public Builder priority(Integer priority) {
  51.             this.priority = priority;
  52.             return this;
  53.         }
  54.  
  55.         public Task build() {
  56.             return new Task(this);
  57.         }
  58.     }
  59.  
  60.  
  61. public static Task create(String line) throws InvalidDeadlineException {
  62.     String[] parts = line.split(",");
  63.     String category = parts[0];
  64.     String name = parts[1];
  65.     String description = parts[2];
  66.     Builder builder = new Task.Builder(category, name, description);
  67.  
  68.     if (parts.length == 5) {
  69.         LocalDateTime dueDate = LocalDateTime.parse(parts[3]);
  70.         Integer priority = Integer.parseInt(parts[4]);
  71.         return builder.dueDate(dueDate).priority(priority).build();
  72.     } else if (parts.length == 4) {
  73.         if (parts[3].contains("-")) {
  74.             LocalDateTime dueDate = LocalDateTime.parse(parts[3]);
  75.             return builder.dueDate(dueDate).build();
  76.         } else {
  77.             Integer priority = Integer.parseInt(parts[3]);
  78.             return builder.priority(priority).build();
  79.         }
  80.     } else {
  81.         return builder.build();
  82.     }
  83. }
  84.  
  85.     public String getCategory() {
  86.         return category;
  87.     }
  88.  
  89.     public String getName() {
  90.         return name;
  91.     }
  92.  
  93.     public Integer getPriority() {
  94.         return priority;
  95.     }
  96.  
  97.     public String getDescription() {
  98.         return description;
  99.     }
  100.  
  101.     public LocalDateTime getDueDate() {
  102.         return dueDate;
  103.     }
  104.  
  105.     @Override
  106.     public String toString() {
  107.         StringBuilder stringBuilder= new StringBuilder();
  108.         //Task{name='NP', description='lab 1 po NP', deadline=2020-06-23T23:59:59, priority=1}
  109.         stringBuilder.append(String.format("Task{name='%s', description='%s'",getName(),getDescription()));
  110.         if(getDueDate()!=null)
  111.             stringBuilder.append(String.format(", deadline=%s",getDueDate()));
  112.  
  113.         if (getPriority() != null)
  114.             stringBuilder.append(String.format(", priority=%d", getPriority()));
  115.  
  116.         return stringBuilder.append("}").toString();
  117.     }
  118. }
  119.  
  120. class TaskMenager {
  121.     List<Task> tasks;
  122.  
  123.     public TaskMenager() {
  124.         this.tasks= new ArrayList<>();
  125.     }
  126.  
  127.     public void readTasks(InputStream in) {
  128.         BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(in));
  129.  
  130.         tasks= bufferedReader.lines().map(line -> {
  131.             try {
  132.                 return Task.create(line);
  133.             } catch (InvalidDeadlineException e) {
  134.                 System.out.println(e.getMessage());
  135.                 return null;
  136.             }
  137.         })
  138.         .filter(Objects::nonNull)
  139.         .collect(Collectors.toList());
  140.     }
  141.  
  142.     public void printTasks(PrintStream out, boolean includePriority, boolean includeCategory) {
  143.         PrintWriter printWriter= new PrintWriter(out);
  144.         Comparator<Task> comparatorWithPriority =
  145.                 Comparator.comparing(Task::getPriority, Comparator.nullsLast(Comparator.naturalOrder()))
  146.                         .thenComparing(Task::getDueDate, Comparator.nullsLast(Comparator.naturalOrder()));
  147.         Comparator<Task> comparatorWithoutPriority =
  148.                 Comparator.comparing(Task::getDueDate, Comparator.nullsLast(Comparator.naturalOrder()));
  149.  
  150.         if(!includeCategory)
  151.             if(!includePriority)
  152.                 tasks.stream().sorted(comparatorWithoutPriority).forEach(i->printWriter.println(i));
  153.             else
  154.                 tasks.stream().sorted(comparatorWithPriority).forEach(i->printWriter.println(i));
  155.         else
  156.             if(!includePriority){
  157.                 for(String category : tasks.stream().map(i->i.getCategory()).distinct().collect(Collectors.toList())){
  158.                     printWriter.println(category.toUpperCase());
  159.                     tasks.stream().sorted(comparatorWithoutPriority)
  160.                             .filter(i->i.getCategory().equals(category))
  161.                             .forEach(i->printWriter.println(i));
  162.                 }
  163.             }
  164.             else{
  165.                 for(String category : tasks.stream().map(i->i.getCategory()).distinct().collect(Collectors.toList())){
  166.                     printWriter.println(category.toUpperCase());
  167.                     tasks.stream().sorted(comparatorWithPriority)
  168.                             .filter(i->i.getCategory().equals(category))
  169.                             .forEach(i->printWriter.println(i));
  170.                 }
  171.             }
  172.         printWriter.flush();
  173.     }
  174. }
  175.  
  176. public class TasksManagerTest {
  177.  
  178.     public static void main(String[] args) {
  179.  
  180.         TaskMenager manager = new TaskMenager();
  181.  
  182.         System.out.println("Tasks reading");
  183.         manager.readTasks(System.in);
  184.         System.out.println("By categories with priority");
  185.         manager.printTasks(System.out, true, true);
  186.         System.out.println("-------------------------");
  187.         System.out.println("By categories without priority");
  188.         manager.printTasks(System.out, false, true);
  189.         System.out.println("-------------------------");
  190.         System.out.println("All tasks without priority");
  191.         manager.printTasks(System.out, false, false);
  192.         System.out.println("-------------------------");
  193.         System.out.println("All tasks with priority");
  194.         manager.printTasks(System.out, true, false);
  195.         System.out.println("-------------------------");
  196.  
  197.     }
  198. }
  199.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement