Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }