Edit/Rebook a Campaign

This use case describes the requirements for editing or rebooking a campaign on your domain using BroadSign Open.

SOAP API Method Reference

To edit or rebook a campaign, use the following methods:

Code Samples
#!/usr/bin/php
<?php
	## Edit and rebook a campaign
	## 
	## Usage : php reservation_mgr_update_v19 --domain=domainId --id=reservationId  
	## Usage example : php reservation_mgr_update_v19 --domain=123456789 --id=987654321

	include "soaplib.php";
	include "cmdutil.php";

	$options = get_arguments("domain!" , "id!");

	$body = new stdClass();
	$body -> domain_id = $options["domain"]; # ID of your domain
	$body -> id = $options["id"] ; # ID of your campaign
	$body -> name = "Test_Reservation_for_11_1_docs" ;
	$body -> state = 1;
	$body -> container_id = 123485962;
	
	$response = performSimpleOperation("reservation", "update", 19, $body);
	
		/* Enter an arbitrary value. */

	$body = new stdClass();
	$body -> domain_id = $options["domain"]; # ID of your domain
	$body -> duration_msec = 45000;
	$body -> end_date = "2016-12-01";
	$body -> end_time = "22:00:59";
	$body -> id = $options["id"]; 
	$body -> start_date = "2016-07-01";
	$body -> start_time = "00:00:00";
	
	/* Rebook the reservation. */
	$response = performSimpleOperation("reservation", "rebook", 19, $body);
	
	if (!$response) {
		print "Could not create reservation.\n";
		return;
	}
	
	/* Reinitialize the variable body. */
	$body = new stdClass();
	$body -> domain_id = $options["domain"]; # ID of your domain
	$body -> id = $options["id"]; 
	$body -> slot_transaction_id = $response -> reservation[0] -> id ; 
	
	/* Rebook confirm operation. */
	$response = performSimpleOperation("reservation", "rebook_confirm", 19, $body);
	if (!$response) 
	{
		print "Could not update reservation.\n";
		return;
	}

	#echo json_encode($response);
?>

/*
 * (c) 2002 - 2015 BroadSign International, LLC
 */

import java.util.Calendar;

import org.apache.axis2.Constants.Configuration;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.description.TransportOutDescription;
import org.apache.axis2.transport.http.CommonsHTTPTransportSender;
import org.apache.axis2.transport.http.HTTPConstants;

import com.broadsign.www.wsdl_ops.BsapiStub;

public class Main {

    public static void main(String[] args) throws Exception {
        /* Basic setup */
        setupKeystore();
        BsapiStub javaStub = createStub();

        // Here are some pre-existing resources

        // An ad copy to include in the campaign
        String basicAdCopy = "80840165";

        // The ID of the campaign to be rebooked
        String basicCampaign = "125594013";

        // Your domain's ID
        String basicDomain = "68110168";

        
		Boolean rebooked = false;
		Calendar startDate = Calendar.getInstance();
		Calendar endDate;
		Calendar startTime = Calendar.getInstance();
		Calendar endTime;
		String contentIds[] = new String[1];
		CampaignFactory campaignFactory = new CampaignFactory(javaStub);

		contentIds[0] = basicAdCopy;
		startDate.add(Calendar.MONTH, 1);
		endDate = (Calendar)startDate.clone();
		endDate.add(Calendar.MONTH, 3);
		startTime.set(Calendar.HOUR_OF_DAY, 0);
		endTime = (Calendar)startTime.clone();
		endTime.add(Calendar.HOUR_OF_DAY, 23);
		rebooked = campaignFactory.rebookCampaign(basicCampaign,
			Util.calendarToDateString(startDate),
			Util.calendarToDateString(endDate),
			Util.calendarToTimeString(startTime),
			Util.calendarToTimeString(endTime),
			10000,
			1,
			127,
			basicDomain);
		
		if (rebooked)
			System.out.println("Rebooked campaign " + basicCampaign);
	}

    private static BsapiStub createStub()
    {
        try {
            ConfigurationContext config = ConfigurationContextFactory.createDefaultConfigurationContext();
            TransportOutDescription transport = new TransportOutDescription("https_mutual_auth");
            CommonsHTTPTransportSender sender = new CommonsHTTPTransportSender();

            sender.init(config, transport);
            BsapiStub javaStub = new BsapiStub();
            transport.setSender(sender);
            javaStub._getServiceClient().getOptions().setProperty(Configuration.CHARACTER_SET_ENCODING, "utf-16");
            javaStub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED, "false");
            javaStub._getServiceClient().getOptions().setTransportOut(transport);
            return javaStub;
        } catch (java.lang.Exception e) {
            System.out.println("Error:" + e.toString());
        }
        return null;
    }

    private static void setupKeystore()
	{
		// NOTE: Make sure to update the folders where your keystore files are located
        //       as well as the actual passwords for your keystores
		System.setProperty("javax.net.ssl.keyStoreType", "jks");
		System.setProperty("javax.net.ssl.keyStore", "YOUR_SOAP_KEYSTORE_HERE.keystore");
		System.setProperty("javax.net.ssl.keyStorePassword", "YOUR_SOAP_KEYSTORE_PASSWORD_HERE");
		System.setProperty("javax.net.ssl.trustStoreType", "jks");
		System.setProperty("javax.net.ssl.trustStore", "YOUR_TRUSTED_KEYSTORE_HERE.keystore");
		System.setProperty("javax.net.ssl.trustStorePassword", "YOUR_TRUSTED_KEYSTORE_PASSWORD_HERE");
	}

}

/*
 * (c) 2002 - 2015 BroadSign International, LLC
 */

/*
 * CampaignFactory Class
 *
 * This class allows the creation of campaigns
 */

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.xmlbeans.XmlObject;

import com.broadsign.www.wsdl_ops.BsapiStub;
import com.broadsign.www.wsdl_ops.BundleContentMgrAddRequestBody;
import com.broadsign.www.wsdl_ops.BundleMgrAddRequestBody;
import com.broadsign.www.wsdl_ops.BundleMgrAddResponseBody;
import com.broadsign.www.wsdl_ops.ContentMgrListManyResponseBody;
import com.broadsign.www.wsdl_ops.LoopSlotMgrListByReservationRequestBody;
import com.broadsign.www.wsdl_ops.LoopSlotMgrListByReservationResponseBody;
import com.broadsign.www.wsdl_ops.RequestDocument;
import com.broadsign.www.wsdl_ops.ReservationMgrAddRequestBody;
import com.broadsign.www.wsdl_ops.ReservationMgrAddResponseBody;
import com.broadsign.www.wsdl_ops.ReservationMgrAddSkinSlotsRequestBody;
import com.broadsign.www.wsdl_ops.ReservationMgrAddSkinSlotsResponseBody;
import com.broadsign.www.wsdl_ops.ReservationMgrBatchDropSkinSlotsRequestBody;
import com.broadsign.www.wsdl_ops.ReservationMgrBatchDropSkinSlotsResponseBody;
import com.broadsign.www.wsdl_ops.ReservationMgrListManyResponseBody;
import com.broadsign.www.wsdl_ops.ReservationMgrListRequestBody;
import com.broadsign.www.wsdl_ops.ReservationMgrListResponseBody;
import com.broadsign.www.wsdl_ops.ReservationMgrListScopedRequestBody;
import com.broadsign.www.wsdl_ops.ReservationMgrListScopedResponseBody;
import com.broadsign.www.wsdl_ops.ReservationMgrRebookConfirmRequestBody;
import com.broadsign.www.wsdl_ops.ReservationMgrRebookRequestBody;
import com.broadsign.www.wsdl_ops.ReservationMgrRebookResponseBody;
import com.broadsign.www.wsdl_ops.ReservationMgrUpdateRequestBody;
import com.broadsign.www.wsdl_ops.ResponseDocument;
import com.broadsign.www.wsdl_ops.ScheduleMgrAddRequestBody;
import com.broadsign.www.wsdl_ops.ScheduleMgrAddResponseBody;
import com.broadsign.www.wsdl_ops.WsdlRequest;
import com.broadsign.www.wsdl_ops.WsdlResponse;
import com.broadsign.www.wsdl_types.ReservationState;
import com.broadsign.www.wsdl_types.ScheduleGroup;

class CampaignDefaults {
	public Boolean defaultFullscreen;
	public String defaultCategoryId;
	public String defaultSegmentCategoryId;
	public int defaultBundleWeight;
	public String defaultTriggerCategoryId;
}

class CampaignTargeting {
	public List<String> duAndCriteria = new ArrayList<String>();
	public List<String> duOrCriteria = new ArrayList<String>();
	public List<String> duNotCriteria = new ArrayList<String>();
	public List<String> frameAndCriteria = new ArrayList<String>();
	public List<String> frameOrCriteria = new ArrayList<String>();
	public List<String> frameNotCriteria = new ArrayList<String>();
}

class CampaignFactory {
	public CampaignFactory(BsapiStub stub)
	{
		assert(stub != null);
		m_stub = stub;
		m_fetchFacade = new FetchFacade(m_stub);
	}

	public String createCampaign(String name,
		String startDate,
		String endDate,
		String startTime,
		String endTime,
		int durationMSec,
		int saturation,
		CampaignDefaults defaults,
		CampaignTargeting targeting,
		String customerId,
		String contentIds[],
		String domainId,
		Boolean promote)
	{
		return createCampaignInternal(name,
			startDate,
			endDate,
			startTime,
			endTime,
			durationMSec,
			saturation,
			defaults,
			targeting,
			customerId,
			contentIds,
			domainId,
			promote);
	}

	private String createCampaignInternal(String name,
		String startDate,
		String endDate,
		String startTime,
		String endTime,
		int durationMSec,
		int saturation,
		CampaignDefaults defaults,
		CampaignTargeting targeting,
		String customerId,
		String contentIds[],
		String domainId,
		Boolean promote)
	{
		String campaignId = "";

		try {
			ReservationMgrAddRequestBody reservationMgrAddRequestBody = ReservationMgrAddRequestBody.Factory.newInstance();
			WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument requestDocument = RequestDocument.Factory.newInstance();
			XmlObject bodies[];
			ResponseDocument responseDocument;

			reservationMgrAddRequestBody.setParentId(customerId);
			reservationMgrAddRequestBody.setDefaultCategoryId(defaults.defaultCategoryId);
			reservationMgrAddRequestBody.setDefaultFullscreen(defaults.defaultFullscreen);
			reservationMgrAddRequestBody.setDefaultSegmentCategoryId(defaults.defaultSegmentCategoryId);
			reservationMgrAddRequestBody.setDefaultBundleWeight(defaults.defaultBundleWeight);
			reservationMgrAddRequestBody.setDefaultTriggerCategoryId(defaults.defaultTriggerCategoryId);
			reservationMgrAddRequestBody.setDurationMsec(durationMSec);
			reservationMgrAddRequestBody.setStartDate(startDate);
			reservationMgrAddRequestBody.setEndDate(endDate);
			reservationMgrAddRequestBody.setStartTime(startTime);
			reservationMgrAddRequestBody.setEndTime(endTime);
			reservationMgrAddRequestBody.setName(name);
			reservationMgrAddRequestBody.setSaturation(saturation);
			reservationMgrAddRequestBody.setDomainId(domainId);
			wsdlRequest.setName("reservation_mgr_add");
			wsdlRequest.setVersion(19);
			wsdlRequest.setReservation(reservationMgrAddRequestBody);
			requestDocument.setRequest(wsdlRequest);
			requestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(requestDocument.xmlText());
			responseDocument = m_stub.reservation_mgr_add_v19(requestDocument);
			System.out.println(responseDocument.xmlText());
			bodies = responseDocument.getResponse().getReservationArray();

			if (bodies.length == 1) {
				ReservationMgrAddResponseBody campaign = ReservationMgrAddResponseBody.Factory.parse(bodies[0].xmlText());
				String reservedSkinSlotCampaignId = "";

				campaignId = campaign.getId().toString();
				reservedSkinSlotCampaignId = reserveCampaignSkinSlotsInternal(campaign.getId().toString(),
					targeting.duAndCriteria,
					targeting.duOrCriteria,
					targeting.duNotCriteria,
					targeting.frameAndCriteria,
					targeting.frameOrCriteria,
					targeting.frameNotCriteria,
					domainId);

				if (!reservedSkinSlotCampaignId.isEmpty()) {
					ReservationMgrListManyResponseBody campaignHandle = m_fetchFacade.listCampaign(campaignId, domainId);
					String createdScheduleId = "";
					LoopSlotMgrListByReservationRequestBody loopSlotMgrListByReservationRequestBody = LoopSlotMgrListByReservationRequestBody.Factory.newInstance();
					WsdlRequest wsdlLoopSlotRequest = WsdlRequest.Factory.newInstance();
					RequestDocument loopSlotRequestDocument = RequestDocument.Factory.newInstance();
					XmlObject loopSlotBodies[];
					ResponseDocument loopSlotResponseDocument;

					loopSlotMgrListByReservationRequestBody.setReservationId(campaignId);
					loopSlotMgrListByReservationRequestBody.setDomainId(domainId);
					wsdlLoopSlotRequest.setName("loop_slot_mgr_list_by_reservation");
					wsdlLoopSlotRequest.setVersion(9);
					wsdlLoopSlotRequest.setLoopSlot(loopSlotMgrListByReservationRequestBody);
					loopSlotRequestDocument.setRequest(wsdlLoopSlotRequest);
					loopSlotRequestDocument.documentProperties().setEncoding("utf-16");
					System.out.println(loopSlotRequestDocument.xmlText());
					loopSlotResponseDocument = m_stub.loop_slot_mgr_list_by_reservable_v9(loopSlotRequestDocument);
					System.out.println(loopSlotResponseDocument.xmlText());
					loopSlotBodies = loopSlotResponseDocument.getResponse().getLoopSlotArray();

					if (loopSlotBodies.length == 1) {
						LoopSlotMgrListByReservationResponseBody loopSlot = LoopSlotMgrListByReservationResponseBody.Factory.parse(loopSlotBodies[0].xmlText());
						String loopSlotId = loopSlot.getId().toString();

						createdScheduleId = addScheduleToCampaign(domainId, startDate, endDate, startTime, endTime, 127, campaignId, loopSlotId);
					}

					if (campaignHandle != null) {
						for (int i = 0; i < contentIds.length; i++) {
							if (!addContentToSchedule(campaignHandle.getDefaultScheduleId().toString(), contentIds[i], domainId))
								System.out.println("Error: Failed to add content Id " + contentIds[i] + " to default schedule.");

							if (!createdScheduleId.isEmpty()) {
								if (!addContentToSchedule(createdScheduleId, contentIds[i], domainId))
									System.out.println("Error: Failed to add content Id " + contentIds[i] + " to created schedule.");
							}
						}

						if (!promoteReservation(campaignHandle))
							System.out.println("Error: Failed to promote campaign.");
					} else {
						System.out.println("Error: Failed to list campaign.");
					}
				} else {
					System.out.println("Error: Failed to reserve skin slots.");
				}
			} else {
				System.out.println("Error: Failed to create campaign.");
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return campaignId;
	}

	public String reserveCampaignSkinSlots(String reservationId,
		String domainId,
		CampaignTargeting targeting)
	{
		return reserveCampaignSkinSlotsInternal(reservationId,
			targeting.duAndCriteria,
			targeting.duOrCriteria,
			targeting.duNotCriteria,
			targeting.frameAndCriteria,
			targeting.frameOrCriteria,
			targeting.frameNotCriteria,
			domainId);
	}

	private String reserveCampaignSkinSlotsInternal(String reservationId,
		List<String> duAndCriteria,
		List<String> duOrCriteria,
		List<String> duNotCriteria,
		List<String> duAndFrame,
		List<String> duOrFrame,
		List<String> duNotFrame,
		String domainId)
	{
		String campaignId = "";

		try {
			ReservationMgrAddSkinSlotsRequestBody requestBody = ReservationMgrAddSkinSlotsRequestBody.Factory.newInstance();
			WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument requestDocument = RequestDocument.Factory.newInstance();
			XmlObject bodies[];
			ResponseDocument responseDocument;

			for (Iterator<String> it = duAndCriteria.iterator(); it.hasNext();)
				requestBody.addNewDuAndCriteria().setId(it.next());

			for (Iterator<String> it = duOrCriteria.iterator(); it.hasNext();)
				requestBody.addNewDuOrCriteria().setId(it.next());

			for (Iterator<String> it = duNotCriteria.iterator(); it.hasNext();)
				requestBody.addNewDuNotCriteria().setId(it.next());

			for (Iterator<String> it = duAndFrame.iterator(); it.hasNext();)
				requestBody.addNewFrameAndCriteria().setId(it.next());

			for (Iterator<String> it = duOrFrame.iterator(); it.hasNext();)
				requestBody.addNewFrameOrCriteria().setId(it.next());

			for (Iterator<String> it = duNotFrame.iterator(); it.hasNext();)
				requestBody.addNewFrameNotCriteria().setId(it.next());

			requestBody.setId(reservationId);
			requestBody.setDomainId(domainId);
			wsdlRequest.setName("reservation_mgr_add_skin_slots");
			wsdlRequest.setVersion(19);
			wsdlRequest.setReservation(requestBody);
			requestDocument.setRequest(wsdlRequest);
			requestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(requestDocument.xmlText());
			responseDocument = m_stub.reservation_mgr_add_skin_slots_v19(requestDocument);
			System.out.println(responseDocument.xmlText());
			bodies = responseDocument.getResponse().getReservationArray();
			assert(bodies.length == 1);

			if (bodies.length == 1) {
				ReservationMgrAddSkinSlotsResponseBody campaign = ReservationMgrAddSkinSlotsResponseBody.Factory.parse(bodies[0].xmlText());

				campaignId = campaign.getId().toString();
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return campaignId;
	}

	private Boolean addContentToSchedule(String scheduleId, String contentId, String domainId)
	{
		try {
			BundleMgrAddRequestBody bundleRequestBody = BundleMgrAddRequestBody.Factory.newInstance();
			WsdlRequest bundleWsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument bundleRequestDocument = RequestDocument.Factory.newInstance();
			XmlObject bundleBodies[];
			ResponseDocument bundleResponseDocument;
			ContentMgrListManyResponseBody content = m_fetchFacade.listContent(contentId, domainId);

			bundleRequestBody.setName(content == null ? "Ad Copy" : content.getName());
			bundleRequestBody.setParentId(scheduleId);
			bundleRequestBody.setDomainId(domainId);
			bundleWsdlRequest.setName("bundle_mgr_add");
			bundleWsdlRequest.setVersion(12);
			bundleWsdlRequest.setBundle(bundleRequestBody);
			bundleRequestDocument.setRequest(bundleWsdlRequest);
			bundleRequestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(bundleRequestDocument.xmlText());
			bundleResponseDocument = m_stub.bundle_mgr_add_v12(bundleRequestDocument);
			System.out.println(bundleResponseDocument.xmlText());
			bundleBodies = bundleResponseDocument.getResponse().getBundleArray();
			assert(bundleBodies.length == 1);

			if (bundleBodies.length == 1) {
				BundleContentMgrAddRequestBody bundleContentRequestBody = BundleContentMgrAddRequestBody.Factory.newInstance();
				WsdlRequest bundleContentWsdlRequest = WsdlRequest.Factory.newInstance();
				RequestDocument bundleContentRequestDocument = RequestDocument.Factory.newInstance();
				XmlObject bundleContentBodies[];
				ResponseDocument bundleContentResponseDocument;
				BundleMgrAddResponseBody bundle = BundleMgrAddResponseBody.Factory.parse(bundleBodies[0].xmlText());

				bundleContentRequestBody.setParentId(bundle.getId().toString());
				bundleContentRequestBody.setContentId(contentId);
				bundleContentRequestBody.setDomainId(domainId);
				bundleContentWsdlRequest.setName("bundle_content_mgr_add");
				bundleContentWsdlRequest.setVersion(5);
				bundleContentWsdlRequest.setBundleContent(bundleContentRequestBody);
				bundleContentRequestDocument.setRequest(bundleContentWsdlRequest);
				bundleContentRequestDocument.documentProperties().setEncoding("utf-16");
				System.out.println(bundleContentRequestDocument.xmlText());
				bundleContentResponseDocument = m_stub.bundle_content_mgr_add_v5(bundleContentRequestDocument);
				System.out.println(bundleContentResponseDocument.xmlText());
				bundleContentBodies = bundleContentResponseDocument.getResponse().getBundleContentArray();
				assert(bundleContentBodies.length == 1);

				if (bundleContentBodies.length == 1)
					return true;
			} else {
				System.out.println("Error: Failed to create bundle content relationship");
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return false;
	}

	private Boolean promoteReservation(ReservationMgrListManyResponseBody campaign)
	{
		try {
			ReservationMgrUpdateRequestBody reservationRequestBody = ReservationMgrUpdateRequestBody.Factory.newInstance();
			WsdlRequest reservationWsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument reservationRequestDocument = RequestDocument.Factory.newInstance();
			ResponseDocument reservationResponseDocument;
			XmlObject reservationBodies[];

			reservationRequestBody.setParentId(campaign.getParentId());
			reservationRequestBody.setId(campaign.getId());
			reservationRequestBody.setActive(campaign.getActive());
			reservationRequestBody.setContainerId(campaign.getContainerId());
			reservationRequestBody.setDefaultBundleWeight(campaign.getDefaultBundleWeight());
			reservationRequestBody.setDefaultCategoryId(campaign.getDefaultCategoryId());
			reservationRequestBody.setDefaultFullscreen(campaign.getDefaultFullscreen());
			reservationRequestBody.setDefaultSegmentCategoryId(campaign.getDefaultSegmentCategoryId());
			reservationRequestBody.setDefaultTriggerCategoryId(campaign.getDefaultTriggerCategoryId());
			reservationRequestBody.setDomainId(campaign.getDomainId());
			reservationRequestBody.setName(campaign.getName());
			reservationRequestBody.setState(ReservationState.X_1); // Reservation_STATE_CONTRACTED == 1
			reservationWsdlRequest.setName("reservation_mgr_update");
			reservationWsdlRequest.setVersion(19);
			reservationWsdlRequest.setReservation(reservationRequestBody);
			reservationRequestDocument.setRequest(reservationWsdlRequest);
			reservationRequestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(reservationRequestDocument.xmlText());
			reservationResponseDocument = m_stub.reservation_mgr_update_v19(reservationRequestDocument);
			System.out.println(reservationResponseDocument.xmlText());
			reservationBodies = reservationResponseDocument.getResponse().getReservationArray();
			assert(reservationBodies.length == 1);

			if (reservationBodies.length == 1)
				return true;
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return false;
	}

	public Boolean rebookCampaign(String id,
		String startDate,
		String endDate,
		String startTime,
		String endTime,
		int durationMSec,
		int saturation,
		int dayOfWeekMask,
		String domainId)
	{
		try {
			ReservationMgrRebookRequestBody reservationMgrRebookRequestBody = ReservationMgrRebookRequestBody.Factory.newInstance();
			WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument requestDocument = RequestDocument.Factory.newInstance();
			XmlObject bodies[];
			ResponseDocument responseDocument;

			reservationMgrRebookRequestBody.setId(id);
			reservationMgrRebookRequestBody.setStartDate(startDate);
			reservationMgrRebookRequestBody.setEndDate(endDate);
			reservationMgrRebookRequestBody.setStartTime(startTime);
			reservationMgrRebookRequestBody.setEndTime(endTime);
			reservationMgrRebookRequestBody.setDurationMsec(durationMSec);
			reservationMgrRebookRequestBody.setSaturation(saturation);
			reservationMgrRebookRequestBody.setDayOfWeekMask(dayOfWeekMask);
			reservationMgrRebookRequestBody.setDomainId(domainId);
			wsdlRequest.setName("reservation_mgr_rebook");
			wsdlRequest.setVersion(19);
			wsdlRequest.setReservation(reservationMgrRebookRequestBody);
			requestDocument.setRequest(wsdlRequest);
			requestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(requestDocument.xmlText());
			responseDocument = m_stub.reservation_mgr_rebook_v19(requestDocument);
			System.out.println(responseDocument.xmlText());
			bodies = responseDocument.getResponse().getReservationArray();

			if (bodies.length == 1) {
				ReservationMgrRebookResponseBody reservation = ReservationMgrRebookResponseBody.Factory.parse(bodies[0].xmlText());
				String slotTransactionId = reservation.getId().toString();
				ReservationMgrRebookConfirmRequestBody reservationMgrRebookConfirmRequestBody = ReservationMgrRebookConfirmRequestBody.Factory.newInstance();
				WsdlRequest wsdlRebookConfirmRequest = WsdlRequest.Factory.newInstance();
				RequestDocument rebookConfirmRequestDocument = RequestDocument.Factory.newInstance();
				XmlObject rebookConfirmBodies[];
				ResponseDocument rebookConfirmResponseDocument;

				reservationMgrRebookConfirmRequestBody.setId(id);
				reservationMgrRebookConfirmRequestBody.setDomainId(domainId);
				reservationMgrRebookConfirmRequestBody.setSlotTransactionId(slotTransactionId);
				wsdlRebookConfirmRequest.setName("reservation_mgr_rebook_confirm");
				wsdlRebookConfirmRequest.setVersion(19);
				wsdlRebookConfirmRequest.setReservation(reservationMgrRebookConfirmRequestBody);
				rebookConfirmRequestDocument.setRequest(wsdlRebookConfirmRequest);
				rebookConfirmRequestDocument.documentProperties().setEncoding("utf-16");
				System.out.println(rebookConfirmRequestDocument.xmlText());
				rebookConfirmResponseDocument = m_stub.reservation_mgr_rebook_confirm_v19(rebookConfirmRequestDocument);
				System.out.println(rebookConfirmResponseDocument.xmlText());
				rebookConfirmBodies = rebookConfirmResponseDocument.getResponse().getReservationArray();

				if (rebookConfirmBodies.length == 1) {
					return true;
				} else {
					System.out.println("Error: Failed to confirm campaign rebooking.");
				}
			} else {
				System.out.println("Error: Failed to rebook campaign.");
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return false;
	}

	public List<String> dropCampaignSkinSlots(String reservationId, String domainId)
	{
		List<String> campaignIdsOfDroppedSkinSlots = new ArrayList<String>();

		try {
			ReservationMgrBatchDropSkinSlotsRequestBody reservationMgrBatchDropSkinSlotsRequestBody = ReservationMgrBatchDropSkinSlotsRequestBody.Factory.newInstance();
			WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument requestDocument = RequestDocument.Factory.newInstance();
			XmlObject bodies[];
			ResponseDocument responseDocument;

			reservationMgrBatchDropSkinSlotsRequestBody.setId(reservationId);
			reservationMgrBatchDropSkinSlotsRequestBody.setDomainId(domainId);
			wsdlRequest.setName("reservation_mgr_batch_drop_skin_slots");
			wsdlRequest.setVersion(19);
			wsdlRequest.setReservation(reservationMgrBatchDropSkinSlotsRequestBody);
			requestDocument.setRequest(wsdlRequest);
			requestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(requestDocument.xmlText());
			responseDocument = m_stub.reservation_mgr_batch_drop_skin_slots_v19(requestDocument);
			System.out.println(responseDocument.xmlText());
			bodies = responseDocument.getResponse().getReservationArray();

			if (bodies.length > 0) {
				for (XmlObject body : bodies) {
					ReservationMgrBatchDropSkinSlotsResponseBody campaigns = ReservationMgrBatchDropSkinSlotsResponseBody.Factory.parse(body.xmlText());

					campaignIdsOfDroppedSkinSlots.add(campaigns.getId().toString());
				}
			} else {
				System.out.println("Error: Failed to drop skin_slots.");
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return campaignIdsOfDroppedSkinSlots;
	}

	private String addScheduleToCampaign(String domainId,
		String startDate,
		String endDate,
		String startTime,
		String endTime,
		int dayOfWeekMask, 
		String reservableId,
		String loopSlotId)
	{
		String scheduleId = "";

		try {
			ScheduleMgrAddRequestBody scheduleRequestBody = ScheduleMgrAddRequestBody.Factory.newInstance();
			WsdlRequest scheduleWsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument scheduleRequestDocument = RequestDocument.Factory.newInstance();
			XmlObject scheduleBodies[];
			ResponseDocument scheduleResponseDocument;

			scheduleRequestBody.setName("BroadSign SDK Schedule Test");
			scheduleRequestBody.setDomainId(domainId);
			scheduleRequestBody.setStartDate(startDate);
			scheduleRequestBody.setEndDate(endDate);
			scheduleRequestBody.setStartTime(startTime);
			scheduleRequestBody.setEndTime(endTime);
			scheduleRequestBody.setDayOfWeekMask(dayOfWeekMask);
			scheduleRequestBody.setScheduleGroup(ScheduleGroup.X_2); // ScheduleGroup_LOOP_SLOT == 2
			scheduleRequestBody.setReservableId(reservableId);
			scheduleRequestBody.setParentId(loopSlotId);
			scheduleWsdlRequest.setName("schedule_mgr_add");
			scheduleWsdlRequest.setVersion(8);
			scheduleWsdlRequest.setSchedule(scheduleRequestBody);
			scheduleRequestDocument.setRequest(scheduleWsdlRequest);
			scheduleRequestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(scheduleRequestDocument.xmlText());
			scheduleResponseDocument = m_stub.schedule_mgr_add_v8(scheduleRequestDocument);
			System.out.println(scheduleResponseDocument.xmlText());
			scheduleBodies = scheduleResponseDocument.getResponse().getScheduleArray();
			assert(scheduleBodies.length == 1);

			if (scheduleBodies.length == 1) {
				ScheduleMgrAddResponseBody schedule = ScheduleMgrAddResponseBody.Factory.parse(scheduleBodies[0].xmlText());

				scheduleId = schedule.getId().toString();
			} else {
				System.out.println("Error: Failed to create schedule.");
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return scheduleId;
	}

	public List<String> listReservations(String domainId, String parentContainerIds, Boolean currentOnly) throws Exception
	{
		List<String> results = new ArrayList<String>();
		WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
		XmlObject xmlBodies[];
		RequestDocument requestDocument = RequestDocument.Factory.newInstance();
		ResponseDocument responseDocument;
		WsdlResponse response;

		if (!parentContainerIds.isEmpty()) {
			ReservationMgrListScopedRequestBody requestBody = ReservationMgrListScopedRequestBody.Factory.newInstance();

			requestBody.setDomainId(domainId);
			requestBody.setParentContainerIds(parentContainerIds);
			requestBody.setCurrentOnly(currentOnly);
			wsdlRequest.setName("reservation_mgr_list_scoped");
			wsdlRequest.setVersion(19);
			wsdlRequest.setReservation(requestBody);
		} else {
			ReservationMgrListRequestBody requestBody = ReservationMgrListRequestBody.Factory.newInstance();

			requestBody.setDomainId(domainId);
			requestBody.setCurrentOnly(currentOnly);
			wsdlRequest.setName("reservation_mgr_list");
			wsdlRequest.setVersion(19);
			wsdlRequest.setReservation(requestBody);
		}

		requestDocument.setRequest(wsdlRequest);
		requestDocument.documentProperties().setEncoding("utf-16");
		System.out.println(requestDocument.xmlText());

		if (!parentContainerIds.isEmpty())
			responseDocument = m_stub.reservation_mgr_list_scoped_v19(requestDocument);
		else
			responseDocument = m_stub.reservation_mgr_list_v19(requestDocument);

		System.out.println(responseDocument.xmlText());
		response = responseDocument.getResponse();
		xmlBodies = response.getReservationArray();

		if (xmlBodies.length > 0) {
			for (XmlObject xmlBody : xmlBodies) {
				if (!parentContainerIds.isEmpty()) {
					ReservationMgrListScopedResponseBody reservation = ReservationMgrListScopedResponseBody.Factory.parse(xmlBody.xmlText());

					results.add(reservation.getId().toString());
				} else {
					ReservationMgrListResponseBody reservation = ReservationMgrListResponseBody.Factory.parse(xmlBody.xmlText());

					results.add(reservation.getId().toString());
				}
			}
		}

		return results;
	}

	private BsapiStub m_stub = null;
	private FetchFacade m_fetchFacade = null;
}

/*
 * (c) 2002 - 2015 BroadSign International, LLC
 */

/*
 * FetchFacade Class
 *
 * This class contains basic listing operations
 */

import java.util.ArrayList;
import java.util.List;

import org.apache.xmlbeans.*;

import com.broadsign.www.wsdl_ops.*;

class FetchFacade {
	public FetchFacade(BsapiStub stub)
	{
		assert(stub != null);
		m_stub = stub;
	}

	public RelationshipMgrListResponseBody[] listRelationshipsByLeftResourceId(String leftResourceId, String domainId)
	{
		List<RelationshipMgrListResponseBody> relationships = new ArrayList<RelationshipMgrListResponseBody>();
		
		try {
			RelationshipMgrListRequestBody relationshipRequestBody = RelationshipMgrListRequestBody.Factory.newInstance();
			WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument requestDocument = RequestDocument.Factory.newInstance();
			XmlObject bodies[];
			ResponseDocument responseDocument;

			relationshipRequestBody.setDomainId(domainId);
			wsdlRequest.setName("relationship_mgr_list");
			wsdlRequest.setVersion(5);
			wsdlRequest.setRelationship(relationshipRequestBody);
			requestDocument.setRequest(wsdlRequest);
			requestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(requestDocument.xmlText());
			responseDocument = m_stub.relationship_mgr_list_v5(requestDocument);
			System.out.println(responseDocument.xmlText());
			bodies = responseDocument.getResponse().getRelationshipArray();

			for (int i = 0; i < bodies.length; i++) {
				RelationshipMgrListResponseBody relationship = RelationshipMgrListResponseBody.Factory.parse(bodies[i].xmlText());

				assert(relationship != null);
					
				if (relationship != null && Integer.parseInt(relationship.getParentId().toString()) == Integer.parseInt(leftResourceId))
					relationships.add(relationship);
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return relationships.toArray(new RelationshipMgrListResponseBody[relationships.size()]);
	}

	public ContainerMgrListResponseBody[] listContainers(String ids[], String domainId)
	{
		List<ContainerMgrListResponseBody> containers = new ArrayList<ContainerMgrListResponseBody>();

		try {
			ContainerMgrListManyRequestBody containerRequestBody = ContainerMgrListManyRequestBody.Factory.newInstance();
			WsdlRequest containerWsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument containerRequestDocument = RequestDocument.Factory.newInstance();
			XmlObject containerBodies[];
			ResponseDocument containerResponseDocument;
			String stringIds = Util.arrayToString(ids);

			containerRequestBody.setIds(stringIds);
			containerRequestBody.setDomainId(domainId);
			containerWsdlRequest.setName("container_mgr_list_many");
			containerWsdlRequest.setVersion(8);
			containerWsdlRequest.setContainer(containerRequestBody);
			containerRequestDocument.setRequest(containerWsdlRequest);
			containerRequestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(containerRequestDocument.xmlText());
			containerResponseDocument = m_stub.container_mgr_list_many_v8(containerRequestDocument);
			System.out.println(containerResponseDocument.xmlText());
			containerBodies = containerResponseDocument.getResponse().getContainerArray();
			assert(containerBodies.length > 0);

			for (int i = 0; i < containerBodies.length; i++) {
				ContainerMgrListResponseBody container = ContainerMgrListResponseBody.Factory.parse(containerBodies[i].xmlText());

				assert(container != null);

				if (container != null)
					containers.add(container);
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}
		
		return containers.toArray(new ContainerMgrListResponseBody[containers.size()]);
	}

	public CriteriaMgrListManyResponseBody[] listCriteria(String ids[], String domainId)
	{
		List<CriteriaMgrListManyResponseBody> criterias = new ArrayList<CriteriaMgrListManyResponseBody>();

		try {
			CriteriaMgrListManyRequestBody criteriaRequestBody = CriteriaMgrListManyRequestBody.Factory.newInstance();
			WsdlRequest criteriaWsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument criteriaRequestDocument = RequestDocument.Factory.newInstance();
			XmlObject criteriaBodies[];
			ResponseDocument criteriaResponseDocument;
			String stringIds = Util.arrayToString(ids);

			criteriaRequestBody.setIds(stringIds);
			criteriaRequestBody.setDomainId(domainId);
			criteriaWsdlRequest.setName("criteria_mgr_list_many");
			criteriaWsdlRequest.setVersion(7);
			criteriaWsdlRequest.setCriteria(criteriaRequestBody);
			criteriaRequestDocument.setRequest(criteriaWsdlRequest);
			criteriaRequestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(criteriaRequestDocument.xmlText());
			criteriaResponseDocument = m_stub.criteria_mgr_list_many_v7(criteriaRequestDocument);
			System.out.println(criteriaResponseDocument.xmlText());
			criteriaBodies = criteriaResponseDocument.getResponse().getCriteriaArray();
			assert(criteriaBodies.length > 0);

			for (int i = 0; i < criteriaBodies.length; i++) {
				CriteriaMgrListManyResponseBody criteria = CriteriaMgrListManyResponseBody.Factory.parse(criteriaBodies[i].xmlText());

				assert(criteria != null);

				if (criteria != null)
					criterias.add(criteria);
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return criterias.toArray(new CriteriaMgrListManyResponseBody[criterias.size()]);
	}
	
	public ResourceCriteriaMgrListResponseBody[] listResourceCriteriaByTargetResourceId(String targetResourceId, String domainId)
	{
		List<ResourceCriteriaMgrListResponseBody> rcs = new ArrayList<ResourceCriteriaMgrListResponseBody>();

		try {
			ResourceCriteriaMgrListRequestBody rcRequestBody = ResourceCriteriaMgrListRequestBody.Factory.newInstance();
			WsdlRequest rcWsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument rcRequestDocument = RequestDocument.Factory.newInstance();
			XmlObject rcBodies[];
			ResponseDocument rcResponseDocument;

			rcRequestBody.setParentId(targetResourceId);
			rcRequestBody.setDomainId(domainId);
			rcWsdlRequest.setName("resource_criteria_mgr_list");
			rcWsdlRequest.setVersion(7);
			rcWsdlRequest.setResourceCriteria(rcRequestBody);
			rcRequestDocument.setRequest(rcWsdlRequest);
			rcRequestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(rcRequestDocument.xmlText());
			rcResponseDocument = m_stub.resource_criteria_mgr_list_v7(rcRequestDocument);
			System.out.println(rcResponseDocument.xmlText());
			rcBodies = rcResponseDocument.getResponse().getResourceCriteriaArray();

			for (int i = 0; i < rcBodies.length; i++) {
				ResourceCriteriaMgrListResponseBody rc = ResourceCriteriaMgrListResponseBody.Factory.parse(rcBodies[i].xmlText());

				assert(rc != null);

				if (rc != null)
					rcs.add(rc);
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return rcs.toArray(new ResourceCriteriaMgrListResponseBody[rcs.size()]);
	}
	
	public MediaPackageMgrListManyResponseBody listMediaPackage(String id, String domainId)
	{
		String ids[] = new String[1];
		MediaPackageMgrListManyResponseBody mediaPackages[];

		ids[0] = id;
		mediaPackages = listMediaPackages(ids, domainId);

		if (mediaPackages.length == 1)
			return mediaPackages[0];

		return null;
	}

	public MediaPackageMgrListManyResponseBody[] listMediaPackages(String ids[], String domainId)
	{
		List<MediaPackageMgrListManyResponseBody> mediaPackages = new ArrayList<MediaPackageMgrListManyResponseBody>();

		try {
			MediaPackageMgrListManyRequestBody mediaPackageRequestBody = MediaPackageMgrListManyRequestBody.Factory.newInstance();
			WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument requestDocument = RequestDocument.Factory.newInstance();
			XmlObject bodies[];
			ResponseDocument responseDocument;
			String stringIds = Util.arrayToString(ids);

			mediaPackageRequestBody.setIds(stringIds);
			mediaPackageRequestBody.setDomainId(domainId);
			wsdlRequest.setName("media_package_mgr_list_many");
			wsdlRequest.setVersion(9);
			wsdlRequest.setMediaPackage(mediaPackageRequestBody);
			requestDocument.setRequest(wsdlRequest);
			requestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(requestDocument.xmlText());
			responseDocument = m_stub.media_package_mgr_list_many_v9(requestDocument);
			System.out.println(responseDocument.xmlText());
			bodies = responseDocument.getResponse().getMediaPackageArray();

			for (int i = 0; i < bodies.length; i++) {
				MediaPackageMgrListManyResponseBody mediaPackage = MediaPackageMgrListManyResponseBody.Factory.parse(bodies[i].xmlText());

				assert(mediaPackage != null);

				if (mediaPackage != null)
					mediaPackages.add(mediaPackage);
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return mediaPackages.toArray(new MediaPackageMgrListManyResponseBody[mediaPackages.size()]);
	}

	public ReservationMgrListManyResponseBody listCampaign(String id, String domainId)
	{
		String ids[] = new String[1];
		ReservationMgrListManyResponseBody bodies[];

		ids[0] = id;
		bodies = listCampaigns(ids, domainId);

		if (bodies.length == 1)
			return bodies[0];

		return null;
	}

	public ReservationMgrListManyResponseBody[] listCampaigns(String ids[], String domainId)
	{
		List<ReservationMgrListManyResponseBody> campaigns = new ArrayList<ReservationMgrListManyResponseBody>();

		try {
			ReservationMgrListManyRequestBody requestBody = ReservationMgrListManyRequestBody.Factory.newInstance();
			WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
			RequestDocument requestDocument = RequestDocument.Factory.newInstance();
			XmlObject bodies[];
			ResponseDocument responseDocument;
			String stringIds = Util.arrayToString(ids);

			requestBody.setIds(stringIds);
			requestBody.setDomainId(domainId);
			wsdlRequest.setName("reservation_mgr_list_many");
			wsdlRequest.setVersion(19);
			wsdlRequest.setReservation(requestBody);
			requestDocument.setRequest(wsdlRequest);
			requestDocument.documentProperties().setEncoding("utf-16");
			System.out.println(requestDocument.xmlText());
			responseDocument = m_stub.reservation_mgr_list_many_v19(requestDocument);
			System.out.println(responseDocument.xmlText());
			bodies = responseDocument.getResponse().getReservationArray();

			for (int i = 0; i < bodies.length; i++) {
				ReservationMgrListManyResponseBody campaign = ReservationMgrListManyResponseBody.Factory.parse(bodies[i].xmlText());

				assert(campaign != null);

				if (campaign != null)
					campaigns.add(campaign);
			}
		} catch (java.lang.Exception e) {
			System.out.println("Error:" + e.toString());
		}

		return campaigns.toArray(new ReservationMgrListManyResponseBody[campaigns.size()]);
	}

	public ContentMgrListManyResponseBody listContent(String id, String domainId)
	{
		String ids[] = new String[1];
		ContentMgrListManyResponseBody bodies[];

		ids[0] = id;
		bodies = listContents(ids, domainId);

		if (bodies.length == 1)
			return bodies[0];

		return null;
	}

	public ContentMgrListManyResponseBody[] listContents(String ids[], String domainId)
	{
		List<ContentMgrListManyResponseBody> contents = new ArrayList<ContentMgrListManyResponseBody>();

		assert(ids.length > 0);

		if (ids.length > 0) {
			 try {
				ContentMgrListManyRequestBody requestBody = ContentMgrListManyRequestBody.Factory.newInstance();
				WsdlRequest wsdlRequest = WsdlRequest.Factory.newInstance();
				RequestDocument requestDocument = RequestDocument.Factory.newInstance();
				XmlObject bodies[];
				ResponseDocument responseDocument;
				String stringIds = Util.arrayToString(ids);

				requestBody.setIds(stringIds);
				requestBody.setDomainId(domainId);
				wsdlRequest.setName("content_mgr_list_many");
				wsdlRequest.setVersion(10);
				wsdlRequest.setContent(requestBody);
				requestDocument.setRequest(wsdlRequest);
				requestDocument.documentProperties().setEncoding("utf-16");
				System.out.println(requestDocument.xmlText());
				responseDocument = m_stub.content_mgr_list_many_v10(requestDocument);
				System.out.println(responseDocument.xmlText());
				bodies = responseDocument.getResponse().getContentArray();

				for (int i = 0; i < bodies.length; i++) {
					ContentMgrListManyResponseBody content = ContentMgrListManyResponseBody.Factory.parse(bodies[i].xmlText());

					assert(content != null);

					if (content != null)
						contents.add(content);
				}
			} catch (java.lang.Exception e) {
				System.out.println("Error:" + e.toString());
			}
		}

		return contents.toArray(new ContentMgrListManyResponseBody[contents.size()]);
	}

	private BsapiStub m_stub = null;
}

/*
 * (c) 2002 - 2015 BroadSign International, LLC
 */

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

class Util {
	public static String arrayToString(String ids[])
	{
		String stringIds = "";

		for (int i = 0; i < ids.length; i++) {
			if (!stringIds.isEmpty())
				stringIds += ",";

			stringIds += ids[i];
		}

		return stringIds;
	}

	public static Calendar dateStringToCalendar(String date) throws ParseException
	{
		Calendar c = Calendar.getInstance();

		if (date != null) {
			DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
			Date d = formatter.parse(date);

			c.setTime(d);
		}

		return c;
	}

	public static String calendarToDateString(Calendar date)
	{
		if (date != null) {
			DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

			return formatter.format(date.getTime());
		}

		return "";
	}

	public static String calendarToTimeString(Calendar date)
	{
		if (date != null) {
			DateFormat formatter = new SimpleDateFormat("HH:mm:ss");

			return formatter.format(date.getTime());
		}

		return "";
	}
}