org.silverpeas.core.webapi.reminder.ReminderEntity.java Source code

Java tutorial

Introduction

Here is the source code for org.silverpeas.core.webapi.reminder.ReminderEntity.java

Source

/*
 * Copyright (C) 2000 - 2018 Silverpeas
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * As a special exception to the terms and conditions of version 3.0 of
 * the GPL, you may redistribute this Program in connection with Free/Libre
 * Open Source Software ("FLOSS") applications as described in Silverpeas's
 * FLOSS exception.  You should have received a copy of the text describing
 * the FLOSS exception, and it is also available here:
 * "https://www.silverpeas.org/legal/floss_exception.html"
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.silverpeas.core.webapi.reminder;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.silverpeas.core.date.TimeUnit;
import org.silverpeas.core.reminder.DateTimeReminder;
import org.silverpeas.core.reminder.DurationReminder;
import org.silverpeas.core.reminder.Reminder;
import org.silverpeas.core.webapi.base.WebEntity;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.net.URI;
import java.time.OffsetDateTime;

/**
 * It represents a reminder as transmitted within the body of an HTTP response or an HTTP request.
 * @author silveryocha
 */
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ReminderEntity implements WebEntity {

    private URI uri;
    private String id;
    private String cId;
    private String cProperty;
    private String userId;
    private String dateTime;
    private Integer duration;
    private TimeUnit timeUnit;
    private String text;
    private boolean canBeModified;
    private boolean canBeDeleted;

    protected ReminderEntity() {
    }

    public static ReminderEntity fromReminder(final Reminder reminder) {
        return new ReminderEntity().decorate(reminder);
    }

    /**
     * Sets a URI to this entity. With this URI, it can then be accessed through the Web.
     * @param uri the web entity URI.
     * @return itself.
     */
    public ReminderEntity withURI(final URI uri) {
        this.uri = uri;
        return this;
    }

    @Override
    public URI getURI() {
        return uri;
    }

    protected void setUri(final URI uri) {
        withURI(uri);
    }

    public String getId() {
        return id;
    }

    public void setId(final String id) {
        this.id = id;
    }

    public String getcId() {
        return cId;
    }

    public void setcId(final String cId) {
        this.cId = cId;
    }

    public String getcProperty() {
        return cProperty;
    }

    public void setcProperty(final String cProperty) {
        this.cProperty = cProperty;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(final String userId) {
        this.userId = userId;
    }

    public String getDateTime() {
        return dateTime;
    }

    public void setDateTime(final String dateTime) {
        this.dateTime = dateTime;
    }

    public Integer getDuration() {
        return duration;
    }

    public void setDuration(final Integer duration) {
        this.duration = duration;
    }

    public TimeUnit getTimeUnit() {
        return timeUnit;
    }

    public void setTimeUnit(final TimeUnit timeUnit) {
        this.timeUnit = timeUnit;
    }

    public String getText() {
        return text;
    }

    public void setText(final String text) {
        this.text = text;
    }

    @XmlElement
    public boolean canBeModified() {
        return canBeModified;
    }

    @XmlElement
    public boolean canBeDeleted() {
        return canBeDeleted;
    }

    @SuppressWarnings("unchecked")
    protected <T extends ReminderEntity> T decorate(final Reminder reminder) {
        this.id = reminder.getId();
        this.cId = reminder.getContributionId().asString();
        this.userId = reminder.getUserId();
        if (reminder instanceof DateTimeReminder) {
            final DateTimeReminder dateTimeReminder = (DateTimeReminder) reminder;
            this.dateTime = dateTimeReminder.getDateTime().toString();
        } else {
            final DurationReminder durationReminder = (DurationReminder) reminder;
            this.cProperty = durationReminder.getContributionProperty();
            this.duration = durationReminder.getDuration();
            this.timeUnit = durationReminder.getTimeUnit();
        }
        this.text = reminder.getText();
        this.canBeModified = true;
        this.canBeDeleted = true;
        return (T) this;
    }

    @Override
    public String toString() {
        ToStringBuilder builder = new ToStringBuilder(this);
        builder.append("uri", getURI());
        builder.append("id", getId());
        builder.append("contributionId", getcId());
        builder.append("contributionProperty", getcProperty());
        builder.append("userId", getUserId());
        builder.append("dateTime", getDateTime());
        builder.append("duration", getDuration());
        builder.append("timeUnit", getTimeUnit());
        builder.append("text", getText());
        return builder.toString();
    }

    /**
     * Merges into given reminder instance the data from the entity.<br>
     * System data are not merged (id, creation date, update date, ...)
     * @param reminder the reminder which will get the new data.
     * @return the given reminder instance with merged data.
     * @throw javax.ws.rs.WebApplicationException if given reminder does not exist.
     */
    public Reminder mergeInto(Reminder reminder) {
        reminder.withText(getText());
        if (reminder instanceof DateTimeReminder) {
            final DateTimeReminder dateTimeReminder = (DateTimeReminder) reminder;
            dateTimeReminder.triggerAt(OffsetDateTime.parse(getDateTime()));
        } else {
            final DurationReminder durationReminder = (DurationReminder) reminder;
            durationReminder.triggerBefore(getDuration(), getTimeUnit(), getcProperty());
        }
        return reminder;
    }
}