57 lines
1.3 KiB
Java
57 lines
1.3 KiB
Java
package net.horizoncode.tickettest.manager;
|
|
|
|
import lombok.Builder;
|
|
import lombok.Getter;
|
|
import lombok.Setter;
|
|
|
|
import java.util.UUID;
|
|
import java.util.concurrent.CompletableFuture;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
@Builder(
|
|
toBuilder = true,
|
|
builderClassName = "InternalTicketBuilder",
|
|
builderMethodName = "internalBuilder")
|
|
public class Ticket extends CompletableFuture<Boolean> {
|
|
@Getter private UUID ticketID;
|
|
@Getter private Long timeTicketCreated;
|
|
private TicketManager ticketManager;
|
|
@Getter @Setter private Runnable onExpire;
|
|
|
|
void init() {
|
|
ticketID = UUID.randomUUID();
|
|
}
|
|
|
|
public void use() {
|
|
ticketManager.getTicketSet().add(this);
|
|
ticketManager
|
|
.getService()
|
|
.submit(
|
|
() -> {
|
|
TimeUnit.MILLISECONDS.sleep(ticketManager.getTicketLifespan());
|
|
System.out.println("ticket with UUID: " + getTicketID() + " expired.");
|
|
ticketManager.getTicketSet().remove(this);
|
|
getOnExpire().run();
|
|
return null;
|
|
});
|
|
}
|
|
|
|
public static Ticket.Builder builder() {
|
|
return new Ticket.Builder();
|
|
}
|
|
|
|
public static class Builder extends InternalTicketBuilder {
|
|
|
|
Builder() {
|
|
super();
|
|
}
|
|
|
|
@Override
|
|
public Ticket build() {
|
|
Ticket ticket = super.build();
|
|
ticket.init();
|
|
return ticket;
|
|
}
|
|
}
|
|
}
|