public int AddCredentialSet(string serviceBrokerGuid, string serviceBrokerName,
            string groupName)
        {
            int add = 0;
               UserSchedulingDB dbManager = new UserSchedulingDB();
            if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
            {
                try
                {
                    int test = dbManager.GetCredentialSetID(serviceBrokerGuid,groupName);
                    if(test > 0)
                    {

                        add = 1; ;
                    }
                    else{
                        int i = dbManager.AddCredentialSet(serviceBrokerGuid, serviceBrokerName, groupName);
                        add = (i != -1) ? 1 : 0;

                    }
                }
                catch
                {
                    throw;
                }
            }
            return add;
        }
 /* !------------------------------------------------------------------------------!
      *							CALLS FOR ReservationInfo
      * !------------------------------------------------------------------------------!
      */
 /// <summary>
 /// add reservation by user
 /// </summary>
 /// <param name="userName"></param>
 /// <param name="serviceBrokerGuid"></param>
 /// <param name="groupName"></param>
 /// <param name="experimentInfoId"></param>
 /// <param name="startTime"></param>
 /// <param name="endTime"></param>
 /// <returns></returns>the unique id which identifies the reservation added by the user,>0 successfully added, ==-1 otherwise
 public int AddReservation(string userName, string serviceBrokerGuid, string groupName,
     string labServerGuid, string clientGuid, DateTime startTime, DateTime endTime)
 {
     UserSchedulingDB dbManager = new UserSchedulingDB();
     int experId = dbManager.ListExperimentInfoIDByExperiment(labServerGuid, clientGuid);
     if (experId > 0)
     {
         return dbManager.AddReservation(userName, serviceBrokerGuid, groupName,
            experId, startTime, endTime);
     }
     else return 0;
 }
        public int RevokeReservation(string serviceBrokerGuid, string groupName,
            string labServerGuid, string labClientGuid, DateTime startTime, DateTime endTime, string message)
        {
            bool status = false;
            bool fromISB = false;
            int count = 0;
            Coupon opCoupon = new Coupon();
            opCoupon.couponId = opHeader.coupon.couponId;
            opCoupon.passkey = opHeader.coupon.passkey;
            opCoupon.issuerGuid = opHeader.coupon.issuerGuid;
            UserSchedulingDB dbManager = new UserSchedulingDB();
            try
            {
                Ticket retrievedTicket = dbManager.RetrieveAndVerify(opCoupon, TicketTypes.REVOKE_RESERVATION);
                if (retrievedTicket.payload != null && retrievedTicket.payload.Length > 0)
                {
                    XmlQueryDoc revokeDoc = new XmlQueryDoc(retrievedTicket.payload);
                    string sourceStr = revokeDoc.Query("RevokeReservationPayload/source");
                    if (sourceStr != null && sourceStr.CompareTo("ISB") == 0)
                    {
                        fromISB = true;
                    }
                }
                DateTime targetStart = new DateTime(startTime.Year, startTime.Month, startTime.Day,
                    startTime.Hour, startTime.Minute, 0, startTime.Kind);
                if (targetStart.Kind != DateTimeKind.Utc)
                    targetStart = targetStart.ToUniversalTime();
                DateTime targetEnd = new DateTime(endTime.Year, endTime.Month, endTime.Day,
                    endTime.Hour, endTime.Minute, 0, endTime.Kind);
                if (targetEnd.Kind != DateTimeKind.Utc)
                    targetEnd = targetEnd.ToUniversalTime();
                if (fromISB)
                { // Need to forward to LSS
                    string lssUrl = dbManager.ListLssUrlByExperiment(labClientGuid, labServerGuid);
                    if (lssUrl != null && lssUrl.Length > 0)
                    {
                        LabSchedulingProxy lssProxy = new LabSchedulingProxy();
                        lssProxy.OperationAuthHeaderValue = new OperationAuthHeader();
                        lssProxy.OperationAuthHeaderValue.coupon = opCoupon;
                        lssProxy.Url = lssUrl;
                        int rCount = lssProxy.RemoveReservation(serviceBrokerGuid, groupName, ProcessAgentDB.ServiceGuid,
                            labServerGuid, labClientGuid, targetStart, targetEnd);
                    }
                }

                ReservationData[] ris = dbManager.GetReservations(serviceBrokerGuid, null, groupName,
                    labServerGuid, labClientGuid, targetStart, targetEnd);

                if (ris != null && ris.Length > 0)
                {

                    InteractiveSBProxy sbProxy = new InteractiveSBProxy();
                    ProcessAgentInfo sbInfo = dbManager.GetProcessAgentInfo(ProcessAgentDB.ServiceAgent.domainGuid);
                    AgentAuthHeader header = new AgentAuthHeader();
                    header.coupon = sbInfo.identOut;
                    header.agentGuid = ProcessAgentDB.ServiceGuid;
                    sbProxy.AgentAuthHeaderValue = header;
                    sbProxy.Url = sbInfo.webServiceUrl;
                    foreach (ReservationData rd in ris)
                    {

                        status = dbManager.RevokeReservation(rd.sbGuid, rd.groupName, rd.lsGuid, rd.clientGuid,
                              rd.startTime, rd.endTime, message);
                        if (status)
                        {
                            count++;
                            status = sbProxy.RevokeReservation(rd.sbGuid, rd.userName, rd.groupName, rd.lsGuid, rd.clientGuid,
                              rd.startTime, rd.endTime, message);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception("USS: RevokeReservation -> ",e);
            }
            return count;
        }
        public int RemoveLSSInfo(string lssGuid)
        {
            int added = 0;
            UserSchedulingDB dbManager = new UserSchedulingDB();
            if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
            {
                try
                {
                    added = dbManager.RemoveLSSInfoByGuid(lssGuid);

                }
                catch
                {
                    throw;
                }
            }
            return added;
        }
        public TimePeriod[] RetrieveAvailableTimePeriods(string serviceBrokerGuid, string groupName,
            string labServerGuid, string clientGuid, DateTime startTime, DateTime endTime)
        {
            Coupon opCoupon = new Coupon();
            opCoupon.couponId = opHeader.coupon.couponId;
            opCoupon.passkey = opHeader.coupon.passkey;
            opCoupon.issuerGuid = opHeader.coupon.issuerGuid;
            try
            {
                UserSchedulingDB dbManager = new UserSchedulingDB();
                Ticket ssTicket = dbManager.RetrieveAndVerify(opCoupon, TicketTypes.SCHEDULE_SESSION);

                string lssGuid = dbManager.ListLssIdByExperiment(clientGuid, labServerGuid);
                LSSInfo  lssInfo = dbManager.GetLSSInfo(lssGuid);
                LabSchedulingProxy lssProxy = new LabSchedulingProxy();
                lssProxy.OperationAuthHeaderValue = new OperationAuthHeader();
                lssProxy.OperationAuthHeaderValue.coupon = opCoupon;
                lssProxy.Url = lssInfo.lssUrl;
                TimePeriod[] array = lssProxy.RetrieveAvailableTimePeriods( serviceBrokerGuid, groupName, ProcessAgentDB.ServiceGuid,
                    labServerGuid, clientGuid, startTime, endTime);
                return array;
            }
            catch
            {
                throw;
            }
        }
 public Reservation RedeemReservation(string serviceBrokerGuid, String userName,  
     String labServerGuid, string clientGuid)
 {
     UserSchedulingDB dbManager = new UserSchedulingDB();
     Coupon opCoupon = new Coupon();
     opCoupon.couponId = opHeader.coupon.couponId;
     opCoupon.passkey = opHeader.coupon.passkey;
     opCoupon.issuerGuid = opHeader.coupon.issuerGuid;
     string type = TicketTypes.REDEEM_RESERVATION;
     try
     {
         Ticket retrievedTicket = dbManager.RetrieveAndVerify(opCoupon, type);
         ReservationInfo res = dbManager.RedeemReservation(userName, serviceBrokerGuid, clientGuid, labServerGuid);
         if (res != null)
         {
             Reservation reservation = new Reservation(res.startTime, res.endTime);
             reservation.userName = res.userName;
             return reservation;
         }
         else
         {
             return null;
         }
     }
     catch
     {
         throw;
     }
 }
 public int RemoveCredentialSet(string serviceBrokerGuid, string serviceBrokerName,
     string groupName)
 {
     int removed = 0;
     UserSchedulingDB dbManager = new UserSchedulingDB();
     if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
     {
         try
         {
             removed = dbManager.RemoveCredentialSet(serviceBrokerGuid, serviceBrokerName, groupName);
         }
         catch
         {
             throw;
         }
     }
     return removed;
 }
        public int ModifyLSSInfo(string lssGuid, string lssName, string lssUrl, Coupon coupon)
        {
            int status = 0;
            UserSchedulingDB dbManager = new UserSchedulingDB();
            if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
            {
                try
                {
                    status = dbManager.ModifyLSSInfo(lssGuid, lssName, lssUrl, coupon);

                }
                catch
                {
                    throw;
                }
            }
            return status;
        }
 public override int ModifyProcessAgent(string originalGuid, ProcessAgent agent, string extra)
 {
     int status = 0;
     UserSchedulingDB dbManager = new UserSchedulingDB();
     if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
     {
         status = dbManager.ModifyProcessAgent(originalGuid, agent, extra);
     }
     return status;
 }
        public override int ModifyDomainCredentials(string originalGuid, ProcessAgent agent, string extra, 
            Coupon inCoupon, Coupon outCoupon)
        {
            int status = 0;
              UserSchedulingDB dbManager = new UserSchedulingDB();
            if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
            {

            try
            {
                status = dbManager.ModifyDomainCredentials(originalGuid, agent, inCoupon, outCoupon, extra);
            }
            catch (Exception ex)
            {
                throw new Exception("USS: ", ex);
            }

            }
            return status;
        }
 public int ModifyExperimentInfo(string labServerGuid, string labServerName,
     string labClientGuid, string labClientName, string labClientVersion,
     string providerName, string lssGuid)
 {
     int status = 0;
     UserSchedulingDB dbManager = new UserSchedulingDB();
     if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
     {
         try
         {
             status = dbManager.ModifyExperimentInfo(labServerGuid, labServerName, labClientGuid, labClientName, labClientVersion, providerName, lssGuid);
         }
         catch
         {
             throw;
         }
     }
     return status;
 }
 public int ModifyCredentialSet(string originalGuid, string serviceBrokerGuid, string serviceBrokerName,
     string groupName)
 {
     int status = 0;
     UserSchedulingDB dbManager = new UserSchedulingDB();
     if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
     {
         try
         {
             status = dbManager.ModifyCredentialSetServiceBroker(originalGuid, serviceBrokerGuid, serviceBrokerName);
         }
         catch
         {
             throw;
         }
     }
     return status;
 }
        public Reservation[] ListReservations(string serviceBrokerGuid, string userName, 
            string labServerGuid, string labClientGuid, DateTime startTime, DateTime endTime)
        {
            UserSchedulingDB dbManager = new UserSchedulingDB();
            Ticket retrievedTicket = dbManager.RetrieveAndVerify(opHeader.coupon, TicketTypes.REDEEM_RESERVATION);
            if (retrievedTicket.IsExpired())
            {
                throw new AccessDeniedException("The reservation ticket has expired, Please re-login.");
            }
            //used to check ticketPayload
            string user = null;
            string group = null;
            string labGuid = null;
            string clientGuid = null;
            string sbGuid = null;

            //Resolved target arguments
            string userTarget = null;
            string labGuidTarget = null;
            string clientGuidTarget = null;
            string lssUrl = null;
            string lssGuid = null;
            XmlDocument payload = new XmlDocument();
            payload.LoadXml(retrievedTicket.payload);

            sbGuid = payload.GetElementsByTagName("sbGuid")[0].InnerText;
            user = payload.GetElementsByTagName("userName")[0].InnerText;
            group = payload.GetElementsByTagName("groupName")[0].InnerText;
            clientGuid = payload.GetElementsByTagName("clientGuid")[0].InnerText;
            labGuid = payload.GetElementsByTagName("labServerGuid")[0].InnerText;

            lssUrl = dbManager.ListLssUrlByExperiment(clientGuid, labServerGuid);
            lssGuid = dbManager.ListLssIdByExperiment(clientGuid, labServerGuid);

            userTarget = Utilities.ResolveArguments(userName, user, true);
            clientGuidTarget = Utilities.ResolveArguments(labClientGuid, clientGuid, false);
            labGuidTarget = Utilities.ResolveArguments(labServerGuid, labGuid, false);

            DateTime targetStart = new DateTime(startTime.Year, startTime.Month, startTime.Day,
               startTime.Hour, startTime.Minute, 0, startTime.Kind);
            if (targetStart.Kind != DateTimeKind.Utc)
                targetStart = targetStart.ToUniversalTime();
            DateTime targetEnd = new DateTime(endTime.Year, endTime.Month, endTime.Day,
                    endTime.Hour, endTime.Minute, 0, endTime.Kind);
            if (targetEnd.Kind != DateTimeKind.Utc)
                targetEnd = targetEnd.ToUniversalTime();
            ReservationInfo[] resInfos = dbManager.GetReservationInfos(serviceBrokerGuid, userTarget, group,
                labGuidTarget, clientGuidTarget, targetStart, targetEnd);
            if (resInfos != null && resInfos.Length > 0)
            {
                Reservation[] reservations = new Reservation[resInfos.Length];

                for (int i = 0; i < resInfos.Length; i++)
                {
                    reservations[i] = new Reservation(resInfos[i].startTime, resInfos[i].endTime);
                    reservations[i].userName = resInfos[i].userName;
                }
                return reservations;
            }
            else
                return null;
        }
        public string AddReservation(string serviceBrokerGuid, string userName, string groupName,
            string labServerGuid, string labClientGuid, DateTime startTime, DateTime endTime)
        {
            string message = null;
             Coupon opCoupon = new Coupon();
             UserSchedulingDB dbManager = new UserSchedulingDB();
            opCoupon.couponId = opHeader.coupon.couponId;
            opCoupon.passkey = opHeader.coupon.passkey;
            opCoupon.issuerGuid = opHeader.coupon.issuerGuid;
            string type = TicketTypes.SCHEDULE_SESSION;
            try
            {
                Ticket retrievedTicket = dbManager.RetrieveAndVerify(opCoupon, type);
                if (retrievedTicket.IsExpired())
                {
                    throw new AccessDeniedException("The reservation ticket has expired, Please re-login.");
                }
                //used to check ticketPayload
                string user = null;
                string group = null;
                string labGuid = null;
                string clientGuid = null;
                string sbGuid = null;

                //Resolved target arguments
                string userTarget = null;
                string groupTarget = null;
                string labGuidTarget = null;
                string clientGuidTarget = null;

                XmlDocument payload = new XmlDocument();
                payload.LoadXml(retrievedTicket.payload);

                sbGuid = payload.GetElementsByTagName("sbGuid")[0].InnerText;
                user = payload.GetElementsByTagName("userName")[0].InnerText;
                group = payload.GetElementsByTagName("groupName")[0].InnerText;
                clientGuid = payload.GetElementsByTagName("clientGuid")[0].InnerText;
                labGuid = payload.GetElementsByTagName("labServerGuid")[0].InnerText;

                userTarget = Utilities.ResolveArguments(userName, user, true);
                groupTarget = Utilities.ResolveArguments(groupName, group, true);
                clientGuidTarget = Utilities.ResolveArguments(labClientGuid, clientGuid, false);
                labGuidTarget = Utilities.ResolveArguments(labServerGuid, labGuid, false);

                string lssGuid = dbManager.ListLssIdByExperiment(labClientGuid, labServerGuid);
                LSSInfo lssInfo = dbManager.GetLSSInfo(lssGuid);
                DateTime targetStart = new DateTime(startTime.Year, startTime.Month, startTime.Day,
               startTime.Hour, startTime.Minute, 0, startTime.Kind);
                if (targetStart.Kind != DateTimeKind.Utc)
                    targetStart = targetStart.ToUniversalTime();
                DateTime targetEnd = new DateTime(endTime.Year, endTime.Month, endTime.Day,
                    endTime.Hour, endTime.Minute, 0, endTime.Kind);
                if (targetEnd.Kind != DateTimeKind.Utc)
                    targetEnd = targetEnd.ToUniversalTime();

                LabSchedulingProxy lssProxy = new LabSchedulingProxy();
                lssProxy.OperationAuthHeaderValue = new OperationAuthHeader();
                lssProxy.OperationAuthHeaderValue.coupon = opCoupon;
                lssProxy.Url = lssInfo.lssUrl;
                message = lssProxy.ConfirmReservation( serviceBrokerGuid, groupName, ProcessAgentDB.ServiceGuid,
                    labServerGuid, labClientGuid, targetStart, targetEnd);
                if(message.ToLower().Contains("success")){
                    int infoID = dbManager.ListExperimentInfoIDByExperiment(labServerGuid, labClientGuid);
                    dbManager.AddReservation(userName, serviceBrokerGuid,groupName,infoID,targetStart,targetEnd);
                }
                return message;
            }

            catch (Exception e)
            {
                throw new Exception("USS: AddReservation -> ", e);
            }
            return message;
        }
 public int AddLSSInfo(string lssGuid, string lssName, string lssUrl, Coupon coupon)
 {
     int added = 0;
     UserSchedulingDB dbManager = new UserSchedulingDB();
     if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
     {
         try
         {
             int lID = dbManager.AddLSSInfo(lssGuid, lssName, lssUrl, coupon);
             added = (lID != -1) ? 1 : 0;
         }
         catch
         {
             throw;
         }
     }
     return added;
 }
 public int AddExperimentInfo(string labServerGuid, string labServerName, 
     string labClientGuid, string labClientName, string labClientVersion,
     string providerName, string lssGuid)
 {
     int added = 0;
        UserSchedulingDB dbManager = new UserSchedulingDB();
     if (dbManager.AuthenticateAgentHeader(agentAuthHeader))
     {
         try
         {
             int eID = dbManager.AddExperimentInfo(labServerGuid, labServerName,labClientGuid,  labClientName, labClientVersion, providerName, lssGuid);
             added = (eID != -1) ? 1 : 0;
         }
         catch
         {
             throw;
         }
     }
     return added;
 }