Hendrik Jungnitsch
2023-09-18 be053d7d5140b267dfc252d1c82161b6f9a593ca
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package de.gedoplan.seminar.sbt.di.exercise.domain;
 
import jakarta.persistence.*;
import java.util.Collections;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
 
@Entity
@Access(AccessType.FIELD)
@Table(name = CocktailOrder.TABLE_NAME)
public class CocktailOrder {
  public static final String TABLE_NAME = "DI_COCKTAIL_ORDER";
  public static final String TABLE_NAME_ORDER_DETAILS = "DI_COCKTAIL_ORDER_DETAILS";
 
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;
 
  @Temporal(TemporalType.TIMESTAMP)
  @Column(name = "ORDER_DATE")
  private Date orderDate;
 
  @ElementCollection(fetch = FetchType.EAGER)
  @CollectionTable(name = CocktailOrder.TABLE_NAME_ORDER_DETAILS, joinColumns = @JoinColumn(name = "ID"))
  @MapKeyColumn(name = "COCKTAIL_ID")
  @Column(name = "COCKTAIL_COUNT")
  private Map<String, Integer> orderDetails = new TreeMap<>();
 
  public Integer getId() {
    return id;
  }
 
  public Date getOrderDate() {
    return this.orderDate;
  }
 
  public Map<String, Integer> getOrderDetails() {
    return Collections.unmodifiableMap(this.orderDetails);
  }
 
  public boolean isPlaced() {
    return this.orderDate != null;
  }
 
  public void place() {
    if (!isPlaced()) {
      this.orderDate = new Date();
    }
  }
 
  public void addCocktail(String cocktailId) {
    if (isPlaced()) {
      throw new IllegalStateException("Placed order may not be changed");
    }
 
    this.orderDetails.merge(cocktailId, 1, (a, b) -> a + b);
  }
 
}