public int DeleteSession(string sessionID)
        {
            Guid session = new Guid(sessionID);
            ISessionProducerContract contract = new AspenSessionProducerContract();

            try
            {
                return(contract.Delete(session));
            }
            catch (System.Data.UpdateException ex)
            {
                var detail = new ErrorDetail(
                    ErrorDetail.Codes.JOB_STATE_ERROR,
                    "Failed to Delete session " + sessionID + ", " + ex.Message + ", InnerException: " + ex.InnerException
                    );
                throw new WebFaultException <ErrorDetail>(detail, System.Net.HttpStatusCode.BadRequest);
            }
            catch (Exception ex)
            {
                var detail = new ErrorDetail(
                    ErrorDetail.Codes.JOB_STATE_ERROR,
                    "Failed to Delete session " + sessionID + ", " + ex.Message +
                    ", Inner Exception: " + ex.InnerException
                    );
                throw new WebFaultException <ErrorDetail>(detail, System.Net.HttpStatusCode.BadRequest);
            }
        }
        public void TestISessionProducerContract()
        {
            // producers
            ISessionProducerContract producer = new AspenSessionProducerContract();
            Guid session_id = producer.Create();

            Assert.IsNotNull(session_id);
        }
        /* Status:
         *  Returns a JSON object with counts of all jobs in various states
         *      {"finished":100, "submit":10}
         *  Query Parameters:
         *      ?state="finished"&state="submit"
         *
         *
         */
        public Stream StatusSession(string sessionID)
        {
            ISessionProducerContract contract = new AspenSessionProducerContract();
            Dictionary <string, int> d        = contract.Status(new Guid(sessionID));
            string json = Newtonsoft.Json.JsonConvert.SerializeObject(d);

            //WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
            return(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)));
        }
        public int StartSession(string sessionID)
        {
            Debug.WriteLine(String.Format("start session {0}", sessionID), this.GetType().Name);
            ISessionProducerContract contract = new AspenSessionProducerContract();
            int total = 0;

            total += contract.Unpause(new Guid(sessionID));
            total += contract.Submit(new Guid(sessionID));
            Debug.WriteLine(String.Format("total {0}", total), this.GetType().Name);
            return(total);
        }
        /* KillSession:
         *     Returns total number of jobs moved to cancel or terminate
         *     QueryParameters:
         *         ?jobid=100&jobid=120
         */
        public int KillSession(string sessionID)
        {
            ISessionProducerContract contract = new AspenSessionProducerContract();
            int total = 0;

            try
            {
                total += contract.Cancel(new Guid(sessionID));
                total += contract.Terminate(new Guid(sessionID));
            }
            catch (AuthorizationError ex)
            {
                var detail = new ErrorDetail(
                    ErrorDetail.Codes.AUTHORIZATION_ERROR,
                    ex.Message
                    );
                throw new WebFaultException <ErrorDetail>(detail, System.Net.HttpStatusCode.Unauthorized);
            }
            return(total);
        }
        public Guid CreateSession()
        {
            ISessionProducerContract contract = new AspenSessionProducerContract();

            return(contract.Create());
        }
        public int StopSession(string sessionID)
        {
            ISessionProducerContract contract = new AspenSessionProducerContract();

            return(contract.Pause(new Guid(sessionID)));
        }
        public void TestSessionProducerConsumerContracts()
        {
            // producers
            ISessionProducerContract producer = new AspenSessionProducerContract();
            Guid session_id = producer.Create();

            Assert.IsNotNull(session_id);

            ISimulationProducerContract simulation_contract = AspenSimulationContract.Create("testX", "AspenPlus");

            var bytes = File.ReadAllBytes("mea-sinter.txt");

            Assert.IsNotNull(bytes);
            Assert.IsTrue(bytes.Length > 0);
            System.Threading.Thread.Sleep(100);
            simulation_contract.UpdateInput("configuration", bytes, "plain/text");

            bytes = File.ReadAllBytes("mea.bkp");
            Assert.IsNotNull(bytes);
            Assert.IsTrue(bytes.Length > 0);
            System.Threading.Thread.Sleep(100);
            simulation_contract.UpdateInput("aspenfile", bytes, "plain/text");

            IJobProducerContract job_producer_contract = simulation_contract.NewJob(session_id, false, true);

            job_producer_contract = simulation_contract.NewJob(session_id, false, true);

            IConsumerRegistrationContract contract = Turbine.Consumer.AppUtility.GetConsumerRegistrationContract();

            contract.Register();

            IJobConsumerContract job = contract.Queue.GetNext();

            Assert.IsNull(job);
            job_producer_contract.Submit();
            job = contract.Queue.GetNext();
            Assert.IsNotNull(job);
            Assert.AreEqual(job.Id, job_producer_contract.Id);


            job.Setup();

            SimpleFile backup = null;
            SimpleFile config = null;

            foreach (var f in job.GetSimulationInputFiles())
            {
                if (f.name == "configuration")
                {
                    config = f;
                }
                else
                {
                    backup = f;
                }
            }

            Assert.AreEqual(config.name, "configuration");

            String filename = SinterHelperFunctions
                              .getBackupFilename(System.Text.Encoding.ASCII.GetString(config.content));

            Assert.AreEqual(backup.name, "aspenfile");


            // NEED TO SET INPUT Before Setting to Run
            //j
            try
            {
                job.Running();
                Assert.Fail("Job.Process.Input Must be set before setting job to run");
            }
            catch (InvalidStateChangeException) {}
            job.Process.Input = new Dictionary <string, Object>();
            job.Running();
            job.Success();

            job = contract.Queue.GetNext();
            Assert.IsNull(job);
        }
        public void TestJobProducerConsumerContracts()
        {
            // producers
            ISessionProducerContract producer = new AspenSessionProducerContract();
            Guid session_id = producer.Create();

            Assert.IsNotNull(session_id);

            ISimulationProducerContract simulation_contract;

            simulation_contract = AspenSimulationContract.Create("test", "AspenPlus");

            Assert.IsTrue(File.Exists("mea-sinter.txt"));
            Assert.IsTrue(File.Exists("mea.bkp"));

            var configContent    = File.ReadAllBytes("mea-sinter.txt");
            var aspenfileContent = File.ReadAllBytes("mea.bkp");

            Assert.IsTrue(configContent.Length > 0);
            Assert.IsTrue(aspenfileContent.Length > 0);

            System.Threading.Thread.Sleep(100);
            simulation_contract.UpdateInput("configuration",
                                            configContent,
                                            "plain/text");
            System.Threading.Thread.Sleep(1000);
            simulation_contract.UpdateInput("aspenfile",
                                            aspenfileContent,
                                            "plain/text");

            IJobProducerContract job_producer_contract = simulation_contract.NewJob(session_id, false, true);

            // consumers
            //IJobQueue queue = AppUtility.GetJobQueue();
            // NHibernate
            IConsumerRegistrationContract contract = Turbine.Consumer.AppUtility.GetConsumerRegistrationContract();

            contract.Register();
            IJobConsumerContract job = contract.Queue.GetNext();

            Assert.IsNull(job);
            job_producer_contract.Submit();
            job = contract.Queue.GetNext();
            Assert.IsNotNull(job);

            job.Setup();

            IEnumerable <SimpleFile> files = job.GetSimulationInputFiles();

            Assert.AreEqual <int>(files.Count <SimpleFile>(), 2);
            foreach (var f in files)
            {
                Assert.IsNotNull(f);
                Assert.IsNotNull(f.name);
                Debug.WriteLine("File: " + f.name, this.GetType().Name);
                Assert.IsNotNull(f.content);

                Assert.IsTrue(f.content.Length > 0);

                if (f.name == "configuration")
                {
                    Assert.AreEqual <int>(f.content.Length, configContent.Length);
                }
                else if (f.name == "aspenfile")
                {
                    Assert.AreEqual <int>(f.content.Length, aspenfileContent.Length);
                }
                else
                {
                    Assert.Fail(String.Format("Unknown File {0}", f.name));
                }
            }
            //byte[] backup = job.GetSimulationBackup();
            //byte[] config = job.GetSimulationConfiguration();

            //Assert(,
            //IJobConsumerContract consumer = AppUtility.GetJobConsumerContract(id);
        }
        public void TestJobProducerConsumerContractsSetupFailUnRegisterConsumer()
        {
            // Create test Simulation
            TestSimulationProducerContract();

            ISimulationProducerContract simulation_contract = AspenSimulationContract.Get("test");
            ISessionProducerContract    producer            = new AspenSessionProducerContract();
            Guid session_id = producer.Create();
            IJobProducerContract job_producer_contract = simulation_contract.NewJob(session_id, false, true);

            // consumers

            /*
             * IJobQueue queue = AppUtility.GetJobQueue();
             * IJobConsumerContract job = queue.GetNext();
             * Assert.IsNull(job);
             * job_producer_contract.Submit();
             * job = queue.GetNext();
             * Assert.IsNotNull(job);
             */
            // NHibernate
            IConsumerRegistrationContract contract = Turbine.Consumer.AppUtility.GetConsumerRegistrationContract();

            Assert.IsNull(contract.Queue);
            contract.Register();
            Assert.IsNotNull(contract.Queue);
            Assert.IsNull(contract.Queue.GetNext());  // nothing on queue

            job_producer_contract.Submit();
            IJobConsumerContract job = contract.Queue.GetNext();

            Assert.IsNotNull(job);
            contract.UnRegister();

            job.Setup();

            SimpleFile backup = null;
            SimpleFile config = null;

            foreach (var f in job.GetSimulationInputFiles())
            {
                if (f.name == "configuration")
                {
                    config = f;
                }
                else
                {
                    backup = f;
                }
            }

            Assert.AreEqual(config.name, "configuration");

            String filename = SinterHelperFunctions
                              .getBackupFilename(System.Text.Encoding.ASCII.GetString(config.content));

            Assert.AreEqual(backup.name, "");

            //Assert(,
            //IJobConsumerContract consumer = AppUtility.GetJobConsumerContract(id);
        }