Esempio n. 1
0
        public static void AppendToStandardTableData(StandardTableDataCM dest, StandardTableDataCM source)
        {
            if (dest == null || dest.Table == null || dest.Table.Count == 0)
            {
                return;
            }

            if (source == null || source.Table == null || source.Table.Count == 0)
            {
                return;
            }

            var columnSet = new HashSet <string>(dest.GetHeaderRow().Row.Select(x => x.Cell.Key));

            for (var i = 1; i < source.Table.Count; ++i)
            {
                var row = new TableRowDTO();

                foreach (var cell in source.Table[i].Row)
                {
                    if (!columnSet.Contains(cell.Cell.Key))
                    {
                        continue;
                    }

                    row.Row.Add(
                        new TableCellDTO()
                    {
                        Cell = cell.Cell.Clone()
                    });
                }

                dest.Table.Add(row);
            }
        }
Esempio n. 2
0
        public void GetDataListSize_ForTableWithHeaders_ReturnsTheActualNumberOfRows()
        {
            var table = new StandardTableDataCM {
                FirstRowHeaders = true, Table = new List <TableRowDTO> {
                    new TableRowDTO(), new TableRowDTO()
                }
            };

            Assert.AreEqual(1, Loop_v1.GetDataListSize(Crate.FromContent(string.Empty, table)), $"{nameof(Loop_v1.GetDataListSize)} should return the count of data rows from table with headers");
        }
Esempio n. 3
0
        public void GetDataListSize_ForTableWithoutHeaders_ReturnsTableSize()
        {
            var table = new StandardTableDataCM {
                FirstRowHeaders = false, Table = new List <TableRowDTO> {
                    new TableRowDTO(), new TableRowDTO()
                }
            };

            Assert.AreEqual(2, Loop_v1.GetDataListSize(Crate.FromContent(string.Empty, table)), $"{nameof(Loop_v1.GetDataListSize)} should return the count of all rows from table without headers");
        }
Esempio n. 4
0
 private HashSet <string> GetDataProperties(StandardTableDataCM data)
 {
     if (!data.HasDataRows || data.Table[0].Row.Count == 0)
     {
         return(null);
     }
     if (string.IsNullOrWhiteSpace(SpecifiedDataProperties))
     {
         return(null);
     }
     return(new HashSet <string>(SpecifiedDataProperties.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()), StringComparer.InvariantCultureIgnoreCase));
 }
Esempio n. 5
0
        private static void WriteTableDataToWorksheet(ExcelWorksheet workSheet, StandardTableDataCM tableCm)
        {
            var table = tableCm.Table;

            for (var row = 0; row < table.Count; row++)
            {
                var currentRow = table[row].Row;
                for (var col = 0; col < currentRow.Count; col++)
                {
                    //CellRange enumerate rows and columns from index 1
                    workSheet.Cells[row + 1, col + 1].Value = currentRow[col].Cell.Value;
                }
            }
        }
Esempio n. 6
0
        public static byte[] CreateExcelFile(StandardTableDataCM tableCM, string sheetName)
        {
            var dataTable = ToDataTable(tableCM);

            dataTable.TableName = sheetName;

            var writer = new ExcelWriter();

            using (var stream = new MemoryStream())
            {
                writer.WriteFile(stream, dataTable);
                return(stream.ToArray());
            }
        }
Esempio n. 7
0
        public override Task Run()
        {
            var table = new StandardTableDataCM();

            for (int i = 0; i < int.Parse(ActivityUI.NumberOfRows.Value); i++)
            {
                TableRowDTO row;
                table.Table.Add(row = new TableRowDTO());
                for (int j = 0; j < 5; j++)
                {
                    row.Row.Add(new TableCellDTO
                    {
                        Cell = new KeyValueDTO($"Column {j}", $"Cell [{i}, {j}]")
                    });
                }
            }
            Payload.Add(Crate.FromContent(TableCrateLabel, table));
            return(Task.FromResult(0));
        }
Esempio n. 8
0
        private KeyValueDTO ExtractFieldFromTable(StandardTableDataCM table, DropDownList chosenCell, DropDownList position)
        {
            var field = position.Value == ImmediatelyBelowValue?GetValueBelowSelectedCell(table, chosenCell.Value) : GetValueRightToSelectedCell(table, chosenCell.Value);

            if (field == null)
            {
                return(null);
            }

            if (position.Value == ImmediatelyBelowValue)
            {
                field.Key = "Value " + ImmediatelyBelowKey + " of " + chosenCell.Value;
            }
            else
            {
                field.Key = "Value " + ImmediatelyToRightKey + " of " + chosenCell.Value;
            }

            return(field);
        }
Esempio n. 9
0
        private void PopulateRowData(CrateDescriptionDTO crateDescriptionToProcess, OperationalStateCM.LoopStatus loopData, Crate crateToProcess)
        {
            string label = GetCrateName(crateDescriptionToProcess);

            Payload.RemoveUsingPredicate(a => a.Label == label && a.ManifestType == crateToProcess.ManifestType);

            if (crateDescriptionToProcess.ManifestId == (int)MT.StandardTableData)
            {
                var table          = crateToProcess.Get <StandardTableDataCM>();
                var rowOfData      = table.DataRows.ElementAt(loopData.Index);
                var extractedCrate = new StandardTableDataCM(false, new List <TableRowDTO>()
                {
                    rowOfData
                });
                Payload.Add(Crate.FromContent(label, extractedCrate));
            }
            else
            {
                var cloned_crate = CloneCrateAndReplaceArrayWithASingleValue(crateToProcess, "", loopData.Index, GetCrateName(crateDescriptionToProcess));
                Payload.Add(cloned_crate);
            }
        }
Esempio n. 10
0
        public static byte[] RewriteSheetForFile(byte[] existingFile,
                                                 StandardTableDataCM tableCM,
                                                 string sheetName)
        {
            using (var memoryStream = new MemoryStream(existingFile))
                using (var excelPackage = new ExcelPackage(memoryStream))
                {
                    var workSheet = excelPackage.Workbook.Worksheets[sheetName];
                    if (workSheet == null)
                    {
                        workSheet = excelPackage.Workbook.Worksheets.Add(sheetName);
                    }
                    else
                    {
                        var targetIndex = workSheet.Index;
                        excelPackage.Workbook.Worksheets.Delete(workSheet);
                        workSheet = excelPackage.Workbook.Worksheets.Add(sheetName);
                        excelPackage.Workbook.Worksheets.MoveBefore(workSheet.Index, targetIndex);
                    }
                    WriteTableDataToWorksheet(workSheet, tableCM);
                    FixPackageStyles(excelPackage);
                    return(excelPackage.GetAsByteArray());
                }


            //var dataTable = ToDataTable(tableCM);
            //dataTable.TableName = sheetName;

            //var writer = new ExcelWriter();

            //using (var stream = new MemoryStream())
            //{
            //    stream.Write(existingFile, 0, existingFile.Length);
            //    stream.Position = 0;

            //    writer.RewriteSheetForFile(stream, dataTable);
            //    return stream.ToArray();
            //}
        }
Esempio n. 11
0
        public override async Task Run()
        {
            var query = new AsanaTaskQuery()
            {
                Workspace = ActivityUI.WorkspacesList.Value,
                Assignee  = ActivityUI.UsersList.Value,
                Project   = ActivityUI.ProjectsList.Value
            };

            var tasks = await AClient.Tasks.GetAsync(query);

            var dataRows = tasks.Select(t => new TableRowDTO()
            {
                Row =
                {
                    new TableCellDTO()
                    {
                        Cell = new KeyValueDTO("Task name", t.Name)
                    },
                    new TableCellDTO()
                    {
                        Cell = new KeyValueDTO("Task id", t.Id)
                    }
                }
            }).ToList();

            var payload = new StandardTableDataCM()
            {
                Table = dataRows
            };
            var customPayload = new AsanaTaskListCM()
            {
                Tasks = tasks.Select(t => Mapper.Map <AsanaTaskCM>(t)).ToList()
            };

            Payload.Add(RunTimeCrateLabel, payload);
            Payload.Add(RunTimeCrateLabelCustomCM, customPayload);
        }
Esempio n. 12
0
        private static DataTable ToDataTable(StandardTableDataCM tableCM)
        {
            if (tableCM == null || tableCM.Table == null || tableCM.Table.Count == 0)
            {
                throw new ApplicationException("Invalid StandardTableDataCM data.");
            }

            var dataTable   = new DataTable();
            var columnIndex = new Dictionary <string, int>();

            for (var i = 0; i < tableCM.Table[0].Row.Count; ++i)
            {
                var cell = tableCM.Table[0].Row[i].Cell;
                dataTable.Columns.Add(cell.Key, typeof(string));

                columnIndex.Add(cell.Key, i);
            }

            foreach (var row in tableCM.Table.Skip(1))
            {
                var dataRow = new object[tableCM.Table[0].Row.Count];

                foreach (var cell in row.Row)
                {
                    int columnNumber;
                    if (columnIndex.TryGetValue(cell.Cell.Key, out columnNumber))
                    {
                        dataRow[columnNumber] = cell.Cell.Value;
                    }
                }

                dataTable.Rows.Add(dataRow);
            }

            return(dataTable);
        }
Esempio n. 13
0
        public override Task Run()
        {
            Log($"Table {ActivityPayload.Label} [{ActivityId}] started");

            var tableCm = new StandardTableDataCM();

            for (int i = 0; i < int.Parse(ActivityUI.NumberOfRows.Value); i++)
            {
                TableRowDTO row;
                tableCm.Table.Add(row = new TableRowDTO());

                for (int j = 0; j < 5; j++)
                {
                    row.Row.Add(new TableCellDTO
                    {
                        Cell = new KeyValueDTO("Column " + j, $"Cell [{i}, {j}]")
                    });
                }
            }

            Payload.Add(Crate.FromContent("Table", tableCm));

            return(Task.FromResult(0));
        }
Esempio n. 14
0
        private Crate <StandardTableDataCM> FilterData(string message, Crate <StandardTableDataCM> data, HashSet <string> dataProperties)
        {
            //If there is nothing to filter we just return the original data from child activity
            if (string.IsNullOrWhiteSpace(message))
            {
                return(data);
            }
            var sourceTable = data.Content;
            var result      = new StandardTableDataCM {
                Table = new List <TableRowDTO>(), FirstRowHeaders = sourceTable.FirstRowHeaders
            };

            //Copy header row
            if (sourceTable.FirstRowHeaders && sourceTable.Table.Count > 0)
            {
                result.Table.Add(sourceTable.Table[0]);
            }
            foreach (var dataRow in sourceTable.DataRows)
            {
                var dataRowPropertyValues = GetPropertyValuesFromDataRow(dataRow, dataProperties);
                var propertyValueIsFound  = false;
                foreach (var propertyValue in dataRowPropertyValues)
                {
                    if (message.Contains(propertyValue, StringComparison.InvariantCultureIgnoreCase))
                    {
                        propertyValueIsFound = true;
                        break;
                    }
                }
                if (propertyValueIsFound)
                {
                    result.Table.Add(dataRow);
                }
            }
            return(Crate <StandardTableDataCM> .FromContent(data.Label, result));
        }
Esempio n. 15
0
        private KeyValueDTO GetValueBelowSelectedCell(StandardTableDataCM table, string selectedCellValue)
        {
            var rows = table.Table;

            //we might have out of bounds exceptions here
            try
            {
                for (var i = 0; i < rows.Count; i++)
                {
                    var cells = rows[i].Row;
                    for (int j = 0; j < cells.Count; j++)
                    {
                        if (cells[j].Cell.Value == selectedCellValue)
                        {
                            return(rows[i + 1].Row[j].Cell);
                        }
                    }
                }
            }
            catch
            {
            }
            return(null);
        }
        public override async Task Run()
        {
            using (var uow = _container.GetInstance <IUnitOfWork>())
            {
                var selectedObjectId = Guid.Parse(ActivityUI.AvailableObjects.Value);
                var mtType           = uow.MultiTenantObjectRepository.FindTypeReference(selectedObjectId);
                if (mtType == null)
                {
                    throw new ApplicationException("Invalid object selected.");
                }

                var conditions = JsonConvert.DeserializeObject <List <FilterConditionDTO> >(
                    ActivityUI.QueryBuilder.Value
                    );

                //////////DIRTY DIRTY NASTY HACK////////////
                //cause we can't select upstream value on //
                //these controls yet                      //

                foreach (var condition in conditions)
                {
                    if (condition.Value == "FromPayload")
                    {
                        foreach (var crate in Payload)
                        {
                            // skip system crates
                            if (crate.IsOfType <OperationalStateCM>() || crate.IsOfType <CrateDescriptionCM>() || crate.IsOfType <ValidationResultsCM>())
                            {
                                continue;
                            }

                            //GetValue() method is a copy of UpstreamValueExtractorBase<T>.GetValue
                            var foundValue = GetValue(crate, condition.Field);

                            if (foundValue != null)
                            {
                                condition.Value = Convert.ToString(foundValue);
                            }
                        }
                    }
                }

                ////////////END OF HACK/////////////////////


                var manifestType = mtType.ClrType;
                var queryBuilder = MTSearchHelper.CreateQueryProvider(manifestType);
                var converter    = CrateManifestToRowConverter(manifestType);

                var foundObjects = queryBuilder
                                   .Query(
                    uow,
                    CurrentUserId,
                    conditions
                    )
                                   .ToArray();

                var searchResult = new StandardTableDataCM();

                if (foundObjects.Length > 0)
                {
                    searchResult.FirstRowHeaders = true;

                    var headerRow = new TableRowDTO();

                    var properties = uow.MultiTenantObjectRepository.ListTypePropertyReferences(mtType.Id);
                    foreach (var mtTypeProp in properties)
                    {
                        headerRow.Row.Add(
                            new TableCellDTO()
                        {
                            Cell = new KeyValueDTO(mtTypeProp.Name, mtTypeProp.Name)
                        });
                    }

                    searchResult.Table.Add(headerRow);
                }

                foreach (var foundObject in foundObjects)
                {
                    searchResult.Table.Add(converter(foundObject));
                }

                Payload.Add(
                    Crate.FromContent(
                        RunTimeCrateLabel,
                        searchResult
                        )
                    );
            }

            await Task.Yield();
        }
Esempio n. 17
0
        public StandardPayloadDataCM TransformStandardTableDataToStandardPayloadData(string curObjectType, StandardTableDataCM tableDataMS)
        {
            var payloadDataMS = new StandardPayloadDataCM()
            {
                PayloadObjects = new List <PayloadObjectDTO>(),
                ObjectType     = curObjectType,
            };

            int         staringRow;
            TableRowDTO columnHeadersRowDTO = null;

            if (tableDataMS.FirstRowHeaders)
            {
                staringRow          = 1;
                columnHeadersRowDTO = tableDataMS.Table[0];
            }
            else
            {
                staringRow = 0;
            }

            // Rows containing column names
            for (int i = staringRow; i < tableDataMS.Table.Count; ++i) // Since first row is headers; hence i starts from 1
            {
                try
                {
                    var tableRowDTO = tableDataMS.Table[i];
                    var fields      = new List <FieldDTO>();
                    int colNumber   = (tableDataMS.FirstRowHeaders) ? columnHeadersRowDTO.Row.Count : tableRowDTO.Row.Count;
                    for (int j = 0; j < colNumber; ++j)
                    {
                        var tableCellDTO = tableRowDTO.Row[j];
                        var listFieldDTO = new FieldDTO()
                        {
                            Key   = (tableDataMS.FirstRowHeaders) ? columnHeadersRowDTO.Row[j].Cell.Value : tableCellDTO.Cell.Key,
                            Value = tableCellDTO.Cell.Value
                        };
                        fields.Add(listFieldDTO);
                    }
                    payloadDataMS.PayloadObjects.Add(new PayloadObjectDTO()
                    {
                        PayloadObject = fields
                    });
                }
                catch (Exception)
                {
                    //Avoid general failure of the process if there is an error processing individual records in the table
                }
            }

            return(payloadDataMS);
        }
        /// <summary>
        /// Create new spreadsheet file for a given google account, and write data inside the speadsheet
        /// </summary>
        /// <param name="authorizationTokenId"></param>
        /// <param name="spreadsheetName"></param>
        /// <param name="worksheetName"></param>
        /// <param name="tableData"></param>
        /// <returns></returns>
        public async Task <string> CreateNewSpreadsheet(Guid authorizationTokenId, string spreadsheetName, string worksheetName, StandardTableDataCM tableData)
        {
            var googleSheetApi         = new GoogleSheet(new GoogleIntegration(ObjectFactory.GetInstance <IRestfulServiceClient>()), new GoogleDrive());
            var defaultGoogleAuthToken = GetGoogleAuthToken(authorizationTokenId);
            var spreadsheetId          = await googleSheetApi.CreateSpreadsheet(spreadsheetName, defaultGoogleAuthToken);

            var googleSheets = await googleSheetApi.GetSpreadsheets(defaultGoogleAuthToken);

            var spreadsheetUri = googleSheets.FirstOrDefault(x => x.Value == spreadsheetName).Key;
            //create worksheet for this new created spreadsheet
            var existingWorksheets = await googleSheetApi.GetWorksheets(spreadsheetUri, defaultGoogleAuthToken);

            var existingWorksheetUri = existingWorksheets.Where(x => string.Equals(x.Value.Trim(), worksheetName, StringComparison.InvariantCultureIgnoreCase))
                                       .Select(x => x.Key).FirstOrDefault();

            if (string.IsNullOrEmpty(existingWorksheetUri))
            {
                existingWorksheetUri = await googleSheetApi.CreateWorksheet(spreadsheetUri, defaultGoogleAuthToken, worksheetName);
            }

            await googleSheetApi.WriteData(spreadsheetUri, existingWorksheetUri, tableData, defaultGoogleAuthToken);

            return(spreadsheetId);
        }
Esempio n. 19
0
        public static StandardTableDataCM ExtractPayloadCrateDataToStandardTableData(Crate crate)
        {
            if (crate.ManifestType.Id == (int)MT.StandardTableData)
            {
                return(crate.Get <StandardTableDataCM>());
            }
            if (crate.ManifestType.Id == (int)MT.FieldDescription)
            {
                var fields = crate.Get <FieldDescriptionsCM>();
                return(new StandardTableDataCM
                {
                    FirstRowHeaders = true,
                    Table = new List <TableRowDTO>
                    {
                        //Keys of fields will become column headers
                        new TableRowDTO {
                            Row = fields.Fields.Select(x => new TableCellDTO {
                                Cell = new FieldDTO(x.Key, x.Key)
                            }).ToList()
                        },
                        new TableRowDTO {
                            Row = fields.Fields.Select(x => new TableCellDTO {
                                Cell = x
                            }).ToList()
                        }
                    }
                });
            }
            var tableData = new StandardTableDataCM
            {
                FirstRowHeaders = true,
                Table           = new List <TableRowDTO>()
            };
            var headerIsAdded = false;


            var item = CrateStorageSerializer.Default.ConvertToDto(crate);

            var token = JToken.Parse(item.Contents.ToString());

            var jObject = token as JObject;

            if (jObject != null)
            {
                //check if jObject has some JArray properties
                var arrayProperty = jObject.Properties().FirstOrDefault(x => x.Value is JArray);

                //check how StandardPayloadDataCM is structured
                if (arrayProperty != null)
                {
                    foreach (var arrayItem in arrayProperty.Value)
                    {
                        //arrayItem is PayloadObjectDTO which on has an List<FieldDTO>
                        var innerArrayProperty = ((JObject)arrayItem).Properties().FirstOrDefault(x => x.Value is JArray);
                        if (innerArrayProperty != null)
                        {
                            var headerRow = new TableRowDTO();
                            var dataRow   = new TableRowDTO();

                            foreach (var innerArrayItem in innerArrayProperty.Value)
                            {
                                //try to parse the property as FieldDTO
                                if (innerArrayItem is JObject)
                                {
                                    var fieldObj = (JObject)innerArrayItem;
                                    if (fieldObj.Property("key") != null && fieldObj.Property("value") != null)
                                    {
                                        headerRow.Row.Add(new TableCellDTO
                                        {
                                            Cell = new FieldDTO(fieldObj["key"].ToString(), fieldObj["key"].ToString())
                                        });
                                        dataRow.Row.Add(new TableCellDTO
                                        {
                                            Cell =
                                                new FieldDTO(fieldObj["key"].ToString(), fieldObj["value"].ToString())
                                        });
                                    }
                                }
                            }

                            if (!headerIsAdded)
                            {
                                tableData.Table.Add(headerRow);
                                headerIsAdded = true;
                            }
                            tableData.Table.Add(dataRow);
                        }

                        // StandardFileListCM manifest has structure like this.
                        else
                        {
                            var headerRow = new TableRowDTO();
                            var dataRow   = new TableRowDTO();

                            foreach (var property in ((JObject)arrayItem).Properties())
                            {
                                //try to parse the property as FieldDTO
                                if (property.Name != null && property.Value != null)
                                {
                                    headerRow.Row.Add(new TableCellDTO
                                    {
                                        Cell = new FieldDTO(property.Name, property.Name)
                                    });
                                    dataRow.Row.Add(new TableCellDTO
                                    {
                                        Cell =
                                            new FieldDTO(property.Name, property.Value.ToString())
                                    });
                                }
                            }
                            if (!headerIsAdded)
                            {
                                tableData.Table.Add(headerRow);
                                headerIsAdded = true;
                            }
                            tableData.Table.Add(dataRow);
                        }
                    }
                }
                else
                {
                    var headerRow = new TableRowDTO();
                    var dataRow   = new TableRowDTO();

                    foreach (JProperty property in jObject.Properties())
                    {
                        //try to parse the property as FieldDTO
                        if (property.Value is JObject)
                        {
                            var fieldObj = (JObject)property.Value;
                            if (fieldObj.Property("key") != null && fieldObj.Property("value") != null)
                            {
                                headerRow.Row.Add(new TableCellDTO {
                                    Cell = new FieldDTO(fieldObj["key"].ToString(), fieldObj["key"].ToString())
                                });
                                dataRow.Row.Add(new TableCellDTO {
                                    Cell = new FieldDTO(fieldObj["key"].ToString(), fieldObj["value"].ToString())
                                });
                            }
                        }
                        else
                        {
                            headerRow.Row.Add(new TableCellDTO {
                                Cell = new FieldDTO(property.Name, property.Name)
                            });
                            dataRow.Row.Add(new TableCellDTO {
                                Cell = new FieldDTO(property.Name, property.Value.ToString())
                            });
                        }
                    }
                    if (!headerIsAdded)
                    {
                        tableData.Table.Add(headerRow);
                        headerIsAdded = true;
                    }
                    tableData.Table.Add(dataRow);
                }
            }
            return(tableData);
        }
        private async Task <string> AppendOrCreateSpreadsheet(StandardTableDataCM tableToSave)
        {
            byte[] fileData;
            string fileName;

            if (ActivityUI.UseNewSpreadsheetOption.Selected)
            {
                fileData = ExcelUtils.CreateExcelFile(
                    tableToSave,
                    ActivityUI.NewWorksheetName.Value
                    );

                fileName = ActivityUI.NewSpreadsheetName.Value;
            }
            else
            {
                var existingFileStream = await HubCommunicator.DownloadFile(
                    int.Parse(ActivityUI.ExistingSpreadsheetsList.Value)
                    );

                byte[] existingFileBytes;
                using (var memStream = new MemoryStream())
                {
                    await existingFileStream.CopyToAsync(memStream);

                    existingFileBytes = memStream.ToArray();
                }

                fileName = ActivityUI.ExistingSpreadsheetsList.selectedKey;

                var worksheetName = ActivityUI.UseNewWorksheetOption.Selected
                    ? ActivityUI.NewWorksheetName.Value
                    : ActivityUI.ExistingWorksheetsList.selectedKey;

                StandardTableDataCM dataToInsert;
                if (ActivityUI.UseExistingWorksheetOption.Selected ||
                    ActivityUI.ExistingWorksheetsList.ListItems.Any(x => x.Key == ActivityUI.NewWorksheetName.Value))
                {
                    var existingData = _excelUtils.GetExcelFile(existingFileBytes, fileName, true, worksheetName);

                    StandardTableDataCMTools.AppendToStandardTableData(existingData, tableToSave);
                    dataToInsert = existingData;
                }
                else
                {
                    dataToInsert = tableToSave;
                }

                fileData = ExcelUtils.RewriteSheetForFile(
                    existingFileBytes,
                    dataToInsert,
                    worksheetName
                    );
            }

            using (var stream = new MemoryStream(fileData, false))
            {
                if (!fileName.ToUpper().EndsWith(".XLSX"))
                {
                    fileName += ".xlsx";
                }

                var file = await HubCommunicator.SaveFile(fileName, stream);

                Payload.Add(Crate.FromContent("StoredFile", new StandardFileDescriptionCM
                {
                    Filename           = file.Id.ToString(),    // dirty hack
                    TextRepresentation = file.OriginalFileName, // another hack
                    Filetype           = ".xlsx"
                }));
                return(file.CloudStorageUrl);
            }
        }
        public override async Task Run()
        {
            var eventCrate = Payload.CratesOfType <EventReportCM>().FirstOrDefault()
                             ?.Get <EventReportCM>()
                             ?.EventPayload;

            KeyValueListCM changedFiles = null;

            if (eventCrate != null)
            {
                changedFiles = eventCrate
                               .CrateContentsOfType <KeyValueListCM>(x => x.Label == "ChangedFiles")
                               .SingleOrDefault();
            }

            if (changedFiles == null)
            {
                RequestPlanExecutionTermination("File list was not found in the payload.");
            }

            if (ActivityUI.AllSpreadsheetsOption.Selected)
            {
                var rows = new List <TableRowDTO>();
                foreach (var changedFile in changedFiles.Values)
                {
                    var row = new TableRowDTO();
                    row.Row.Add(TableCellDTO.Create(SpreadsheetIdLabel, changedFile.Key));
                    row.Row.Add(TableCellDTO.Create(SpreadsheetNameLabel, changedFile.Value));

                    rows.Add(row);
                }

                var tableData = new StandardTableDataCM(false, rows);

                Payload.Add(Crate.FromContent(RunTimeCrateLabel, tableData));
                Success();
            }
            else
            {
                var hasFileId = changedFiles.Values.Any(x => x.Key == ActivityUI.SpreadsheetList.Value);
                if (!hasFileId)
                {
                    RequestPlanExecutionTermination();
                }
                else
                {
                    var rows        = new List <TableRowDTO>();
                    var changedFile = changedFiles.Values.Where(x => x.Key == ActivityUI.SpreadsheetList.Value).First();

                    var row = new TableRowDTO();
                    row.Row.Add(TableCellDTO.Create(SpreadsheetIdLabel, changedFile.Key));
                    row.Row.Add(TableCellDTO.Create(SpreadsheetNameLabel, changedFile.Value));
                    rows.Add(row);

                    var tableData = new StandardTableDataCM(false, rows);

                    Payload.Add(Crate.FromContent(RunTimeCrateLabel, tableData));
                    Success();
                }
            }
        }
Esempio n. 22
0
 public Crate CreatePayloadDataCrate(string payloadDataObjectType, string crateLabel, StandardTableDataCM tableDataMS)
 {
     return(Crate.FromContent(crateLabel, TransformStandardTableDataToStandardPayloadData(payloadDataObjectType, tableDataMS)));
 }
Esempio n. 23
0
        private void WriteDataImpl(string spreadsheetUri, string worksheetUri, StandardTableDataCM data, GoogleAuthDTO authDTO)
        {
            if (String.IsNullOrEmpty(spreadsheetUri))
            {
                throw new ArgumentNullException("Spreadsheet Uri parameter is required.");
            }
            if (string.IsNullOrEmpty(worksheetUri))
            {
                throw new ArgumentNullException("Worksheet Uri parameter is required.");
            }

            if (data != null && data.Table.Count > 0)
            {
                int MAX_ROWS = data.Table.Count;
                int MAX_COLS = data.Table[0].Row.Count;

                SpreadsheetEntry spreadsheet = FindSpreadsheet(spreadsheetUri, authDTO);
                if (spreadsheet == null)
                {
                    throw new ArgumentException("Cannot find a spreadsheet", "spreadsheetUri");
                }
                SpreadsheetsService service = (SpreadsheetsService)spreadsheet.Service;

                string worksheetId   = worksheetUri.Substring(worksheetUri.LastIndexOf('/') + 1, worksheetUri.Length - (worksheetUri.LastIndexOf('/') + 1));
                string spreadSheetId = spreadsheetUri;
                if (spreadSheetId.ToLower().Contains("http"))//remove http url
                {
                    spreadSheetId = spreadSheetId.Substring(spreadSheetId.LastIndexOf('/') + 1, spreadSheetId.Length - (spreadSheetId.LastIndexOf('/') + 1));
                }

                CellQuery cellQuery = new CellQuery(spreadSheetId, worksheetId, "private", "full");
                CellFeed  cellFeed  = service.Query(cellQuery);

                // Build list of cell addresses to be filled in
                List <CellAddress> cellAddrs = new List <CellAddress>();
                for (int row = 0; row < MAX_ROWS; row++)
                {
                    for (int col = 0; col < MAX_COLS; col++)
                    {
                        cellAddrs.Add(new CellAddress(row + 1, col + 1, data.Table[row].Row[col].Cell.Value));
                    }
                }

                // Prepare the update
                // GetCellEntryMap is what makes the update fast.
                Dictionary <String, CellEntry> cellEntries = GetCellEntryMap(service, cellFeed, cellAddrs);

                CellFeed batchRequest = new CellFeed(cellQuery.Uri, service);
                foreach (CellAddress cellAddr in cellAddrs)
                {
                    CellEntry batchEntry = cellEntries[cellAddr.IdString];
                    batchEntry.InputValue = cellAddr.InputValue;
                    batchEntry.BatchData  = new GDataBatchEntryData(cellAddr.IdString, GDataBatchOperationType.update);
                    batchRequest.Entries.Add(batchEntry);
                }

                // Submit the update
                CellFeed batchResponse = (CellFeed)service.Batch(batchRequest, new Uri(cellFeed.Batch));

                // Check the results
                foreach (CellEntry entry in batchResponse.Entries)
                {
                    string batchId = entry.BatchData.Id;
                    if (entry.BatchData.Status.Code != 200)
                    {
                        GDataBatchStatus status = entry.BatchData.Status;
                        throw new Exception(string.Format("{0} failed ({1})", batchId, status.Reason));
                    }
                }
            }
        }
Esempio n. 24
0
 public Task WriteData(string spreadsheetUri, string worksheetUri, StandardTableDataCM data, GoogleAuthDTO authDTO)
 {
     return(Task.Run(() => WriteDataImpl(spreadsheetUri, worksheetUri, data, authDTO)));
 }