protected string GenerateSubmissionFileAndAddToTransaction(StateAssessmentDetailsDataType data)
        {
            // Serialize data to xml

            string submitFile = CreateSubmissionFile(data);

            try
            {
                // Attach the xml file to the task transaction

                AppendAuditLogEvent("Attaching submission document to transaction \"{0}\"",
                                    _dataRequest.TransactionId);
                _documentManager.AddDocument(_dataRequest.TransactionId,
                                             CommonTransactionStatusCode.Completed,
                                             null, submitFile);
            }
            catch (Exception e)
            {
                AppendAuditLogEvent("Failed to attach submission document \"{0}\" to transaction \"{1}\" with exception: {2}",
                                    submitFile, _dataRequest.TransactionId, ExceptionUtils.ToShortString(e));
                FileUtils.SafeDeleteFile(submitFile);
                throw;
            }
            return(submitFile);
        }
        protected string GenerateSubmissionFileAndAddToTransaction()
        {
            AppendAuditLogEvent("Generating submission xml file ...");

            // Load data from database

            List <StateAssessmentDetailsDataType> dataList =
                _objectsFromDatabase.LoadFromDatabase <StateAssessmentDetailsDataType>(_baseDao, null);

            if (CollectionUtils.IsNullOrEmpty(dataList))
            {
                throw new ArgumentException(string.Format("No {0} data was found to submit", FLOW_NAME));
            }
            else if (dataList.Count > 1)
            {
                throw new ArgumentException(string.Format("More than one set of {0} data was found to submit", FLOW_NAME));
            }
            else
            {
                StateAssessmentDetailsDataType data = dataList[0];
                AppendAuditLogEvent(GetSubmissionResultsString(data));

                // Serialize data to xml and attach the xml file to the task transaction

                return(GenerateSubmissionFileAndAddToTransaction(data));
            }
        }
        protected virtual StateAssessmentDetailsDataType GetSubmitDocumentData(string transactionId, string docId)
        {
            string tempXmlFilePath = _settingsProvider.NewTempFilePath();

            try
            {
                AppendAuditLogEvent("Getting data for document with id \"{0}\"", docId);
                Windsor.Node2008.WNOSDomain.Document document = _documentManager.GetDocument(transactionId, docId, true);
                if (document.IsZipFile)
                {
                    AppendAuditLogEvent("Decompressing document to temporary file");
                    _compressionHelper.UncompressDeep(document.Content, tempXmlFilePath);
                }
                else
                {
                    AppendAuditLogEvent("Writing document data to temporary file");
                    File.WriteAllBytes(tempXmlFilePath, document.Content);
                }

                IHeaderDocument2Helper headerDocumentHelper;
                GetServiceImplementation(out headerDocumentHelper);

                // Deserialize the xml file whether or not it has an exchange header
                XmlElement loadElement = null;
                try
                {
                    AppendAuditLogEvent("Attempting to load document with Exchange Header");
                    headerDocumentHelper.Load(tempXmlFilePath);
                    string operation;
                    loadElement = headerDocumentHelper.GetFirstPayload(out operation);
                    if (loadElement == null)
                    {
                        throw new ArgumentException("The submitted document does not contain an OWIR-ATT payload");
                    }
                }
                catch (Exception)
                {
                    AppendAuditLogEvent("Document does not contain an Exchange Header");
                    // Assume, for now, that document does not have a header
                }

                AppendAuditLogEvent("Deserializing document data to OWIR-ATT data");
                StateAssessmentDetailsDataType data = null;
                if (loadElement != null)
                {
                    data = _serializationHelper.Deserialize <StateAssessmentDetailsDataType>(loadElement);
                }
                else
                {
                    data = _serializationHelper.Deserialize <StateAssessmentDetailsDataType>(tempXmlFilePath);
                }

                return(data);
            }
            finally
            {
                FileUtils.SafeDeleteFile(tempXmlFilePath);
            }
        }
        protected string CreateSubmissionFile(StateAssessmentDetailsDataType data)
        {
            string tempZipFilePath = _settingsProvider.NewTempFilePath(".zip");
            string tempXmlFilePath = _settingsProvider.NewTempFilePath(".xml");

            try
            {
                AppendAuditLogEvent("Serializing data to an xml file");
                _serializationHelper.Serialize(data, tempXmlFilePath);

                if (_validateXml)
                {
                    ValidateXmlFileAndAttachErrorsAndFileToTransaction(tempXmlFilePath, "xml_schema.xml_schema.zip",
                                                                       null, _dataRequest.TransactionId);
                }

                AppendAuditLogEvent("Generating submission file (with an exchange header) from results");

                IHeaderDocument2Helper headerDocumentHelper;
                GetServiceImplementation(out headerDocumentHelper);

                // Configure the submission exchange header and add header to xml file
                headerDocumentHelper.Configure(_authorName, _organizationName, _documentTitle, FLOW_NAME,
                                               _dataServiceName, _senderAddress, null, _keywords);

                string tempXmlFilePath2 = _settingsProvider.NewTempFilePath(".xml");
                try
                {
                    XmlDocument doc = new XmlDocument();
                    doc.Load(tempXmlFilePath);

                    headerDocumentHelper.AddPayload("REPLACE", doc.DocumentElement);

                    headerDocumentHelper.Serialize(tempXmlFilePath2);

                    _compressionHelper.CompressFile(tempXmlFilePath2, tempZipFilePath);
                }
                finally
                {
                    FileUtils.SafeDeleteFile(tempXmlFilePath2);
                }
            }
            catch (Exception)
            {
                FileUtils.SafeDeleteFile(tempZipFilePath);
                throw;
            }
            finally
            {
                FileUtils.SafeDeleteFile(tempXmlFilePath);
            }
            return(tempZipFilePath);
        }
        protected string GetSubmissionResultsString(StateAssessmentDetailsDataType data)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("Found the following OWIR-ATT submission data: ");
            int i = 0;

            AppendCountString("Assessment Units", data.AssessmentUnits, ++i == 1, sb);
            AppendCountString("User Categories", data.UserCategories, ++i == 1, sb);
            AppendCountString("State Methods", data.StateMethods, ++i == 1, sb);
            AppendCountString("State Locations", data.StateLocations, ++i == 1, sb);
            AppendCountString("ATLASes", data.ATLASes, ++i == 1, sb);
            return(sb.ToString());
        }
        protected void ProcessSubmitDocument(string transactionId, string docId)
        {
            try
            {
                // Load the submission data from the xml file
                StateAssessmentDetailsDataType data = GetSubmitDocumentData(transactionId, docId);

                int numRowsDeleted = 0;
                Dictionary <string, int> tableRowCounts = null;

                _baseDao.TransactionTemplate.Execute(delegate
                {
                    if (_deleteBeforeInsert)
                    {
                        // Delete existing data from the database
                        string parentTableName = _objectsToDatabase.GetTableNameForType(data.GetType());
                        numRowsDeleted         = _baseDao.DoSimpleDelete(parentTableName, null, null);
                    }

                    // Insert data into the database
                    tableRowCounts = _objectsToDatabase.SaveToDatabase(data, _baseDao);

                    return(null);
                });

                if (numRowsDeleted > 0)
                {
                    AppendAuditLogEvent("Deleted {0} existing OWIR-ATT elements from the data store",
                                        numRowsDeleted.ToString());
                }
                else
                {
                    AppendAuditLogEvent("Did not delete any existing OWIR-ATT data from the data store");
                }
                AppendAuditLogEvent("Stored OWIR-ATT data content with primary key \"{0}\" into data store with the following table row counts: {1}",
                                    data._PK, CreateTableRowCountsString(tableRowCounts));
            }
            catch (Exception e)
            {
                AppendAuditLogEvent("Failed to process document with id \"{0}.\"  EXCEPTION: {1}",
                                    docId.ToString(), ExceptionUtils.ToShortString(e));
                throw;
            }
        }