Adding Calendar to Schedules

A student asked me if there was a way to batch add a calendar schedule reference to the schedules. While it’s easy to add them, this gives you the option for a schedule list and choose which ones you want.

May be useful, may not be useful.

/* Auto-generated ProgramImpl Code */

import java.util.*;              /* java Predefined*/
import javax.baja.nre.util.*;    /* nre Predefined*/
import javax.baja.sys.*;         /* baja Predefined*/
import javax.baja.status.*;      /* baja Predefined*/
import javax.baja.util.*;        /* baja Predefined*/
import com.tridium.program.*;    /* program-rt Predefined*/
import javax.baja.schedule.*;    /* schedule-rt User Defined*/
import javax.baja.naming.*;      /* baja By Property*/

public class ProgramImpl
  extends com.tridium.program.ProgramBase
{

////////////////////////////////////////////////////////////////
// Getters
////////////////////////////////////////////////////////////////

  public BOrd getCalendarOrd() { return (BOrd)get("calendarOrd"); }
  public BOrdList getSchedulesToAdd() { return (BOrdList)get("schedulesToAdd"); }
  public boolean getScheduleDefaults() { return getBoolean("scheduleDefaults"); }

////////////////////////////////////////////////////////////////
// Setters
////////////////////////////////////////////////////////////////

  public void setCalendarOrd(javax.baja.naming.BOrd v) { set("calendarOrd", v); }
  public void setSchedulesToAdd(javax.baja.naming.BOrdList v) { set("schedulesToAdd", v); }
  public void setScheduleDefaults(boolean v) { setBoolean("scheduleDefaults", v); }

////////////////////////////////////////////////////////////////
// Program Source
////////////////////////////////////////////////////////////////

  public void onExecute() throws Exception
  {
    try {
      BOrd calendarOrd = getCalendarOrd();
      if (calendarOrd == null || calendarOrd.isNull()) {
        System.out.println("Calendar Ord is null or empty");
        return;
      }
      
      BOrdList schedulesToAdd = getSchedulesToAdd();
      if (schedulesToAdd == null || schedulesToAdd.size() == 0) {
        System.out.println("No schedules to add");
        return;
      }
      
      String ordString = calendarOrd.toString(null);
      String calendarName = "Calendar";
      
      if (ordString != null && !ordString.trim().isEmpty()) {
        int lastSlash = ordString.lastIndexOf("/");
        if (lastSlash >= 0 && lastSlash < ordString.length() - 1) {
          calendarName = ordString.substring(lastSlash + 1);
        } else {
          String cleanOrd = ordString.replaceAll(".*:", "").trim();
          if (!cleanOrd.isEmpty()) {
            calendarName = cleanOrd;
          }
        }
        
        calendarName = calendarName.replaceAll("[^a-zA-Z0-9_-]", "_");
        
        if (calendarName.trim().isEmpty()) {
          calendarName = "Calendar";
        }
      }
      
      for (int i = 0; i < schedulesToAdd.size(); i++) {
        BOrd scheduleOrd = schedulesToAdd.get(i);
        if (scheduleOrd == null || scheduleOrd.isNull()) {
          continue;
        }
        
        try {
          BComponent scheduleComponent = (BComponent)scheduleOrd.get();
          if (scheduleComponent == null) {
            System.out.println("Could not resolve schedule: " + scheduleOrd);
            continue;
          }
          
          if (scheduleComponent instanceof BWeeklySchedule) {
            BWeeklySchedule weeklySchedule = (BWeeklySchedule)scheduleComponent;
            
            BScheduleReference calendarRef = new BScheduleReference();
            calendarRef.setRef(calendarOrd);
            
            BDailySchedule dailySchedule;
            
            if (getScheduleDefaults()) {
              BStatusValue originalOutput = (BStatusValue)scheduleComponent.get("defaultOutput");
              BStatusValue defaultOutput;
              
              if (originalOutput != null) {
                if (originalOutput instanceof BStatusBoolean) {
                  BStatusBoolean boolOutput = (BStatusBoolean)originalOutput;
                  defaultOutput = new BStatusBoolean(boolOutput.getValue());
                } else if (originalOutput instanceof BStatusEnum) {
                  BStatusEnum enumOutput = (BStatusEnum)originalOutput;
                  defaultOutput = new BStatusEnum(enumOutput.getEnum());
                } else if (originalOutput instanceof BStatusNumeric) {
                  BStatusNumeric numOutput = (BStatusNumeric)originalOutput;
                  defaultOutput = new BStatusNumeric(numOutput.getNumeric());
                } else {
                  defaultOutput = new BStatusBoolean(true);
                }
              } else {
                if (scheduleComponent instanceof BBooleanSchedule) {
                  defaultOutput = new BStatusBoolean(true);
                } else if (scheduleComponent instanceof BEnumSchedule) {
                  BEnumSchedule enumSchedule = (BEnumSchedule)scheduleComponent;
                  BEnum enumType = enumSchedule.getEnum();
                  defaultOutput = new BStatusEnum(enumType);
                } else if (scheduleComponent instanceof BNumericSchedule) {
                  defaultOutput = new BStatusNumeric(0.0);
                } else {
                  defaultOutput = new BStatusBoolean(true);
                }
              }
              
              dailySchedule = new BDailySchedule(calendarRef, 
                                               BTime.make(0, 0, 0),
                                               BTime.make(23, 59, 59),
                                               defaultOutput);
            } else {
              dailySchedule = new BDailySchedule(calendarRef);
            }
            
            weeklySchedule.addSpecialEvent(calendarName, dailySchedule);
            
            System.out.println("Added calendar reference '" + calendarName + "' to schedule: " + scheduleOrd);
          }
          else {
            System.out.println("Schedule is not a BWeeklySchedule: " + scheduleOrd);
          }
        }
        catch (Exception e) {
          System.out.println("Error processing schedule " + scheduleOrd + ": " + e.getMessage());
          e.printStackTrace();
        }
      }
      
      System.out.println("Completed adding calendar references to " + schedulesToAdd.size() + " schedules");
    }
    catch (Exception e) {
      System.out.println("Error in onExecute: " + e.getMessage());
      e.printStackTrace();
      throw e;
    }
  }
}

2 Likes

Nice one @Charles_Johnson. I’m sure this will come in handy!

Hey Charles can you programmatically define a set generic weekly calendar in a Prog Obj and then wire that into an actual Schedule somehow?

  • IE., M-F 8AM to 5PM defined in a program object in Java

Yes, you can. I don’t see why that would be terribly difficult.