package de.flower.rmt.model.dto; import de.flower.common.model.db.entity.IEntity; import de.flower.rmt.model.db.entity.CalItem; import org.apache.commons.lang3.StringUtils; import org.hibernate.validator.constraints.ScriptAssert; import org.joda.time.DateTime; import org.joda.time.LocalTime; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.Date; /** * @author flowerrrr */ @ScriptAssert.List({ @ScriptAssert(script = "_this.isStartBeforeEnd()", message = "{validation.calitem.endbeforestart}", lang = "javascript" ), @ScriptAssert(script = "_this.isSummaryNotNull()", message = "{validation.calitem.summary.notnull}", lang = "javascript" ) }) public class CalItemDto implements IEntity, Serializable { private Long id; private Date startDate; private LocalTime startTime; private Date endDate; private LocalTime endTime; private boolean allDay; @NotNull(message = "{validation.calitem.type.notnull}") private CalItem.Type type; private String summary; private boolean autoDecline; public Long getId() { return id; } public void setId(final Long id) { this.id = id; } @Override public boolean isNew() { return id == null; } public Date getStartDate() { return startDate; } public void setStartDate(final Date startDate) { this.startDate = startDate; } public LocalTime getStartTime() { return startTime; } public void setStartTime(final LocalTime startTime) { this.startTime = startTime; } public DateTime getStartDateTime() { return new DateTime(startDate).withFields(startTime); } public void setStartDateTime(DateTime dateTime) { this.startDate = dateTime.toLocalDate().toDate(); this.startTime = dateTime.toLocalTime(); } public Date getEndDate() { return endDate; } public void setEndDate(final Date endDate) { this.endDate = endDate; } public LocalTime getEndTime() { return endTime; } public DateTime getEndDateTime() { return new DateTime(endDate).withFields(endTime); } public void setEndDateTime(DateTime dateTime) { this.endDate = dateTime.toLocalDate().toDate(); this.endTime = dateTime.toLocalTime(); } public void setEndTime(final LocalTime endTime) { this.endTime = endTime; } public boolean isAllDay() { return allDay; } public void setAllDay(final boolean allDay) { this.allDay = allDay; } public CalItem.Type getType() { return type; } public void setType(final CalItem.Type type) { this.type = type; } public String getSummary() { return summary; } public void setSummary(final String summary) { this.summary = summary; } public boolean isAutoDecline() { return autoDecline; } public void setAutoDecline(final boolean autoDecline) { this.autoDecline = autoDecline; } public boolean isStartBeforeEnd() { if (isAllDay()) { return startDate.getTime() <= endDate.getTime(); // start == end is ok } else { DateTime s = getStartDateTime(); DateTime e = getEndDateTime(); return !s.isAfter(e); } } public boolean isSummaryNotNull() { if (CalItem.Type.OTHER.equals(type)) { return StringUtils.isNotBlank(summary); } else { return true; } } public void copyTo(final CalItem entity) { entity.setStartDateTime(getStartDateTime()); entity.setEndDateTime(getEndDateTime()); entity.setAllDay(allDay); entity.setType(type); entity.setSummary(summary); entity.setAutoDecline(autoDecline); } public static CalItemDto fromEntity(final CalItem entity) { CalItemDto dto = new CalItemDto(); dto.copyFrom(entity); return dto; } private void copyFrom(final CalItem entity) { id = entity.getId(); setStartDateTime(entity.getStartDateTime()); setEndDateTime(entity.getEndDateTime()); allDay = entity.isAllDay(); type = entity.getType(); summary = entity.getSummary(); autoDecline = entity.isAutoDecline(); } @Override public String toString() { return "CalItemDto{" + "id=" + id + ", startDate=" + startDate + ", startTime=" + startTime + ", endDate=" + endDate + ", endTime=" + endTime + ", allDay=" + allDay + ", type=" + type + ", summary='" + summary + '\'' + ", autoDecline=" + autoDecline + '}'; } }