forked from FarmMaps/FarmMapsApiClient
		
	added vrapoten and changed some nbs stuff
This commit is contained in:
		@@ -22,8 +22,9 @@ namespace FarmmapsApi.Services
 | 
			
		||||
            _logger = logger;
 | 
			
		||||
            _farmmapsApiService = farmmapsApiService;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public async Task<Item> CreateCropfieldItemAsync(string parentItemCode, string name, int year, string fieldGeomJson)
 | 
			
		||||
 | 
			
		||||
        public async Task<Item> CreateCropfieldItemAsync(string parentItemCode, string name, int year,
 | 
			
		||||
            string fieldGeomJson)
 | 
			
		||||
        {
 | 
			
		||||
            var currentYear = new DateTime(year, 1, 1);
 | 
			
		||||
            var cropfieldItemRequest = new ItemRequest()
 | 
			
		||||
@@ -39,7 +40,7 @@ namespace FarmmapsApi.Services
 | 
			
		||||
 | 
			
		||||
            return await _farmmapsApiService.CreateItemAsync(cropfieldItemRequest);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public async Task<Item> UploadDataAsync(UserRoot root, string itemType, string filePath, string itemName)
 | 
			
		||||
        {
 | 
			
		||||
            var startUpload = DateTime.UtcNow;
 | 
			
		||||
@@ -49,8 +50,8 @@ namespace FarmmapsApi.Services
 | 
			
		||||
            if (result.Progress.Status == UploadStatus.Failed)
 | 
			
		||||
                return null;
 | 
			
		||||
 | 
			
		||||
            return await FindChildItemAsync(root.Code, itemType, itemName, 
 | 
			
		||||
                i => i.Created >= startUpload && 
 | 
			
		||||
            return await FindChildItemAsync(root.Code, itemType, itemName,
 | 
			
		||||
                i => i.Created >= startUpload &&
 | 
			
		||||
                     i.Name.ToLower().Contains(itemName.ToLower()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -77,11 +78,11 @@ namespace FarmmapsApi.Services
 | 
			
		||||
                        SHAPE_PROCESSED_ITEMTYPE);
 | 
			
		||||
 | 
			
		||||
                    items = items.Where(i => i.Created >= startUpload).OrderByDescending(i => i.Created).ToList();
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    if (items.Any())
 | 
			
		||||
                    {
 | 
			
		||||
                        shapeItem = items.First(i => i.Name.Contains(itemName));
 | 
			
		||||
                        if(shapeItem != null)
 | 
			
		||||
                        if (shapeItem != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            source.Cancel();
 | 
			
		||||
                            break;
 | 
			
		||||
@@ -102,7 +103,43 @@ namespace FarmmapsApi.Services
 | 
			
		||||
            return await _farmmapsApiService.GetItemAsync(shapeItem.ParentCode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<ItemTaskStatus> RunAndWaitForTask(Item subjectItem, string taskIdentifier, 
 | 
			
		||||
 | 
			
		||||
        public async Task<Item> GeotiffToShape(Item tiffItem)
 | 
			
		||||
        {
 | 
			
		||||
            var taskmapRequest = new TaskRequest {TaskType = TASKMAP_TASK};
 | 
			
		||||
 | 
			
		||||
            string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(tiffItem.Code, taskmapRequest);
 | 
			
		||||
 | 
			
		||||
            await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) =>
 | 
			
		||||
            {
 | 
			
		||||
                var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(tiffItem.Code, itemTaskCode);
 | 
			
		||||
                _logger.LogInformation($"Waiting on converting geotiff to shape; status: {itemTaskStatus.State}");
 | 
			
		||||
                if (itemTaskStatus.IsFinished)
 | 
			
		||||
                    tokenSource.Cancel();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            var itemTask = await _farmmapsApiService.GetTaskStatusAsync(tiffItem.Code, itemTaskCode);
 | 
			
		||||
            if (itemTask.State == ItemTaskState.Error)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError($"Something went wrong with task execution: {itemTask.Message}");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //the taskmap is a child of the input tiff
 | 
			
		||||
            var itemName = "Taskmap";
 | 
			
		||||
            var taskMapItem = await FindChildItemAsync(tiffItem.Code,
 | 
			
		||||
                SHAPE_PROCESSED_ITEMTYPE, itemName);
 | 
			
		||||
            if (taskMapItem == null)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError("Could not find the shape taskmap as a child item under the input");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return taskMapItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public async Task<ItemTaskStatus> RunAndWaitForTask(Item subjectItem, string taskIdentifier,
 | 
			
		||||
            Action<TaskRequest> configureCallback = null, int retrySeconds = 3)
 | 
			
		||||
        {
 | 
			
		||||
            var taskRequest = new TaskRequest()
 | 
			
		||||
@@ -110,7 +147,7 @@ namespace FarmmapsApi.Services
 | 
			
		||||
                TaskType = taskIdentifier
 | 
			
		||||
            };
 | 
			
		||||
            configureCallback?.Invoke(taskRequest);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            var taskCode = await _farmmapsApiService.QueueTaskAsync(subjectItem.Code, taskRequest);
 | 
			
		||||
 | 
			
		||||
            await PollTask(TimeSpan.FromSeconds(retrySeconds), async (tokenSource) =>
 | 
			
		||||
@@ -120,9 +157,9 @@ namespace FarmmapsApi.Services
 | 
			
		||||
                if (itemTaskStatus.IsFinished)
 | 
			
		||||
                    tokenSource.Cancel();
 | 
			
		||||
            });
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            _logger.LogInformation($"{taskIdentifier} finished");
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return await _farmmapsApiService.GetTaskStatusAsync(subjectItem.Code, taskCode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -158,5 +195,107 @@ namespace FarmmapsApi.Services
 | 
			
		||||
            _logger.LogInformation($"Found {containsName} item");
 | 
			
		||||
            return dataItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<Item> RunBofekTask(Item cropfieldItem)
 | 
			
		||||
        {
 | 
			
		||||
            var taskmapRequest = new TaskRequest {TaskType = BOFEK_TASK};
 | 
			
		||||
 | 
			
		||||
            string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest);
 | 
			
		||||
 | 
			
		||||
            await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) =>
 | 
			
		||||
            {
 | 
			
		||||
                var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
 | 
			
		||||
                _logger.LogInformation($"Waiting on retreiving BOFEK data; status: {itemTaskStatus.State}");
 | 
			
		||||
                if (itemTaskStatus.IsFinished)
 | 
			
		||||
                    tokenSource.Cancel();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
 | 
			
		||||
            if (itemTask.State == ItemTaskState.Error)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError($"Something went wrong with task execution: {itemTask.Message}");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //the BOFEK data is a child of the cropfield
 | 
			
		||||
            var itemName = "bofek";
 | 
			
		||||
            var bofekItem = await FindChildItemAsync(cropfieldItem.Code,
 | 
			
		||||
                SHAPE_PROCESSED_ITEMTYPE, itemName);
 | 
			
		||||
            if (bofekItem == null)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError("Could not find the BOFEK data as a child item under the cropfield");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return bofekItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<Item> RunAhnTask(Item cropfieldItem)
 | 
			
		||||
        {
 | 
			
		||||
            var taskmapRequest = new TaskRequest {TaskType = AHN_TASK};
 | 
			
		||||
 | 
			
		||||
            string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest);
 | 
			
		||||
 | 
			
		||||
            await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) =>
 | 
			
		||||
            {
 | 
			
		||||
                var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
 | 
			
		||||
                _logger.LogInformation($"Waiting on retreiving AHN data; status: {itemTaskStatus.State}");
 | 
			
		||||
                if (itemTaskStatus.IsFinished)
 | 
			
		||||
                    tokenSource.Cancel();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
 | 
			
		||||
            if (itemTask.State == ItemTaskState.Error)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError($"Something went wrong with task execution: {itemTask.Message}");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //the AHN data is a child of the cropfield
 | 
			
		||||
            var itemName = "ahn";
 | 
			
		||||
            var ahnItem = await FindChildItemAsync(cropfieldItem.Code,
 | 
			
		||||
                GEOTIFF_PROCESSED_ITEMTYPE, itemName);
 | 
			
		||||
            if (ahnItem == null)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError("Could not find the AHN data as a child item under the cropfield");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return ahnItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<Item> RunShadowTask(Item cropfieldItem)
 | 
			
		||||
        {
 | 
			
		||||
            var taskmapRequest = new TaskRequest {TaskType = SHADOW_TASK};
 | 
			
		||||
 | 
			
		||||
            string itemTaskCode = await _farmmapsApiService.QueueTaskAsync(cropfieldItem.Code, taskmapRequest);
 | 
			
		||||
 | 
			
		||||
            await PollTask(TimeSpan.FromSeconds(5), async (tokenSource) =>
 | 
			
		||||
            {
 | 
			
		||||
                var itemTaskStatus = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
 | 
			
		||||
                _logger.LogInformation($"Waiting on calculation shadow data; status: {itemTaskStatus.State}");
 | 
			
		||||
                if (itemTaskStatus.IsFinished)
 | 
			
		||||
                    tokenSource.Cancel();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            var itemTask = await _farmmapsApiService.GetTaskStatusAsync(cropfieldItem.Code, itemTaskCode);
 | 
			
		||||
            if (itemTask.State == ItemTaskState.Error)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError($"Something went wrong with task execution: {itemTask.Message}");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //the shadow data is a child of the cropfield
 | 
			
		||||
            var itemName = "shadow";
 | 
			
		||||
            var shadowItem = await FindChildItemAsync(cropfieldItem.Code,
 | 
			
		||||
                GEOTIFF_PROCESSED_ITEMTYPE, itemName);
 | 
			
		||||
            if (shadowItem == null)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.LogError("Could not find the shadow data as a child item under the cropfield");
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return shadowItem;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user