public Guid Create()
        {
            Guid   session = Guid.NewGuid();
            string owner   = Container.GetAppContext().UserName;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                User user = container.Users.Single <User>(s => s.Name == owner);
                container.Sessions.AddObject(new Session()
                {
                    Id = session, User = user, Create = DateTime.UtcNow
                });
                container.SaveChanges();
            }
            return(session);
        }
        public bool UpdateConfiguration(byte[] data)
        {
            string owner = AppUtility.GetAppContext().UserName;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Simulation obj = container.Simulations.Single <Simulation>(s => s.Name == name);
                if (obj.User.Name != owner)
                {
                    throw new ArgumentException("Only owner {0} can update simulation", obj.User.Name);
                }
                obj.Configuration = data;
                container.SaveChanges();
            }
            return(true);
        }
Exemple #3
0
        public void Success()
        {
            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Job obj = container.Jobs.Single <Job>(s => s.Id == id);
                AuthorizeConsumer(obj);

                if (obj.State != "running")
                {
                    throw new InvalidStateChangeException("Violation of state machine");
                }
                obj.State    = "success";
                obj.Finished = DateTime.UtcNow;
                container.SaveChanges();
            }
        }
        public static Session GetSessionMeta(Guid id)
        {
            Session session = null;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Turbine.Data.Session entity = container.Sessions.Single(s => s.Id == id);
                session = new Session()
                {
                    Id         = entity.Id,
                    Create     = entity.Create,
                    Finished   = entity.Finished,
                    Descrption = entity.Descrption
                };
            }
            return(session);
        }
        /*
         * public static Jobs GetJobs()
         * {
         *  bool verbose = false;
         *  Serialize.Job job = null;
         *  Serialize.Jobs col = new Serialize.Jobs();
         *  using (TurbineModelContainer container = new TurbineModelContainer())
         *  {
         *      foreach (Turbine.Data.Job entity in container.Jobs)
         *      {
         *          job = GetRepresentation(entity, verbose);
         *          col.Add(job);
         *      }
         *  }
         *  return col;
         * }
         */
        /* GetJobs
         *   Returns Jobs collection
         *   Arguments
         *     page - starting at 1
         *     rpp -- results per page, must be > 0
         */
        public static List <Dictionary <string, Object> > GetJobs(Guid sessionID, string simulation,
                                                                  Guid consumerID, string state, Int32 page, Int32 rpp, bool verbose)
        {
            List <Dictionary <string, Object> > jobs = new List <Dictionary <string, Object> >();

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                System.Data.Objects.ObjectQuery <Turbine.Data.Job> jobQuery = container.Jobs;
                if (!Guid.Empty.Equals(sessionID))
                {
                    jobQuery = jobQuery.Where("it.SessionId = @session",
                                              new System.Data.Objects.ObjectParameter("session", sessionID));
                }
                if (!Guid.Empty.Equals(consumerID))
                {
                    jobQuery = jobQuery.Where("it.ConsumerId = @consumer",
                                              new System.Data.Objects.ObjectParameter("consumer", consumerID));
                }
                // NOTE: This option will return all jobs for all versions of Simulation
                if (!String.IsNullOrEmpty(simulation))
                {
                    foreach (Turbine.Data.Simulation entity in container.Simulations.Where(i => i.Name == simulation))
                    {
                        jobQuery = jobQuery.Where("it.SimulationId = @simulationId",
                                                  new System.Data.Objects.ObjectParameter("simulationId", entity.Id));
                        // TODO: ADD A "OR"
                        break;
                    }
                }
                if (!String.IsNullOrEmpty(state))
                {
                    jobQuery = jobQuery.Where("it.State = @state",
                                              new System.Data.Objects.ObjectParameter("state", state));
                }
                jobQuery = jobQuery
                           .Skip("it.Id", "@skip", new System.Data.Objects.ObjectParameter("skip", (page - 1) * rpp))
                           .Top("@limit", new System.Data.Objects.ObjectParameter("limit", rpp));

                foreach (Turbine.Data.Job entity in jobQuery)
                {
                    var job = GetJobRepresentation(entity, verbose);
                    jobs.Add(job);
                }
            }
            return(jobs);
        }
Exemple #6
0
        public void KeepAlive()
        {
            IConsumerContext ctx        = AppUtility.GetConsumerContext();
            Guid             consumerId = ctx.Id;

            Debug.WriteLine(String.Format("KeepAlive Consumer {0}", consumerId), this.GetType().Name);

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                var consumer = (JobConsumer)container.JobConsumers.Single <Turbine.Data.JobConsumer>(s => s.Id == consumerId);
                if (consumer.status == "up")
                {
                    consumer.keepalive = DateTime.UtcNow;
                }
                container.SaveChanges();
            }
        }
Exemple #7
0
        /* UnRegister
         *     If state is "up" move to "down", else leave alone.
         */
        public void UnRegister()
        {
            IConsumerContext ctx        = AppUtility.GetConsumerContext();
            Guid             consumerId = ctx.Id;

            Debug.WriteLine(String.Format("UnRegister Consumer {0}", consumerId), this.GetType().Name);

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                var consumer = (JobConsumer)container.JobConsumers.First <Turbine.Data.JobConsumer>(s => s.Id == consumerId);
                if (consumer.status == "up")
                {
                    consumer.status = "down";
                }
                container.SaveChanges();
            }
        }
Exemple #8
0
        public static IJobProducerContract Create(string simulationName, Guid sessionID, bool initialize, bool reset)
        {
            int id = -1;
            IProducerContext ctx      = Container.GetAppContext();
            String           userName = ctx.UserName;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Simulation obj     = container.Simulations.OrderByDescending(q => q.Create).First <Simulation>(s => s.Name == simulationName);
                User       user    = container.Users.Single <User>(u => u.Name == userName);
                Session    session = container.Sessions.SingleOrDefault <Session>(i => i.Id == sessionID);
                if (session == null)
                {
                    session = new Session()
                    {
                        Id = sessionID, Create = DateTime.UtcNow, User = user
                    };
                    container.Sessions.AddObject(session);
                    container.SaveChanges();
                }
                System.Diagnostics.Debug.WriteLine(String.Format("simulation {0}, User {1}, Session {2}",
                                                                 simulationName, user.Name, session.Id), "AspenJobContract");
                Job job = new Job()
                {
                    guid       = Guid.NewGuid(),
                    Simulation = obj,
                    State      = "create",
                    Create     = DateTime.UtcNow,
                    Process    = new SinterProcess()
                    {
                        Id = Guid.NewGuid()
                    },
                    User       = user,
                    Session    = session,
                    Initialize = initialize,
                    Reset      = reset,
                };
                container.SaveChanges();
                id = job.Id;
            }
            return(new AspenJobProducerContract()
            {
                Id = id
            });
        }
Exemple #9
0
        /*  Setup: Moves job from submit to setup, concurrency issues to be aware of.
         *     Consumer must be registered before calling this method.
         *
         *      throws OptimisticConcurrencyException if job has already been
         *      grabbed by another consumer.
         *
         */
        public IProcess Setup()
        {
            string           baseDir    = AppUtility.GetAppContext().BaseWorkingDirectory;
            IConsumerContext ctx        = AppUtility.GetConsumerContext();
            Guid             consumerId = ctx.Id;
            Guid             pid        = Guid.Empty;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                var consumer = container.JobConsumers
                               .SingleOrDefault <Turbine.Data.JobConsumer>(c => c.Id == consumerId);

                Debug.WriteLine(String.Format("Setup consumer GUID {0}", consumerId), this.GetType().Name);

                if (consumer == null)
                {
                    throw new IllegalAccessException("Setup failed, Consumer is not registered");
                }
                if (consumer.status != "up")
                {
                    throw new IllegalAccessException(String.Format(
                                                         "Setup failed, Consumer status {0} != up", consumer.status));
                }

                Job obj = container.Jobs.Single <Job>(s => s.Id == id);
                if (obj.State != "locked")
                {
                    throw new InvalidStateChangeException("Violation of state machine");
                }

                if (obj.Process == null)
                {
                    throw new InvalidStateChangeException("Process configuration missing");
                }

                obj.State = "setup";
                obj.Setup = DateTime.UtcNow;
                obj.Process.WorkingDir = Path.Combine(baseDir, id.ToString());
                obj.Consumer           = (JobConsumer)consumer;
                pid            = obj.Process.Id;
                simulationName = obj.Simulation.Name;
                container.SaveChanges();
            }
            return(SinterProcessContract.Get(pid));
        }
Exemple #10
0
        public IJobQueue Register()
        {
            IConsumerContext ctx        = Turbine.Consumer.AppUtility.GetConsumerContext();
            Guid             consumerId = ctx.Id;
            String           hostname   = ctx.Hostname;

            Debug.WriteLine(String.Format("Register as {0}, {1}", consumerId, hostname), this.GetType().Name);

            Turbine.Consumer.AWS.IAWSContext awsCtx = null;
            string ami      = "";
            string instance = "";

            try
            {
                awsCtx   = Turbine.Consumer.AWS.AppUtility.GetContext();
                ami      = awsCtx.AmiId;
                instance = awsCtx.InstanceId;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(String.Format("Ignore AWS Context is not available: {0}", ex.Message), this.GetType().Name);
                Debug.WriteLine(String.Format("{0}", ex.StackTrace), this.GetType().Name);
            }

            //
            // NOTE: Amazon InstanceID and AMI removed
            //
            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                container.JobConsumers.AddObject(new JobConsumer()
                {
                    Id        = consumerId,
                    hostname  = hostname,
                    AMI       = ami,
                    instance  = instance,
                    processId = Process.GetCurrentProcess().Id.ToString(),
                    status    = "up"
                }
                                                 );
                container.SaveChanges();
            }
            queue = new Turbine.Consumer.Data.Contract.DBJobQueue();
            return(queue);
        }
        public int Submit(Guid session)
        {
            string user = Container.GetAppContext().UserName;
            int    num  = 0;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Session obj = container.Sessions.First <Session>(s => s.Id == session);
                Debug.WriteLine(String.Format("start session {0}, jobs {1}", session, obj.Jobs.Count()), this.GetType().Name);
                foreach (var job in obj.Jobs.Where(s => s.State == "create" & s.User.Name == user))
                {
                    num       += 1;
                    job.State  = "submit";
                    job.Submit = DateTime.UtcNow;
                }
                container.SaveChanges();
            }
            return(num);
        }
Exemple #12
0
 public void AddStderr(string data)
 {
     using (TurbineModelContainer container = new TurbineModelContainer())
     {
         SinterProcess entity = container.SinterProcesses.Single <SinterProcess>(s => s.Id == id);
         byte[]        stdout = entity.Stderr;
         if (stdout == null)
         {
             entity.Stderr = System.Text.Encoding.ASCII.GetBytes(data);
         }
         else
         {
             List <byte> list = new List <byte>(entity.Stderr);
             list.AddRange(System.Text.Encoding.ASCII.GetBytes(data));
             entity.Stderr = list.ToArray <byte>();
         }
         container.SaveChanges();
     }
 }
Exemple #13
0
        public static IProcess New(int jobid)
        {
            Guid id = Guid.Empty;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                SinterProcess entity = new SinterProcess()
                {
                };
                entity.Job = container.Jobs.Single <Job>(s => s.Id == jobid);
                container.SinterProcesses.AddObject(entity);
                id = entity.Id;
                container.SaveChanges();
            }
            return(new SinterProcessContract()
            {
                id = id
            });
        }
        public static IApplicationProducerContract Get(string applicationName)
        {
            string owner = Container.GetAppContext().UserName;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                var user = container.Users.Single <User>(s => s.Name == owner);
                var obj  = container.Applications.
                           SingleOrDefault <Application>(s => s.Name == applicationName);
                if (obj == null)
                {
                    return(null);
                }
            }
            var contract = new ApplicationProducerContract();

            contract.applicationName = applicationName;
            return(contract);
        }
Exemple #15
0
        public void Warning(string msg)
        {
            var w = new Message();

            w.Value = msg;
            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Job obj = container.Jobs.Single <Job>(s => s.Id == id);
                AuthorizeConsumer(obj);

                if (obj.State != "running")
                {
                    throw new InvalidStateChangeException("Violation of state machine");
                }
                obj.State = "warning";
                obj.Messages.Add(w);
                obj.Finished = DateTime.UtcNow;
                container.SaveChanges();
            }
        }
        public Dictionary <string, int> Status(Guid session)
        {
            var d = new Dictionary <string, int>();

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Session obj = container.Sessions.First <Session>(s => s.Id == session);
                d["create"]    = obj.Jobs.Count <Job>(j => j.State == "create");
                d["running"]   = obj.Jobs.Count <Job>(j => j.State == "running");
                d["setup"]     = obj.Jobs.Count <Job>(j => j.State == "setup");
                d["submit"]    = obj.Jobs.Count <Job>(j => j.State == "submit");
                d["pause"]     = obj.Jobs.Count <Job>(j => j.State == "pause");
                d["locked"]    = obj.Jobs.Count <Job>(j => j.State == "locked");
                d["error"]     = obj.Jobs.Count <Job>(j => j.State == "error");
                d["cancel"]    = obj.Jobs.Count <Job>(j => j.State == "cancel");
                d["success"]   = obj.Jobs.Count <Job>(j => j.State == "success");
                d["terminate"] = obj.Jobs.Count <Job>(j => j.State == "terminate");
            }
            return(d);
        }
Exemple #17
0
 public void AddStreamError(Dictionary <string, List <string> > dictionary)
 {
     using (TurbineModelContainer container = new TurbineModelContainer())
     {
         SinterProcess entity = container.SinterProcesses.Single <SinterProcess>(s => s.Id == id);
         ProcessError  error;
         foreach (KeyValuePair <String, List <String> > entry in dictionary)
         {
             foreach (String msg in entry.Value)
             {
                 error       = new ProcessError();
                 error.Type  = "stream";
                 error.Name  = entry.Key;
                 error.Error = msg;
                 entity.Errors.Add(error);
             }
         }
         container.SaveChanges();
     }
 }
Exemple #18
0
        public void Register()
        {
            IConsumerContext ctx        = AppUtility.GetConsumerContext();
            Guid             consumerId = ctx.Id;
            String           hostname   = ctx.Hostname;

            Debug.WriteLine(String.Format("Register as {0}, {1}", consumerId, hostname), this.GetType().Name);

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                container.Consumers.AddObject(new JobConsumer()
                {
                    guid     = consumerId,
                    hostname = hostname,
                    status   = "up"
                }
                                              );
                container.SaveChanges();
            }
        }
        public static Serialize.Application GetApplication(string appname)
        {
            Serialize.Application con = null;
            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                var entity = container.Applications.Single <Turbine.Data.Application>(s => s.Name == appname);
                con        = new Serialize.Application();
                con.Name   = entity.Name;
                con.Inputs = new Serialize.InputTypeList();

                foreach (InputFileType i in entity.InputFileTypes)
                {
                    con.Inputs.Add(new Serialize.InputType()
                    {
                        Name = i.Name, Type = i.Type, Required = i.Required
                    });
                }
            }
            return(con);
        }
 public static Serialize.Consumers GetConsumers(String status)
 {
     Serialize.Consumer  con  = null;
     Serialize.Consumers coll = new Serialize.Consumers();
     using (TurbineModelContainer container = new TurbineModelContainer())
     {
         System.Data.Objects.ObjectQuery <Turbine.Data.JobConsumer> query = container.JobConsumers;
         if (status != null)
         {
             query = container.JobConsumers.Where("it.status = @status",
                                                  new System.Data.Objects.ObjectParameter("status", status));
         }
         foreach (Turbine.Data.JobConsumer entity in query)
         {
             con = GetRepresentation(entity);
             coll.Add(con);
         }
     }
     return(coll);
 }
        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 new static void ClassInit(TestContext context)
        {
            int ms = -5000;

            DataTestScenario.ClassInit(context);
            var msg = new Message();

            msg.Value = "Job Sweeper Test";
            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                jobCount = container.Jobs.Count();
                foreach (Job obj in container.Jobs.OrderBy(s => s.Submit))
                {
                    ms -= 500;
                    obj.Messages.Add(msg);
                    obj.State  = "submit";
                    obj.Submit = DateTime.UtcNow.AddMilliseconds(ms);
                }
                container.SaveChanges();
            }
        }
Exemple #23
0
 public void TestSimulations()
 {
     using (TurbineModelContainer container = new TurbineModelContainer())
     {
         StringComparer comparer = StringComparer.OrdinalIgnoreCase;
         byte[]         bArray   = null;
         //String path = null;
         foreach (Simulation s in container.Simulations)
         {
             Debug.WriteLine(String.Format("      {0}", s.Name));
             bArray = s.Backup;
             //path = Path.Combine("test", s.Name);
             //Directory.CreateDirectory(path);
             //File.WriteAllBytes(Path.Combine(path, "test.bkp"),
             //    backupArray);
             Assert.IsTrue(0 == comparer.Compare(GetMd5Hash(bArray), SimulationBackupMD5),
                           "simulation backup array failed hash comparison");
             bArray = s.Configuration;
             Assert.IsTrue(0 == comparer.Compare(GetMd5Hash(bArray), SimulationConfigMD5),
                           "simulation config array failed hash comparison");
         }
     }
 }
 public static Serialize.Simulations GetSimulations()
 {
     Serialize.Simulation  sim  = null;
     Serialize.Simulations coll = new Serialize.Simulations();
     using (TurbineModelContainer container = new TurbineModelContainer())
     {
         var esim = container.Simulations.OrderByDescending(q => q.Create);
         if (esim != null)
         {
             List <string> l = new List <string>();
             foreach (Turbine.Data.Simulation entity in esim)
             {
                 if (l.Contains <string>(entity.Name) == false)
                 {
                     l.Add(entity.Name);
                     sim = GetRepresentation(entity);
                     coll.Add(sim);
                 }
             }
         }
     }
     return(coll);
 }
        public int Terminate(Guid session)
        {
            int num = 0;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Session obj = container.Sessions.First <Session>(s => s.Id == session);
                foreach (var job in obj.Jobs.Where(s => s.State == "setup" || s.State == "running"))
                {
                    IJobProducerContract contract = new AspenJobProducerContract(job.Id);
                    try
                    {
                        contract.Terminate();
                        num += 1;
                    }
                    catch (InvalidStateChangeException ex)
                    {
                        Debug.WriteLine(String.Format("InvalidStateChange: Failed to terminate session {0} job {1} ", session, job.Id),
                                        this.GetType());
                        Debug.WriteLine(ex.Message);
                    }
                    catch (AuthorizationError ex)
                    {
                        Debug.WriteLine(String.Format("AuthorizationError({0}): Failed to terminate session {1} job {2} ", ex.Message, session, job.Id),
                                        this.GetType());
                        throw;
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(String.Format("Failed to terminate session {0} job {1} ", session, job.Id),
                                        this.GetType());
                        Debug.WriteLine(ex.Message);
                    }
                }
            }
            return(num);
        }
Exemple #26
0
        /*  Running: Moves job from running
         *    Only can be performed by declared consumer
         *
         */
        public void Running()
        {
            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Job obj = container.Jobs.Single <Job>(s => s.Id == id);
                AuthorizeConsumer(obj);

                if (obj.State != "setup")
                {
                    throw new InvalidStateChangeException("Violation of state machine");
                }
                if (obj.Process == null)
                {
                    throw new InvalidStateChangeException("Process configuration missing");
                }
                if (obj.Process.WorkingDir == null)
                {
                    throw new InvalidStateChangeException("Process configuration missing working directory");
                }
                if (obj.Process.Input == null)
                {
                    throw new InvalidStateChangeException("Process configuration missing Input BLOB");
                }
                if (obj.Process.Configuration == null)
                {
                    obj.Process.Configuration = obj.Simulation.Configuration;
                }
                if (obj.Process.Backup == null)
                {
                    obj.Process.Backup = obj.Simulation.Backup;
                }

                obj.State   = "running";
                obj.Running = DateTime.UtcNow;
                container.SaveChanges();
            }
        }
        public static IApplicationProducerContract Create(string applicationName, string version)
        {
            string owner = Container.GetAppContext().UserName;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                var user = container.Users.Single <User>(s => s.Name == owner);
                var obj  = container.Applications.SingleOrDefault <Application>(s => s.Name == applicationName);
                if (obj != null)
                {
                    throw new InvalidStateChangeException(String.Format("Application with Name {0} already exists", applicationName));
                }

                container.Applications.AddObject(new Application()
                {
                    Name = applicationName, User = user, Version = version
                });
                container.SaveChanges();
            }
            var contract = new ApplicationProducerContract();

            contract.applicationName = applicationName;
            return(contract);
        }
Exemple #28
0
        public static IJobProducerContract Create(string simulationName, Guid sessionID, bool initialize)
        {
            int      id       = -1;
            IContext ctx      = AppUtility.GetAppContext();
            String   userName = ctx.UserName;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Simulation obj     = container.Simulations.Single <Simulation>(s => s.Name == simulationName);
                User       user    = container.Users.Single <User>(u => u.Name == userName);
                Session    session = container.Sessions.SingleOrDefault <Session>(i => i.guid == sessionID);
                if (session == null)
                {
                    session = new Session()
                    {
                        guid = sessionID, Create = DateTime.UtcNow, User = user
                    };
                    container.Sessions.AddObject(session);
                    container.SaveChanges();
                }

                Job job = new Job()
                {
                    Simulation = obj,
                    State      = "create",
                    Create     = DateTime.UtcNow,
                    Process    = new SinterProcess(),
                    User       = user,
                    Session    = session,
                    Initialize = initialize
                };
                container.SaveChanges();
                id = job.Id;
            }
            return(new AspenJobProducerContract(id));
        }
        public int Submit(Guid session)
        {
            int num = 0;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Session obj = container.Sessions.First <Session>(s => s.guid == session);
                foreach (var job in obj.Jobs.Where(s => s.State == "create"))
                {
                    IJobProducerContract contract = new AspenJobProducerContract(job.Id);
                    try
                    {
                        contract.Submit();
                        num += 1;
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(String.Format("Failed to submit session {0} job {1} ", session, job.Id),
                                        this.GetType());
                    }
                }
            }
            return(num);
        }
        public static ISimulationProducerContract Create(string name)
        {
            string owner = AppUtility.GetAppContext().UserName;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                User       user = container.Users.Single <User>(s => s.Name == owner);
                Simulation obj  = container.Simulations.SingleOrDefault <Simulation>(s => s.Name == name);
                if (obj != null)
                {
                    throw new InvalidStateChangeException("Simulation with Name {0} already exists");
                }

                container.Simulations.AddObject(new Simulation()
                {
                    Name = name, User = user
                });
                container.SaveChanges();
            }
            AspenSimulationContract sc = new AspenSimulationContract();

            sc.name = name;
            return(sc);
        }