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;
}
}
}