public SimpleMetadataViewModel GetMetadataModel(string uuid) { SimpleMetadata metadata = new SimpleMetadata(_geoNorge.GetRecordByUuid(uuid)); var model = new SimpleMetadataViewModel() { Uuid = metadata.Uuid, Title = metadata.Title, HierarchyLevel = metadata.HierarchyLevel, ParentIdentifier = metadata.ParentIdentifier, MetadataStandard = metadata.MetadataStandard, Abstract = metadata.Abstract != null?metadata.Abstract.Replace("...", "") : "", ContactMetadata = new Contact(metadata.ContactMetadata, "pointOfContact"), ContactPublisher = new Contact(metadata.ContactPublisher, "publisher"), ContactOwner = new Contact(metadata.ContactOwner, "owner"), SupplementalDescription = metadata.SupplementalDescription, SpecificUsage = metadata.SpecificUsage, ProcessHistory = metadata.ProcessHistory, ProductPageUrl = metadata.ProductPageUrl, DistributionUrl = metadata.DistributionDetails != null ? metadata.DistributionDetails.URL : null, DistributionProtocol = metadata.DistributionDetails != null ? metadata.DistributionDetails.Protocol : null, MaintenanceFrequency = metadata.MaintenanceFrequency, DateUpdated = metadata.DateUpdated, DateMetadataUpdated = metadata.DateMetadataUpdated, KeywordsPlace = CreateListOfKeywords(SimpleKeyword.Filter(metadata.Keywords, SimpleKeyword.TYPE_PLACE, null)), KeywordsNationalInitiative = CreateListOfKeywords(SimpleKeyword.Filter(metadata.Keywords, null, SimpleKeyword.THESAURUS_NATIONAL_INITIATIVE)), KeywordsNationalTheme = CreateListOfKeywords(SimpleKeyword.Filter(metadata.Keywords, null, SimpleKeyword.THESAURUS_NATIONAL_THEME)), KeywordsEnglish = CreateDictionaryOfEnglishKeywords(metadata.Keywords), UseConstraints = metadata.Constraints != null ? metadata.Constraints.UseConstraints : null, OtherConstraintsLink = metadata.Constraints != null ? metadata.Constraints.OtherConstraintsLink : null, OtherConstraintsLinkText = metadata.Constraints != null ? metadata.Constraints.OtherConstraintsLinkText : null, OtherConstraintsAccess = metadata.Constraints != null ? metadata.Constraints.OtherConstraintsAccess : null, EnglishTitle = metadata.EnglishTitle, EnglishAbstract = metadata.EnglishAbstract, EnglishContactMetadataOrganization = metadata.ContactMetadata != null ? metadata.ContactMetadata.OrganizationEnglish : null, EnglishContactPublisherOrganization = metadata.ContactPublisher != null ? metadata.ContactPublisher.OrganizationEnglish : null, EnglishContactOwnerOrganization = metadata.ContactOwner != null ? metadata.ContactOwner.OrganizationEnglish : null }; if (metadata.BoundingBox != null) { model.BoundingBoxEast = ConvertCoordinateWithCommaToPoint(metadata.BoundingBox.EastBoundLongitude); model.BoundingBoxWest = ConvertCoordinateWithCommaToPoint(metadata.BoundingBox.WestBoundLongitude); model.BoundingBoxNorth = ConvertCoordinateWithCommaToPoint(metadata.BoundingBox.NorthBoundLatitude); model.BoundingBoxSouth = ConvertCoordinateWithCommaToPoint(metadata.BoundingBox.SouthBoundLatitude); } // Translations model.TitleFromSelectedLanguage = model.TitleTranslated(); return(model); }
public void SaveMetadataModel(SimpleMetadataViewModel model, string username) { SimpleMetadata metadata = new SimpleMetadata(_geoNorge.GetRecordByUuid(model.Uuid)); UpdateMetadataFromModel(model, metadata); _geoNorge.MetadataUpdate(metadata.GetMetadata(), CreateAdditionalHeadersWithUsername(username, model.Published)); }
private void SaveMetadataToCswServer(SimpleMetadataViewModel model) { try { _metadataService.SaveMetadataModel(model, GetUsername()); TempData["success"] = UI.Metadata_Edit_Saved_Success; } catch (Exception e) { Log.Error("Error while editing metadata with uuid = " + model.Uuid, e); TempData["failure"] = String.Format(UI.Metadata_Edit_Saved_Failure, e.Message); } }
private void PrepareViewBagForEditing(SimpleMetadataViewModel model) { ViewBag.MaintenanceFrequencyValues = new SelectList(GetListOfMaintenanceFrequencyValues(), "Key", "Value", model.MaintenanceFrequency); ViewBag.CreateProductSheetUrl = System.Web.Configuration.WebConfigurationManager.AppSettings["ProductSheetGeneratorUrl"] + model.Uuid; ViewBag.DatasetUrl = System.Web.Configuration.WebConfigurationManager.AppSettings["DownloadDatasetUrl"]; ViewBag.GeoNetworkViewUrl = GeoNetworkUtil.GetViewUrl(model.Uuid); ViewBag.GeoNetworkXmlDownloadUrl = GeoNetworkUtil.GetXmlDownloadUrl(model.Uuid); var seoUrl = new SeoUrl("", model.Title); ViewBag.KartkatalogViewUrl = System.Web.Configuration.WebConfigurationManager.AppSettings["KartkatalogUrl"] + "Metadata/" + seoUrl.Title + "/" + model.Uuid; ViewBag.predefinedDistributionProtocols = new SelectList(GetListOfpredefinedDistributionProtocols(), "Key", "Value"); Dictionary<string, string> OrganizationList = GetListOfOrganizations(); if (string.IsNullOrEmpty(model.ContactMetadata.Organization)) { if (Request.Form["ContactMetadata.Organization.Old"] != null || !string.IsNullOrWhiteSpace(Request.Form["ContactMetadata.Organization.Old"])) { model.ContactMetadata.Organization = Request.Form["ContactMetadata.Organization.Old"].ToString(); } } if (string.IsNullOrEmpty(model.ContactPublisher.Organization)) { if (Request.Form["ContactPublisher.Organization.Old"] != null || !string.IsNullOrWhiteSpace(Request.Form["ContactPublisher.Organization.Old"])) { model.ContactPublisher.Organization = Request["ContactPublisher.Organization.Old"].ToString(); } } if (string.IsNullOrEmpty(model.ContactOwner.Organization)) { if (Request.Form["ContactOwner.Organization.Old"] != null || !string.IsNullOrWhiteSpace(Request.Form["ContactOwner.Organization.Old"])) { model.ContactOwner.Organization = Request["ContactOwner.Organization.Old"].ToString(); } } ViewBag.OrganizationContactMetadataValues = new SelectList(OrganizationList, "Key", "Value", model.ContactMetadata.Organization); ViewBag.OrganizationContactPublisherValues = new SelectList(OrganizationList, "Key", "Value", model.ContactPublisher.Organization); ViewBag.OrganizationContactOwnerValues = new SelectList(OrganizationList, "Key", "Value", model.ContactOwner.Organization); ViewBag.NationalThemeValues = new SelectList(GetListOfNationalTheme(), "Key", "Value"); ViewBag.NationalInitiativeValues = new SelectList(GetListOfNationalInitiative(), "Key", "Value"); ViewBag.InspireValues = new SelectList(GetListOfInspire(), "Key", "Value"); ViewBag.UseConstraintValues = new SelectList(GetListOfRestrictionValues(), "Key", "Value", model.UseConstraints); ViewBag.LicenseTypesValues = new SelectList(GetListOfLicenseTypes(), "Key", "Value", model.OtherConstraintsLink); ViewBag.ValideringUrl = System.Web.Configuration.WebConfigurationManager.AppSettings["ValideringUrl"] + "api/metadata/" + model.Uuid; ViewBag.Municipalities = new KomDataService().GetListOfMunicipalityOrganizations(); }
private bool HasAccessToMetadata(SimpleMetadataViewModel model) { string organization = GetSecurityClaim("organization"); string role = GetSecurityClaim("role"); bool isAdmin = !string.IsNullOrWhiteSpace(role) && role.Equals("nd.metadata_admin"); return isAdmin || model.HasAccess(organization); }
public ActionResult Edit(string uuid, string action, SimpleMetadataViewModel model, string ignoreValidationError) { ViewBag.IsAdmin = "0"; string role = GetSecurityClaim("role"); if (!string.IsNullOrWhiteSpace(role) && role.Equals("nd.metadata_admin")) { ViewBag.IsAdmin = "1"; } if (ModelState.IsValid) { SaveMetadataToCswServer(model); if (action.Equals(UI.Button_Validate)) { ValidateMetadata(uuid); } return RedirectToAction("Edit", new { uuid = model.Uuid }); } else { string messages = string.Join("; ", ModelState.Values .SelectMany(x => x.Errors) .Select(x => x.ErrorMessage)); Log.Debug("Model for " + uuid + " is not valid: " + messages); } PrepareViewBagForEditing(model); return View(model); }
private void UpdateMetadataFromModel(SimpleMetadataViewModel model, SimpleMetadata metadata) { metadata.ParentIdentifier = model.ParentIdentifier; metadata.Title = model.Title; metadata.Abstract = model.Abstract; metadata.SupplementalDescription = model.SupplementalDescription; metadata.SpecificUsage = !string.IsNullOrWhiteSpace(model.SpecificUsage) ? model.SpecificUsage : " "; metadata.ProcessHistory = !string.IsNullOrWhiteSpace(model.ProcessHistory) ? model.ProcessHistory : " "; metadata.ProductPageUrl = model.ProductPageUrl; var contactMetadata = model.ContactMetadata.ToSimpleContact(); if (!string.IsNullOrWhiteSpace(model.EnglishContactMetadataOrganization)) { contactMetadata.OrganizationEnglish = model.EnglishContactMetadataOrganization; } metadata.ContactMetadata = contactMetadata; var contactPublisher = model.ContactPublisher.ToSimpleContact(); if (!string.IsNullOrWhiteSpace(model.EnglishContactPublisherOrganization)) { contactPublisher.OrganizationEnglish = model.EnglishContactPublisherOrganization; } metadata.ContactPublisher = contactPublisher; var contactOwner = model.ContactOwner.ToSimpleContact(); if (!string.IsNullOrWhiteSpace(model.EnglishContactOwnerOrganization)) { contactOwner.OrganizationEnglish = model.EnglishContactOwnerOrganization; } metadata.ContactOwner = contactOwner; if (!string.IsNullOrWhiteSpace(model.BoundingBoxEast)) { metadata.BoundingBox = new SimpleBoundingBox { EastBoundLongitude = model.BoundingBoxEast, WestBoundLongitude = model.BoundingBoxWest, NorthBoundLatitude = model.BoundingBoxNorth, SouthBoundLatitude = model.BoundingBoxSouth }; } string accessConstraintsSelected = ""; if (!string.IsNullOrEmpty(model.OtherConstraintsAccess)) { if (model.OtherConstraintsAccess.ToLower() == "no restrictions") { accessConstraintsSelected = "otherRestrictions"; } } if (!string.IsNullOrWhiteSpace(model.MaintenanceFrequency)) { metadata.MaintenanceFrequency = model.MaintenanceFrequency; } metadata.DateUpdated = model.DateUpdated; //Keep if other keywords than in model List <SimpleKeyword> keywordsNotInModel = metadata.Keywords.Where(k => k.Thesaurus != SimpleKeyword.THESAURUS_NATIONAL_INITIATIVE && k.Thesaurus != SimpleKeyword.THESAURUS_NATIONAL_THEME && k.Type != SimpleKeyword.TYPE_PLACE).ToList(); //Get keywords in model List <SimpleKeyword> keywordsToUpdate = model.GetAllKeywords(); bool hasEnglishFields = false; // don't create PT_FreeText fields if it isn't necessary if (!string.IsNullOrWhiteSpace(model.EnglishTitle)) { metadata.EnglishTitle = model.EnglishTitle; hasEnglishFields = true; } if (!string.IsNullOrWhiteSpace(model.EnglishAbstract)) { metadata.EnglishAbstract = model.EnglishAbstract; hasEnglishFields = true; } if (hasEnglishFields) { metadata.SetLocale(SimpleMetadata.LOCALE_ENG); } metadata.Keywords = keywordsNotInModel.Concat(keywordsToUpdate).ToList(); metadata.DistributionDetails = new SimpleDistributionDetails { URL = model.DistributionUrl, Protocol = model.DistributionProtocol }; metadata.Constraints = new SimpleConstraints { UseConstraints = "license", OtherConstraints = !string.IsNullOrWhiteSpace(accessConstraintsSelected) ? accessConstraintsSelected : null, OtherConstraintsLink = !string.IsNullOrWhiteSpace(model.OtherConstraintsLink) ? model.OtherConstraintsLink : null, OtherConstraintsLinkText = !string.IsNullOrWhiteSpace(model.OtherConstraintsLinkText) ? model.OtherConstraintsLinkText : null, OtherConstraintsAccess = !string.IsNullOrWhiteSpace(model.OtherConstraintsAccess) ? model.OtherConstraintsAccess : null }; SetDefaultValuesOnMetadata(metadata); }
public MetaDataEntry ValidateMetadata(string uuid) { MetaDataEntry metadata = new MetaDataEntry(); metadata.Errors = new List <Error>(); try { Kartverket.MetadataEditor.Models.MetadataViewModel model = _metadataService.GetMetadataModel(uuid); if (model != null) { string role = GetSecurityClaim("role"); if (!string.IsNullOrWhiteSpace(role) && role.Equals("nd.metadata_admin")) { model.ValidateAllRequirements = true; } metadata.Uuid = model.Uuid; metadata.Title = model.Title; metadata.OrganizationName = model.ContactMetadata.Organization != null ? model.ContactMetadata.Organization : ""; metadata.ContactEmail = model.ContactMetadata.Email != null ? model.ContactMetadata.Email : ""; if (model.MetadataStandard == "ISO19115:Norsk versjon") { Kartverket.MetadataEditor.Models.SimpleMetadataService _simpleMetadataService = new Kartverket.MetadataEditor.Models.SimpleMetadataService(); Kartverket.MetadataEditor.Models.SimpleMetadataViewModel modelSimple = _simpleMetadataService.GetMetadataModel(uuid); Validate(modelSimple); var errors = ModelState.Where(n => n.Value.Errors.Count > 0).ToList(); foreach (var error in errors) { metadata.Errors.Add(new Error { Key = error.Key.ToString(), Message = error.Value.Errors[0].ErrorMessage }); } } else { var thumb = model.Thumbnails.Where(t => t.Type == "thumbnail" || t.Type == "miniatyrbilde"); if (thumb.Count() == 0) { ModelState.AddModelError("ThumbnailMissing", "Det er påkrevd å fylle ut illustrasjonsbilde"); } else if (thumb.Count() > 0) { try { //Disable SSL sertificate errors System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return(true); // **** Always accept }; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Accept.Clear(); string Url = thumb.Select(t => t.URL).FirstOrDefault().ToString(); HttpResponseMessage response = client.GetAsync(new Uri(Url)).Result; if (response.StatusCode != HttpStatusCode.OK) { metadata.Errors.Add(new Error { Key = "ThumbnailNotFound", Message = "Feil ressurslenke til illustrasjonsbilde" }); } } } catch (Exception ex) { metadata.Errors.Add(new Error { Key = "Error", Message = ex.Message }); } } Validate(model); var errors = ModelState.Where(n => n.Value.Errors.Count > 0).ToList(); foreach (var error in errors) { metadata.Errors.Add(new Error { Key = error.Key.ToString(), Message = error.Value.Errors[0].ErrorMessage }); } } } } catch (Exception ex) { metadata.Errors.Add(new Error { Key = "Error", Message = ex.Message }); } if (metadata.Errors.Count > 0) { metadata.Status = "ERRORS"; } else { metadata.Status = "OK"; } return(metadata); }
private void UpdateMetadataFromModel(SimpleMetadataViewModel model, SimpleMetadata metadata) { metadata.ParentIdentifier = model.ParentIdentifier; metadata.Title = model.Title; metadata.Abstract = model.Abstract; metadata.SupplementalDescription = model.SupplementalDescription; metadata.SpecificUsage = !string.IsNullOrWhiteSpace(model.SpecificUsage) ? model.SpecificUsage : " "; metadata.ProcessHistory = !string.IsNullOrWhiteSpace(model.ProcessHistory) ? model.ProcessHistory : " "; metadata.ProductPageUrl = model.ProductPageUrl; var contactMetadata = model.ContactMetadata.ToSimpleContact(); if (!string.IsNullOrWhiteSpace(model.EnglishContactMetadataOrganization)) { contactMetadata.OrganizationEnglish = model.EnglishContactMetadataOrganization; } metadata.ContactMetadata = contactMetadata; var contactPublisher = model.ContactPublisher.ToSimpleContact(); if (!string.IsNullOrWhiteSpace(model.EnglishContactPublisherOrganization)) { contactPublisher.OrganizationEnglish = model.EnglishContactPublisherOrganization; } metadata.ContactPublisher = contactPublisher; var contactOwner = model.ContactOwner.ToSimpleContact(); if (!string.IsNullOrWhiteSpace(model.EnglishContactOwnerOrganization)) { contactOwner.OrganizationEnglish = model.EnglishContactOwnerOrganization; } metadata.ContactOwner = contactOwner; if (!string.IsNullOrWhiteSpace(model.BoundingBoxEast)) { metadata.BoundingBox = new SimpleBoundingBox { EastBoundLongitude = model.BoundingBoxEast, WestBoundLongitude = model.BoundingBoxWest, NorthBoundLatitude = model.BoundingBoxNorth, SouthBoundLatitude = model.BoundingBoxSouth }; } string accessConstraintsSelected = ""; if (!string.IsNullOrEmpty(model.OtherConstraintsAccess)) { if (model.OtherConstraintsAccess.ToLower() == "no restrictions") { accessConstraintsSelected = "otherRestrictions"; } } if (!string.IsNullOrWhiteSpace(model.MaintenanceFrequency)) metadata.MaintenanceFrequency = model.MaintenanceFrequency; metadata.DateUpdated = model.DateUpdated; //Keep if other keywords than in model List<SimpleKeyword> keywordsNotInModel = metadata.Keywords.Where(k => k.Thesaurus != SimpleKeyword.THESAURUS_NATIONAL_INITIATIVE && k.Thesaurus != SimpleKeyword.THESAURUS_NATIONAL_THEME && k.Type != SimpleKeyword.TYPE_PLACE).ToList(); //Get keywords in model List<SimpleKeyword> keywordsToUpdate = model.GetAllKeywords(); bool hasEnglishFields = false; // don't create PT_FreeText fields if it isn't necessary if (!string.IsNullOrWhiteSpace(model.EnglishTitle)) { metadata.EnglishTitle = model.EnglishTitle; hasEnglishFields = true; } if (!string.IsNullOrWhiteSpace(model.EnglishAbstract)) { metadata.EnglishAbstract = model.EnglishAbstract; hasEnglishFields = true; } if (hasEnglishFields) metadata.SetLocale(SimpleMetadata.LOCALE_ENG); metadata.Keywords = keywordsNotInModel.Concat(keywordsToUpdate).ToList(); metadata.DistributionDetails = new SimpleDistributionDetails { URL = model.DistributionUrl, Protocol = model.DistributionProtocol }; metadata.Constraints = new SimpleConstraints { UseConstraints = "license", OtherConstraints = !string.IsNullOrWhiteSpace(accessConstraintsSelected) ? accessConstraintsSelected : null, OtherConstraintsLink = !string.IsNullOrWhiteSpace(model.OtherConstraintsLink) ? model.OtherConstraintsLink : null, OtherConstraintsLinkText = !string.IsNullOrWhiteSpace(model.OtherConstraintsLinkText) ? model.OtherConstraintsLinkText : null, OtherConstraintsAccess = !string.IsNullOrWhiteSpace(model.OtherConstraintsAccess) ? model.OtherConstraintsAccess : null }; SetDefaultValuesOnMetadata(metadata); }
public SimpleMetadataViewModel GetMetadataModel(string uuid) { SimpleMetadata metadata = new SimpleMetadata(_geoNorge.GetRecordByUuid(uuid)); var model = new SimpleMetadataViewModel() { Uuid = metadata.Uuid, Title = metadata.Title, HierarchyLevel = metadata.HierarchyLevel, ParentIdentifier = metadata.ParentIdentifier, MetadataStandard = metadata.MetadataStandard, Abstract = metadata.Abstract != null ? metadata.Abstract.Replace("...", "") : "", ContactMetadata = new Contact(metadata.ContactMetadata, "pointOfContact"), ContactPublisher = new Contact(metadata.ContactPublisher, "publisher"), ContactOwner = new Contact(metadata.ContactOwner, "owner"), SupplementalDescription = metadata.SupplementalDescription, SpecificUsage = metadata.SpecificUsage, ProcessHistory = metadata.ProcessHistory, ProductPageUrl = metadata.ProductPageUrl, DistributionUrl = metadata.DistributionDetails != null ? metadata.DistributionDetails.URL : null, DistributionProtocol = metadata.DistributionDetails != null ? metadata.DistributionDetails.Protocol : null, MaintenanceFrequency = metadata.MaintenanceFrequency, DateUpdated = metadata.DateUpdated, DateMetadataUpdated = metadata.DateMetadataUpdated, KeywordsPlace = CreateListOfKeywords(SimpleKeyword.Filter(metadata.Keywords, SimpleKeyword.TYPE_PLACE, null)), KeywordsNationalInitiative = CreateListOfKeywords(SimpleKeyword.Filter(metadata.Keywords, null, SimpleKeyword.THESAURUS_NATIONAL_INITIATIVE)), KeywordsNationalTheme = CreateListOfKeywords(SimpleKeyword.Filter(metadata.Keywords, null, SimpleKeyword.THESAURUS_NATIONAL_THEME)), KeywordsEnglish = CreateDictionaryOfEnglishKeywords(metadata.Keywords), UseConstraints = metadata.Constraints != null ? metadata.Constraints.UseConstraints : null, OtherConstraintsLink = metadata.Constraints != null ? metadata.Constraints.OtherConstraintsLink : null, OtherConstraintsLinkText = metadata.Constraints != null ? metadata.Constraints.OtherConstraintsLinkText : null, OtherConstraintsAccess = metadata.Constraints != null ? metadata.Constraints.OtherConstraintsAccess : null, EnglishTitle = metadata.EnglishTitle, EnglishAbstract = metadata.EnglishAbstract, EnglishContactMetadataOrganization = metadata.ContactMetadata != null ? metadata.ContactMetadata.OrganizationEnglish : null, EnglishContactPublisherOrganization = metadata.ContactPublisher != null ? metadata.ContactPublisher.OrganizationEnglish : null, EnglishContactOwnerOrganization = metadata.ContactOwner != null ? metadata.ContactOwner.OrganizationEnglish : null }; if (metadata.BoundingBox != null) { model.BoundingBoxEast = ConvertCoordinateWithCommaToPoint(metadata.BoundingBox.EastBoundLongitude); model.BoundingBoxWest = ConvertCoordinateWithCommaToPoint(metadata.BoundingBox.WestBoundLongitude); model.BoundingBoxNorth = ConvertCoordinateWithCommaToPoint(metadata.BoundingBox.NorthBoundLatitude); model.BoundingBoxSouth = ConvertCoordinateWithCommaToPoint(metadata.BoundingBox.SouthBoundLatitude); } return model; }