public static SimulationStagedInput GetStagedInputFile(string name, string inputName) { SimulationStagedInput ssi = null; using (TurbineModelContainer container = new TurbineModelContainer()) { Turbine.Data.Simulation entity = container.Simulations .OrderByDescending(q => q.Create).First(s => s.Name == name); var si = entity.SimulationStagedInputs. SingleOrDefault <SimulationStagedInput>(f => f.Name == inputName); if (si != null) { ssi = new SimulationStagedInput() { Content = si.Content, Name = si.Name, InputFileType = si.InputFileType }; } } return(ssi); }
public bool UpdateInput(string inputFileName, byte[] data, string content_type) { string owner = Container.GetAppContext().UserName; var provider = System.Security.Cryptography.MD5CryptoServiceProvider.Create(); byte[] hash = provider.ComputeHash(data); var comparer = StringComparer.OrdinalIgnoreCase; var sb = new StringBuilder(); foreach (byte b in hash) { sb.Append(b.ToString("X2")); } string hval = sb.ToString(); Debug.WriteLine(String.Format("UpdateInput: inputFileName '{0}'", inputFileName), this.GetType().Name); using (TurbineModelContainer container = new TurbineModelContainer()) { Simulation obj = container.Simulations .OrderByDescending(q => q.Create).First(s => s.Name == name); if (obj.User.Name != owner) { throw new ArgumentException(String.Format("Only owner {0} can update simulation", obj.User.Name)); } var input = obj.SimulationStagedInputs.SingleOrDefault <SimulationStagedInput>(i => i.Name == inputFileName); if (input == null) { Debug.WriteLine("UpdateInput: input is null", this.GetType().Name); var ifType = obj.Application.InputFileTypes.SingleOrDefault <InputFileType>(f => f.Name == inputFileName); if (ifType == null) { // wildcard: if not then error ifType = obj.Application.InputFileTypes.Single <InputFileType>(f => f.Name == "any"); } input = new SimulationStagedInput() { Name = inputFileName, Id = Guid.NewGuid() }; input.Content = data; input.Simulation = obj; input.InputFileType = ifType; input.Hash = hval; obj.Update = DateTime.UtcNow; container.SaveChanges(); } else if (input.Hash == null || comparer.Compare(input.Hash, hval) != 0) { // if simulation is changed, make new simulation resource var sim = new Simulation() { Name = name, Id = Guid.NewGuid(), User = obj.User, Application = obj.Application, Create = DateTime.UtcNow, Update = DateTime.UtcNow }; // copy all files foreach (var i in obj.SimulationStagedInputs.Where(s => s.Id != input.Id)) { sim.SimulationStagedInputs.Add(new SimulationStagedInput() { Id = Guid.NewGuid(), Name = i.Name, InputFileType = i.InputFileType, Hash = i.Hash, Content = i.Content }); } sim.SimulationStagedInputs.Add(new SimulationStagedInput() { Id = Guid.NewGuid(), Name = input.Name, InputFileType = input.InputFileType, Hash = hval, Content = data }); Debug.WriteLine(String.Format("UpdateInput: action update, hash values do not match '{0}' != '{1}'", input.Hash, hval), this.GetType().Name); container.Simulations.AddObject(sim); container.SaveChanges(); } else { Debug.WriteLine(String.Format("UpdateInput: Simulation '{0}' hash values match '{1}'", name, inputFileName), this.GetType().Name); } } return(true); }
public static ISimulationProducerContract Create(string simNameOrID, string simName, string applicationName) { Guid simulationId = Guid.Empty; bool isGuid = Guid.TryParse(simNameOrID, out simulationId); ProducerSimulationContract sc = new ProducerSimulationContract(); string owner = Turbine.Producer.Container.GetAppContext().UserName; using (var db = new ProducerContext()) { Debug.WriteLine("Owner: " + owner, "ProducerSimulationContract.Create"); User user = db.Users.Single <User>(s => s.Name == owner); Simulation obj = null; Guid simIdUsed = Guid.Empty; if (isGuid == true) { simIdUsed = simulationId; obj = db.Simulations.SingleOrDefault(s => s.Id == simulationId); } else { simIdUsed = Guid.NewGuid(); obj = db.Simulations .OrderBy(q => q.Count).FirstOrDefault(s => s.Name == simNameOrID); } if (obj != null) { throw new InvalidStateChangeException(String.Format( "Simulation with Name or Id '{0}' already exists", simNameOrID)); } Application app = db.Applications.SingleOrDefault <Application>(s => s.Name == applicationName); if (app == null) { throw new ArgumentException(String.Format( "Application '{0}' does not exist", applicationName)); } Debug.WriteLine("create simulation", "ProducerSimulationContract"); var sim = new Simulation() { Name = simName, Id = simIdUsed, User = user, Application = app, Create = DateTime.UtcNow, Update = DateTime.UtcNow }; db.Simulations.Add(sim); db.SaveChanges(); } using (var db = new ProducerContext()) { Debug.WriteLine("create simulation inputs", "ProducerSimulationContract"); Simulation sim = null; if (isGuid == true) { sim = db.Simulations.Single <Simulation>(s => s.Id == simulationId); } else { sim = db.Simulations.Single <Simulation>(s => s.Name == simNameOrID); } foreach (var input in sim.Application.InputFileTypes) { Debug.WriteLine("create simulation input " + input.Name, "ProducerSimulationContract"); if ("any".Equals(input.Name)) { continue; } var ssi = new SimulationStagedInput() { Id = Guid.NewGuid(), Name = input.Name, Content = new Byte[] { }, Hash = "", Simulation = sim }; sim.SimulationStagedInputs.Add(ssi); } sc.simId = sim.Id; sc.name = sim.Name; sc.nameIsGuid = isGuid; Debug.WriteLine("create save", "ProducerSimulationContract"); db.SaveChanges(); } return(sc); }