Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/27/16 16:48:35 (8 years ago)
Author:
jlodewyc
Message:

#2582 Bugfixing, email setup password and code commenting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Hubs/CalendarHub.cs

    r13795 r13805  
    1212namespace HeuristicLab.Clients.Hive.WebJobManager.Hubs
    1313{
     14    /// <summary>
     15    /// SignalR Hub that manages all resource management.
     16    /// </summary>
    1417    public class CalendarHub : Hub
    1518    {
     
    1922        private HiveServiceLocatorWeb servloc;
    2023        private AccessAdministrationClient accessClient;
     24        /// <summary>
     25        /// Loads up the services for the client (Instance is only created upon a call from a client)
     26        /// </summary>
    2127        private void loader()
    2228        {
     
    3541            }
    3642        }
     43        /// <summary>
     44        /// Initial client request for all user, group and resource information
     45        /// </summary>
    3746        public void requestInfo()
    3847        {
     
    4049            adminClient.Refresh();
    4150            UserViewModel vm = new UserViewModel(accessClient).refreshAll();
     51
    4252            var users = JsonConvert.SerializeObject(vm.users);
    4353            var groups = JsonConvert.SerializeObject(vm.ugroups);
     
    4555            Clients.Caller.processData(res, users, groups);
    4656        }
     57        /// <summary>
     58        /// Request for the downtimes of a specific resource
     59        /// </summary>
     60        /// <param name="id">Resource ID</param>
    4761        public void requestDownTime(string id)
    4862        {
     
    5064            adminClient.Refresh();
    5165            Guid t = Guid.Parse(id);
     66
     67            //Loads up the downtimes for the set resource ID
    5268            adminClient.DowntimeForResourceId = t;
    5369            adminClient.RefreshCalendar();
     70           
    5471            var down = JsonConvert.SerializeObject(adminClient.Downtimes);
    5572            Clients.Caller.processDowntime(id, down);
    5673        }
     74        /// <summary>
     75        /// Request for permissions of a specific resource (refreshable by recall)
     76        /// </summary>
     77        /// <param name="id">Resource ID</param>
    5778        public void requestPermissions(string id)
    5879        {
     
    6384        }
    6485
     86        /// <summary>
     87        /// Edit permissions for a resource
     88        /// </summary>
     89        /// <param name="perms">Permissions ID's</param>
     90        /// <param name="idresource">Resource ID</param>
    6591        public void changePermissions(string[] perms, string idresource)
    6692        {
    6793            loader();
    6894            var res = Guid.Parse(idresource);
     95
     96            //Collect current permissions
    6997            var exist = servloc.CallHiveService(x => x.GetResourcePermissions(res));
     98
     99            //Separate list for new and to remove permissions
    70100            List<Guid> newPerms = new List<Guid>();
    71101            List<Guid> revokePerms = new List<Guid>();
     102
    72103            for (var i = 0; i < perms.Length; i++)
    73104            {
     
    75106                var elemid = exist.FindIndex(x => x.GrantedUserId == p);
    76107                if (elemid != -1)
    77                 {
     108                {//If it already exists => Scramble up Guid (checked further)
    78109                    exist[elemid].GrantedUserId = Guid.Empty;
    79110                }
    80111                else
    81                 {
     112                {//If it's not in the list, add to new permissions
    82113                    newPerms.Add(p);
    83114                }
    84115            }
     116            //Adds the new permissions to the resource
    85117            servloc.CallHiveService(x => x.GrantResourcePermissions(res, newPerms));
    86118            foreach (var ex in exist)
    87             {
     119            {//Checks for intact ID's and adds them to the revoke list
    88120                if(ex.GrantedUserId != Guid.Empty)
    89121                {
     
    91123                }
    92124            }
     125            //Revokes all permissions that were deselected by the user
    93126            servloc.CallHiveService(x => x.RevokeResourcePermissions(res, revokePerms));
     127            //Live reload the view for the resource
    94128            requestPermissions(idresource);
    95129        }
     130        /// <summary>
     131        /// Toggles the disposable setting for a resource
     132        /// </summary>
     133        /// <param name="id">Resource ID</param>
    96134        public void toggleDisposable(string id)
    97135        {
     
    100138            Guid c = Guid.Parse(id);
    101139            var obj = adminClient.Resources.ToList().Find(x => x.Id == c);
     140
     141            //Toggle
    102142            ((Slave)(obj)).IsDisposable = !((Slave)(obj)).IsDisposable;
     143
    103144            adminClient.Store(obj, CancellationToken.None);
     145
     146            //Notify client of successful saving
    104147            Clients.Caller.processDispose( ((Slave)(obj)).IsDisposable);
    105148
    106149        }
     150        /// <summary>
     151        /// Saves changes to a resource calendar
     152        /// </summary>
     153        /// <param name="id">Resource id</param>
     154        /// <param name="del">To delete downtimes</param>
     155        /// <param name="add">New downtimes</param>
     156        /// <param name="upd">Downtimes to update</param>
     157        /// <param name="fresh">Check if refresh should be sent (Save all current graph or Save current graph)</param>
     158        /// <param name="last">Check for last request (Save all)</param>
    107159        public void saveCalendar(string id, string[] del, string[][] add, string[][] upd, bool fresh, bool last)
    108160        {
    109161            loader();
    110162            var calid = Guid.Parse(id);
     163           
     164            //Load up calendar
    111165            adminClient.Refresh();
    112166            adminClient.DowntimeForResourceId = calid;
    113167            adminClient.RefreshCalendar();
     168
    114169            var downlist = adminClient.Downtimes.ToList();
    115170            foreach(var s in del)
    116             {
     171            {//Deletes downtimes
    117172                var gu = Guid.Parse(s);
    118173                var el = downlist.Find(x => x.Id == gu);
     
    120175            }
    121176            foreach (var s in add)
    122             {
     177            {//Adds new downtimes
     178                //init
    123179                var obj = new Downtime();
    124180                obj.Id = Guid.Empty;
     
    134190                    obj.AllDayEvent = false;
    135191                obj.ResourceId = Guid.Parse(s[4]);
     192
     193                //Recurrency check
    136194                if (s[5] == "true")
    137                 {
     195                {//Recurrency set
    138196                    obj.Recurring = true;
    139197                    if (s[6] == "0")
    140                     {
     198                    {//new Recur
    141199                        var dayarr = s[9].Split(',');
    142200                        var start = (new DateTime(1970, 1, 1)).AddMilliseconds(double.Parse(s[7]));
    143201                        var end = (new DateTime(1970, 1, 1)).AddMilliseconds(double.Parse(s[8]));
    144                         loopAddDowns(start, end, dayarr, obj);   
     202                        loopAddDowns(start, end, dayarr, obj);//Loop creation of recurrency. Start to end date
    145203                    }
    146204                    else
    147                     {
     205                    {//Existing recurrency (only edits current element, client handles the creation of the other events)
    148206                        obj.RecurringId = Guid.Parse(s[6]);
    149207                        adminClient.Store(obj, CancellationToken.None);
    150208                    }
    151209                }
    152                 else {
     210                else { //No recurrency
    153211                    obj.Recurring = false;
    154212                    adminClient.Store(obj, CancellationToken.None);
     
    158216            }
    159217            foreach(var s in upd)
    160             {
     218            {//Update existing downtime
    161219                 var obj = downlist.Find(x => x.Id == Guid.Parse(s[0]));
    162220                if (s[1] == "Unavailable")
     
    171229                    obj.AllDayEvent = false;
    172230                if (s[5] == "true" && !obj.Recurring)
    173                 {
     231                {//Recurrence set
    174232                    obj.Recurring = true;
    175233                    if (s[6] == "00000000-0000-0000-0000-000000000000")
    176                     {
     234                    {//Creates new recurrence
    177235                        var dayarr = s[9].Split(',');
    178236                        var start = (new DateTime(1970, 1, 1)).AddMilliseconds(double.Parse(s[7]));
    179237                        var end = (new DateTime(1970, 1, 1)).AddMilliseconds(double.Parse(s[8]));
    180                         //loopAddDowns(start, end, dayarr, obj);
     238                        loopAddDowns(start, end, dayarr, obj);
     239                        adminClient.Delete(obj);
     240                        //Delete needed to prevent doubles in the creation of the recurrency
     241                        //Why: event could be on not included day of the week => loop cannot find that.
    181242                    }
    182243                    else
     
    194255            }
    195256            if( last)
    196             {
     257            {//Last element from save all => Notify client
    197258                Clients.Caller.savingAllDone();
    198259            }
    199260            else if (fresh)
    200             {
     261            {//Refresh for graph needed
    201262                Clients.Caller.savingCurrentDone();
    202263            }
    203264        }
     265        /// <summary>
     266        /// Creates downtimes for a new recurrency
     267        /// </summary>
     268        /// <param name="start">Start date</param>
     269        /// <param name="end">End date</param>
     270        /// <param name="dayarr">Boolean day array (sun = 0,...)</param>
     271        /// <param name="obj">Downtime to recur</param>
    204272        private void loopAddDowns(DateTime start, DateTime end, string[] dayarr, Downtime obj)
    205273        {
    206274            var rid = Guid.NewGuid();
    207             for (; start < end;)
     275            while (start < end)
    208276            {
    209277                if (dayarr[(int)(start.DayOfWeek)] == "true")
    210                 {
     278                {//Check for day of the week
     279                    //Set setting for the downtime to add
    211280                    var temp = new Downtime();
    212                     temp.StartDate = start.AddHours(obj.StartDate.Hour - start.Hour).AddMinutes(obj.StartDate.Minute - start.Minute);
    213                     temp.EndDate = start.AddHours(obj.EndDate.Hour - start.Hour).AddMinutes(obj.EndDate.Minute - start.Minute);
    214                     temp.Id = obj.Id;
     281                    temp.StartDate = start.AddHours(obj.StartDate.Hour - start.Hour)
     282                        .AddMinutes(obj.StartDate.Minute - start.Minute);
     283                    temp.EndDate = start.AddHours(obj.EndDate.Hour - start.Hour)
     284                        .AddMinutes(obj.EndDate.Minute - start.Minute);
     285                    temp.Id = Guid.Empty;
    215286                    temp.DowntimeType = obj.DowntimeType;
    216287                    temp.AllDayEvent = obj.AllDayEvent;
Note: See TracChangeset for help on using the changeset viewer.