CardTypeRef.java
- /*
- * The coLAB project
- * Copyright (C) 2021-2023 AlbaSim, MEI, HEIG-VD, HES-SO
- *
- * Licensed under the MIT License
- */
- package ch.colabproject.colab.api.model.card;
- import java.util.ArrayList;
- import java.util.List;
- import javax.json.bind.annotation.JsonbTransient;
- import javax.persistence.Entity;
- import javax.persistence.FetchType;
- import javax.persistence.Index;
- import javax.persistence.ManyToOne;
- import javax.persistence.NamedQuery;
- import javax.persistence.Table;
- import javax.persistence.Transient;
- import javax.validation.constraints.NotNull;
- /**
- * Reference to another existing abstract card type.
- *
- * @author maxence
- * @author sandra
- */
- @Entity
- @Table(
- indexes = {
- @Index(columnList = "target_id"),
- }
- )
- @NamedQuery(name = "CardTypeRef.findTargetIds",
- query = "SELECT ctr.target.id FROM CardTypeRef ctr WHERE ctr.id IN :initIds")
- @NamedQuery(name = "CardTypeRef.findDirectReferences",
- query = "SELECT ctr FROM CardTypeRef ctr "
- + "WHERE ctr.target IS NOT NULL AND ctr.target.id = :targetId")
- @NamedQuery(name = "CardTypeRef.findDirectReferencesIds",
- query = "SELECT ctr.id FROM CardTypeRef ctr "
- + "WHERE ctr.target IS NOT NULL AND ctr.target.id IN :initIds")
- public class CardTypeRef extends AbstractCardType {
- private static final long serialVersionUID = 1L;
- // ---------------------------------------------------------------------------------------------
- // fields
- // ---------------------------------------------------------------------------------------------
- /**
- * The abstract card type this reference aims at
- */
- @ManyToOne(fetch = FetchType.LAZY)
- @NotNull
- @JsonbTransient
- private AbstractCardType target;
- /**
- * The id of the abstract card type this reference aims at (serialization sugar)
- */
- @Transient
- private Long targetId;
- // ---------------------------------------------------------------------------------------------
- // getters and setters
- // ---------------------------------------------------------------------------------------------
- /**
- * get the card type (or card type reference) this reference aims at
- *
- * @return the referenced type
- */
- public AbstractCardType getTarget() {
- return this.target;
- }
- /**
- * @param target the card type (or card type reference) this reference aims at
- */
- public void setTarget(AbstractCardType target) {
- this.target = target;
- }
- /**
- * get the id of the card type (or card type reference) this reference aims at. To be sent to
- * client
- *
- * @return id of the abstractCardType or null
- */
- public Long getTargetId() {
- if (this.target != null) {
- return this.target.getId();
- } else {
- return targetId;
- }
- }
- /**
- * set the id of the card type (or card type reference) this reference aims at. For
- * serialization only
- *
- * @param id the id of the abstractCardType
- */
- public void setTargetId(Long id) {
- this.targetId = id;
- }
- // ---------------------------------------------------------------------------------------------
- // concerning the whole class
- // ---------------------------------------------------------------------------------------------
- /**
- * Resolve the reference.
- *
- * @return the abstractCardType
- */
- @Override
- public CardType resolve() {
- if (this.target == null) {
- return null;
- }
- return this.target.resolve();
- }
- @Override
- public List<AbstractCardType> expand() {
- List<AbstractCardType> list = new ArrayList<>();
- list.add(this);
- if (this.target != null) {
- list.addAll(this.target.expand());
- }
- return list;
- }
- @Override
- public String toString() {
- return "CardTypeRef{"
- + "id=" + getId() + ", deletion=" + getDeletionStatus()
- + ", targetId=" + targetId + '}';
- }
- }