示例#1
0
        /// <summary>
        /// Submits the specified structural meta-data .
        /// </summary>
        /// <param name="dataLocation">The data location pointing to the structural meta-data.</param>
        /// <returns>The imported objects</returns>
        /// <exception cref="Estat.Sri.Ws.SubmitStructure.SubmitStructureException">An error occurred while importing structural meta-data.</exception>
        public ISdmxObjects Submit(IReadableDataLocation dataLocation, SubmitStructureConstant.ActionType actionType = SubmitStructureConstant.ActionType.Replace)
        {
            // Parse structures IStructureParsingManager is an instance field.
            IStructureWorkspace structureWorkspace = this._parsingManager.ParseStructures(dataLocation);

            // Get immutable objects from workspace
            ISdmxObjects objects = structureWorkspace.GetStructureObjects(false);

            // create a new instance of the MappingStoreManager class which implements the IStructurePersistenceManager
            IList <ArtefactImportStatus> importStatus       = new List <ArtefactImportStatus>();
            IStructurePersistenceManager persistenceManager = new MappingStoreManager(this._connectionStringSettings, importStatus);

            switch (actionType)
            {
            case SubmitStructureConstant.ActionType.Append:
                break;

            case SubmitStructureConstant.ActionType.Replace:
                // Save the structure to the mapping store database.
                persistenceManager.SaveStructures(objects);

                // Validate objects.
                ValidateImport(importStatus);

                break;

            case SubmitStructureConstant.ActionType.Delete:
                // Delete the structure to the mapping store database.
                persistenceManager.DeleteStructures(objects);
                break;

            default:
                break;
            }

            // Return the immutable object container.
            return(objects);
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Message SubmitStructure(Message request)
        {
            var          submitStructureController = new SubmitStructureController(SettingsManager.MappingStoreConnectionSettings);
            var          responseBuilder           = new SubmitStructureResponseBuilder();
            ISdmxObjects sdmxObjects;


            XTypedElement response;

            try
            {
                // Il documento template che verrà caricato con gli artefatti da importare
                XmlDocument xDomTemp = new XmlDocument();

                // Il documento sorgente passato in input
                XmlDocument xDomSource = SubmitStructureUtil.MessageToXDom(request);

                // Creo gli elementi del file template
                xDomTemp.InnerXml = SubmitStructureConstant.xmlTemplate;

                // Valido il documento e ricavo l'action
                string actionValue = SubmitStructureUtil.ValidateDocument(xDomSource);
                SubmitStructureConstant.ActionType action = Ws.SubmitStructure.SubmitStructureConstant.ActionType.Replace;
                if (actionValue != string.Empty)
                {
                    action = (SubmitStructureConstant.ActionType)Enum.Parse(typeof(SubmitStructureConstant.ActionType), actionValue);
                }

                // Imposto l'Header
                SubmitStructureUtil.SetHeader(xDomTemp, xDomSource);

                // Il nodo root "Structure" del template
                XmlNode xTempStructNode = xDomTemp.SelectSingleNode("//*[local-name()='Structure']");

                // Creo il nodo "Structures" che conterrà gli artefatti
                XmlNode xSourceStructNode = xDomTemp.CreateNode(XmlNodeType.Element, "Structures", "http://www.sdmx.org/resources/sdmxml/schemas/v2_1/message");

                // Inserisco nel nodo "Structures" gli aertefatti presenti nell' sdmx passato in input
                xSourceStructNode.InnerXml = xDomSource.SelectSingleNode("//*[local-name()='Structures']").InnerXml;

                // Aggiungo al template l'elemento "Structures" con gli artefatti da caricare
                xTempStructNode.AppendChild(xSourceStructNode);

                // Converto il documento in un MemoryReadableLocation
                MemoryReadableLocation mRL = new MemoryReadableLocation(SubmitStructureUtil.ConvertToBytes(xDomTemp));

                // Richiamo del metodo che esegue il SaveStructures e inserisce nel DB
                sdmxObjects = submitStructureController.Submit(mRL, action);

                // Success response
                response = responseBuilder.BuildSuccessResponse(sdmxObjects,
                                                                SdmxSchemaEnumType.VersionTwoPointOne);
            }
            catch (SubmitStructureException e)
            {
                // Error response
                response = responseBuilder.BuildErrorResponse(e,
                                                              e.StructureReference, SdmxSchemaEnumType.VersionTwoPointOne);
            }
            catch (Exception ex)
            {
                response = responseBuilder.BuildErrorResponse(ex,
                                                              new StructureReferenceImpl(), SdmxSchemaEnumType.VersionTwoPointOne);
            }

            var streamController = new StreamController <XmlWriter>(
                (writer, queue) =>
            {
                queue.RunAll();                                    // This is required to write the soap envelope
                submitStructureController.Write(writer, response); // Write the response
            });

            return(new SdmxMessageSoap(
                       streamController,
                       exception => _messageFaultBuilder.BuildException(exception,
                                                                        SoapOperation.SubmitStructure.ToString()),
                       SoapOperation.SubmitStructure.GetQueryRootElementV21()));
        }