Skip to content

Commit 9f7b295

Browse files
authored
Allow using BatchRequest for Pulls (#90)
2 parents f4800d5 + 71eb5ba commit 9f7b295

File tree

2 files changed

+60
-14
lines changed

2 files changed

+60
-14
lines changed

Excel_Adapter/CRUD/Read/Read.cs

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@
2626
using BH.oM.Adapter;
2727
using BH.oM.Adapters.Excel;
2828
using BH.oM.Base;
29-
using BH.oM.Data.Collections;
3029
using BH.oM.Data.Requests;
3130
using ClosedXML.Excel;
3231
using System;
3332
using System.Collections.Generic;
34-
using System.Data;
3533
using System.IO;
3634
using System.Linq;
3735

@@ -68,6 +66,16 @@ protected override IEnumerable<IBHoMObject> Read(IRequest request, ActionConfig
6866
return new List<IBHoMObject>();
6967
}
7068

69+
return ReadExcel(workbook, request, actionConfig);
70+
}
71+
72+
73+
/***************************************************/
74+
/**** Private Methods ****/
75+
/***************************************************/
76+
77+
private List<IBHoMObject> ReadExcel(XLWorkbook workbook, IRequest request, ActionConfig actionConfig)
78+
{
7179
if (request is ObjectRequest)
7280
{
7381
List<TableRow> result = ReadExcel(workbook, ((ObjectRequest)request).Worksheet, ((ObjectRequest)request).Range, true).OfType<TableRow>().ToList();
@@ -81,25 +89,24 @@ protected override IEnumerable<IBHoMObject> Read(IRequest request, ActionConfig
8189
return ReadExcel(workbook, ((CellContentsRequest)request).Worksheet, ((CellContentsRequest)request).Range, false);
8290
else if (request is WorksheetsRequest)
8391
return ReadExcel(workbook, ((WorksheetsRequest)request));
92+
else if (request is BatchRequest batchRequest)
93+
return batchRequest.Requests.Select(x => new ResultItem { Objects = ReadExcel(workbook, x, actionConfig), OriginalRequest = x }).ToList<IBHoMObject>();
8494
else
8595
{
8696
BH.Engine.Base.Compute.RecordError($"Requests of type {request?.GetType()} are not supported by the Excel adapter.");
8797
return new List<IBHoMObject>();
8898
}
8999
}
90100

91-
92-
/***************************************************/
93-
/**** Private Methods ****/
94101
/***************************************************/
95102

96103
private List<IBHoMObject> ReadExcel(XLWorkbook workbook, WorksheetsRequest request)
97104
{
98-
var worksheets = Worksheets(workbook, null);
105+
IEnumerable<IXLWorksheet> worksheets = Worksheets(workbook, null);
99106

100107
List<BH.oM.Adapters.Excel.Worksheet> sheets = worksheets.Select(x =>
101108
{
102-
var sheet = new BH.oM.Adapters.Excel.Worksheet();
109+
Worksheet sheet = new BH.oM.Adapters.Excel.Worksheet();
103110
sheet.Name = x.Name;
104111
return sheet;
105112
}).ToList();
@@ -120,13 +127,13 @@ private List<IBHoMObject> ReadExcel(XLWorkbook workbook, string worksheet, CellR
120127
if (string.IsNullOrEmpty(range.From.Column))
121128
range.From.Column = "A";
122129

123-
if(range.From.Row == -1)
130+
if (range.From.Row == -1)
124131
range.From.Row = 1;
125132

126133
if (string.IsNullOrEmpty(range.To.Column))
127134
range.To.Column = MaximumColumnName(workbook, worksheet);
128135

129-
if(range.To.Row == -1)
136+
if (range.To.Row == -1)
130137
range.To.Row = MaximumRowNumber(workbook, worksheet);
131138

132139
rangeString = range.ToExcel();
@@ -255,7 +262,7 @@ private List<IBHoMObject> CreateCustomObjects(List<TableRow> rows)
255262
CustomObject result = new CustomObject();
256263

257264
Dictionary<string, object> item = new Dictionary<string, object>();
258-
for (int i = 0; i < Math.Min((int)keys.Count(), (int)row.Content?.Count()); i ++)
265+
for (int i = 0; i < Math.Min((int)keys.Count(), (int)row.Content?.Count()); i++)
259266
{
260267
if (customProperties.Contains(keys[i]))
261268
result.SetPropertyValue(keys[i], row.Content[i]);
@@ -273,19 +280,19 @@ private List<IBHoMObject> CreateCustomObjects(List<TableRow> rows)
273280

274281
private string MaximumColumnName(IXLWorkbook workbook, string worksheet)
275282
{
276-
var sheet = Worksheets(workbook, worksheet).FirstOrDefault();
283+
IXLWorksheet sheet = Worksheets(workbook, worksheet).FirstOrDefault();
277284
if (sheet == null)
278285
return "XFD"; //Maximum Excel Column name
279286

280-
var columnNumber = sheet.LastColumnUsed().ColumnNumber();
281-
return ConvertToColumnName(columnNumber);
287+
int columnNumber = sheet.LastColumnUsed().ColumnNumber();
288+
return ConvertToColumnName(columnNumber);
282289
}
283290

284291
/***************************************************/
285292

286293
private int MaximumRowNumber(IXLWorkbook workbook, string worksheet)
287294
{
288-
var sheet = Worksheets(workbook, worksheet).FirstOrDefault();
295+
IXLWorksheet sheet = Worksheets(workbook, worksheet).FirstOrDefault();
289296
if (sheet == null)
290297
return 1048576; //Maximum Excel Row number
291298

Excel_oM/ResultItem.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* This file is part of the Buildings and Habitats object Model (BHoM)
3+
* Copyright (c) 2015 - 2025, the respective contributors. All rights reserved.
4+
*
5+
* Each contributor holds copyright over their respective contributions.
6+
* The project versioning (Git) records all such contribution source information.
7+
*
8+
*
9+
* The BHoM is free software: you can redistribute it and/or modify
10+
* it under the terms of the GNU Lesser General Public License as published by
11+
* the Free Software Foundation, either version 3.0 of the License, or
12+
* (at your option) any later version.
13+
*
14+
* The BHoM is distributed in the hope that it will be useful,
15+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
* GNU Lesser General Public License for more details.
18+
*
19+
* You should have received a copy of the GNU Lesser General Public License
20+
* along with this code. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
21+
*/
22+
23+
using BH.oM.Base;
24+
using BH.oM.Base.Attributes;
25+
using BH.oM.Data.Requests;
26+
using System.Collections.Generic;
27+
28+
namespace BH.oM.Adapters.Excel
29+
{
30+
public class ResultItem : BHoMObject
31+
{
32+
public virtual List<IBHoMObject> Objects { get; set; } = new List<IBHoMObject>();
33+
34+
public virtual IRequest OriginalRequest { get; set; } = null;
35+
}
36+
}
37+
38+
39+

0 commit comments

Comments
 (0)