diff --git a/CarbonQueryDatabase_Adapter/CRUD/Read.cs b/CarbonQueryDatabase_Adapter/CRUD/Read.cs index fb01655..dc03b8f 100644 --- a/CarbonQueryDatabase_Adapter/CRUD/Read.cs +++ b/CarbonQueryDatabase_Adapter/CRUD/Read.cs @@ -47,13 +47,13 @@ protected override IEnumerable IRead(Type type, IList ids, ActionCo { dynamic elems = null; CQDConfig config = null; - if (actionConfig is CQDConfig) config = actionConfig as CQDConfig; - + //Choose what to pull out depending on the type. if (type == typeof(EnvironmentalProductDeclaration)) elems = ReadEnvironmentalProductDeclaration(ids as dynamic, config); - + else if (type == typeof(SectorEnvironmentalProductDeclaration)) + elems = ReadSectorEnvironmentalProductDeclaration(ids as dynamic, config); return elems; } /***************************************************/ @@ -76,11 +76,9 @@ private List ReadEnvironmentalProductDeclaratio { epdGetRequest = BH.Engine.Adapters.CarbonQueryDatabase.Create.CarbonQueryDatabaseRequest("epds/" + id, m_bearerToken, config); } - string reqString = epdGetRequest.ToUrlString(); string response = BH.Engine.Adapters.HTTP.Compute.MakeRequest(epdGetRequest); List responseObjs = null; - if (response == null) { BH.Engine.Reflection.Compute.RecordWarning("No response received, check bearer token and connection."); @@ -101,7 +99,6 @@ private List ReadEnvironmentalProductDeclaratio BH.Engine.Reflection.Compute.RecordWarning("Response is not a valid JSON. How'd that happen?"); return null; } - //Convert nested customObject from serialization to list of epdData objects List epdDataFromRequest = new List(); object epdObjects = responseObjs[0]; @@ -110,13 +107,65 @@ private List ReadEnvironmentalProductDeclaratio { foreach (CustomObject co in objList) { - EnvironmentalProductDeclaration epdData = Adapter.CarbonQueryDatabase.Convert.ToEnvironmentalProductDeclaration(co, config); + EnvironmentalProductDeclaration epdData = Adapter.CarbonQueryDatabase.Convert.ToEnvironmentalProductDeclaration(co); epdDataFromRequest.Add(epdData); } } return epdDataFromRequest; } + /***************************************************/ + private List ReadSectorEnvironmentalProductDeclaration(List ids = null, CQDConfig config = null) + { + int count = config.Count; + string name = config.NameLike; + string id = config.Id; + //Create GET Request + GetRequest epdGetRequest; + if (id == null) + { + epdGetRequest = BH.Engine.Adapters.CarbonQueryDatabase.Create.CarbonQueryDatabaseRequest("industry_epds", m_bearerToken, config); + } + else + { + epdGetRequest = BH.Engine.Adapters.CarbonQueryDatabase.Create.CarbonQueryDatabaseRequest("industry_epds" + id, m_bearerToken, config); + } + string response = BH.Engine.Adapters.HTTP.Compute.MakeRequest(epdGetRequest); + List responseObjs = null; + if (response == null) + { + BH.Engine.Reflection.Compute.RecordWarning("No response received, check bearer token and connection."); + return null; + } + //Check if the response is a valid json + else if (response.StartsWith("{")) + { + response = "[" + response + "]"; + responseObjs = new List() { Engine.Serialiser.Convert.FromJsonArray(response) }; + } + else if (response.StartsWith("[")) + { + responseObjs = new List() { Engine.Serialiser.Convert.FromJsonArray(response) }; + } + else + { + BH.Engine.Reflection.Compute.RecordWarning("Response is not a valid JSON. How'd that happen?"); + return null; + } + //Convert nested customObject from serialization to list of epdData objects + List epdDataFromRequest = new List(); + object epdObjects = responseObjs[0]; + IEnumerable objList = epdObjects as IEnumerable; + if (objList != null) + { + foreach (CustomObject co in objList) + { + SectorEnvironmentalProductDeclaration epdData = Adapter.CarbonQueryDatabase.Convert.ToSectorEnvironmentalProductDeclaration(co); + epdDataFromRequest.Add(epdData); + } + } + return epdDataFromRequest; + } /***************************************************/ } } \ No newline at end of file diff --git a/CarbonQueryDatabase_Adapter/CarbonQueryDatabase_Adapter.csproj b/CarbonQueryDatabase_Adapter/CarbonQueryDatabase_Adapter.csproj index a8f171d..85f065f 100644 --- a/CarbonQueryDatabase_Adapter/CarbonQueryDatabase_Adapter.csproj +++ b/CarbonQueryDatabase_Adapter/CarbonQueryDatabase_Adapter.csproj @@ -44,10 +44,6 @@ C:\ProgramData\BHoM\Assemblies\BHoM_Adapter.dll False - - False - C:\ProgramData\BHoM\Assemblies\BHoM_Engine.dll - C:\ProgramData\BHoM\Assemblies\Data_oM.dll False @@ -64,10 +60,6 @@ C:\ProgramData\BHoM\Assemblies\LifeCycleAssessment_oM.dll False - - False - C:\ProgramData\BHoM\Assemblies\Physical_oM.dll - C:\ProgramData\BHoM\Assemblies\Reflection_Engine.dll False diff --git a/CarbonQueryDatabase_Adapter/Convert/ToBHoM.cs b/CarbonQueryDatabase_Adapter/Convert/ToBHoM.cs index e7d9452..4a5a75a 100644 --- a/CarbonQueryDatabase_Adapter/Convert/ToBHoM.cs +++ b/CarbonQueryDatabase_Adapter/Convert/ToBHoM.cs @@ -20,19 +20,23 @@ * along with this code. If not, see . */ -using BH.Engine.Reflection; -using BH.Engine.Units; -using BH.oM.Base; -using BH.oM.LifeCycleAssessment; -using BH.oM.LifeCycleAssessment.Fragments; -using BH.oM.LifeCycleAssessment.MaterialFragments; using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; - -using BH.oM.Adapters.CarbonQueryDatabase; +using System.Text; +using System.Threading.Tasks; +using System.Net; +using System.Net.Http; +using System.ComponentModel; +using BH.oM.Reflection.Attributes; +using BH.oM.Base; +using BH.oM.LifeCycleAssessment; +using BH.oM.LifeCycleAssessment.MaterialFragments; +using BH.Engine.Reflection; +using System.Collections; +using BH.Engine.Adapters.CarbonQueryDatabase; +using BH.Engine.Units; namespace BH.Adapter.CarbonQueryDatabase { @@ -42,7 +46,7 @@ public static partial class Convert /**** Public Methods ****/ /***************************************************/ - public static EnvironmentalProductDeclaration ToEnvironmentalProductDeclaration(this CustomObject obj, CQDConfig config) + public static EnvironmentalProductDeclaration ToEnvironmentalProductDeclaration(this CustomObject obj) { int result = 0; @@ -62,84 +66,82 @@ public static EnvironmentalProductDeclaration ToEnvironmentalProductDeclaration( double density = ConvertToSI(densityVal, densityUnits); string gwp = obj.PropertyValue("gwp")?.ToString() ?? ""; double gwpVal = (gwp == "") ? double.NaN : System.Convert.ToDouble(gwp.Substring(0, gwp.IndexOf(" "))) * epdUnitMult; - int lifespan = (int)(obj.PropertyValue("reference_service_life") ?? 0); - int referenceYear = int.TryParse(obj.PropertyValue("date_of_issue")?.ToString() ?? "", out result) ? result : 0; - string publisherNames = ""; + EnvironmentalProductDeclaration epd = new EnvironmentalProductDeclaration + { + QuantityType = QuantityType.Volume, + Id = obj.PropertyValue("id")?.ToString() ?? "", + Name = obj.PropertyValue("name")?.ToString() ?? "", + Manufacturer = obj.PropertyValue("manufacturer.name")?.ToString() ?? "", + Plant = obj.PropertyValue("plant.name")?.ToString() ?? "", + PostalCode = int.TryParse(obj.PropertyValue("plant.postal_code")?.ToString() ?? "", out result) ? result : 0, + Density = density, + GlobalWarmingPotential = gwpVal, + BiogenicCarbon = obj.PropertyValue("biogenic_embodied_carbon") != null ? System.Convert.ToDouble(obj.PropertyValue("biogenic_embodied_carbon_z")) * epdUnitMult : double.NaN, + Description = obj.PropertyValue("description")?.ToString() ?? "", + IndustryStandards = standards != null ? standards.ToList() : new List(), + }; + + return epd; + } + + /***************************************************/ + + public static SectorEnvironmentalProductDeclaration ToSectorEnvironmentalProductDeclaration(this CustomObject obj) + { + List publisherNames = new List(); if (obj.PropertyValue("publishers") != null) { IEnumerable pubs = (IEnumerable)obj.PropertyValue("publishers"); foreach (CustomObject pub in pubs) { - publisherNames += pub.ToString() + " "; + publisherNames.Add(pub.PropertyValue("name").ToString()); } - publisherNames = publisherNames.Trim(); } - string jurisdictionNames = ""; + List jurisdictionNames = new List(); if (obj.PropertyValue("geography") != null) { IEnumerable jurs = (IEnumerable)obj.PropertyValue("geography.country_codes"); foreach (object jur in jurs) { - jurisdictionNames += jur.ToString() + " "; + jurisdictionNames.Add(jur.ToString()); } - jurisdictionNames = jurisdictionNames.Trim(); } - EnvironmentalMetric metric = new EnvironmentalMetric - { - Field = EnvironmentalProductDeclarationField.GlobalWarmingPotential, - Phases = new List() { LifeCycleAssessmentPhases.A1, LifeCycleAssessmentPhases.A2, LifeCycleAssessmentPhases.A3}, - Quantity = gwpVal, - }; - - AdditionalEPDData data = new AdditionalEPDData - { - Description = obj.PropertyValue("description")?.ToString() ?? "", - EndOfLifeTreatment = "", - Id = obj.PropertyValue("id")?.ToString() ?? "", - IndustryStandards = standards != null ? standards.ToList() : new List(), - Jurisdiction = jurisdictionNames, - LifeSpan = lifespan, - Manufacturer = obj.PropertyValue("manufacturer.name")?.ToString() ?? "", - PlantName = obj.PropertyValue("plant.name")?.ToString() ?? "", - PostalCode = int.TryParse(obj.PropertyValue("plant.postal_code")?.ToString() ?? "", out result) ? result : 0, - Publisher = publisherNames, - ReferenceYear = referenceYear, - }; + string declaredUnit = obj.PropertyValue("declared_unit")?.ToString() ?? ""; + string epdUnit = GetUnitsFromString(declaredUnit); + double declaredVal = GetValFromString(declaredUnit); + QuantityType quantityType = GetQuantityTypeFromString(epdUnit); + double epdUnitMult = ConvertToSI(1/declaredVal, epdUnit); - EPDDensity densityFragment = new EPDDensity - { - Density = density, - }; + string densityString = obj.PropertyValue("density_max")?.ToString() ?? ""; + double densityVal = GetValFromString(densityString); + string densityUnits = GetUnitsFromString(densityString); + double density = ConvertToSI(densityVal, densityUnits); + string gwp = obj.PropertyValue("gwp")?.ToString() ?? ""; + double gwpVal = (gwp == "") ? double.NaN : System.Convert.ToDouble(gwp.Substring(0, gwp.IndexOf(" "))) * epdUnitMult; - EnvironmentalProductDeclaration epd = new EnvironmentalProductDeclaration + SectorEnvironmentalProductDeclaration epd = new SectorEnvironmentalProductDeclaration { - Type = config.Type, - EnvironmentalMetric = new List { metric }, QuantityType = quantityType, - QuantityTypeValue = 1, + Id = obj.PropertyValue("id")?.ToString() ?? "", Name = obj.PropertyValue("name")?.ToString() ?? "", + Density = density, + GlobalWarmingPotential = gwpVal, + BiogenicCarbon = obj.PropertyValue("biogenic_embodied_carbon") != null ? System.Convert.ToDouble(obj.PropertyValue("biogenic_embodied_carbon_z")) * epdUnitMult : double.NaN, + Description = obj.PropertyValue("description")?.ToString() ?? "", + Jurisdiction = jurisdictionNames, + Publisher = publisherNames, }; - // Add Additional Data Fragment - EnvironmentalProductDeclaration epdData = (EnvironmentalProductDeclaration)Engine.Base.Modify.AddFragment(epd, data); - - // Add Density Fragment - if (density != 0) - { - EnvironmentalProductDeclaration epdDataDensity = (EnvironmentalProductDeclaration)Engine.Base.Modify.AddFragment(epdData, densityFragment); - return epdDataDensity; - } - else - { - return epdData; - } + return epd; } /***************************************************/ + + public static QuantityType GetQuantityTypeFromString(string unitFrom) { switch(unitFrom) diff --git a/CarbonQueryDatabase_oM/Adapter/CQDConfig.cs b/CarbonQueryDatabase_oM/Adapter/CQDConfig.cs index 8e11ba1..a194480 100644 --- a/CarbonQueryDatabase_oM/Adapter/CQDConfig.cs +++ b/CarbonQueryDatabase_oM/Adapter/CQDConfig.cs @@ -23,7 +23,6 @@ using BH.oM.Adapter; using System.Collections.Generic; using System.ComponentModel; -using BH.oM.LifeCycleAssessment; namespace BH.oM.Adapters.CarbonQueryDatabase { @@ -36,9 +35,6 @@ public class CQDConfig : ActionConfig /**** Public Properties ****/ /***************************************************/ - [Description("The Type of Environmental Product Declaration")] - public virtual EPDType Type { get; set; } = EPDType.Product; - [Description("Specifies ID to search and return objects for in CarbonQueryDatabase. If this is specified it supersedes other input parameters.")] public virtual string Id { get; set; } = null; diff --git a/CarbonQueryDatabase_oM/CarbonQueryDatabase_oM.csproj b/CarbonQueryDatabase_oM/CarbonQueryDatabase_oM.csproj index f5c6130..ff46be6 100644 --- a/CarbonQueryDatabase_oM/CarbonQueryDatabase_oM.csproj +++ b/CarbonQueryDatabase_oM/CarbonQueryDatabase_oM.csproj @@ -43,11 +43,6 @@ C:\ProgramData\BHoM\Assemblies\Data_oM.dll False - - False - C:\ProgramData\BHoM\Assemblies\LifeCycleAssessment_oM.dll - False -