Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/29/12 14:04:59 (12 years ago)
Author:
jkarder
Message:

#1860:

  • integrated owner attribute (OwnerUserId) into the Hive components
  • adjusted database scheme
  • adjusted service methods
Location:
trunk/sources/HeuristicLab.Services.Hive/3.3
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Services.Hive/3.3/Convert.cs

    r7857 r7916  
    200200    #endregion
    201201
     202    #region Resource
     203    public static DT.Resource ToDto(DB.Resource source) {
     204      if (source == null) return null;
     205      return new DT.Resource { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId, HbInterval = source.HbInterval, OwnerUserId = source.OwnerUserId };
     206    }
     207    public static DB.Resource ToEntity(DT.Resource source) {
     208      if (source == null) return null;
     209      var entity = new DB.Resource(); ToEntity(source, entity);
     210      return entity;
     211    }
     212    public static void ToEntity(DT.Resource source, DB.Resource target) {
     213      if ((source != null) && (target != null)) {
     214        target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId; target.HbInterval = source.HbInterval; target.OwnerUserId = source.OwnerUserId;
     215      }
     216    }
     217    #endregion
     218
     219    #region SlaveGroup
     220    public static DT.SlaveGroup ToDto(DB.SlaveGroup source) {
     221      if (source == null) return null;
     222      return new DT.SlaveGroup { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId, HbInterval = source.HbInterval, OwnerUserId = source.OwnerUserId };
     223    }
     224    public static DB.SlaveGroup ToEntity(DT.SlaveGroup source) {
     225      if (source == null) return null;
     226      var entity = new DB.SlaveGroup(); ToEntity(source, entity);
     227      return entity;
     228    }
     229    public static void ToEntity(DT.SlaveGroup source, DB.SlaveGroup target) {
     230      if ((source != null) && (target != null)) {
     231        target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId; target.HbInterval = source.HbInterval; target.OwnerUserId = source.OwnerUserId;
     232      }
     233    }
     234    #endregion
     235
    202236    #region Slave
    203237    public static DT.Slave ToDto(DB.Slave source) {
     
    219253        CpuUtilization = source.CpuUtilization,
    220254        HbInterval = source.HbInterval,
    221         IsDisposable = source.IsDisposable
     255        IsDisposable = source.IsDisposable,
     256        OwnerUserId = source.OwnerUserId
    222257      };
    223258    }
     
    245280        target.HbInterval = source.HbInterval;
    246281        target.IsDisposable = source.IsDisposable;
    247       }
    248     }
    249     #endregion
    250 
    251     #region SlaveGroup
    252     public static DT.SlaveGroup ToDto(DB.SlaveGroup source) {
    253       if (source == null) return null;
    254       return new DT.SlaveGroup { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId, HbInterval = source.HbInterval };
    255     }
    256     public static DB.SlaveGroup ToEntity(DT.SlaveGroup source) {
    257       if (source == null) return null;
    258       var entity = new DB.SlaveGroup(); ToEntity(source, entity);
    259       return entity;
    260     }
    261     public static void ToEntity(DT.SlaveGroup source, DB.SlaveGroup target) {
    262       if ((source != null) && (target != null)) {
    263         target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId; target.HbInterval = source.HbInterval;
    264       }
    265     }
    266     #endregion
    267 
    268     #region Resource
    269     public static DT.Resource ToDto(DB.Resource source) {
    270       if (source == null) return null;
    271       return new DT.Resource { Id = source.ResourceId, Name = source.Name, ParentResourceId = source.ParentResourceId, HbInterval = source.HbInterval };
    272     }
    273     public static DB.Resource ToEntity(DT.Resource source) {
    274       if (source == null) return null;
    275       var entity = new DB.Resource(); ToEntity(source, entity);
    276       return entity;
    277     }
    278     public static void ToEntity(DT.Resource source, DB.Resource target) {
    279       if ((source != null) && (target != null)) {
    280         target.ResourceId = source.Id; target.Name = source.Name; target.ParentResourceId = source.ParentResourceId; target.HbInterval = source.HbInterval;
    281       }
    282     }
    283     #endregion
    284 
    285     #region Statistics
    286     public static DT.Statistics ToDto(DB.Statistics source) {
    287       if (source == null) return null;
    288       return new DT.Statistics {
    289         Id = source.StatisticsId,
    290         TimeStamp = source.Timestamp,
    291         SlaveStatistics = source.SlaveStatistics.Select(x => Convert.ToDto(x)).ToArray(),
    292         UserStatistics = source.UserStatistics.Select(x => Convert.ToDto(x)).ToArray()
    293       };
    294     }
    295     public static DB.Statistics ToEntity(DT.Statistics source) {
    296       if (source == null) return null;
    297       var entity = new DB.Statistics(); ToEntity(source, entity);
    298       return entity;
    299     }
    300     public static void ToEntity(DT.Statistics source, DB.Statistics target) {
    301       if ((source != null) && (target != null)) {
    302         target.StatisticsId = source.Id;
    303         target.Timestamp = source.TimeStamp;
    304 
     282        target.OwnerUserId = source.OwnerUserId;
     283      }
     284    }
     285    #endregion
     286
     287    #region ResourcePermission
     288    public static DT.ResourcePermission ToDto(DB.ResourcePermission source) {
     289      if (source == null) return null;
     290      return new DT.ResourcePermission { ResourceId = source.ResourceId, GrantedUserId = source.GrantedUserId, GrantedByUserId = source.GrantedByUserId };
     291    }
     292    public static DB.ResourcePermission ToEntity(DT.ResourcePermission source) {
     293      if (source == null) return null;
     294      var entity = new DB.ResourcePermission(); ToEntity(source, entity);
     295      return entity;
     296    }
     297    public static void ToEntity(DT.ResourcePermission source, DB.ResourcePermission target) {
     298      if ((source != null) && (target != null)) {
     299        target.ResourceId = source.ResourceId; target.GrantedUserId = source.GrantedUserId; target.GrantedByUserId = source.GrantedByUserId;
    305300      }
    306301    }
     
    334329        target.FreeMemory = source.FreeMemory;
    335330        target.Memory = source.Memory;
     331      }
     332    }
     333    #endregion
     334
     335    #region Statistics
     336    public static DT.Statistics ToDto(DB.Statistics source) {
     337      if (source == null) return null;
     338      return new DT.Statistics {
     339        Id = source.StatisticsId,
     340        TimeStamp = source.Timestamp,
     341        SlaveStatistics = source.SlaveStatistics.Select(x => Convert.ToDto(x)).ToArray(),
     342        UserStatistics = source.UserStatistics.Select(x => Convert.ToDto(x)).ToArray()
     343      };
     344    }
     345    public static DB.Statistics ToEntity(DT.Statistics source) {
     346      if (source == null) return null;
     347      var entity = new DB.Statistics(); ToEntity(source, entity);
     348      return entity;
     349    }
     350    public static void ToEntity(DT.Statistics source, DB.Statistics target) {
     351      if ((source != null) && (target != null)) {
     352        target.StatisticsId = source.Id;
     353        target.Timestamp = source.TimeStamp;
     354
    336355      }
    337356    }
  • trunk/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Resource.cs

    r7259 r7916  
    2929    [DataMember]
    3030    public Guid? ParentResourceId { get; set; }
    31 
    3231    [DataMember]
    3332    public int HbInterval { get; set; }
     33    [DataMember]
     34    public Guid? OwnerUserId { get; set; }
    3435
    3536    public Resource() { }
  • trunk/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj

    r7189 r7916  
    114114    <Compile Include="Convert.cs" />
    115115    <Compile Include="DataTransfer\Command.cs" />
     116    <Compile Include="DataTransfer\ResourcePermission.cs" />
    116117    <Compile Include="DataTransfer\Downtime.cs" />
    117118    <Compile Include="DataTransfer\Heartbeat.cs" />
  • trunk/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs

    r7259 r7916  
    613613    #endregion
    614614
     615    #region ResourcePermission Methods
     616    public DT.ResourcePermission GetResourcePermission(Guid resourceId, Guid grantedUserId) {
     617      using (var db = CreateContext()) {
     618        return DT.Convert.ToDto(db.ResourcePermissions.SingleOrDefault(x => x.ResourceId == resourceId && x.GrantedUserId == grantedUserId));
     619      }
     620    }
     621
     622    public IEnumerable<DT.ResourcePermission> GetResourcePermissions(Expression<Func<ResourcePermission, bool>> predicate) {
     623      using (var db = CreateContext()) {
     624        return db.ResourcePermissions.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
     625      }
     626    }
     627
     628    public void AddResourcePermission(DT.ResourcePermission dto) {
     629      using (var db = CreateContext()) {
     630        var entity = db.ResourcePermissions.SingleOrDefault(x => x.ResourceId == dto.ResourceId && x.GrantedUserId == dto.GrantedUserId);
     631        if (entity == null) { db.ResourcePermissions.InsertOnSubmit(DT.Convert.ToEntity(dto)); db.SubmitChanges(); }
     632      }
     633    }
     634
     635    public void UpdateResourcePermission(DT.ResourcePermission dto) {
     636      using (var db = CreateContext()) {
     637        var entity = db.ResourcePermissions.FirstOrDefault(x => x.ResourceId == dto.ResourceId && x.GrantedUserId == dto.GrantedUserId);
     638        if (entity == null) db.ResourcePermissions.InsertOnSubmit(DT.Convert.ToEntity(dto));
     639        else DT.Convert.ToEntity(dto, entity);
     640        db.SubmitChanges();
     641      }
     642    }
     643
     644    public void DeleteResourcePermission(Guid resourceId, Guid grantedUserId) {
     645      using (var db = CreateContext()) {
     646        var entity = db.ResourcePermissions.FirstOrDefault(x => x.ResourceId == resourceId && x.GrantedUserId == grantedUserId);
     647        if (entity != null) db.ResourcePermissions.DeleteOnSubmit(entity);
     648        db.SubmitChanges();
     649      }
     650    }
     651    #endregion
     652
    615653    #region Authorization Methods
    616654    public Permission GetPermissionForTask(Guid taskId, Guid userId) {
  • trunk/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs

    r7910 r7916  
    353353    public void Hello(Slave slaveInfo) {
    354354      authen.AuthenticateForAnyRole(HiveRoles.Slave);
     355      if (userManager.CurrentUser.UserName != "hiveslave")
     356        slaveInfo.OwnerUserId = userManager.CurrentUserId;
     357
    355358      trans.UseTransaction(() => {
    356359        var slave = dao.GetSlave(slaveInfo.Id);
     
    359362          dao.AddSlave(slaveInfo);
    360363        } else {
    361           var dbSlave = dao.GetSlave(slaveInfo.Id);
    362 
    363           dbSlave.Name = slaveInfo.Name;
    364           dbSlave.Description = slaveInfo.Description;
    365 
    366           dbSlave.Cores = slaveInfo.Cores;
    367           dbSlave.CpuArchitecture = slaveInfo.CpuArchitecture;
    368           dbSlave.CpuSpeed = slaveInfo.CpuSpeed;
    369           dbSlave.FreeCores = slaveInfo.FreeCores;
    370           dbSlave.FreeMemory = slaveInfo.FreeMemory;
    371           dbSlave.Memory = slaveInfo.Memory;
    372           dbSlave.OperatingSystem = slaveInfo.OperatingSystem;
    373 
    374           dbSlave.LastHeartbeat = DateTime.Now;
    375           dbSlave.SlaveState = SlaveState.Idle;
     364          slave.Name = slaveInfo.Name;
     365          slave.Description = slaveInfo.Description;
     366          slave.OwnerUserId = slaveInfo.OwnerUserId;
     367
     368          slave.Cores = slaveInfo.Cores;
     369          slave.CpuArchitecture = slaveInfo.CpuArchitecture;
     370          slave.CpuSpeed = slaveInfo.CpuSpeed;
     371          slave.FreeCores = slaveInfo.FreeCores;
     372          slave.FreeMemory = slaveInfo.FreeMemory;
     373          slave.Memory = slaveInfo.Memory;
     374          slave.OperatingSystem = slaveInfo.OperatingSystem;
     375
     376          slave.LastHeartbeat = DateTime.Now;
     377          slave.SlaveState = SlaveState.Idle;
    376378
    377379          // don't update those properties: dbSlave.IsAllowedToCalculate, dbSlave.ParentResourceId
    378380
    379           dao.UpdateSlave(dbSlave);
     381          dao.UpdateSlave(slave);
    380382        }
    381383      });
     
    461463      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
    462464      dao.DeletePlugin(pluginId);
     465    }
     466    #endregion
     467
     468    #region ResourcePermission Methods
     469    public void GrantResourcePermission(Guid resourceId, Guid grantedUserId) {
     470      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     471      trans.UseTransaction(() => {
     472        Resource resource = dao.GetResource(resourceId);
     473        if (resource == null) throw new FaultException<FaultReason>(new FaultReason("Could not find resource with id " + resourceId));
     474        if (resource.OwnerUserId != userManager.CurrentUserId) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permission for this resource"));
     475        dao.AddResourcePermission(new ResourcePermission { ResourceId = resourceId, GrantedByUserId = userManager.CurrentUserId, GrantedUserId = grantedUserId });
     476      });
     477    }
     478
     479    public void RevokeResourcePermission(Guid resourceId, Guid grantedUserId) {
     480      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     481      trans.UseTransaction(() => {
     482        Resource resource = dao.GetResource(resourceId);
     483        if (resource == null) throw new FaultException<FaultReason>(new FaultReason("Could not find resource with id " + resourceId));
     484        if (resource.OwnerUserId != userManager.CurrentUserId) throw new FaultException<FaultReason>(new FaultReason("Not allowed to revoke permission for this resource"));
     485        dao.DeleteResourcePermission(resourceId, grantedUserId);
     486      });
     487    }
     488
     489    public IEnumerable<ResourcePermission> GetResourcePermissions(Guid resourceId) {
     490      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     491      return trans.UseTransaction(() => {
     492        Resource resource = dao.GetResource(resourceId);
     493        if (resource == null) throw new FaultException<FaultReason>(new FaultReason("Could not find resource with id " + resourceId));
     494        if (resource.OwnerUserId != userManager.CurrentUserId) throw new FaultException<FaultReason>(new FaultReason("Not allowed to list permissions for this resource"));
     495        return dao.GetResourcePermissions(x => x.ResourceId == resourceId);
     496      });
    463497    }
    464498    #endregion
     
    497531    public IEnumerable<Slave> GetSlaves() {
    498532      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    499       return dao.GetSlaves(x => true);
     533      return dao.GetSlaves(x => x.OwnerUserId == null
     534                             || x.OwnerUserId == userManager.CurrentUserId
     535                             || x.ResourcePermissions.Count(y => y.GrantedUserId == userManager.CurrentUserId) > 0
     536                             || authen.IsInRole(HiveRoles.Administrator));
    500537    }
    501538
    502539    public IEnumerable<SlaveGroup> GetSlaveGroups() {
    503540      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    504       return dao.GetSlaveGroups(x => true);
     541      return dao.GetSlaveGroups(x => x.OwnerUserId == null
     542                                  || x.OwnerUserId == userManager.CurrentUserId
     543                                  || x.ResourcePermissions.Count(y => y.GrantedUserId == userManager.CurrentUserId) > 0
     544                                  || authen.IsInRole(HiveRoles.Administrator));
    505545    }
    506546
  • trunk/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs

    r7259 r7916  
    117117    #endregion
    118118
     119    #region ResourcePermission Methods
     120    DT.ResourcePermission GetResourcePermission(Guid resourceId, Guid grantedUserId);
     121    IEnumerable<DT.ResourcePermission> GetResourcePermissions(Expression<Func<ResourcePermission, bool>> predicate);
     122    void AddResourcePermission(DT.ResourcePermission dto);
     123    void UpdateResourcePermission(DT.ResourcePermission dto);
     124    void DeleteResourcePermission(Guid resourceId, Guid grantedUserId);
     125    #endregion
     126
    119127    #region Authorization Methods
    120128    Permission GetPermissionForTask(Guid taskId, Guid userId);
  • trunk/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs

    r7259 r7916  
    158158    #endregion
    159159
     160    #region ResourcePermission Methods
     161    [OperationContract]
     162    void GrantResourcePermission(Guid resourceId, Guid grantedUserId);
     163
     164    [OperationContract]
     165    void RevokeResourcePermission(Guid resourceId, Guid grantedUserId);
     166
     167    [OperationContract]
     168    IEnumerable<ResourcePermission> GetResourcePermissions(Guid resourceId);
     169    #endregion
     170
    160171    #region Slave Methods
    161172    [OperationContract]
Note: See TracChangeset for help on using the changeset viewer.