// /// <summary> /// Handle component import /// TODO - should a save be done for each component or wait until the end /// </summary> /// <param name="input"></param> /// <param name="pathway"></param> /// <param name="bnodes"></param> /// <param name="status">TODO - do we want to continue using the pathway SaveStatus?</param> /// <returns></returns> public OutputComponent ImportComponent(InputComponent input, ThisEntity pathway, List <BNode> bnodes, SaveStatus status) { MappingHelperV3 helper = new MappingHelperV3(CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT); //do we need to reference blank nodes here? - if so pass to this method helper.entityBlankNodes = bnodes; helper.CurrentEntityCTID = input.CTID; helper.CurrentEntityName = input.Name.ToString(); OutputComponent output = new OutputComponent(); // LoggingHelper.DoTrace(5, "======== Component ======== "); LoggingHelper.DoTrace(5, " type: "+ input.PathwayComponentType.ToString()); LoggingHelper.DoTrace(5, " name: "+ (input.Name ?? new JInput.LanguageMap("componentNameMissing")).ToString()); LoggingHelper.DoTrace(5, " ctid: "+ input.CTID); LoggingHelper.DoTrace(6, " @Id: "+ input.CtdlId); try { //add/updating Pathway if (!DoesComponentExist(input.CTID, ref output)) { //set the rowid now, so that can be referenced as needed //no, the guid comes from the resolving of entity references //actually OK, as earlier references would result in a pending record output.RowId = Guid.NewGuid(); } helper.currentBaseObject = output; if (input.CTID == "ce-fa6c139f-0615-401f-9920-6ec8c445baca") { } //initialize json properties output.JsonProperties = new PathwayComponentProperties(); // output.PathwayComponentType = input.PathwayComponentType; output.Name = helper.HandleLanguageMap(input.Name, output, "Name"); output.Description = helper.HandleLanguageMap(input.Description, output, "Description"); output.SubjectWebpage = input.SubjectWebpage; output.SourceData = input.SourceData; if (!string.IsNullOrWhiteSpace(output.SourceData) && output.SourceData.IndexOf("/resources/") > 0) { var ctid = ResolutionServices.ExtractCtid(output.SourceData); if (!string.IsNullOrWhiteSpace(ctid)) { if (output.PathwayComponentType.ToLower().IndexOf("credential") > -1) { var target = CredentialManager.GetMinimumByCtid(ctid); if (target != null && target.Id > 0) { //this approach 'buries' the cred from external references like credential in pathway output.SourceCredential = new TopLevelEntityReference() { Id = target.Id, Name = target.Name, Description = target.Description, CTID = target.CTID, SubjectWebpage = target.SubjectWebpage, //RowId = target.RowId }; output.JsonProperties.SourceCredential = output.SourceCredential; } } else if (output.PathwayComponentType.ToLower().IndexOf("assessmentcomp") > -1) { var target = AssessmentManager.GetSummaryByCtid(ctid); if (target != null && target.Id > 0) { //may not really need this, just the json output.SourceAssessment = new TopLevelEntityReference() { Id = target.Id, Name = target.Name, Description = target.Description, CTID = target.CTID, SubjectWebpage = target.SubjectWebpage, //RowId = target.RowId }; output.JsonProperties.SourceAssessment = output.SourceAssessment; } } else if (output.PathwayComponentType.ToLower().IndexOf("coursecomp") > -1) { var target = LearningOpportunityManager.GetByCtid(ctid); if (target != null && target.Id > 0) { //may not really need this, just the json output.SourceLearningOpportunity = new TopLevelEntityReference() { Id = target.Id, Name = target.Name, Description = target.Description, CTID = target.CTID, SubjectWebpage = target.SubjectWebpage, //RowId = target.RowId }; output.JsonProperties.SourceLearningOpportunity = output.SourceLearningOpportunity; } } } } output.CTID = input.CTID; output.PathwayCTID = pathway.CTID; //output.CodedNotation = input.CodedNotation; output.Identifier = helper.MapIdentifierValueListInternal(input.Identifier); if (output.Identifier != null && output.Identifier.Count() > 0) { output.IdentifierJson = JsonConvert.SerializeObject(output.Identifier, MappingHelperV3.GetJsonSettings()); } // output.ComponentDesignationList = helper.MapCAOListToList(input.ComponentDesignation); // output.CredentialType = input.CredentialType; output.CreditValue = helper.HandleValueProfileList(input.CreditValue, output.PathwayComponentType + ".CreditValue"); //TBD - how to handle. Will need to have imported the concept scheme/concept if (input.HasProgressionLevel != null && input.HasProgressionLevel.Any()) { foreach (var item in input.HasProgressionLevel) { output.HasProgressionLevels.Add(ResolutionServices.ExtractCtid(item)); } } output.PointValue = helper.HandleQuantitiveValue(input.PointValue, output.PathwayComponentType + ".PointValue"); // output.ProgramTerm = helper.HandleLanguageMap(input.ProgramTerm, output, "ProgramTerm"); //need to get relationshiptype to store-> this can be done by manager //3 output.HasChildList = helper.MapEntityReferenceGuids("PathwayComponent.HasChild", input.HasChild, CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT, ref status); //2 output.HasIsChildOfList = helper.MapEntityReferenceGuids("PathwayComponent.IsChildOf", input.IsChildOf, CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT, ref status); output.HasPrerequisiteList = helper.MapEntityReferenceGuids("PathwayComponent.Prerequisite", input.Prerequisite, CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT, ref status); output.HasPreceedsList = helper.MapEntityReferenceGuids("PathwayComponent.Preceeds", input.Preceeds, CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT, ref status); //populate JSON properties output.JsonProperties.ComponentDesignationList = output.ComponentDesignationList; output.JsonProperties.CreditValue = output.CreditValue; output.JsonProperties.Identifier = output.Identifier; output.JsonProperties.PointValue = output.PointValue; // if (input.HasCondition != null && input.HasCondition.Count() > 0) { output.HasCondition = new List <PathwayComponentCondition>(); foreach (var item in input.HasCondition) { //var jcc = JsonConvert.DeserializeObject<JInput.ComponentCondition>( item.ToString() ); var cc = new PathwayComponentCondition(); cc.Name = helper.HandleLanguageMap(item.Name, cc, "ComponentCondition.Name"); cc.Description = helper.HandleLanguageMap(item.Description, cc, "ComponentCondition.Description"); cc.RequiredNumber = item.RequiredNumber; cc.PathwayCTID = pathway.CTID; cc.HasTargetComponentList = helper.MapEntityReferenceGuids("ComponentCondition.TargetComponent", item.TargetComponent, CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT, ref status); output.HasCondition.Add(cc); } } } catch (Exception ex) { LoggingHelper.LogError(ex, "ImportPathways.ImportComponent"); //status.AddError( string.Format( "ImportPathways.ImportComponent. ComponentType: {0}, Name: {1}, Message: {2}", output.ComponentTypeId, output.Name, ex.Message ) ); } //then save return(output); }
} // public bool Import(string payload, string envelopeIdentifier, SaveStatus status) { LoggingHelper.DoTrace(6, "ImportPathways - entered."); List <string> messages = new List <string>(); bool importSuccessfull = false; EntityServices mgr = new EntityServices(); // InputEntity input = new InputEntity(); var inputComponents = new List <InputComponent>(); var mainEntity = new Dictionary <string, object>(); // Dictionary <string, object> dictionary = RegistryServices.JsonToDictionary(payload); object graph = dictionary["@graph"]; //serialize the graph object var glist = JsonConvert.SerializeObject(graph); //parse graph in to list of objects JArray graphList = JArray.Parse(glist); var bnodes = new List <BNode>(); int cntr = 0; foreach (var item in graphList) { cntr++; if (cntr == 1) { var main = item.ToString(); //may not use this. Could add a trace method mainEntity = RegistryServices.JsonToDictionary(main); input = JsonConvert.DeserializeObject <InputEntity>(main); } else { //may have blank nodes? var bn = item.ToString(); bnodes.Add(JsonConvert.DeserializeObject <BNode>(bn)); var child = item.ToString(); if (child.IndexOf("_:") > -1) { bnodes.Add(JsonConvert.DeserializeObject <BNode>(child)); } else if (child.IndexOf("Component") > -1) { inputComponents.Add(JsonConvert.DeserializeObject <InputComponent>(child)); } else { //unexpected Dictionary <string, object> unexpected = RegistryServices.JsonToDictionary(child); object unexpectedType = unexpected["@type"]; status.AddError("Unexpected document type"); } } } MappingHelperV3 helper = new MappingHelperV3(CodesManager.ENTITY_TYPE_PATHWAY); helper.entityBlankNodes = bnodes; helper.CurrentEntityCTID = input.CTID; helper.CurrentEntityName = input.Name.ToString(); status.EnvelopeId = envelopeIdentifier; try { string ctid = input.CTID; string referencedAtId = input.CtdlId; LoggingHelper.DoTrace(5, " name: "+ input.Name.ToString()); LoggingHelper.DoTrace(6, " url: "+ input.SubjectWebpage); LoggingHelper.DoTrace(5, " ctid: "+ input.CTID); LoggingHelper.DoTrace(6, " @Id: "+ input.CtdlId); status.Ctid = ctid; if (status.DoingDownloadOnly) { return(true); } if (!DoesEntityExist(input.CTID, ref output)) { //TODO - perhaps create a pending pathway immediately //set the rowid now, so that can be referenced as needed output.RowId = Guid.NewGuid(); LoggingHelper.DoTrace(1, string.Format(thisClassName + ".ImportV3(). Record was NOT found using CTID: '{0}'", input.CTID)); } else { LoggingHelper.DoTrace(1, string.Format(thisClassName + ".ImportV3(). Found record: '{0}' using CTID: '{1}'", input.Name, input.CTID)); } helper.currentBaseObject = output; output.Name = helper.HandleLanguageMap(input.Name, output, "Name"); output.Description = helper.HandleLanguageMap(input.Description, output, "Description"); output.SubjectWebpage = input.SubjectWebpage; output.CTID = input.CTID; //TBD handling of referencing third party publisher if (!string.IsNullOrWhiteSpace(status.DocumentPublishedBy)) { //output.PublishedByOrganizationCTID = status.DocumentPublishedBy; var porg = OrganizationManager.GetSummaryByCtid(status.DocumentPublishedBy); if (porg != null && porg.Id > 0) { //TODO - store this in a json blob?????????? //this will result in being added to Entity.AgentRelationship output.PublishedBy = new List <Guid>() { porg.RowId }; } else { //if publisher not imported yet, all publishee stuff will be orphaned var entityUid = Guid.NewGuid(); var statusMsg = ""; var resPos = referencedAtId.IndexOf("/resources/"); var swp = referencedAtId.Substring(0, (resPos + "/resources/".Length)) + status.DocumentPublishedBy; int orgId = new OrganizationManager().AddPendingRecord(entityUid, status.DocumentPublishedBy, swp, ref statusMsg); } } else { //may need a check for existing published by to ensure not lost if (output.Id > 0) { if (output.OrganizationRole != null && output.OrganizationRole.Any()) { var publishedByList = output.OrganizationRole.Where(s => s.RoleTypeId == 30).ToList(); if (publishedByList != null && publishedByList.Any()) { var pby = publishedByList[0].ActingAgentUid; output.PublishedBy = new List <Guid>() { publishedByList[0].ActingAgentUid }; } } } } //warning this gets set to blank if doing a manual import by ctid output.CredentialRegistryId = envelopeIdentifier; //BYs - do owned and offered first output.OfferedBy = helper.MapOrganizationReferenceGuids("Pathway.OfferedBy", input.OfferedBy, ref status); //note need to set output.OwningAgentUid to the first entry output.OwnedBy = helper.MapOrganizationReferenceGuids("Pathway.OwnedBy", input.OwnedBy, ref status); if (output.OwnedBy != null && output.OwnedBy.Count > 0) { output.OwningAgentUid = output.OwnedBy[0]; helper.CurrentOwningAgentUid = output.OwnedBy[0]; } else { //add warning? if (output.OfferedBy == null && output.OfferedBy.Count == 0) { status.AddWarning("document doesn't have an owning or offering organization."); } } //hasPart could contain all components. The API should have done a validation //not clear if necessary to do anything here //this would be a first step to create pending records? if (input.HasPart != null && input.HasPart.Count() > 0) { output.HasPartList = helper.MapEntityReferenceGuids("Pathway.HasPart", input.HasPart, CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT, ref status); } // output.HasChildList = helper.MapEntityReferenceGuids("Pathway.HasChild", input.HasChild, CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT, ref status); output.HasDestinationList = helper.MapEntityReferenceGuids("Pathway.HasDestination", input.HasDestinationComponent, CodesManager.ENTITY_TYPE_PATHWAY_COMPONENT, ref status); //has progression model //TODO - IMPORT CONCEPT SCHEMES // will need to check if related scheme has been imported. output.ProgressionModelURI = ResolutionServices.ExtractCtid(input.HasProgressionModel); output.Keyword = helper.MapToTextValueProfile(input.Keyword, output, "Keyword"); output.Subject = helper.MapCAOListToTextValueProfile(input.Subject, CodesManager.PROPERTY_CATEGORY_SUBJECT); //Industries/occupations output.Industries = helper.MapCAOListToCAOProfileList(input.IndustryType); output.Occupations = helper.MapCAOListToCAOProfileList(input.OccupationType); //may need to save the pathway and then handle components //or do a create pending for hasDestination and any hasChild (actually already done by MapEntityReferenceGuids) //=== if any messages were encountered treat as warnings for now if (messages.Count > 0) { status.SetMessages(messages, true); } //components now or after save ? foreach (var item in inputComponents) { var c = ImportComponent(item, output, bnodes, status); output.HasPart.Add(c); } // //adding common import pattern importSuccessfull = mgr.Import(output, ref status); // status.DocumentId = output.Id; status.DetailPageUrl = string.Format("~/pathway/{0}", output.Id); status.DocumentRowId = output.RowId; //if record was added to db, add to/or set EntityResolution as resolved int ierId = new ImportManager().Import_EntityResolutionAdd(referencedAtId, ctid, CodesManager.ENTITY_TYPE_PATHWAY, output.RowId, output.Id, (output.Id > 0), ref messages, output.Id > 0); //just in case - not sure if applicable, as will want to do components if the pathway exists if (status.HasErrors) { importSuccessfull = false; //email an error report, and/or add to activity log? } // //if ( output.Id > 0 ) //{ // foreach ( var item in inputComponents ) // { // var c=ImportComponent( item, output, bnodes, status ); // output.HasPart.Add( c ); // }// // //call method to handle components //} } catch (Exception ex) { LoggingHelper.LogError(ex, string.Format("Exception encountered in envelopeId: {0}", envelopeIdentifier), false, "Pathway Import exception"); } return(importSuccessfull); }
public bool ImportV3(string payload, SaveStatus status) { DateTime started = DateTime.Now; var saveDuration = new TimeSpan(); InputEntityV3 input = new InputEntityV3(); var bnodes = new List <BNodeV3>(); var mainEntity = new Dictionary <string, object>(); Dictionary <string, object> dictionary = RegistryServices.JsonToDictionary(payload); object graph = dictionary["@graph"]; //serialize the graph object var glist = JsonConvert.SerializeObject(graph); //parse graph in to list of objects JArray graphList = JArray.Parse(glist); int cntr = 0; foreach (var item in graphList) { cntr++; if (cntr == 1) { var main = item.ToString(); //may not use this. Could add a trace method mainEntity = RegistryServices.JsonToDictionary(main); input = JsonConvert.DeserializeObject <InputEntityV3>(main); } else //is this too much of an assumption? { var bn = item.ToString(); bnodes.Add(JsonConvert.DeserializeObject <BNodeV3>(bn)); } } List <string> messages = new List <string>(); bool importSuccessfull = false; EntityServices mgr = new EntityServices(); MappingHelperV3 helper = new MappingHelperV3(2) { entityBlankNodes = bnodes }; helper.entityBlankNodes = bnodes; helper.CurrentEntityCTID = input.CTID; helper.CurrentEntityName = input.Name.ToString(); try { string ctid = input.CTID; string referencedAtId = input.CtdlId; LoggingHelper.DoTrace(5, " name: "+ input.Name.ToString()); LoggingHelper.DoTrace(6, " url: "+ input.SubjectWebpage); LoggingHelper.DoTrace(5, " ctid: "+ input.CTID); LoggingHelper.DoTrace(5, " @Id: "+ input.CtdlId); status.Ctid = ctid; if (status.DoingDownloadOnly) { return(true); } if (!DoesEntityExist(input.CTID, ref output)) { //set the rowid now, so that can be referenced as needed output.RowId = Guid.NewGuid(); LoggingHelper.DoTrace(1, string.Format(thisClassName + ".ImportV3(). Record was NOT found using CTID: '{0}'", input.CTID)); } else { LoggingHelper.DoTrace(1, string.Format(thisClassName + ".ImportV3(). Found record: '{0}' using CTID: '{1}'", input.Name, input.CTID)); } helper.currentBaseObject = output; helper.CurrentOwningAgentUid = output.RowId; output.AgentDomainType = input.Type; output.Name = helper.HandleLanguageMap(input.Name, output, "Name"); output.Description = helper.HandleLanguageMap(input.Description, output, "Description"); //map from idProperty to url output.SubjectWebpage = input.SubjectWebpage; output.CTID = input.CTID; //TBD handling if (!string.IsNullOrWhiteSpace(status.DocumentPublishedBy)) { //output.PublishedByOrganizationCTID = status.DocumentPublishedBy; var porg = OrganizationManager.GetSummaryByCtid(status.DocumentPublishedBy); if (porg != null && porg.Id > 0) { //TODO - store this in a json blob?????????? //output.PublishedByOrganizationId = porg.Id; //output.PublishedByOrganizationName = porg.Name; //this will result in being added to Entity.AgentRelationship output.PublishedBy = new List <Guid>() { porg.RowId }; } else { //if publisher not imported yet, all publishee stuff will be orphaned var entityUid = Guid.NewGuid(); var statusMsg = ""; var resPos = referencedAtId.IndexOf("/resources/"); var swp = referencedAtId.Substring(0, (resPos + "/resources/".Length)) + status.DocumentPublishedBy; int orgId = new OrganizationManager().AddPendingRecord(entityUid, status.DocumentPublishedBy, swp, ref statusMsg); } } else { //may need a check for existing published by to ensure not lost if (output.Id > 0) { if (output.OrganizationRole_Recipient != null && output.OrganizationRole_Recipient.Any()) { var publishedByList = output.OrganizationRole_Recipient.Where(s => s.RoleTypeId == 30).ToList(); if (publishedByList != null && publishedByList.Any()) { var pby = publishedByList[0].ActingAgentUid; output.PublishedBy = new List <Guid>() { publishedByList[0].ActingAgentUid }; } } } } output.CredentialRegistryId = status.EnvelopeId;; output.AlternateNames = helper.MapToTextValueProfile(input.AlternateName, output, "AlternateName"); output.Image = input.Image; output.AgentPurpose = input.AgentPurpose; output.AgentPurposeDescription = helper.HandleLanguageMap(input.AgentPurposeDescription, output, "AgentPurposeDescription"); output.FoundingDate = input.FoundingDate; //output.AvailabilityListing = helper.MapListToString( input.AvailabilityListing ); //future prep output.AvailabilityListings = input.AvailabilityListing; output.MissionAndGoalsStatement = input.MissionAndGoalsStatement; output.MissionAndGoalsStatementDescription = helper.HandleLanguageMap(input.MissionAndGoalsStatementDescription, output, "MissionAndGoalsStatementDescription"); output.Addresses = helper.FormatAvailableAtAddresses(input.Address, ref status); if (output.Addresses != null && output.Addresses.Any()) { output.AddressesJson = JsonConvert.SerializeObject(output.Addresses, MappingHelperV3.GetJsonSettings()); } // if (UtilityManager.GetAppKeyValue("skipOppImportIfNoShortRegions", false)) { if (output.Addresses.Count == 0) { //skip LoggingHelper.DoTrace(2, string.Format(" ***Skipping org# {0}, {1} as it has no addresses and this is a special run.", output.Id, output.Name)); return(true); } else if (output.HasAnyShortRegions == false) { //skip LoggingHelper.DoTrace(2, string.Format(" ***Skipping org# {0}, {1} as it has no addresses with short regions and this is a special run.", output.Id, output.Name)); return(true); } } //agent type, map to enumeration output.AgentType = helper.MapCAOListToEnumermation(input.AgentType); output.TransferValueStatement = input.TransferValueStatement; output.TransferValueStatementDescription = helper.HandleLanguageMap(input.TransferValueStatementDescription, output, "TransferValueStatementDescription"); //Manifests output.ConditionManifestIds = helper.MapEntityReferences(input.HasConditionManifest, CodesManager.ENTITY_TYPE_CONDITION_MANIFEST, CodesManager.ENTITY_TYPE_ORGANIZATION, ref status); output.CostManifestIds = helper.MapEntityReferences(input.HasCostManifest, CodesManager.ENTITY_TYPE_COST_MANIFEST, CodesManager.ENTITY_TYPE_ORGANIZATION, ref status); //hasVerificationService output.VerificationServiceProfiles = helper.MapVerificationServiceProfiles(input.VerificationServiceProfiles, ref status); // output.targetc //other enumerations // serviceType, AgentSectorType output.ServiceType = helper.MapCAOListToEnumermation(input.ServiceType); output.AgentSectorType = helper.MapCAOListToEnumermation(input.AgentSectorType); //Industries //output.Industry = helper.MapCAOListToEnumermation( input.IndustryType ); output.Industries = helper.MapCAOListToCAOProfileList(input.IndustryType); //naics output.Naics = input.Naics; //keywords output.Keyword = helper.MapToTextValueProfile(input.Keyword, output, "Keyword"); //duns, Fein. IpedsID, opeID if (!string.IsNullOrWhiteSpace(input.DUNS)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:duns", TextValue = input.DUNS }); } if (!string.IsNullOrWhiteSpace(input.FEIN)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:fein", TextValue = input.FEIN }); } if (!string.IsNullOrWhiteSpace(input.IpedsID)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:ipedsID", TextValue = input.IpedsID }); } if (!string.IsNullOrWhiteSpace(input.OPEID)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:opeID", TextValue = input.OPEID }); } if (!string.IsNullOrWhiteSpace(input.LEICode)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:leiCode", TextValue = input.LEICode }); } // if (!string.IsNullOrWhiteSpace(input.NcesID)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:ncesID", TextValue = input.NcesID }); } // if (!string.IsNullOrWhiteSpace(input.ISICV4)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:isicV4", TextValue = input.ISICV4 }); } //alternativeidentifier - should just be added to IdentificationCodes //output.AlternativeIdentifier = helper.MapIdentifierValueListToString( input.AlternativeIdentifier ); //output.AlternativeIdentifierList = helper.MapIdentifierValueList( input.AlternativeIdentifier ); //20-10-31 - replacing AlternativeIdentifier with Identifier output.Identifier = helper.MapIdentifierValueList(input.Identifier); if (output.Identifier != null && output.Identifier.Count() > 0) { output.IdentifierJson = JsonConvert.SerializeObject(output.Identifier, MappingHelperV3.GetJsonSettings()); } //email output.Emails = helper.MapToTextValueProfile(input.Email); //contact point //output.ContactPoint = helper.FormatContactPoints( input.ContactPoint, ref status ); //Jurisdiction output.Jurisdiction = helper.MapToJurisdiction(input.Jurisdiction, ref status); //SameAs URI output.SameAs = helper.MapToTextValueProfile(input.SameAs); //Social media output.SocialMediaPages = helper.MapToTextValueProfile(input.SocialMedia); //departments //not sure - MP - want to change how depts, and subs are handled output.ParentOrganization = helper.MapOrganizationReferenceGuids("Organization.ParentOrganization", input.ParentOrganization, ref status); output.Departments = helper.MapOrganizationReferenceGuids("Organization.Department", input.Department, ref status); output.SubOrganizations = helper.MapOrganizationReferenceGuids("Organization.SubOrganization", input.SubOrganization, ref status); //output.OrganizationRole_Subsidiary = helper.FormatOrganizationReferences( input.SubOrganization ); //Process profiles output.AdministrationProcess = helper.FormatProcessProfile(input.AdministrationProcess, ref status); output.MaintenanceProcess = helper.FormatProcessProfile(input.MaintenanceProcess, ref status); output.ComplaintProcess = helper.FormatProcessProfile(input.ComplaintProcess, ref status); output.DevelopmentProcess = helper.FormatProcessProfile(input.DevelopmentProcess, ref status); output.RevocationProcess = helper.FormatProcessProfile(input.RevocationProcess, ref status); output.ReviewProcess = helper.FormatProcessProfile(input.ReviewProcess, ref status); output.AppealProcess = helper.FormatProcessProfile(input.AppealProcess, ref status); //BYs output.AccreditedBy = helper.MapOrganizationReferenceGuids("Organization.AccreditedBy", input.AccreditedBy, ref status); output.ApprovedBy = helper.MapOrganizationReferenceGuids("Organization.ApprovedBy", input.ApprovedBy, ref status); output.RecognizedBy = helper.MapOrganizationReferenceGuids("Organization.RecognizedBy", input.RecognizedBy, ref status); output.RegulatedBy = helper.MapOrganizationReferenceGuids("Organization.RegulatedBy", input.RegulatedBy, ref status); //INs output.AccreditedIn = helper.MapToJurisdiction("Organization.AccreditedIn", input.AccreditedIn, ref status); output.ApprovedIn = helper.MapToJurisdiction("Organization.ApprovedIn", input.ApprovedIn, ref status); output.RecognizedIn = helper.MapToJurisdiction("Organization.RecognizedIn", input.RecognizedIn, ref status); output.RegulatedIn = helper.MapToJurisdiction("Organization.RegulatedIn", input.RegulatedIn, ref status); //Asserts //the entity type is not known output.Accredits = helper.MapEntityReferenceGuids("Organization.Accredits", input.Accredits, 0, ref status); output.Approves = helper.MapEntityReferenceGuids("Organization.Approves", input.Approves, 0, ref status); if (output.Approves.Count > 0) { } output.Offers = helper.MapEntityReferenceGuids("Organization.Offers", input.Offers, 0, ref status); output.Owns = helper.MapEntityReferenceGuids("Organization.Owns", input.Owns, 0, ref status); output.Renews = helper.MapEntityReferenceGuids("Organization.Renews", input.Renews, 0, ref status); output.Revokes = helper.MapEntityReferenceGuids("Organization.Revokes", input.Revokes, 0, ref status); output.Recognizes = helper.MapEntityReferenceGuids("Organization.Recognizes", input.Recognizes, 0, ref status); output.Regulates = helper.MapEntityReferenceGuids("Organization.Regulates", input.Regulates, 0, ref status); // TimeSpan duration = DateTime.Now.Subtract(started); if (duration.TotalSeconds > 5) { LoggingHelper.DoTrace(6, string.Format(" WARNING Mapping Duration: {0:N2} seconds ", duration.TotalSeconds)); } DateTime saveStarted = DateTime.Now; //=== if any messages were encountered treat as warnings for now if (messages.Count > 0) { status.SetMessages(messages, true); } //just in case check if entity added since start if (output.Id == 0) { ThisEntity entity = EntityServices.GetSummaryByCtid(ctid); if (entity != null && entity.Id > 0) { output.Id = entity.Id; output.RowId = entity.RowId; } } importSuccessfull = mgr.Import(output, ref status); saveDuration = DateTime.Now.Subtract(saveStarted); if (saveDuration.TotalSeconds > 5) { LoggingHelper.DoTrace(6, string.Format(" WARNING SAVE Duration: {0:N2} seconds ", saveDuration.TotalSeconds)); } // status.DocumentId = output.Id; status.DetailPageUrl = string.Format("~/organization/{0}", output.Id); status.DocumentRowId = output.RowId; //just in case if (status.HasErrors) { importSuccessfull = false; } //if record was added to db, add to/or set EntityResolution as resolved int ierId = new ImportManager().Import_EntityResolutionAdd(referencedAtId, ctid, CodesManager.ENTITY_TYPE_ORGANIZATION, output.RowId, output.Id, false, ref messages, output.Id > 0); } catch (Exception ex) { LoggingHelper.LogError(ex, string.Format("OrganizationImportV3. Exception encountered in CTID: {0}", input.CTID), false, "Organization Import exception"); } finally { var totalDuration = DateTime.Now.Subtract(started); if (totalDuration.TotalSeconds > 9 && (totalDuration.TotalSeconds - saveDuration.TotalSeconds > 3)) { LoggingHelper.DoTrace(5, string.Format(" WARNING Total Duration: {0:N2} seconds ", totalDuration.TotalSeconds)); } } return(importSuccessfull); }
public bool ImportV3(string payload, string envelopeIdentifier, SaveStatus status) { InputEntityV3 input = new InputEntityV3(); var bnodes = new List <BNodeV3>(); var mainEntity = new Dictionary <string, object>(); Dictionary <string, object> dictionary = RegistryServices.JsonToDictionary(payload); object graph = dictionary["@graph"]; //serialize the graph object var glist = JsonConvert.SerializeObject(graph); //parse graph in to list of objects JArray graphList = JArray.Parse(glist); int cntr = 0; foreach (var item in graphList) { cntr++; if (cntr == 1) { var main = item.ToString(); //may not use this. Could add a trace method mainEntity = RegistryServices.JsonToDictionary(main); input = JsonConvert.DeserializeObject <InputEntityV3>(main); } else //is this too much of an assumption? { var bn = item.ToString(); bnodes.Add(JsonConvert.DeserializeObject <BNodeV3>(bn)); } } List <string> messages = new List <string>(); bool importSuccessfull = false; EntityServices mgr = new EntityServices(); MappingHelperV3 helper = new MappingHelperV3 { entityBlankNodes = bnodes }; string ctid = input.Ctid; string referencedAtId = input.CtdlId; LoggingHelper.DoTrace(5, " name: "+ input.Name.ToString()); LoggingHelper.DoTrace(6, " url: "+ input.SubjectWebpage); LoggingHelper.DoTrace(5, " ctid: "+ input.Ctid); LoggingHelper.DoTrace(5, " @Id: "+ input.CtdlId); status.Ctid = ctid; if (status.DoingDownloadOnly) { return(true); } if (!DoesEntityExist(input.Ctid, ref output)) { //set the rowid now, so that can be referenced as needed output.RowId = Guid.NewGuid(); } helper.currentBaseObject = output; output.AgentDomainType = input.Type; output.Name = helper.HandleLanguageMap(input.Name, output, "Name"); output.Description = helper.HandleLanguageMap(input.Description, output, "Description"); //map from idProperty to url output.SubjectWebpage = input.SubjectWebpage; output.CTID = input.Ctid; output.CredentialRegistryId = envelopeIdentifier; output.AlternateNames = helper.MapToTextValueProfile(input.AlternateName, output, "AlternateName"); output.ImageUrl = input.Image; output.AgentPurpose = input.AgentPurpose; output.AgentPurposeDescription = helper.HandleLanguageMap(input.AgentPurposeDescription, output, "AgentPurposeDescription"); output.FoundingDate = input.FoundingDate; output.AvailabilityListing = helper.MapListToString(input.AvailabilityListing); //future prep output.AvailabilityListings = input.AvailabilityListing; output.MissionAndGoalsStatement = input.MissionAndGoalsStatement; //output.MissionAndGoalsStatementDescription = input.MissionAndGoalsStatementDescription; output.MissionAndGoalsStatementDescription = helper.HandleLanguageMap(input.MissionAndGoalsStatementDescription, output, "MissionAndGoalsStatementDescription"); output.Addresses = helper.FormatAvailableAtAddresses(input.Address, ref status); if (UtilityManager.GetAppKeyValue("skipOppImportIfNoShortRegions", false)) { if (output.Addresses.Count == 0) { //skip LoggingHelper.DoTrace(2, string.Format(" ***Skipping org# {0}, {1} as it has no addresses and this is a special run.", output.Id, output.Name)); return(true); } else if (output.HasAnyShortRegions == false) { //skip LoggingHelper.DoTrace(2, string.Format(" ***Skipping org# {0}, {1} as it has no addresses with short regions and this is a special run.", output.Id, output.Name)); return(true); } } //agent type, map to enumeration output.AgentType = helper.MapCAOListToEnumermation(input.AgentType); //Manifests output.ConditionManifestIds = helper.MapEntityReferences(input.HasConditionManifest, CodesManager.ENTITY_TYPE_CONDITION_MANIFEST, CodesManager.ENTITY_TYPE_ORGANIZATION, ref status); output.CostManifestIds = helper.MapEntityReferences(input.HasCostManifest, CodesManager.ENTITY_TYPE_COST_MANIFEST, CodesManager.ENTITY_TYPE_ORGANIZATION, ref status); //hasVerificationService output.VerificationServiceProfiles = helper.MapVerificationServiceProfiles(input.VerificationServiceProfiles, ref status); // output.targetc //other enumerations // serviceType, AgentSectorType output.ServiceType = helper.MapCAOListToEnumermation(input.ServiceType); output.AgentSectorType = helper.MapCAOListToEnumermation(input.AgentSectorType); //Industries //output.Industry = helper.MapCAOListToEnumermation( input.IndustryType ); output.Industries = helper.MapCAOListToCAOProfileList(input.IndustryType); //naics output.Naics = input.Naics; //keywords output.Keyword = helper.MapToTextValueProfile(input.Keyword, output, "Keyword"); //duns, Fein. IpedsID, opeID if (!string.IsNullOrWhiteSpace(input.DUNS)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:duns", TextValue = input.DUNS }); } if (!string.IsNullOrWhiteSpace(input.FEIN)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:fein", TextValue = input.FEIN }); } if (!string.IsNullOrWhiteSpace(input.IpedsID)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:ipedsID", TextValue = input.IpedsID }); } if (!string.IsNullOrWhiteSpace(input.OPEID)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:opeID", TextValue = input.OPEID }); } if (!string.IsNullOrWhiteSpace(input.LEICode)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:leiCode", TextValue = input.LEICode }); } // if (!string.IsNullOrWhiteSpace(input.NcesID)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:ncesID", TextValue = input.NcesID }); } // if (!string.IsNullOrWhiteSpace(input.ISICV4)) { output.IdentificationCodes.Add(new workIT.Models.ProfileModels.TextValueProfile { CodeSchema = "ceterms:isicV4", TextValue = input.ISICV4 }); } //alternativeidentifier - should just be added to IdentificationCodes output.AlternativeIdentifier = helper.MapIdentifierValueListToString(input.AlternativeIdentifier); output.AlternativeIdentifierList = helper.MapIdentifierValueList(input.AlternativeIdentifier); //email output.Emails = helper.MapToTextValueProfile(input.Email); //contact point //output.ContactPoint = helper.FormatContactPoints( input.ContactPoint, ref status ); //Jurisdiction output.Jurisdiction = helper.MapToJurisdiction(input.Jurisdiction, ref status); //SameAs output.SameAs = helper.MapToTextValueProfile(input.SameAs); //Social media output.SocialMediaPages = helper.MapToTextValueProfile(input.SocialMedia); //departments //not sure - MP - want to change how depts, and subs are handled output.ParentOrganization = helper.MapOrganizationReferenceGuids(input.ParentOrganization, ref status); output.Departments = helper.MapOrganizationReferenceGuids(input.Department, ref status); output.SubOrganizations = helper.MapOrganizationReferenceGuids(input.SubOrganization, ref status); //output.OrganizationRole_Subsidiary = helper.FormatOrganizationReferences( input.SubOrganization ); //Process profiles output.AdministrationProcess = helper.FormatProcessProfile(input.AdministrationProcess, ref status); output.MaintenanceProcess = helper.FormatProcessProfile(input.MaintenanceProcess, ref status); output.ComplaintProcess = helper.FormatProcessProfile(input.ComplaintProcess, ref status); output.DevelopmentProcess = helper.FormatProcessProfile(input.DevelopmentProcess, ref status); output.RevocationProcess = helper.FormatProcessProfile(input.RevocationProcess, ref status); output.ReviewProcess = helper.FormatProcessProfile(input.ReviewProcess, ref status); output.AppealProcess = helper.FormatProcessProfile(input.AppealProcess, ref status); //BYs output.AccreditedBy = helper.MapOrganizationReferenceGuids("Organization.AccreditedBy", input.AccreditedBy, ref status); output.ApprovedBy = helper.MapOrganizationReferenceGuids("Organization.ApprovedBy", input.ApprovedBy, ref status); output.RecognizedBy = helper.MapOrganizationReferenceGuids("Organization.RecognizedBy", input.RecognizedBy, ref status); output.RegulatedBy = helper.MapOrganizationReferenceGuids("Organization.RegulatedBy", input.RegulatedBy, ref status); //INs output.AccreditedIn = helper.MapToJurisdiction(input.AccreditedIn, ref status); output.ApprovedIn = helper.MapToJurisdiction(input.ApprovedIn, ref status); output.RecognizedIn = helper.MapToJurisdiction(input.RecognizedIn, ref status); output.RegulatedIn = helper.MapToJurisdiction(input.RegulatedIn, ref status); //Asserts //the entity type is not known output.Accredits = helper.MapEntityReferenceGuids(input.Accredits, 0, ref status); output.Approves = helper.MapEntityReferenceGuids(input.Approves, 0, ref status); if (output.Approves.Count > 0) { } output.Offers = helper.MapEntityReferenceGuids(input.Offers, 0, ref status); output.Owns = helper.MapEntityReferenceGuids(input.Owns, 0, ref status); output.Renews = helper.MapEntityReferenceGuids(input.Renews, 0, ref status); output.Revokes = helper.MapEntityReferenceGuids(input.Revokes, 0, ref status); output.Recognizes = helper.MapEntityReferenceGuids(input.Recognizes, 0, ref status); output.Regulates = helper.MapEntityReferenceGuids(input.Regulates, 0, ref status); //Ins - defer to later //=== if any messages were encountered treat as warnings for now if (messages.Count > 0) { status.SetMessages(messages, true); } //just in case check if entity added since start if (output.Id == 0) { ThisEntity entity = EntityServices.GetByCtid(ctid); if (entity != null && entity.Id > 0) { output.Id = entity.Id; output.RowId = entity.RowId; } } importSuccessfull = mgr.Import(output, ref status); status.DocumentId = output.Id; status.DetailPageUrl = string.Format("~/organization/{0}", output.Id); status.DocumentRowId = output.RowId; //just in case if (status.HasErrors) { importSuccessfull = false; } //if record was added to db, add to/or set EntityResolution as resolved int ierId = new ImportManager().Import_EntityResolutionAdd(referencedAtId, ctid, CodesManager.ENTITY_TYPE_ORGANIZATION, output.RowId, output.Id, false, ref messages, output.Id > 0); return(importSuccessfull); }
} // public bool Import(string payload, string envelopeIdentifier, SaveStatus status) { LoggingHelper.DoTrace(6, "ImportPathwaySets - entered."); List <string> messages = new List <string>(); bool importSuccessfull = false; EntityServices mgr = new EntityServices(); // InputEntity input = new InputEntity(); var mainEntity = new Dictionary <string, object>(); // Dictionary <string, object> dictionary = RegistryServices.JsonToDictionary(payload); object graph = dictionary["@graph"]; //serialize the graph object var glist = JsonConvert.SerializeObject(graph); //parse graph in to list of objects JArray graphList = JArray.Parse(glist); var bnodes = new List <BNode>(); int cntr = 0; foreach (var item in graphList) { cntr++; if (cntr == 1) { var main = item.ToString(); //may not use this. Could add a trace method mainEntity = RegistryServices.JsonToDictionary(main); input = JsonConvert.DeserializeObject <InputEntity>(main); } else { //may have blank nodes? var bn = item.ToString(); bnodes.Add(JsonConvert.DeserializeObject <BNode>(bn)); var child = item.ToString(); if (child.IndexOf("_:") > -1) { bnodes.Add(JsonConvert.DeserializeObject <BNode>(child)); } else { //unexpected Dictionary <string, object> unexpected = RegistryServices.JsonToDictionary(child); object unexpectedType = unexpected["@type"]; status.AddError("Unexpected document type"); } } } MappingHelperV3 helper = new MappingHelperV3(CodesManager.ENTITY_TYPE_PATHWAY_SET); helper.entityBlankNodes = bnodes; helper.CurrentEntityCTID = input.CTID; helper.CurrentEntityName = input.Name.ToString(); status.EnvelopeId = envelopeIdentifier; try { string ctid = input.CTID; string referencedAtId = input.CtdlId; LoggingHelper.DoTrace(5, " name: "+ input.Name.ToString()); LoggingHelper.DoTrace(6, " url: "+ input.SubjectWebpage); LoggingHelper.DoTrace(5, " ctid: "+ input.CTID); LoggingHelper.DoTrace(6, " @Id: "+ input.CtdlId); status.Ctid = ctid; if (status.DoingDownloadOnly) { return(true); } //add/updating PathwaySet if (!DoesEntityExist(input.CTID, ref output)) { //set the rowid now, so that can be referenced as needed output.RowId = Guid.NewGuid(); } helper.currentBaseObject = output; output.Name = helper.HandleLanguageMap(input.Name, output, "Name"); output.Description = helper.HandleLanguageMap(input.Description, output, "Description"); output.SubjectWebpage = input.SubjectWebpage; output.CTID = input.CTID; //TBD handling of referencing third party publisher if (!string.IsNullOrWhiteSpace(status.DocumentPublishedBy)) { //output.PublishedByOrganizationCTID = status.DocumentPublishedBy; var porg = OrganizationManager.GetSummaryByCtid(status.DocumentPublishedBy); if (porg != null && porg.Id > 0) { //TODO - store this in a json blob?????????? //this will result in being added to Entity.AgentRelationship output.PublishedBy = new List <Guid>() { porg.RowId }; } else { //if publisher not imported yet, all publishee stuff will be orphaned var entityUid = Guid.NewGuid(); var statusMsg = ""; var resPos = referencedAtId.IndexOf("/resources/"); var swp = referencedAtId.Substring(0, (resPos + "/resources/".Length)) + status.DocumentPublishedBy; int orgId = new OrganizationManager().AddPendingRecord(entityUid, status.DocumentPublishedBy, swp, ref statusMsg); } } else { //may need a check for existing published by to ensure not lost if (output.Id > 0) { if (output.OrganizationRole != null && output.OrganizationRole.Any()) { var publishedByList = output.OrganizationRole.Where(s => s.RoleTypeId == 30).ToList(); if (publishedByList != null && publishedByList.Any()) { var pby = publishedByList[0].ActingAgentUid; output.PublishedBy = new List <Guid>() { publishedByList[0].ActingAgentUid }; } } } } //warning this gets set to blank if doing a manual import by ctid output.CredentialRegistryId = envelopeIdentifier; //BYs - do owned and offered first output.OfferedBy = helper.MapOrganizationReferenceGuids("PathwaySet.OfferedBy", input.OfferedBy, ref status); //note need to set output.OwningAgentUid to the first entry output.OwnedBy = helper.MapOrganizationReferenceGuids("PathwaySet.OwnedBy", input.OwnedBy, ref status); if (output.OwnedBy != null && output.OwnedBy.Count > 0) { output.OwningAgentUid = output.OwnedBy[0]; helper.CurrentOwningAgentUid = output.OwnedBy[0]; } else { //add warning? if (output.OfferedBy == null && output.OfferedBy.Count == 0) { status.AddWarning("document doesn't have an owning or offering organization."); } } //HasPathway is required, so must have data output.HasPathwayList = helper.MapEntityReferenceGuids("PathwaySet.HasPathway", input.HasPathway, thisEntityTypeId, ref status); // //need to check if pathways have been imported. Normally would have as pathway is published before the set //=== if any messages were encountered treat as warnings for now if (messages.Count > 0) { status.SetMessages(messages, true); } //adding common import pattern importSuccessfull = mgr.PathwaySetImport(output, ref status); status.DocumentId = output.Id; status.DetailPageUrl = string.Format("~/pathwayset/{0}", output.Id); status.DocumentRowId = output.RowId; //if record was added to db, add to/or set EntityResolution as resolved int ierId = new ImportManager().Import_EntityResolutionAdd(referencedAtId, ctid, CodesManager.ENTITY_TYPE_PATHWAY_SET, output.RowId, output.Id, (output.Id > 0), ref messages, output.Id > 0); //just in case - not sure if applicable, as will want to do components if the pathway exists if (status.HasErrors) { importSuccessfull = false; } // } catch (Exception ex) { LoggingHelper.LogError(ex, string.Format("Exception encountered in envelopeId: {0}", envelopeIdentifier), false, "PathwaySet Import exception"); } return(importSuccessfull); }
} // public bool Import(string payload, string envelopeIdentifier, SaveStatus status) { List <string> messages = new List <string>(); bool importSuccessfull = false; EntityServices mgr = new EntityServices(); // InputEntity input = new InputEntity(); var bnodes = new List <BNode>(); var mainEntity = new Dictionary <string, object>(); // Dictionary <string, object> dictionary = RegistryServices.JsonToDictionary(payload); object graph = dictionary["@graph"]; //serialize the graph object var glist = JsonConvert.SerializeObject(graph); //parse graph in to list of objects JArray graphList = JArray.Parse(glist); int cntr = 0; foreach (var item in graphList) { cntr++; if (cntr == 1) { var main = item.ToString(); //may not use this. Could add a trace method mainEntity = RegistryServices.JsonToDictionary(main); input = JsonConvert.DeserializeObject <InputEntity>(main); } else { var bn = item.ToString(); //20-07-02 need to handle the enhanced bnodes bnodes.Add(JsonConvert.DeserializeObject <BNode>(bn)); } } ///============= process ============================= MappingHelperV3 helper = new MappingHelperV3(3); helper.entityBlankNodes = bnodes; helper.CurrentEntityCTID = input.CTID; helper.CurrentEntityName = input.Name.ToString(); string ctid = input.CTID; status.Ctid = ctid; string referencedAtId = input.CtdlId; LoggingHelper.DoTrace(5, " ctid: "+ ctid); LoggingHelper.DoTrace(5, " @Id: "+ input.CtdlId); LoggingHelper.DoTrace(5, " name: "+ input.Name.ToString()); if (status.DoingDownloadOnly) { return(true); } //add/updating TransferValue if (!DoesEntityExist(input.CTID, ref output, ref status)) { //set the rowid now, so that can be referenced as needed output.RowId = Guid.NewGuid(); } helper.currentBaseObject = output; output.Name = helper.HandleLanguageMap(input.Name, output, "Name"); output.Description = helper.HandleLanguageMap(input.Description, output, "Description"); output.CTID = input.CTID; //TBD handling of referencing third party publisher if (!string.IsNullOrWhiteSpace(status.DocumentPublishedBy)) { //output.PublishedByOrganizationCTID = status.DocumentPublishedBy; var porg = OrganizationManager.GetSummaryByCtid(status.DocumentPublishedBy); if (porg != null && porg.Id > 0) { //TODO - store this in a json blob?????????? //this will result in being added to Entity.AgentRelationship output.PublishedBy = new List <Guid>() { porg.RowId }; } else { //if publisher not imported yet, all publishee stuff will be orphaned var entityUid = Guid.NewGuid(); var statusMsg = ""; var resPos = referencedAtId.IndexOf("/resources/"); var swp = referencedAtId.Substring(0, (resPos + "/resources/".Length)) + status.DocumentPublishedBy; int orgId = new OrganizationManager().AddPendingRecord(entityUid, status.DocumentPublishedBy, swp, ref statusMsg); } } else { //may need a check for existing published by to ensure not lost if (output.Id > 0) { if (output.OrganizationRole != null && output.OrganizationRole.Any()) { var publishedByList = output.OrganizationRole.Where(s => s.RoleTypeId == 30).ToList(); if (publishedByList != null && publishedByList.Any()) { var pby = publishedByList[0].ActingAgentUid; output.PublishedBy = new List <Guid>() { publishedByList[0].ActingAgentUid }; } } } } output.CredentialRegistryId = envelopeIdentifier; output.SubjectWebpage = input.SubjectWebpage; //****owner missing output.OwnedBy = helper.MapOrganizationReferenceGuids("TransferValue.OwnedBy", input.OwnedBy, ref status); if (output.OwnedBy != null && output.OwnedBy.Count > 0) { output.OwningAgentUid = output.OwnedBy[0]; helper.CurrentOwningAgentUid = output.OwnedBy[0]; } // //output.DerivedFromForImport = helper.MapEntityReferenceGuids( "TransferValue.DerivedFrom", input.DerivedFrom, CodesManager.ENTITY_TYPE_TRANSFER_VALUE_PROFILE, ref status ); output.DerivedFromForImport = helper.MapEntityReferences("TransferValue.DerivedFrom", input.DerivedFrom, CodesManager.ENTITY_TYPE_TRANSFER_VALUE_PROFILE, ref status); // output.DevelopmentProcess = helper.FormatProcessProfile(input.DevelopmentProcess, ref status); //TBD - will replace codedNotation //output.CodedNotation = input.CodedNotation; //TBD - store more stuff as Json output.Identifier = helper.MapIdentifierValueList(input.Identifier); if (output.Identifier != null && output.Identifier.Count() > 0) { output.IdentifierJson = JsonConvert.SerializeObject(output.Identifier, MappingHelperV3.GetJsonSettings()); } // //need to handle partial dates output.StartDate = input.StartDate; output.EndDate = input.EndDate; // output.LifecycleStatusType = helper.MapCAOToString(input.LifecycleStatusType); //output.LifecycleStatusType = helper.MapCAOToEnumermation( input.LifecycleStatusType ); //adding common import pattern //new PathwayManager().Save( ef, ref status, true ); // output.TransferValue = helper.HandleValueProfileList(input.TransferValue, "TransferValueProfile.TransferValue"); if (output.TransferValue != null && output.TransferValue.Count() > 0) { output.TransferValueJson = JsonConvert.SerializeObject(output.TransferValue, MappingHelperV3.GetJsonSettings()); } //the class type must be provided for a blank node //TODO - make sure code handles extended properties //20-07-29 - getting duplicates - need to properly check for existing // - actually a common approach is to delete all existing. this suggests NOT creating the pending entities!! // - could be part of exists check output.TransferValueForImport = helper.MapEntityReferenceGuids("TransferValue.TransferValueFor", input.TransferValueFor, 0, ref status); if (output.TransferValueForImport != null && output.TransferValueForImport.Count() > 0) { //TransferValueForImport is a list of guids which could reference a blank node foreach (var item in output.TransferValueForImport) { var tlo = ProfileServices.GetEntityAsTopLevelObject(item); if (tlo != null && tlo.Id > 0) { output.TransferValueFor.Add(tlo); } else { //log error } } //get all object as output.TransferValueForJson = JsonConvert.SerializeObject(output.TransferValueFor, MappingHelperV3.GetJsonSettings()); } output.TransferValueFromImport = helper.MapEntityReferenceGuids("TransferValue.TransferValueFrom", input.TransferValueFrom, 0, ref status); if (output.TransferValueFromImport != null && output.TransferValueFromImport.Count() > 0) { //TransferValueFromImport is a list of guids which could reference a blank node foreach (var item in output.TransferValueFromImport) { var tlo = ProfileServices.GetEntityAsTopLevelObject(item); if (tlo != null && tlo.Id > 0) { output.TransferValueFrom.Add(tlo); } else { //log error } } //get all object as output.TransferValueFromJson = JsonConvert.SerializeObject(output.TransferValueFrom, MappingHelperV3.GetJsonSettings()); } importSuccessfull = new TransferValueServices().Import(output, ref status); // status.DocumentId = output.Id; status.DetailPageUrl = string.Format("~/transfervalue/{0}", output.Id); status.DocumentRowId = output.RowId; //just in case if (status.HasErrors) { importSuccessfull = false; } //if record was added to db, add to/or set EntityResolution as resolved int ierId = new ImportManager().Import_EntityResolutionAdd(referencedAtId, ctid, CodesManager.ENTITY_TYPE_TRANSFER_VALUE_PROFILE, output.RowId, output.Id, false, ref messages, output.Id > 0); // return(importSuccessfull); }