package edu.ualberta.med.biobank.model; import javax.persistence.Column; import javax.persistence.MappedSuperclass; import javax.persistence.Transient; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import edu.ualberta.med.biobank.common.util.RowColPos; import edu.ualberta.med.biobank.validator.constraint.model.InBounds; @MappedSuperclass @InBounds public abstract class AbstractPosition extends AbstractBiobankModel { private static final long serialVersionUID = 1L; private Integer row; private Integer col; @Min(value = 0, message = "{edu.ualberta.med.biobank.model.AbstractPosition.row.Min}") @NotNull(message = "{edu.ualberta.med.biobank.model.AbstractPosition.row.NotNull}") @Column(name = "ROW", nullable = false) public Integer getRow() { return this.row; } public void setRow(Integer row) { this.row = row; } @Min(value = 0, message = "{edu.ualberta.med.biobank.model.AbstractPosition.col.Min}") @NotNull(message = "{edu.ualberta.med.biobank.model.AbstractPosition.col.NotNull}") @Column(name = "COL", nullable = false) public Integer getCol() { return this.col; } public void setCol(Integer col) { this.col = col; } @Transient public RowColPos getPosition() { return new RowColPos(getRow(), getCol()); } // AbstractPosition _SHOULD_ have a parentContainer property so it has more // meaning, but this method is a band-aid until ParentContainer is pulled // into this class. @Transient public abstract Container getHoldingContainer(); }