diff --git a/CarbonQueryDatabase_Adapter/CRUD/Read.cs b/CarbonQueryDatabase_Adapter/CRUD/Read.cs index dc03b8f..fb01655 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,9 +76,11 @@ 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."); @@ -99,6 +101,7 @@ 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]; @@ -107,65 +110,13 @@ private List ReadEnvironmentalProductDeclaratio { foreach (CustomObject co in objList) { - EnvironmentalProductDeclaration epdData = Adapter.CarbonQueryDatabase.Convert.ToEnvironmentalProductDeclaration(co); + EnvironmentalProductDeclaration epdData = Adapter.CarbonQueryDatabase.Convert.ToEnvironmentalProductDeclaration(co, config); 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 85f065f..a8f171d 100644 --- a/CarbonQueryDatabase_Adapter/CarbonQueryDatabase_Adapter.csproj +++ b/CarbonQueryDatabase_Adapter/CarbonQueryDatabase_Adapter.csproj @@ -44,6 +44,10 @@ C:\ProgramData\BHoM\Assemblies\BHoM_Adapter.dll False + + False + C:\ProgramData\BHoM\Assemblies\BHoM_Engine.dll + C:\ProgramData\BHoM\Assemblies\Data_oM.dll False @@ -60,6 +64,10 @@ 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 4a5a75a..e7d9452 100644 --- a/CarbonQueryDatabase_Adapter/Convert/ToBHoM.cs +++ b/CarbonQueryDatabase_Adapter/Convert/ToBHoM.cs @@ -20,23 +20,19 @@ * along with this code. If not, see . */ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using System.Text; -using System.Threading.Tasks; -using System.Net; -using System.Net.Http; -using System.ComponentModel; -using BH.oM.Reflection.Attributes; +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 BH.Engine.Reflection; +using System; using System.Collections; -using BH.Engine.Adapters.CarbonQueryDatabase; -using BH.Engine.Units; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; + +using BH.oM.Adapters.CarbonQueryDatabase; namespace BH.Adapter.CarbonQueryDatabase { @@ -46,7 +42,7 @@ public static partial class Convert /**** Public Methods ****/ /***************************************************/ - public static EnvironmentalProductDeclaration ToEnvironmentalProductDeclaration(this CustomObject obj) + public static EnvironmentalProductDeclaration ToEnvironmentalProductDeclaration(this CustomObject obj, CQDConfig config) { int result = 0; @@ -66,81 +62,83 @@ 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; - 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(); + string publisherNames = ""; if (obj.PropertyValue("publishers") != null) { IEnumerable pubs = (IEnumerable)obj.PropertyValue("publishers"); foreach (CustomObject pub in pubs) { - publisherNames.Add(pub.PropertyValue("name").ToString()); + publisherNames += pub.ToString() + " "; } + publisherNames = publisherNames.Trim(); } - List jurisdictionNames = new List(); + string jurisdictionNames = ""; if (obj.PropertyValue("geography") != null) { IEnumerable jurs = (IEnumerable)obj.PropertyValue("geography.country_codes"); foreach (object jur in jurs) { - jurisdictionNames.Add(jur.ToString()); + jurisdictionNames += jur.ToString() + " "; } + jurisdictionNames = jurisdictionNames.Trim(); } - 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); - - 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; + EnvironmentalMetric metric = new EnvironmentalMetric + { + Field = EnvironmentalProductDeclarationField.GlobalWarmingPotential, + Phases = new List() { LifeCycleAssessmentPhases.A1, LifeCycleAssessmentPhases.A2, LifeCycleAssessmentPhases.A3}, + Quantity = gwpVal, + }; - SectorEnvironmentalProductDeclaration epd = new SectorEnvironmentalProductDeclaration + AdditionalEPDData data = new AdditionalEPDData { - QuantityType = quantityType, - 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() ?? "", + 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, }; - return epd; - } + EPDDensity densityFragment = new EPDDensity + { + Density = density, + }; - /***************************************************/ + EnvironmentalProductDeclaration epd = new EnvironmentalProductDeclaration + { + Type = config.Type, + EnvironmentalMetric = new List { metric }, + QuantityType = quantityType, + QuantityTypeValue = 1, + Name = obj.PropertyValue("name")?.ToString() ?? "", + }; + // 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; + } + } + /***************************************************/ public static QuantityType GetQuantityTypeFromString(string unitFrom) { diff --git a/CarbonQueryDatabase_oM/Adapter/CQDConfig.cs b/CarbonQueryDatabase_oM/Adapter/CQDConfig.cs index a194480..8e11ba1 100644 --- a/CarbonQueryDatabase_oM/Adapter/CQDConfig.cs +++ b/CarbonQueryDatabase_oM/Adapter/CQDConfig.cs @@ -23,6 +23,7 @@ using BH.oM.Adapter; using System.Collections.Generic; using System.ComponentModel; +using BH.oM.LifeCycleAssessment; namespace BH.oM.Adapters.CarbonQueryDatabase { @@ -35,6 +36,9 @@ 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 ff46be6..f5c6130 100644 --- a/CarbonQueryDatabase_oM/CarbonQueryDatabase_oM.csproj +++ b/CarbonQueryDatabase_oM/CarbonQueryDatabase_oM.csproj @@ -43,6 +43,11 @@ C:\ProgramData\BHoM\Assemblies\Data_oM.dll False + + False + C:\ProgramData\BHoM\Assemblies\LifeCycleAssessment_oM.dll + False +