import java.util.Date; import javax.persistence.AttributeOverride; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; import org.hibernate.annotations.AccessType; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Type; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.Min; import org.hibernate.validator.NotNull; import org.hibernate.validator.Valid; import com.security.access.audit.HistoricallyAuditable; import com.security.access.audit.NotAudited; import com.security.access.audit.HistoricallyAuditable.AuditScope; import com.security.facade.OrganizationContextProviderFactory; import com.security.model.DuplicableObject; import com.security.model.STCodeIntExtObject; import com.security.model.StateEnum; import com.security.model.StateEnumNotCanceledTransitionHandler; import com.security.model.StateObject; import com.security.model.aspect.AssociationId; import com.security.model.aspect.AssociationObject; import com.security.model.catalog.ProductFamily; import com.security.model.type.MLExternalName; import com.security.model.type.MLInternalName; import com.security.util.helper.DateHelper; @Entity @AttributeOverride(name = "pk.id", column = @Column(name = "activity_id", nullable = false, insertable = false, updatable = false)) @HistoricallyAuditable(parentEntityRef = "season", validationGroup = OrganizationParameters.VALIDATION_GROUP_SEASON_PARAM, auditScope = { AuditScope.SEASON }) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Activity extends STCodeIntExtObject implements StateObject, DuplicableObject { private Integer seasonId; private Season season; private Integer productFamilyId; private ProductFamily productFamily; private StateEnum state = StateEnum.PREPARING; private ActivityTypeEnum type; private Date startDate = DateHelper.pastInfinite(); private Date endDate = DateHelper.futureInfinite(); private Date sellingStartDate = DateHelper.pastInfinite(); private Integer maxDelayBetweenReservationAndConfirmation; private Integer reservationConfirmationMaxDelayBeforePerformance; private boolean seatOptionsAllowed = false; private OptionParameter optionParameter; private Integer optionParameterId; private Boolean outsideSeasonTicketAllowed; private Boolean unclosed = false; private String optionParameterInstitCode; private final StateEnumNotCanceledTransitionHandler transitionHandler = new StateEnumNotCanceledTransitionHandler(this); private Integer optionParamId; @Transient public Integer getOptionParamId() { return optionParamId; } @Transient public void setOptionParamId(Integer opId) { optionParamId = opId; } public Activity() { } public Activity(Activity original) { } public Activity duplicate() { Activity copy = new Activity(); return copy; } @Temporal(TemporalType.DATE) @NotNull public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } @AssertTrue public boolean validateEndDateEqualOrAfterStartDate() { return DateHelper.dateBeforeOrEqual(getStartDate(), getEndDate()); } @AssertTrue public boolean validateStartDateVsSeason() { return DateHelper.dateBeforeOrEqual(getSeason().getStartDate(), getStartDate()); } @AssertTrue public boolean validateSellingStartDateVsSeason() { return DateHelper.dateBeforeOrEqual(getSeason().getSellingStartDate(), getSellingStartDate()); } @AssertTrue public boolean validateEndDateVsSeason() { return DateHelper.dateBeforeOrEqual(getEndDate(), getSeason().getEndDate()); } @Column(name = "optionparam_instit_code") @NotAudited public String getOptionParameterInstitCode() { if (null == optionParameterInstitCode) { OptionParameter op = getOptionParameter(); if (null != op) { setOptionParameterInstitCode(op.getPk().getInstitutionCode()); } } return optionParameterInstitCode; } public void setOptionParameterInstitCode(String optionParameterInstitCode) { this.optionParameterInstitCode = optionParameterInstitCode; } @Column(name = "MAX_DELAY_BW_RESERVAT_CONFIRM") @Min(0) public Integer getMaxDelayBetweenReservationAndConfirmation() { return maxDelayBetweenReservationAndConfirmation; } public void setMaxDelayBetweenReservationAndConfirmation(Integer maxDelayBetweenReservationAndConfirmation) { this.maxDelayBetweenReservationAndConfirmation = maxDelayBetweenReservationAndConfirmation; } @Column(name = "RESERVAT_MAX_DELAY_B4_PERFORM") @Min(0) public Integer getReservationConfirmationMaxDelayBeforePerformance() { return reservationConfirmationMaxDelayBeforePerformance; } public void setReservationConfirmationMaxDelayBeforePerformance( Integer reservationConfirmationMaxDelayBeforePerformance) { this.reservationConfirmationMaxDelayBeforePerformance = reservationConfirmationMaxDelayBeforePerformance; } @NotNull @Type(type = "true_false") public boolean isSeatOptionsAllowed() { return seatOptionsAllowed; } public void setSeatOptionsAllowed(boolean seatOptionsAllowed) { this.seatOptionsAllowed = seatOptionsAllowed; } @NotNull @Temporal(TemporalType.DATE) public Date getSellingStartDate() { return sellingStartDate; } public void setSellingStartDate(Date sellingStartDate) { this.sellingStartDate = sellingStartDate; } @Temporal(TemporalType.DATE) @NotNull public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } @NotNull @Enumerated(EnumType.STRING) @AccessType(value = "field") public StateEnum getState() { return state; } public void setState(StateEnum state) { this.state = transitionHandler.changeState(this.state, state); } @NotNull @Enumerated(EnumType.STRING) public ActivityTypeEnum getType() { return type; } public void setType(ActivityTypeEnum type) { this.type = type; } @NotNull @Type(type = "true_false") public Boolean isUnclosed() { return unclosed; } public void setUnclosed(Boolean unclosed) { this.unclosed = unclosed; } @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumns({ @JoinColumn(name = "season_id", referencedColumnName = "season_id", insertable = false, updatable = false), @JoinColumn(name = "instit_code", referencedColumnName = "instit_code", insertable = false, updatable = false) }) public Season getSeason() { return season; } @AssociationObject public void setSeason(Season season) { this.season = season; } // Parent @AccessType(value = "field") @Column(name = "season_id", updatable = false) @NotNull public Integer getSeasonId() { return seasonId; } @AssociationId public void setSeasonId(Integer seasonId) { this.seasonId = seasonId; } @AssociationId public void setProductFamilyId(Integer productFamilyId) { this.productFamilyId = productFamilyId; } @AccessType("field") @Column(name = "prodfamily_id") @NotNull public Integer getProductFamilyId() { return productFamilyId; } @AssociationObject public void setProductFamily(ProductFamily productFamily) { this.productFamily = productFamily; } @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumns({ @JoinColumn(name = "prodfamily_id", insertable = false, updatable = false), @JoinColumn(name = "instit_code", insertable = false, updatable = false) }) public ProductFamily getProductFamily() { return productFamily; } @Valid @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "optionparam_id", referencedColumnName = "optionparam_id", insertable = false, updatable = false), @JoinColumn(name = "optionparam_instit_code", referencedColumnName = "instit_code", insertable = false, updatable = false) }) public OptionParameter getOptionParameter() { return optionParameter; } @AssociationObject public void setOptionParameter(OptionParameter optionParameter) { this.optionParameter = optionParameter; } @Column(name = "optionparam_id") public Integer getOptionParameterId() { if (optionParameterId == null) { OptionParameter optionParameter = getOptionParameter(); if (optionParameter != null) { optionParameterId = optionParameter.getPk().getId(); } } return optionParameterId; } public void setOptionParameterId(Integer optionParameterId) { this.optionParameterId = optionParameterId; } @NotNull @Column(name = "outside_seastickt_allowed") @Type(type = "true_false") public Boolean getOutsideSeasonTicketAllowed() { return outsideSeasonTicketAllowed; } public void setOutsideSeasonTicketAllowed(Boolean outsideSeasonTicketAllowed) { this.outsideSeasonTicketAllowed = outsideSeasonTicketAllowed; } @Transient public boolean isDuplicateAllowed() { return true; } @Transient public boolean isDeleteAllowed() { return getState() == StateEnum.PREPARING && !equals(OrganizationContextProviderFactory.getOrganizationContextProvider().getCurrentActivity()); } @AssertTrue public boolean validateSeatOptionMaxDelayRequiredWhenSeatOptionIsAllowed() { if (isSeatOptionsAllowed()) { return getOptionParameter().getMaxDelayBetweenOptionAndConfirmation() != null || getOptionParameter().getOptionConfirmationMaxDelayBeforePerformance() != null; } else { return true; } } @AssertTrue public boolean validateSameDecreaseQuotaAvailabilityOptionAsSeason() { if (isSeatOptionsAllowed() && getSeason().isSeasonTicketOptionsAllowed() && (getSeason().getOptionParameter() != null)) { return (getOptionParameter().getOptionDecreaseQuota().equals(getSeason().getOptionParameter() .getOptionDecreaseQuota())); } else { return true; } } }
Sunday, August 11, 2013
Validation in hibernate objects
Labels:
hibernate
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment