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; } }