All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jfxtras.scene.control.agenda.icalendar.editors.revisors.ReviserVEvent Maven / Gradle / Ivy

The newest version!
package jfxtras.scene.control.agenda.icalendar.editors.revisors;

import java.time.temporal.Temporal;
import java.time.temporal.TemporalAmount;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import jfxtras.icalendarfx.components.VEvent;
import jfxtras.icalendarfx.properties.VPropertyElement;
import jfxtras.icalendarfx.properties.component.time.DateTimeEnd;
import jfxtras.icalendarfx.utilities.DateTimeUtilities;

;

/**
 * Reviser for {@link VEvent}
 * 
 * @author David Bal
 *
 */
public class ReviserVEvent extends ReviserLocatable
{
    public ReviserVEvent(VEvent component)
    {
        super(component);
    }
    
    /** Adjust start and end date/time */
    @Override
    public void adjustDateTime(VEvent vComponentEditedCopy)
    {
        super.adjustDateTime(vComponentEditedCopy);
        adjustDateTimeEndOrDuration(vComponentEditedCopy);
    }

    private void adjustDateTimeEndOrDuration(VEvent vComponentEditedCopy)
    {
        TemporalAmount duration = DateTimeUtilities.temporalAmountBetween(getStartRecurrence(), getEndRecurrence());
        if (vComponentEditedCopy.getDuration() != null)
        {
            vComponentEditedCopy.setDuration(duration);
        } else if (vComponentEditedCopy.getDateTimeEnd() != null)
        {
            Temporal dtend = vComponentEditedCopy.getDateTimeStart().getValue().plus(duration);
            vComponentEditedCopy.setDateTimeEnd(new DateTimeEnd(dtend));
        } else
        {
            throw new RuntimeException("Either DTEND or DURATION must be set");
        }
    }
    
    @Override
    Collection findChangedProperties(VEvent vComponentEditedCopy, VEvent vComponentOriginalCopy)
    {
        Collection changedProperties = super.findChangedProperties(vComponentEditedCopy, vComponentOriginalCopy);
        TemporalAmount durationNew = DateTimeUtilities.temporalAmountBetween(getStartRecurrence(), getEndRecurrence());
        TemporalAmount durationOriginal = getVComponentCopyEdited().getActualDuration();

        if (! durationOriginal.equals(durationNew))
        {
            if (getVComponentCopyEdited().getDateTimeEnd() != null)
            {
                changedProperties.add(VPropertyElement.DATE_TIME_END);                    
            } else if (getVComponentCopyEdited().getDuration() == null)
            {
                changedProperties.add(VPropertyElement.DURATION);                    
            }
        }      
        return changedProperties;
    }
    
    @Override
    public List dialogRequiredProperties()
    {
        List list = super.dialogRequiredProperties();
        list.addAll(Arrays.asList(
        		VPropertyElement.DESCRIPTION,
        		VPropertyElement.DURATION,
        		VPropertyElement.GEOGRAPHIC_POSITION,
        		VPropertyElement.LOCATION,
        		VPropertyElement.PRIORITY,
        		VPropertyElement.RESOURCES
                        ));
        return list;
    }
    
    @Override
    void editOne(VEvent vComponentEditedCopy)
    {
        super.editOne(vComponentEditedCopy);
        adjustDateTimeEndOrDuration(vComponentEditedCopy);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy