- Timestamp:
- 03/18/19 17:24:30 (6 years ago)
- Location:
- branches/2521_ProblemRefactoring
- Files:
-
- 20 edited
- 5 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring
- Property svn:ignore
-
old new 24 24 protoc.exe 25 25 obj 26 .vs
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/Convert.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 40 40 } 41 41 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 42 53 private static DT.DataType ToDto(DA.DataType source) { 43 54 if (source == null) return null; … … 68 79 entity.Values.Add(Convert.ToEntity(value, entity, DA.ValueNameCategory.Result, okb, binCache)); 69 80 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 }; 70 138 } 71 139 … … 108 176 } 109 177 110 p rivatestatic 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)); 113 181 if (entity == null) 114 182 entity = new DA.DataType() { Id = 0, Name = source.Name, TypeName = source.TypeName }; … … 118 186 private static DA.ValueName ToEntity(string name, DA.ValueNameCategory category, DA.ValueNameType type, DA.OKBDataContext okb) { 119 187 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)); 121 189 if (entity == null) 122 190 entity = new DA.ValueName() { Id = 0, Name = name, Category = category, Type = type }; … … 131 199 } 132 200 133 var cachedBinaryData = binCache. Where(x => x.Hash.SequenceEqual(hash)).FirstOrDefault();201 var cachedBinaryData = binCache.FirstOrDefault(x => x.Hash.SequenceEqual(hash)); 134 202 if (cachedBinaryData != null) 135 203 return cachedBinaryData; 136 204 137 var entity = okb.BinaryDatas. Where(x => x.Hash.Equals(hash)).FirstOrDefault();205 var entity = okb.BinaryDatas.FirstOrDefault(x => x.Hash.Equals(hash)); 138 206 if (entity == null) { 139 207 entity = new DA.BinaryData() { Id = 0, Data = data, Hash = hash }; … … 143 211 return entity; 144 212 } 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 } 145 235 #endregion 146 236 } -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Algorithm.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/AlgorithmClass.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/BinaryValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/BoolValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/DataType.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/DoubleValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/FloatValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/IntValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/LongValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/PercentValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Problem.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/ProblemClass.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Run.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/StringValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/TimeSpanValue.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/DataTransfer/Value.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/IRunCreationService.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 20 20 #endregion 21 21 22 using HeuristicLab.Services.OKB.RunCreation.DataTransfer; 22 23 using System.Collections.Generic; 23 24 using System.Net.Security; 24 25 using System.ServiceModel; 25 using HeuristicLab.Services.OKB.RunCreation.DataTransfer;26 26 27 27 namespace HeuristicLab.Services.OKB.RunCreation { … … 44 44 45 45 [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] 46 63 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); 47 77 } 48 78 } -
branches/2521_ProblemRefactoring/HeuristicLab.Services.OKB/3.3/RunCreation/RunCreationService.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 20 20 #endregion 21 21 22 using HeuristicLab.Services.Access; 23 using HeuristicLab.Services.OKB.DataAccess; 24 using System; 22 25 using System.Collections.Generic; 23 26 using System.Data.Linq; 24 27 using System.Linq; 25 28 using System.ServiceModel; 26 using HeuristicLab.Services.Access;27 using HeuristicLab.Services.OKB.DataAccess;28 29 29 30 namespace HeuristicLab.Services.OKB.RunCreation { … … 126 127 } 127 128 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 128 217 public void AddRun(DataTransfer.Run run) { 129 218 roleVerifier.AuthenticateForAnyRole(OKBRoles.OKBAdministrator, OKBRoles.OKBUser); … … 135 224 } 136 225 } 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 } 137 311 } 138 312 }
Note: See TracChangeset
for help on using the changeset viewer.