/////////////////////////////////////////////////////////////////////////////////////////////// ////////// PROCESS 2.1 MESSAGES /////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// #region Public Methods and Operators /// <summary> /// Build beans from a v2.1 Registry Document /// </summary> /// <param name="rid"> /// The rid. /// </param> /// <returns> /// The <see cref="ISdmxObjects"/>. /// </returns> public ISdmxObjects Build(RegistryInterface rid) { RegistryInterfaceType rit = rid.Content; if (rit.SubmitStructureRequest != null) { if (rit.SubmitStructureRequest.Structures != null) { DatasetAction action = null; if (!string.IsNullOrEmpty(rit.SubmitStructureRequest.action)) { switch (rit.SubmitStructureRequest.action) { case ActionTypeConstants.Append: action = DatasetAction.GetFromEnum(DatasetActionEnumType.Append); break; case ActionTypeConstants.Replace: action = DatasetAction.GetFromEnum(DatasetActionEnumType.Replace); break; default: action = DatasetAction.GetFromEnum(DatasetActionEnumType.Append); break; } } return this.Build(rit.SubmitStructureRequest.Structures.Content, ProcessHeader(rit.Header), action); } } return new SdmxObjectsImpl(); }
/// <summary> /// The build registry interface document. /// </summary> /// <param name="buildFrom"> /// The build from. /// </param> /// <param name="action"> /// The action. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> public RegistryInterface BuildRegistryInterfaceDocument(ISdmxObjects buildFrom, DatasetAction action) { var rid = new RegistryInterface(); RegistryInterfaceType rit = rid.Content; V21Helper.Header = rit; var structureRequestType = new SubmitStructureRequestType(); rit.SubmitStructureRequest = structureRequestType; switch (action.EnumType) { case DatasetActionEnumType.Append: structureRequestType.action = ActionTypeConstants.Append; break; case DatasetActionEnumType.Replace: structureRequestType.action = ActionTypeConstants.Replace; break; case DatasetActionEnumType.Delete: structureRequestType.action = ActionTypeConstants.Delete; break; case DatasetActionEnumType.Information: structureRequestType.action = ActionTypeConstants.Information; break; } var structures = new Structures(); structureRequestType.Structures = structures; this._structureXmlBuilder.PopulateStructureType(buildFrom, structures.Content); return rid; }
/// <summary> /// Build the registry interface document. /// </summary> /// <param name="buildFrom"> /// The build from. /// </param> /// <param name="action"> /// The action. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> public RegistryInterface BuildRegistryInterfaceDocument( ICollection<IRegistrationObject> buildFrom, DatasetActionEnumType action) { var registryInterface = new RegistryInterface(); RegistryInterfaceType interfaceType = registryInterface.Content; V21Helper.Header = interfaceType; var submitRegistrationRequest = new SubmitRegistrationsRequestType(); interfaceType.SubmitRegistrationsRequest = submitRegistrationRequest; /* foreach */ foreach (IRegistrationObject currentRegistration in buildFrom) { RegistrationType registrationType = this._registrationXmlBuilder.Build(currentRegistration); var registrationRequest = new RegistrationRequestType(); submitRegistrationRequest.RegistrationRequest.Add(registrationRequest); registrationRequest.Registration = registrationType; switch (action) { case DatasetActionEnumType.Append: registrationRequest.action = ActionTypeConstants.Append; break; case DatasetActionEnumType.Replace: registrationRequest.action = ActionTypeConstants.Replace; break; case DatasetActionEnumType.Delete: registrationRequest.action = ActionTypeConstants.Delete; break; case DatasetActionEnumType.Information: registrationRequest.action = ActionTypeConstants.Information; break; } } return registryInterface; }
/// <summary> /// The build registry interface document. /// </summary> /// <param name="buildFrom"> /// The build from. /// </param> /// <param name="action"> /// The action. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> public RegistryInterface BuildRegistryInterfaceDocument( ICollection<ISubscriptionObject> buildFrom, DatasetActionEnumType action) { var rid = new RegistryInterface(); RegistryInterfaceType rit = rid.Content; V21Helper.Header = rit; var submitSubscriptionsRequest = new SubmitSubscriptionsRequestType(); rit.SubmitSubscriptionsRequest = submitSubscriptionsRequest; /* foreach */ foreach (ISubscriptionObject currentSubscription in buildFrom) { SubscriptionType subscriptionType = this._subscriptionXmlBuilder.Build(currentSubscription); var subscriptionRequest = new SubscriptionRequestType(); submitSubscriptionsRequest.SubscriptionRequest.Add(subscriptionRequest); subscriptionRequest.Subscription = subscriptionType; switch (action) { case DatasetActionEnumType.Append: subscriptionRequest.action = ActionTypeConstants.Append; break; case DatasetActionEnumType.Replace: subscriptionRequest.action = ActionTypeConstants.Replace; break; case DatasetActionEnumType.Delete: subscriptionRequest.action = ActionTypeConstants.Delete; break; case DatasetActionEnumType.Information: subscriptionRequest.action = ActionTypeConstants.Information; break; } } return rid; }
/// <summary> /// The build error response. /// </summary> /// <param name="th"> /// The exception. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> public RegistryInterface BuildErrorResponse(Exception th) { var responseType = new RegistryInterface(); RegistryInterfaceType regInterface = responseType.Content; var returnType = new SubmitRegistrationsResponseType(); regInterface.SubmitRegistrationsResponse = returnType; V21Helper.Header = regInterface; var registrationStatusType = new RegistrationStatusType(); returnType.RegistrationStatus.Add(registrationStatusType); this.AddStatus(registrationStatusType.StatusMessage = new StatusMessageType(), th); return responseType; }
/// <summary> /// The build success response. /// </summary> /// <param name="beans"> /// The beans. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> public RegistryInterface BuildSuccessResponse(ISdmxObjects beans) { var responseType = new RegistryInterface(); RegistryInterfaceType regInterface = responseType.Content; regInterface.Header = this._headerXmlsBuilder.Build(beans.Header); var returnType = new SubmitStructureResponseType(); regInterface.SubmitStructureResponse = returnType; this.ProcessMaintainables(returnType, beans.GetAllMaintainables()); return responseType; }
/// <summary> /// Build the error response. /// </summary> /// <param name="exception"> /// The exception. /// </param> /// <param name="errorBean"> /// The error bean. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> /// <exception cref="BuilderException"> /// Registry could not determine Maintainable Artefact in error /// </exception> public RegistryInterface BuildErrorResponse(Exception exception, IStructureReference errorBean) { if (errorBean == null) { throw new SdmxSemmanticException("Registry could not determine Maintainable Artefact in error", exception); } var responseType = new RegistryInterface(); RegistryInterfaceType regInterface = responseType.Content; V21Helper.Header = regInterface; var returnType = new SubmitStructureResponseType(); regInterface.SubmitStructureResponse = returnType; this.AddSubmissionResult(returnType, errorBean, exception); return responseType; }
/// <summary> /// Builds the list of <see cref="ISubmitStructureResponse"/> from <paramref name="registryInterface"/> /// </summary> /// <param name="registryInterface"> /// The registry Interface. /// </param> /// <returns> /// The list of <see cref="ISubmitStructureResponse"/> from <paramref name="registryInterface"/> /// </returns> public IList<ISubmitStructureResponse> Build(RegistryInterface registryInterface) { // TODO REFACTOR - THIS IS VERY SIMILAR TO SUBMIT SUBSCRIPTION RESPONSE IList<ISubmitStructureResponse> returnList = new List<ISubmitStructureResponse>(); /* foreach */ foreach ( SubmissionResultType resultType in registryInterface.Content.SubmitStructureResponse.SubmissionResult) { IStructureReference structureReference = RefUtil.CreateReference(resultType.SubmittedStructure.MaintainableObject); if (resultType.StatusMessage != null && resultType.StatusMessage.status != null) { IList<string> messages = new List<string>(); if (resultType.StatusMessage.MessageText != null) { // TODO Message Codes and Multilingual foreach (StatusMessageType statusMessageType in resultType.StatusMessage.MessageText) { if (statusMessageType.Text != null) { /* foreach */ foreach (TextType tt in statusMessageType.Text) { messages.Add(tt.TypedValue); } } } } IErrorList errors = null; switch (resultType.StatusMessage.status) { case StatusTypeConstants.Failure: errors = new ErrorListCore(messages, false); break; case StatusTypeConstants.Warning: errors = new ErrorListCore(messages, true); break; } returnList.Add(new SubmitStructureResponseImpl(structureReference, errors)); } } return returnList; }
/// <summary> /// Builds the error response. /// </summary> /// <param name="notification"> /// The notification. /// </param> /// <param name="exception"> /// The exception. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> public RegistryInterface BuildErrorResponse(ISubscriptionObject notification, Exception exception) { var responseType = new RegistryInterface(); RegistryInterfaceType regInterface = responseType.Content; V21Helper.Header = regInterface; var returnType = new SubmitSubscriptionsResponseType(); regInterface.SubmitSubscriptionsResponse = returnType; var subscriptionStatus = new SubscriptionStatusType(); returnType.SubscriptionStatus.Add(subscriptionStatus); if (notification != null) { subscriptionStatus.SubscriptionURN = notification.Urn; } var statusMessageType = new StatusMessageType(); subscriptionStatus.StatusMessage = statusMessageType; this.AddStatus(statusMessageType, exception); return responseType; }
/// <summary> /// The build success response. /// </summary> /// <param name="notifications"> /// The notifications. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> public RegistryInterface BuildSuccessResponse(ICollection<ISubscriptionObject> notifications) { var responseType = new RegistryInterface(); RegistryInterfaceType regInterface = responseType.Content; V21Helper.Header = regInterface; /* foreach */ foreach (ISubscriptionObject currentNotification in notifications) { var returnType = new SubmitSubscriptionsResponseType(); regInterface.SubmitSubscriptionsResponse = returnType; var subscriptionStatus = new SubscriptionStatusType(); returnType.SubscriptionStatus.Add(subscriptionStatus); var statusMessageType = new StatusMessageType(); subscriptionStatus.StatusMessage = statusMessageType; this.AddStatus(statusMessageType, null); subscriptionStatus.SubscriptionURN = currentNotification.Urn; } return responseType; }
/// <summary> /// The build response. /// </summary> /// <param name="response"> /// The response. /// </param> /// <returns> /// The <see cref="RegistryInterface"/>. /// </returns> public RegistryInterface BuildResponse(IDictionary<IRegistrationObject, Exception> response) { var responseType = new RegistryInterface(); RegistryInterfaceType regInterface = responseType.Content; var returnType = new SubmitRegistrationsResponseType(); regInterface.SubmitRegistrationsResponse = returnType; V21Helper.Header = regInterface; foreach (KeyValuePair<IRegistrationObject, Exception> registration in response) { this.ProcessResponse(returnType, registration.Key, registration.Value); } return responseType; }