Esempio n. 1
0
        public override Response Delete(string objectType, IList <string> identifiers)
        {
            Response response = new Response();

            try
            {
                if (identifiers == null || identifiers.Count == 0)
                {
                    Status status = new Status();
                    status.Level = StatusLevel.Warning;
                    status.Messages.Add("Nothing to delete.");
                    response.Append(status);
                    return(response);
                }

                SpreadsheetTable     cftable        = _provider.GetConfigurationTable(objectType);
                SpreadsheetReference tableReference = cftable.GetReference();

                WorksheetPart     worksheetPart = _provider.GetWorksheetPart(tableReference.SheetName);
                SpreadsheetColumn column        = cftable.Columns.First <SpreadsheetColumn>(c => cftable.Identifier.Equals(c.Name));

                IEnumerable <Row> rows = worksheetPart.Worksheet.Descendants <Row>();

                foreach (string identifier in identifiers)
                {
                    Status status = new Status();
                    status.Identifier = identifier;
                    try
                    {
                        foreach (Row row in rows)
                        {
                            Cell cell = row.Descendants <Cell>().First(c => SpreadsheetReference.GetColumnName(c.CellReference).Equals(column.ColumnIdx));

                            if (_provider.GetValue(cell).Equals(identifier))
                            {
                                row.Remove();
                                string message = String.Format(
                                    "DataObject [{0}] deleted successfully.",
                                    identifier
                                    );
                                status.Messages.Add(message);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error("Error in Delete: " + ex);
                        status.Level = StatusLevel.Error;
                        string message = String.Format(
                            "Error while deleting dataObject [{0}]. {1}",
                            identifier,
                            ex
                            );
                        status.Messages.Add(message);
                    }
                    response.Append(status);
                    rows = worksheetPart.Worksheet.Descendants <Row>().OrderBy(r => r.RowIndex.Value);
                    uint i = 1;
                    foreach (Row row in rows)
                    {
                        row.RowIndex.Value = i++;
                    }
                    tableReference.EndRow = --i;
                    worksheetPart.Worksheet.SheetDimension.Reference = tableReference.GetReference(false);
                    cftable.Reference = tableReference.GetReference(true);
                    worksheetPart.Worksheet.Save();
                }
            }
            finally
            {
                _provider.Dispose();
            }
            return(response);
        }