public Result <SourcePage> CreateSourcePage(SourcePage aSourcePage, Result <SourcePage> aResult)
 {
     theServiceUri
     .At("sources", "pages")
     .Post(DreamMessage.Ok(MimeType.JSON, aSourcePage.ToString()), new Result <DreamMessage>())
     .WhenDone(delegate(Result <DreamMessage> answer)
     {
         if (!answer.Value.IsSuccessful)
         {
             if (answer.Value.Status != DreamStatus.Ok)
             {
                 aResult.Throw(new Exception());
             }
         }
         else
         {
             aResult.Return(new SourcePage(JObject.Parse(answer.Value.ToText())));
         }
     }
               );
     return(aResult);
 }
		private bool ValidatePage(SourcePage page)
		{
			if (page.PageNumber == null || page.PageNumber <0)
				return false;
			return true;
		}
		public ActionResult PageEdit(string sourcePageId, string sourceId){
			FoireMusesConnection connection = GetConnection();
			SourcePage page = null;
			try
			{
				if (sourcePageId == null)
				{
					if (String.IsNullOrWhiteSpace(sourceId))
					{
						return RedirectToAction("Missing", "Error", null);
					}
					else
					{
						Source source = connection.GetSource(sourceId, new Result<Source>()).Wait();
						if (source == null)
						{
							return RedirectToAction("Missing", "Error", null);
						}
					}
                    ViewBag.HeadTitle = "Creation";
					page = new SourcePage();
					page.SourceId = sourceId;
				}
				else
				{
					page = connection.GetSourcePage(sourcePageId, new Result<SourcePage>()).Wait();
					if (page == null)
					{
						return RedirectToAction("Missing", "Error", null);
					}
                    ViewBag.HeadTitle = "Edition";
				}
			}
			catch (Exception e)
			{
				return RedirectToAction("Problem", "Error", null);
			}
			return View(page);
		}
		public ActionResult PageEdit(SourcePage model)
		{
			if (!ValidatePage(model))
			{
				ViewBag.Error = "Certains champs sont mal rempli ou incomplet, veuillez les remplirs correctements.";
				if (model.Id != null)
					ViewBag.HeadTitle = "Edition";
				else
					ViewBag.HeadTitle = "Creation";
				return View("PageEdit", model);
			}
			FoireMusesConnection connection = GetConnection();
			try
			{
				if (model.Id == null)
				{
					model = connection.CreateSourcePage(model, new Result<SourcePage>()).Wait();
				}
				else
				{
					SourcePage current = connection.GetSourcePage(model.Id, new Result<SourcePage>()).Wait();
					if(current == null)
						return RedirectToAction("Problem", "Error", null);
					TryUpdateModel(current);
					model = connection.EditSourcePage(current, new Result<SourcePage>()).Wait();
				}
			}
			catch (Exception e)
			{
				return RedirectToAction("Problem", "Error", null);
			}
			if (model == null)
				return RedirectToAction("Problem", "Error", null);
			return View("PageDetails", model);
		}
		public Result<SourcePage> EditSourcePage(SourcePage aSourcePage, Result<SourcePage> aResult)
		{
			theServiceUri
				.At("sources", aSourcePage.SourceId, "pages")
				.With("sourcePageId", aSourcePage.Id)
				.With("sourcePageRev", aSourcePage.Rev)
				.Put(DreamMessage.Ok(MimeType.JSON, aSourcePage.ToString()), new Result<DreamMessage>())
				.WhenDone(delegate(Result<DreamMessage> answer)
				{
					if (!answer.Value.IsSuccessful)
					{
						if (answer.Value.Status != DreamStatus.Ok)
							aResult.Throw(new Exception());
					}
					else
					{
						aResult.Return(new SourcePage(JObject.Parse(answer.Value.ToText())));
					}
				}
				);
			return aResult;
		}