public HttpResponseMessage Create(MetadataDefinitionResource resource)
        {
            _logWriter.Info(String.Format("Beginning of processing creation of Definition : {0}", resource.Name));

            if (resource == null)
            {
                throw new ArgumentEmptyException("resource");
            }

            _logWriter.Debug(resource.ToString());

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

            return(_metadataDefinitonReadService.FindByName(resource.Name).Fold(x =>
                                                                                Request.CreateErrorResponse(HttpStatusCode.BadRequest, resource.Name + " already exist. Names must be unique"),
                                                                                () =>
            {
                var errors = ValidateResource(resource);
                if (!String.IsNullOrWhiteSpace(errors))
                {
                    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, errors);
                }

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

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

                return Request.CreateResponse(HttpStatusCode.Created);
            }));
        }
        public HttpResponseMessage Create(MetadataDefinitionResource resource)
        {
            _logWriter.Info(String.Format("Beginning of processing creation of Definition : {0}", resource.Name));

            if (resource == null)
                throw new ArgumentEmptyException("resource");

            _logWriter.Debug(resource.ToString());

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

            return _metadataDefinitonReadService.FindByName(resource.Name).Fold(x =>
                                                                                Request.CreateErrorResponse(HttpStatusCode.BadRequest, resource.Name + " already exist. Names must be unique"),
                                                                                () =>
                                                                                {
                                                                                    var errors = ValidateResource(resource);
                                                                                    if (!String.IsNullOrWhiteSpace(errors))
                                                                                        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, errors);

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

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

                                                                                    return Request.CreateResponse(HttpStatusCode.Created);
                                                                                });
        }