package pl.edu.icm.saos.persistence.model; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.OneToMany; import javax.persistence.Transient; import java.util.List; /** * @author madryk */ @Entity public class ConstitutionalTribunalJudgment extends Judgment { private List<ConstitutionalTribunalJudgmentDissentingOpinion> dissentingOpinions = Lists.newArrayList(); //------------------------ GETTERS -------------------------- @Transient @Override public CourtType getCourtType() { return CourtType.CONSTITUTIONAL_TRIBUNAL; } @OneToMany(mappedBy="judgment", orphanRemoval=true, cascade=CascadeType.ALL) private List<ConstitutionalTribunalJudgmentDissentingOpinion> getDissentingOpinions_() { return dissentingOpinions; } @Transient public List<ConstitutionalTribunalJudgmentDissentingOpinion> getDissentingOpinions() { return ImmutableList.copyOf(getDissentingOpinions_()); } //------------------------ LOGIC -------------------------- public void addDissentingOpinion(ConstitutionalTribunalJudgmentDissentingOpinion dissentingOpinion) { Preconditions.checkArgument(!containsDissentingOpinion(dissentingOpinion)); dissentingOpinion.setJudgment(this); this.dissentingOpinions.add(dissentingOpinion); } public boolean containsDissentingOpinion(ConstitutionalTribunalJudgmentDissentingOpinion dissentingOpinion) { return this.dissentingOpinions.contains(dissentingOpinion); } public void removeDissentingOpinion(ConstitutionalTribunalJudgmentDissentingOpinion dissentingOpinion) { this.dissentingOpinions.remove(dissentingOpinion); } //------------------------ SETTERS -------------------------- @SuppressWarnings("unused") // for hibernate private void setDissentingOpinions_( List<ConstitutionalTribunalJudgmentDissentingOpinion> dissentingOpinions) { this.dissentingOpinions = dissentingOpinions; } }