public JSONDataObject(int _id, string _doi, string _display_title, string _version, lookup _object_class, lookup _object_type, int?_publication_year, lookup _managing_organisation, string _lang_code, lookup _access_type, object_access _access_details, int?_eosc_category, string _provenance_string) { file_type = "data_object"; id = _id; doi = _doi; display_title = _display_title; version = _version; object_class = _object_class; object_type = _object_type; publication_year = _publication_year; managing_organisation = _managing_organisation; lang_code = _lang_code; access_type = _access_type; access_details = _access_details; eosc_category = _eosc_category; provenance_string = _provenance_string; }
public JSONDataObject CreateObject(int id) { // Re-initialise these compound properties. object_class = null; object_type = null; access_type = null; managing_organisation = null; access_details = null; ds_record_keys = null; ds_deident_level = null; ds_consent = null; object_titles = null; object_contributors = null; object_dates = null; object_instances = null; object_topics = null; object_identifiers = null; object_descriptions = null; object_rights = null; object_relationships = null; linked_studies = null; // Get the singleton data object properties from DB ob = repo.FetchDbDataObject(id); // First check there is at least one linked study // (several hundred of the journal articles are not linked). linked_studies = new List <int>(repo.FetchLinkedStudies(id)); if (linked_studies.Count == 0) { // May occur in a few hundred cases, therefore // if it does need to investigate further !!!!!!! // Possible (minor) error in data object linkage with journal articles. logging_repo.LogError("object " + ob.id + " does not appear to be linked to studies"); return(null); } // Instantiate the top level lookup types object_class = new lookup(ob.object_class_id, ob.object_class); object_type = new lookup(ob.object_type_id, ob.object_type); if (ob.managing_org != null) { managing_organisation = new lookup(ob.managing_org_id, ob.managing_org); } if (ob.access_type_id != null) { access_type = new lookup(ob.access_type_id, ob.access_type); } if (ob.access_details != null || ob.access_details_url != null) { access_details = new object_access(ob.access_details, ob.access_details_url, ob.url_last_checked); } // Instantiate data object with those details JSONDataObject dobj = new JSONDataObject(ob.id, ob.doi, ob.display_title, ob.version, object_class, object_type, ob.publication_year, managing_organisation, ob.lang_code, access_type, access_details, ob.eosc_category, ob.provenance_string); // Get dataset properties, if there are any... var db_ds = repo.FetchDbDatasetProperties(id); if (db_ds != null) { ds_record_keys = new record_keys(db_ds.record_keys_type_id, db_ds.record_keys_type, db_ds.record_keys_details); ds_deident_level = new deidentification(db_ds.deident_type_id, db_ds.deident_type, db_ds.deident_direct, db_ds.deident_hipaa, db_ds.deident_dates, db_ds.deident_nonarr, db_ds.deident_kanon, db_ds.deident_details); ds_consent = new consent(db_ds.consent_type_id, db_ds.consent_type, db_ds.consent_noncommercial, db_ds.consent_geog_restrict, db_ds.consent_research_type, db_ds.consent_genetic_only, db_ds.consent_no_methods, db_ds.consent_details); dobj.dataset_record_keys = ds_record_keys; dobj.dataset_deident_level = ds_deident_level; dobj.dataset_consent = ds_consent; } // Get object instances. var db_object_instances = new List <DBObjectInstance>(repo.FetchObjectInstances(id)); if (db_object_instances.Count > 0) { object_instances = new List <object_instance>(); foreach (DBObjectInstance i in db_object_instances) { lookup repo_org = null; access_details access = null; resource_details resource = null; if (i.repository_org != null) { repo_org = new lookup(i.repository_org_id, i.repository_org); } if (i.url != null || i.url_accessible != null) { access = new access_details(i.url, i.url_accessible, i.url_last_checked); } if (i.resource_type_id != null || i.comments != null) { resource = new resource_details(i.resource_type_id, i.resource_type, i.resource_size, i.resource_size_units, i.comments); } object_instances.Add(new object_instance(i.id, repo_org, access, resource)); } } // Get object titles. var db_object_titles = new List <DBObjectTitle>(repo.FetchObjectTitles(id)); if (db_object_titles.Count > 0) { object_titles = new List <object_title>(); foreach (DBObjectTitle t in db_object_titles) { object_titles.Add(new object_title(t.id, new lookup(t.title_type_id, t.title_type), t.title_text, t.lang_code, t.comments)); } } // Get object dates. var db_object_dates = new List <DBObjectDate>(repo.FetchObjectDates(id)); if (db_object_dates.Count > 0) { object_dates = new List <object_date>(); sdate_as_ints start_date = null; edate_as_ints end_date = null; foreach (DBObjectDate d in db_object_dates) { if (d.start_year != null || d.start_month != null || d.start_day != null) { start_date = new sdate_as_ints(d.start_year, d.start_month, d.start_day); } if (d.end_year != null || d.end_month != null || d.end_day != null) { end_date = new edate_as_ints(d.end_year, d.end_month, d.end_day); } object_dates.Add(new object_date(d.id, new lookup(d.date_type_id, d.date_type), d.is_date_range, d.date_as_string, start_date, end_date, d.comments)); } } // Get object contributors - var db_object_contributors = new List <DBObjectContributor>(repo.FetchObjectContributors(id, ob.add_study_contribs)); if (db_object_contributors.Count > 0) { individual person; lookup org; object_contributors = new List <object_contributor>(); foreach (DBObjectContributor c in db_object_contributors) { person = null; org = null; if (c.is_individual) { person = new individual(c.person_family_name, c.person_given_name, c.person_full_name, c.person_identifier, c.affiliation); } else { org = new lookup(c.organisation_id, c.organisation_name); } object_contributors.Add(new object_contributor(c.id, new lookup(c.contrib_type_id, c.contrib_type), c.is_individual, person, org)); } } // Get object topics - // source will depend on boolean flag, itself dependent on the type of object. var db_object_topics = new List <DBObjectTopic>(repo.FetchObjectTopics(id, ob.add_study_topics)); if (db_object_topics.Count > 0) { object_topics = new List <object_topic>(); foreach (DBObjectTopic t in db_object_topics) { object_topics.Add(new object_topic(t.id, new lookup(t.topic_type_id, t.topic_type), t.mesh_coded, t.topic_code, t.topic_value, t.topic_qualcode, t.topic_qualvalue, t.original_value)); } } // Get object identifiers. var db_object_identifiers = new List <DBObjectIdentifier>(repo.FetchObjectIdentifiers(id)); if (db_object_identifiers.Count > 0) { object_identifiers = new List <object_identifier>(); foreach (DBObjectIdentifier i in db_object_identifiers) { object_identifiers.Add(new object_identifier(i.id, i.identifier_value, new lookup(i.identifier_type_id, i.identifier_type), new lookup(i.identifier_org_id, i.identifier_org), i.identifier_date)); } } // Get object descriptions. var db_object_descriptions = new List <DBObjectDescription>(repo.FetchObjectDescriptions(id)); if (db_object_descriptions.Count > 0) { object_descriptions = new List <object_description>(); foreach (DBObjectDescription i in db_object_descriptions) { object_descriptions.Add(new object_description(i.id, new lookup(i.description_type_id, i.description_type), i.label, i.description_text, i.lang_code, i.contains_html)); } } // Get object rights. var db_object_rights = new List <DBObjectRight>(repo.FetchObjectRights(id)); if (db_object_rights.Count > 0) { object_rights = new List <object_right>(); foreach (DBObjectRight i in db_object_rights) { object_rights.Add(new object_right(i.id, i.rights_name, i.rights_uri, i.comments)); } } // Get object relationships. var db_object_relationships = new List <DBObjectRelationship>(repo.FetchObjectRelationships(id)); if (db_object_relationships.Count > 0) { object_relationships = new List <object_relationship>(); foreach (DBObjectRelationship i in db_object_relationships) { object_relationships.Add(new object_relationship(i.id, new lookup(i.relationship_type_id, i.relationship_type), i.target_object_id)); } } // Construct the final data object by setting the composite // and repreated properties to the classess and List<>s created above. dobj.dataset_consent = ds_consent; dobj.dataset_record_keys = ds_record_keys; dobj.dataset_deident_level = ds_deident_level; dobj.object_identifiers = object_identifiers; dobj.object_titles = object_titles; dobj.object_contributors = object_contributors; dobj.object_dates = object_dates; dobj.object_instances = object_instances; dobj.object_descriptions = object_descriptions; dobj.object_rights = object_rights; dobj.object_topics = object_topics; dobj.object_relationships = object_relationships; dobj.linked_studies = linked_studies; return(dobj); }