public void Create(Update update)
        {
            // HACK: should be using database-side value generation?
            update.Created = DateTime.UtcNow;

            using (var trans = Session.BeginTransaction())
            {
                Session.Save(update);
                trans.Commit();
            }
        }
        public ActionResult Submit(long id, FormCollection form)
        {
            var destinationUrl = form["DestinationUrl"];
            var wordCount = int.Parse(form["WordCount"]);
            var version = form["Version"];

            // HACK: CheckBox has a subtle behavior in ASP.NET MVC
            //var isUpdateComplete = form["IsUpdateComplete"].Contains("true");

            var mapping = Mappings.Edit(id);

            if (wordCount < 0 && wordCount <= 10000)
            {
                ModelState.AddModelError("WordCount", "Word count should between 0 and 10000.", wordCount.ToString());
            }

            if (string.IsNullOrEmpty(version))
            {
                ModelState.AddModelError("Version", "Version is required.", "");
            }

            if(!string.IsNullOrEmpty((destinationUrl)))
            {
                mapping.DestinationUrl = destinationUrl;
            }
            else
            {
                if(string.IsNullOrEmpty(mapping.DestinationUrl))
                {
                    ModelState.AddModelError("DestinationUrl", "Destination Url is required.", "");
                }
            }

            if(!ModelState.IsValid)
            {
                return View("Update", Mappings.Edit(id));
            }

            var user = Users.Get(User.Identity.Name);

            var update = new Update
            {
                User = user,
                WordCount = wordCount,
                Version = version,
                Mapping = mapping
            };

            mapping.Updates.Add(update);

            Updates.Create(update);

            mapping.Version = version;
            mapping.LastUpdated = DateTime.UtcNow;
            Mappings.Update(mapping);

            ViewData["Message"] = "Update recorded";
            return View("Update", Mappings.Edit(id));
        }