Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/08/16 14:40:02 (8 years ago)
Author:
gkronber
Message:

#2434: merged trunk changes r12934:14026 from trunk to branch

Location:
branches/crossvalidation-2434
Files:
8 edited
5 copied

Legend:

Unmodified
Added
Removed
  • branches/crossvalidation-2434

  • branches/crossvalidation-2434/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj

    r12479 r14029  
    283283    <Compile Include="RunCreation\DataTransfer\BinaryValue.cs" />
    284284    <Compile Include="RunCreation\DataTransfer\BoolValue.cs" />
     285    <Compile Include="RunCreation\DataTransfer\SingleObjectiveSolution.cs" />
     286    <Compile Include="RunCreation\DataTransfer\Solution.cs" />
    285287    <Compile Include="RunCreation\DataTransfer\TimeSpanValue.cs" />
    286288    <Compile Include="RunCreation\DataTransfer\PercentValue.cs" />
     
    295297    <Compile Include="RunCreation\DataTransfer\StringValue.cs" />
    296298    <Compile Include="RunCreation\DataTransfer\Value.cs" />
     299    <Compile Include="RunCreation\MissingSolution.cs" />
     300    <Compile Include="RunCreation\MissingProblem.cs" />
    297301    <Compile Include="RunCreation\RunCreationService.cs" />
    298302    <Compile Include="RunCreation\IRunCreationService.cs" />
     303    <Compile Include="RunCreation\UnknownCharacteristicType.cs" />
    299304  </ItemGroup>
    300305  <ItemGroup>
  • branches/crossvalidation-2434/HeuristicLab.Services.OKB/3.3/Properties/AssemblyInfo.cs.frame

    r12753 r14029  
    5555// [assembly: AssemblyVersion("1.0.*")]
    5656[assembly: AssemblyVersion("3.3.0.0")]
    57 [assembly: AssemblyFileVersion("3.3.12.$WCREV$")]
     57[assembly: AssemblyFileVersion("3.3.13.$WCREV$")]
  • branches/crossvalidation-2434/HeuristicLab.Services.OKB/3.3/Query/Convert.cs

    r12012 r14029  
    4646    private static DT.Algorithm ToDto(DA.Algorithm source) {
    4747      if (source == null) return null;
    48       return new DT.Algorithm { Name = source.Name, Description = source.Description, AlgorithmClass = source.AlgorithmClass.Name, Platform = source.Platform.Name, DataType = Convert.ToDto(source.DataType) };
     48      return new DT.Algorithm { Id = source.Id, Name = source.Name, Description = source.Description, AlgorithmClass = source.AlgorithmClass.Name, Platform = source.Platform.Name, DataType = Convert.ToDto(source.DataType) };
    4949    }
    5050
  • branches/crossvalidation-2434/HeuristicLab.Services.OKB/3.3/Query/DataTransfer/Algorithm.cs

    r12012 r14029  
    2626  public class Algorithm {
    2727    [DataMember]
     28    public long Id { get; set; }
     29    [DataMember]
    2830    public string Name { get; set; }
    2931    [DataMember]
  • branches/crossvalidation-2434/HeuristicLab.Services.OKB/3.3/RunCreation/Convert.cs

    r12012 r14029  
    4040    }
    4141
     42    public static DT.SingleObjectiveSolution ToDto(DA.SingleObjectiveSolution source) {
     43      if (source == null) return null;
     44      return new DT.SingleObjectiveSolution() {
     45        Id = source.Id,
     46        ProblemId = source.ProblemId.Value,
     47        RunId = source.RunId,
     48        Quality = source.Quality,
     49        DataType = ToDto(source.DataType)
     50      };
     51    }
     52
    4253    private static DT.DataType ToDto(DA.DataType source) {
    4354      if (source == null) return null;
     
    6879        entity.Values.Add(Convert.ToEntity(value, entity, DA.ValueNameCategory.Result, okb, binCache));
    6980      return entity;
     81    }
     82
     83    public static DT.Value ToDto(DA.CharacteristicValue source) {
     84      if (source == null) return null;
     85      if (source.Characteristic.Type == DA.CharacteristicType.Bool) {
     86        return new DT.BoolValue { Name = source.Characteristic.Name, DataType = Convert.ToDto(source.DataType), Value = source.BoolValue.GetValueOrDefault() };
     87      } else if (source.Characteristic.Type == DA.CharacteristicType.Int) {
     88        return new DT.IntValue { Name = source.Characteristic.Name, DataType = Convert.ToDto(source.DataType), Value = source.IntValue.GetValueOrDefault() };
     89      } else if (source.Characteristic.Type == DA.CharacteristicType.TimeSpan) {
     90        return new DT.TimeSpanValue { Name = source.Characteristic.Name, DataType = Convert.ToDto(source.DataType), Value = source.LongValue.GetValueOrDefault() };
     91      } else if (source.Characteristic.Type == DA.CharacteristicType.Long) {
     92        return new DT.LongValue { Name = source.Characteristic.Name, DataType = Convert.ToDto(source.DataType), Value = source.LongValue.GetValueOrDefault() };
     93      } else if (source.Characteristic.Type == DA.CharacteristicType.Float) {
     94        return new DT.FloatValue { Name = source.Characteristic.Name, DataType = Convert.ToDto(source.DataType), Value = source.FloatValue.GetValueOrDefault() };
     95      } else if (source.Characteristic.Type == DA.CharacteristicType.Double) {
     96        return new DT.DoubleValue { Name = source.Characteristic.Name, DataType = Convert.ToDto(source.DataType), Value = source.DoubleValue.GetValueOrDefault() };
     97      } else if (source.Characteristic.Type == DA.CharacteristicType.Percent) {
     98        return new DT.PercentValue { Name = source.Characteristic.Name, DataType = Convert.ToDto(source.DataType), Value = source.DoubleValue.GetValueOrDefault() };
     99      } else if (source.Characteristic.Type == DA.CharacteristicType.String) {
     100        return new DT.StringValue { Name = source.Characteristic.Name, DataType = Convert.ToDto(source.DataType), Value = source.StringValue };
     101      } else {
     102        throw new ArgumentException("Unknown characteristic type.", "source");
     103      }
     104    }
     105
     106    public static DA.CharacteristicValue ToEntity(DT.Value source, DA.OKBDataContext okb, DA.Problem problem, DA.CharacteristicType type) {
     107      if (okb == null || problem == null || source == null || string.IsNullOrEmpty(source.Name)) throw new ArgumentNullException();
     108      var entity = new DA.CharacteristicValue();
     109      entity.Problem = problem;
     110      entity.DataType = Convert.ToEntity(source.DataType, okb);
     111      entity.Characteristic = Convert.ToEntity(source.Name, type, okb);
     112      if (source is DT.BoolValue) {
     113        entity.BoolValue = ((DT.BoolValue)source).Value;
     114      } else if (source is DT.IntValue) {
     115        entity.IntValue = ((DT.IntValue)source).Value;
     116      } else if (source is DT.TimeSpanValue) {
     117        entity.LongValue = ((DT.TimeSpanValue)source).Value;
     118      } else if (source is DT.LongValue) {
     119        entity.LongValue = ((DT.LongValue)source).Value;
     120      } else if (source is DT.FloatValue) {
     121        entity.FloatValue = ((DT.FloatValue)source).Value;
     122      } else if (source is DT.DoubleValue) {
     123        entity.DoubleValue = ((DT.DoubleValue)source).Value;
     124      } else if (source is DT.PercentValue) {
     125        entity.DoubleValue = ((DT.PercentValue)source).Value;
     126      } else if (source is DT.StringValue) {
     127        entity.StringValue = ((DT.StringValue)source).Value;
     128      } else {
     129        throw new ArgumentException("Unknown characteristic type.", "source");
     130      }
     131      return entity;
     132    }
     133
     134    private static DA.Characteristic ToEntity(string name, DA.CharacteristicType type, DA.OKBDataContext okb) {
     135      if (string.IsNullOrEmpty(name)) return null;
     136      var entity = okb.Characteristics.FirstOrDefault(x => (x.Name == name) && (x.Type == type));
     137      return entity ?? new DA.Characteristic() { Id = 0, Name = name, Type = type };
    70138    }
    71139
     
    108176    }
    109177
    110     private static DA.DataType ToEntity(DT.DataType source, DA.OKBDataContext okb) {
    111       if (source == null) return null;
    112       var entity = okb.DataTypes.Where(x => (x.Name == source.Name) && (x.TypeName == source.TypeName)).FirstOrDefault();
     178    public static DA.DataType ToEntity(DT.DataType source, DA.OKBDataContext okb) {
     179      if (source == null) return null;
     180      var entity = okb.DataTypes.FirstOrDefault(x => (x.Name == source.Name) && (x.TypeName == source.TypeName));
    113181      if (entity == null)
    114182        entity = new DA.DataType() { Id = 0, Name = source.Name, TypeName = source.TypeName };
     
    118186    private static DA.ValueName ToEntity(string name, DA.ValueNameCategory category, DA.ValueNameType type, DA.OKBDataContext okb) {
    119187      if (string.IsNullOrEmpty(name)) return null;
    120       var entity = okb.ValueNames.Where(x => (x.Name == name) && (x.Category == category) && (x.Type == type)).FirstOrDefault();
     188      var entity = okb.ValueNames.FirstOrDefault(x => (x.Name == name) && (x.Category == category) && (x.Type == type));
    121189      if (entity == null)
    122190        entity = new DA.ValueName() { Id = 0, Name = name, Category = category, Type = type };
     
    131199      }
    132200
    133       var cachedBinaryData = binCache.Where(x => x.Hash.SequenceEqual(hash)).FirstOrDefault();
     201      var cachedBinaryData = binCache.FirstOrDefault(x => x.Hash.SequenceEqual(hash));
    134202      if (cachedBinaryData != null)
    135203        return cachedBinaryData;
    136204
    137       var entity = okb.BinaryDatas.Where(x => x.Hash.Equals(hash)).FirstOrDefault();
     205      var entity = okb.BinaryDatas.FirstOrDefault(x => x.Hash.Equals(hash));
    138206      if (entity == null) {
    139207        entity = new DA.BinaryData() { Id = 0, Data = data, Hash = hash };
     
    143211      return entity;
    144212    }
     213
     214    public static DA.SingleObjectiveSolution ToEntity(DT.SingleObjectiveSolution source, byte[] data, DA.OKBDataContext okb) {
     215      var sol = okb.SingleObjectiveSolutions.SingleOrDefault(x => x.Id == source.Id) ?? new DA.SingleObjectiveSolution() {
     216        ProblemId = source.ProblemId,
     217        RunId = source.RunId,
     218        Quality = source.Quality
     219      };
     220      if (source.DataType != null) {
     221        sol.DataType = ToEntity(source.DataType, okb);
     222      }
     223      if (data != null && data.Length > 0) {
     224        byte[] hash;
     225        using (var sha1 = SHA1.Create()) {
     226          hash = sha1.ComputeHash(data);
     227        }
     228        sol.BinaryData = new DA.BinaryData() {
     229          Data = data,
     230          Hash = hash
     231        };
     232      }
     233      return sol;
     234    }
    145235    #endregion
    146236  }
  • branches/crossvalidation-2434/HeuristicLab.Services.OKB/3.3/RunCreation/IRunCreationService.cs

    r12012 r14029  
    2020#endregion
    2121
     22using HeuristicLab.Services.OKB.RunCreation.DataTransfer;
    2223using System.Collections.Generic;
    2324using System.Net.Security;
    2425using System.ServiceModel;
    25 using HeuristicLab.Services.OKB.RunCreation.DataTransfer;
    2626
    2727namespace HeuristicLab.Services.OKB.RunCreation {
     
    4444
    4545    [OperationContract]
     46    [FaultContract(typeof(MissingProblem))]
     47    IEnumerable<Solution> GetSolutions(long problemId);
     48
     49    [OperationContract]
     50    Solution GetSolution(long solutionId);
     51
     52    [OperationContract]
     53    [FaultContract(typeof(MissingSolution))]
     54    byte[] GetSolutionData(long solutionId);
     55
     56    [OperationContract]
     57    long AddSolution(Solution solution, byte[] data);
     58
     59    [OperationContract]
     60    void DeleteSolution(Solution solution);
     61
     62    [OperationContract]
    4663    void AddRun(Run run);
     64
     65    [OperationContract]
     66    IEnumerable<Value> GetCharacteristicValues(long problemId);
     67
     68    [OperationContract]
     69    [FaultContract(typeof(MissingProblem))]
     70    [FaultContract(typeof(UnknownCharacteristicType))]
     71    void SetCharacteristicValue(long problemId, Value value);
     72
     73    [OperationContract]
     74    [FaultContract(typeof(MissingProblem))]
     75    [FaultContract(typeof(UnknownCharacteristicType))]
     76    void SetCharacteristicValues(long problemId, Value[] values);
    4777  }
    4878}
  • branches/crossvalidation-2434/HeuristicLab.Services.OKB/3.3/RunCreation/RunCreationService.cs

    r12012 r14029  
    2020#endregion
    2121
     22using HeuristicLab.Services.Access;
     23using HeuristicLab.Services.OKB.DataAccess;
     24using System;
    2225using System.Collections.Generic;
    2326using System.Data.Linq;
    2427using System.Linq;
    2528using System.ServiceModel;
    26 using HeuristicLab.Services.Access;
    27 using HeuristicLab.Services.OKB.DataAccess;
    2829
    2930namespace HeuristicLab.Services.OKB.RunCreation {
     
    126127    }
    127128
     129    public IEnumerable<DataTransfer.Solution> GetSolutions(long problemId) {
     130      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
     131
     132      using (OKBDataContext okb = new OKBDataContext()) {
     133        var problem = okb.Problems.SingleOrDefault(x => x.Id == problemId);
     134        if (problem == null) throw new FaultException<MissingProblem>(new MissingProblem(problemId));
     135        // TODO: In case of multi-objective problems one has to check whether it contains single- or multi-objective problems
     136        var result = problem.SingleObjectiveSolutions.Select(x => Convert.ToDto(x)).ToList();
     137        if (roleVerifier.IsInRole(OKBRoles.OKBAdministrator)) {
     138          return result;
     139        } else {
     140          var problemUsers = okb.ProblemUsers.Where(x => x.ProblemId == problemId).ToList();
     141          if (problemUsers.Count == 0 || userManager.VerifyUser(userManager.CurrentUserId, problemUsers.Select(y => y.UserGroupId).ToList())) {
     142            return result;
     143          } else {
     144            return null;
     145          }
     146        }
     147      }
     148    }
     149
     150    public DataTransfer.Solution GetSolution(long solutionId) {
     151      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
     152
     153      using (OKBDataContext okb = new OKBDataContext()) {
     154        // TODO: In case of multi-objective problems one has to check whether it contains single- or multi-objective problems
     155        var result = Convert.ToDto(okb.SingleObjectiveSolutions.SingleOrDefault(x => x.Id == solutionId));
     156        if (roleVerifier.IsInRole(OKBRoles.OKBAdministrator)) {
     157          return result;
     158        } else {
     159          var problemUsers = okb.ProblemUsers.Where(x => x.ProblemId == result.ProblemId).ToList();
     160          if (problemUsers.Count == 0 || userManager.VerifyUser(userManager.CurrentUserId, problemUsers.Select(y => y.UserGroupId).ToList())) {
     161            return result;
     162          } else {
     163            return null;
     164          }
     165        }
     166      }
     167    }
     168
     169    public byte[] GetSolutionData(long solutionId) {
     170      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
     171
     172      using (OKBDataContext okb = new OKBDataContext()) {
     173        var solution = okb.SingleObjectiveSolutions.SingleOrDefault(x => x.Id == solutionId);
     174        if (solution == null) throw new FaultException<MissingSolution>(new MissingSolution(solutionId));
     175
     176        var result = solution.BinaryData.Data.ToArray();
     177        if (roleVerifier.IsInRole(OKBRoles.OKBAdministrator)) {
     178          return result;
     179        } else {
     180          var problemUsers = okb.ProblemUsers.Where(x => x.ProblemId == solution.ProblemId).ToList();
     181          if (problemUsers.Count == 0 || userManager.VerifyUser(userManager.CurrentUserId, problemUsers.Select(y => y.UserGroupId).ToList())) {
     182            return result;
     183          } else {
     184            return null;
     185          }
     186        }
     187      }
     188    }
     189
     190    public long AddSolution(DataTransfer.Solution solution, byte[] data) {
     191      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
     192
     193      using (OKBDataContext okb = new OKBDataContext()) {
     194        var soSolution = solution as DataTransfer.SingleObjectiveSolution;
     195        if (soSolution != null) {
     196          DataAccess.SingleObjectiveSolution entity = Convert.ToEntity(soSolution, data, okb);
     197          okb.SingleObjectiveSolutions.InsertOnSubmit(entity);
     198          okb.SubmitChanges();
     199          return entity.Id;
     200        }
     201      }
     202      throw new FaultException(new FaultReason("The solution could not be added."));
     203    }
     204
     205    public void DeleteSolution(DataTransfer.Solution solution) {
     206      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
     207
     208      using (OKBDataContext okb = new OKBDataContext()) {
     209        var soSolution = solution as DataTransfer.SingleObjectiveSolution;
     210        if (soSolution != null) {
     211          okb.SingleObjectiveSolutions.DeleteOnSubmit(okb.SingleObjectiveSolutions.Single(x => x.Id == soSolution.Id));
     212          okb.SubmitChanges();
     213        }
     214      }
     215    }
     216
    128217    public void AddRun(DataTransfer.Run run) {
    129218      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
     
    135224      }
    136225    }
     226
     227    public IEnumerable<DataTransfer.Value> GetCharacteristicValues(long problemId) {
     228      using (OKBDataContext okb = new OKBDataContext()) {
     229        var prob = okb.Problems.SingleOrDefault(x => x.Id == problemId);
     230        if (prob == null) return Enumerable.Empty<DataTransfer.Value>();
     231        return prob.CharacteristicValues.Select(Convert.ToDto).ToArray();
     232      }
     233    }
     234
     235    public void SetCharacteristicValue(long problemId, DataTransfer.Value value) {
     236      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
     237
     238      using (OKBDataContext okb = new OKBDataContext()) {
     239        var problem = okb.Problems.SingleOrDefault(x => x.Id == problemId);
     240        if (problem == null) throw new FaultException<MissingProblem>(new MissingProblem(problemId));
     241
     242        DoSetCharacteristicValue(okb, problem, value);
     243        okb.SubmitChanges();
     244      }
     245    }
     246
     247    public void SetCharacteristicValues(long problemId, DataTransfer.Value[] values) {
     248      roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser);
     249
     250      using (OKBDataContext okb = new OKBDataContext()) {
     251        var problem = okb.Problems.SingleOrDefault(x => x.Id == problemId);
     252        if (problem == null) throw new FaultException<MissingProblem>(new MissingProblem(problemId));
     253
     254        foreach (var v in values) {
     255          DoSetCharacteristicValue(okb, problem, v);
     256        }
     257        okb.SubmitChanges();
     258      }
     259    }
     260
     261    private void DoSetCharacteristicValue(OKBDataContext okb, Problem problem, DataTransfer.Value value) {
     262      CharacteristicType characteristicType;
     263      try {
     264        characteristicType = GetCharacteristicType(value);
     265      } catch (ArgumentException ex) {
     266        throw new FaultException<UnknownCharacteristicType>(new UnknownCharacteristicType(ex.Message));
     267      }
     268
     269      var entity = problem.CharacteristicValues.SingleOrDefault(x => x.Characteristic.Name == value.Name && x.Characteristic.Type == characteristicType);
     270      if (entity != null) {
     271        // Update
     272        switch (characteristicType) {
     273          case CharacteristicType.Bool: entity.BoolValue = ((DataTransfer.BoolValue)value).Value; break;
     274          case CharacteristicType.Int: entity.IntValue = ((DataTransfer.IntValue)value).Value; break;
     275          case CharacteristicType.Long: entity.LongValue = ((DataTransfer.LongValue)value).Value; break;
     276          case CharacteristicType.Float: entity.FloatValue = ((DataTransfer.FloatValue)value).Value; break;
     277          case CharacteristicType.Double: entity.DoubleValue = ((DataTransfer.DoubleValue)value).Value; break;
     278          case CharacteristicType.Percent: entity.DoubleValue = ((DataTransfer.PercentValue)value).Value; break;
     279          case CharacteristicType.String: entity.StringValue = ((DataTransfer.StringValue)value).Value; break;
     280          case CharacteristicType.TimeSpan: entity.LongValue = ((DataTransfer.TimeSpanValue)value).Value; break;
     281        }
     282      } else {
     283        // Insert
     284        entity = Convert.ToEntity(value, okb, problem, characteristicType);
     285        okb.CharacteristicValues.InsertOnSubmit(entity);
     286      }
     287
     288    }
     289
     290    private CharacteristicType GetCharacteristicType(DataTransfer.Value source) {
     291      if (source is DataTransfer.BoolValue) {
     292        return CharacteristicType.Bool;
     293      } else if (source is DataTransfer.IntValue) {
     294        return CharacteristicType.Int;
     295      } else if (source is DataTransfer.TimeSpanValue) {
     296        return CharacteristicType.TimeSpan;
     297      } else if (source is DataTransfer.LongValue) {
     298        return CharacteristicType.Long;
     299      } else if (source is DataTransfer.FloatValue) {
     300        return CharacteristicType.Float;
     301      } else if (source is DataTransfer.DoubleValue) {
     302        return CharacteristicType.Double;
     303      } else if (source is DataTransfer.PercentValue) {
     304        return CharacteristicType.Percent;
     305      } else if (source is DataTransfer.StringValue) {
     306        return CharacteristicType.String;
     307      } else {
     308        throw new ArgumentException("Unknown characteristic type.", "source");
     309      }
     310    }
    137311  }
    138312}
Note: See TracChangeset for help on using the changeset viewer.