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

com.viaoa.scheduler.OASchedulerPlan Maven / Gradle / Ivy

The newest version!
package com.viaoa.scheduler;

import java.util.ArrayList;

import com.viaoa.util.OADate;
import com.viaoa.util.OADateTime;

/**
 * Used to combine a complete datetime ranges for scheduling.
 *  
 * @author vvia
 */
public class OASchedulerPlan {
    private OADateTime dtBegin, dtEnd;
    private ArrayList alSchedulePlan;

    /**
     * DateTime ranges that this resource is avail/open.
     */
    private OASchedule schOpen;

    /**
     * DateTime ranges that this resource is willing to extend open/avail only if necessary.
     */
    private OASchedule schOpenSoft;
    
    /**
     * Preferred DateTime ranges for this resouce. 
     */
    private OASchedule schPreferred;

    /**
     * Preferred but flexible DateTime ranges for this resouce. 
     */
    private OASchedule schPreferredSoft;
    
    /**
     * DateTime ranges that this resource has blocked (private)
     */
    private OASchedule schBlocked;

    /**
     * DateTime ranges that this resource has blocked but can be available only if needed (ex: emergency)
     */
    private OASchedule schBlockedSoft;
    
    /**
     * DateTime ranges that this resource is already scheduled.
     */
    private OASchedule schScheduled;
    
    
    public OASchedulerPlan() {
        this(new OADate(), new OADate().addDays(1));
    }
    public OASchedulerPlan(OADate date) {
        this(date != null ? date : new OADate(), date != null ? date.addDays(1) : new OADate().addDays(1));
    }
    public OASchedulerPlan(OADateTime dt) {
        this(dt != null ? dt : new OADateTime(), dt != null ? new OADate(dt).addDays(1) : new OADate().addDays(1));
    }
    
    public OASchedulerPlan(OADateTime dtBegin, OADateTime dtEnd) {
        this.dtBegin = new OADateTime(dtBegin);
        this.dtEnd = new OADateTime(dtEnd);
    }

    public OADateTime getBegin() {
        return dtBegin;
    }
    public OADateTime getEnd() {
        return dtEnd;
    }
    
    public OASchedule getOpenSchedule() {
        if (schOpen == null) {
            schOpen = new OASchedule();
        }
        return schOpen;
    }
    public OASchedule getOpenSoftSchedule() {
        if (schOpenSoft == null) {
            schOpenSoft = new OASchedule();
        }
        return schOpenSoft;
    }
    public OASchedule getPreferredSchedule() {
        if (schPreferred == null) {
            schPreferred = new OASchedule();
        }
        return schPreferred;
    }
    public OASchedule getPreferredSoftSchedule() {
        if (schPreferredSoft == null) {
            schPreferredSoft = new OASchedule();
        }
        return schPreferredSoft;
    }
    public OASchedule getBlockedSchedule() {
        if (schBlocked == null) {
            schBlocked = new OASchedule();
        }
        return schBlocked;
    }
    public OASchedule getBlockedSoftSchedule() {
        if (schBlockedSoft == null) {
            schBlockedSoft = new OASchedule();
        }
        return schBlockedSoft;
    }
    
    public OASchedule getScheduledSchedule() {
        if (schScheduled == null) {
            schScheduled = new OASchedule();
        }
        return schScheduled;
    }
    
    public boolean isAvailable(OADateTime dt) {
        if (dt == null) return false;
        
        if (dt.before(dtBegin)) return false;
        
        if (dt.after(dtEnd)) return false;
        
        OASchedule sch;
        
        boolean b = false;
        sch = getOpenSchedule();
        if (!sch.isRangeAdded(dt)) {
            sch = getOpenSoftSchedule();
            if (!sch.isRangeAdded(dt)) {
                return false;
            }
        }
        
        sch = getBlockedSchedule();
        if (sch.isRangeAdded(dt)) {
            return false;
        }
        
        sch = getBlockedSoftSchedule();
        if (sch.isRangeAdded(dt)) {
            return false;
        }
        
        sch = getScheduledSchedule();
        if (sch.isRangeAdded(dt)) {
            return false;
        }
        
        return true;
        
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy