Esempio n. 1
0
        public static Task <TResult> CreateConnectorAsync <TResult>(Guid connectorId, Guid sourceAdapterId, Guid destinationAdapterId,
                                                                    Connector.SynchronizationMethod flow,
                                                                    Guid performingAsActorId, Claim[] claims,
                                                                    Func <TResult> onCreated,
                                                                    Func <Connection, TResult> onCreatedAndModified,
                                                                    Func <TResult> onAlreadyExists,
                                                                    Func <Guid, TResult> onRelationshipAlreadyExists,
                                                                    Func <Guid, TResult> onAdapterDoesNotExist,
                                                                    Func <string, TResult> onFailure)
        {
            return(Persistence.AdapterDocument.UpdateAsync(sourceAdapterId,
                                                           (sourceAdapter, saveSourceAdapterAsync) =>
            {
                return Persistence.AdapterDocument.UpdateAsync(destinationAdapterId,
                                                               async(destinationAdapter, saveDestinationAdapterAsync) =>
                {
                    if (destinationAdapter.resourceType != sourceAdapter.resourceType)
                    {
                        return onFailure($"Cannot connect `{sourceAdapter.resourceType}` to `{destinationAdapter.resourceType}`.");
                    }

                    return await await Persistence.ConnectorDocument.CreateWithoutAdapterUpdateAsync(connectorId,
                                                                                                     sourceAdapterId, destinationAdapterId, flow, sourceAdapter.resourceType,
                                                                                                     async() =>
                    {
                        await saveSourceAdapterAsync(sourceAdapter.connectorIds
                                                     .Append(connectorId)
                                                     .Distinct()
                                                     .ToArray(),
                                                     sourceAdapter.name, sourceAdapter.identifiers);
                        await saveDestinationAdapterAsync(destinationAdapter.connectorIds
                                                          .Append(connectorId)
                                                          .Distinct()
                                                          .ToArray(),
                                                          destinationAdapter.name, destinationAdapter.identifiers);
                        //var connector = new Connector()
                        //{
                        //    connectorId = connectorId,
                        //    adapterExternalId = destinationAdapterId,
                        //    adapterInternalId = sourceAdapterId,
                        //    createdBy = sourceAdapterId,
                        //    synchronizationMethod = flow,
                        //};
                        //var connection = Convert(sourceAdapter, connector, destinationAdapter);
                        return onCreated();
                    },
                                                                                                     onAlreadyExists.AsAsyncFunc(),
                                                                                                     (existingConnector) =>
                    {
                        return onRelationshipAlreadyExists(existingConnector.connectorId).AsTask();
                    });
                },
                                                               () => onAdapterDoesNotExist(destinationAdapterId));
            },
                                                           () => onAdapterDoesNotExist(sourceAdapterId)));
        }
        public static Task <HttpResponseMessage> CreateConnectorAsync(
            [Property] Guid id,
            [Property(Name = EastFive.Api.Resources.Connector.SourcePropertyName)] Guid source,
            [Property(Name = EastFive.Api.Resources.Connector.DestinationPropertyName)] Guid destination,
            [Property(Name = EastFive.Api.Resources.Connector.FlowPropertyName)] Connector.SynchronizationMethod Flow,
            Security security, Context context, HttpRequestMessage request, UrlHelper url,
            CreatedResponse onCreated,
            CreatedBodyResponse <Resources.Connection> onCreatedAndModifiedConnection,
            CreatedBodyResponse <Resources.Connector> onCreatedAndModified,
            AlreadyExistsResponse onAlreadyExists,
            AlreadyExistsReferencedResponse onRelationshipAlreadyExists,
            ReferencedDocumentNotFoundResponse onReferenceNotFound,
            UnauthorizedResponse onUnauthorized,
            GeneralConflictResponse onFailure)
        {
            return(Connectors.CreateConnectorAsync(id, source, destination,
                                                   Flow, security.performingAsActorId, security.claims,
                                                   () => onCreated(),
                                                   (connection) =>
            {
                return request.Headers.Accept
                .OrderByDescending(accept => accept.Quality.HasValue ? accept.Quality.Value : 1.0)
                .First(
                    (accept, next) =>
                {
                    if (
                        accept.MediaType.ToLower() == "x-ordering/connection" ||
                        accept.MediaType.ToLower() == "x-ordering/connection+json")
                    {
                        return onCreatedAndModifiedConnection(
                            ConnectionController.GetResource(connection, url),
                            "x-ordering/connection+json");
                    }

                    if (
                        accept.MediaType.ToLower() == "x-ordering/connector" ||
                        accept.MediaType.ToLower() == "x-ordering/connector+json" ||
                        accept.MediaType.ToLower() == "application/json")
                    {
                        return onCreatedAndModified(
                            GetResource(connection.connector, url),
                            "x-ordering/connector+json");
                    }

                    return next();
                },
                    () => onCreatedAndModified(GetResource(connection.connector, url)));
            },
                                                   () => onAlreadyExists(),
                                                   (existingConnectorId) => onRelationshipAlreadyExists(existingConnectorId),
                                                   (brokenId) => onReferenceNotFound(),
                                                   (why) => onFailure(why)));
        }
Esempio n. 3
0
 public static async Task <TResult> UpdateConnectorAsync <TResult>(Guid connectorId,
                                                                   Connector.SynchronizationMethod flow,
                                                                   Guid performingAsActorId, Claim[] claims,
                                                                   Func <TResult> onCreated,
                                                                   Func <TResult> onAdapterDoesNotExist,
                                                                   Func <string, TResult> onFailure)
 {
     return(await Persistence.ConnectorDocument.UpdateAsync(connectorId,
                                                            async (connector, saveAsync) =>
     {
         await saveAsync(flow);
         return onCreated();
     },
                                                            onAdapterDoesNotExist));
 }
 public static Task <HttpResponseMessage> UpdateConnectorAsync(
     [Property] Guid id,
     [Property(Name = EastFive.Api.Resources.Connector.SourcePropertyName)] Guid source,
     [PropertyOptional(Name = EastFive.Api.Resources.Connector.DestinationPropertyName)] Guid?destination,
     [Property(Name = EastFive.Api.Resources.Connector.FlowPropertyName)] Connector.SynchronizationMethod Flow,
     Security security, Context context, HttpRequestMessage request, UrlHelper url,
     NoContentResponse onUpdated,
     NotFoundResponse onNotFound,
     UnauthorizedResponse onUnauthorized,
     GeneralConflictResponse onFailure)
 {
     return(Connectors.UpdateConnectorAsync(id,
                                            Flow, security.performingAsActorId, security.claims,
                                            () => onUpdated(),
                                            () => onNotFound(),
                                            (why) => onFailure(why)));
 }