public HttpResponseMessage CreateMetadataDefinitionGroup(MetadataDefinitionGroupResource resource)
        {
            if (resource == null)
            {
                throw new ArgumentEmptyException("resource");
            }

            _logWriter.Info("Cleaning Record");
            resource.Clean();

            _logWriter.Info(String.Format("Beginning of processing creation of Definition Group: {0}", resource.Name));
            _logWriter.Debug(resource.ToString());

            if (_metadataDefinitonGroupReadService.FindByIdentity(resource.Identity).Exists)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Identity already exists. Identities must be unique"));
            }

            if (_metadataDefinitonGroupReadService.FindByName(resource.Name).Exists)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, resource.Name + " already exist. Names must be unique"));
            }

            var command = resource.ToCreateMetadataDefinitionGroupCommand();

            _dispatcher.Dispatch(command);

            _logWriter.Info(String.Format("Completion of processing creation of Definition Group: {0}", resource.Name));

            return(Request.CreateResponse(HttpStatusCode.Created));
        }
        public HttpResponseMessage UpdateMetadataDefinitionGroup([FromUri] Guid identity, [FromBody] MetadataDefinitionGroupResource resource)
        {
            if (resource == null)
            {
                throw new ArgumentEmptyException("resource");
            }

            _logWriter.Info("Cleaning Record");
            resource.Clean();

            _logWriter.Info(String.Format("Update request for Metadata Definition Group: {0}", identity));
            resource.Identity = identity;

            var current      = _metadataDefinitonGroupReadService.FindByIdentity(resource.Identity);
            var matchingName = _metadataDefinitonGroupReadService.FindByName(resource.Name);

            if (matchingName.Exists && matchingName.Value.Identity != resource.Identity)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, resource.Name + " already exists. Names must be unique"));
            }

            if (current == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Group not found"));
            }

            if (current.Value.Identity != resource.Identity)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Group not found"));
            }

            _dispatcher.GenerateCommands(_metadataDefinitonGroupReadService, resource);
            return(Request.CreateResponse(HttpStatusCode.OK));
        }
        public HttpResponseMessage CreateMetadataDefinitionGroup(MetadataDefinitionGroupResource resource)
        {
            if (resource == null)
                throw new ArgumentEmptyException("resource");

            _logWriter.Info("Cleaning Record");
            resource.Clean();

            _logWriter.Info(String.Format("Beginning of processing creation of Definition Group: {0}", resource.Name));
            _logWriter.Debug(resource.ToString());

            if (_metadataDefinitonGroupReadService.FindByIdentity(resource.Identity).Exists)
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest,"Identity already exists. Identities must be unique");

            if (_metadataDefinitonGroupReadService.FindByName(resource.Name).Exists)
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest,resource.Name + " already exist. Names must be unique");

            var command = resource.ToCreateMetadataDefinitionGroupCommand();
            _dispatcher.Dispatch(command);

            _logWriter.Info(String.Format("Completion of processing creation of Definition Group: {0}",resource.Name));

            return Request.CreateResponse(HttpStatusCode.Created);
        }