Ejemplo n.º 1
0
        public async Task <Response> PublishRepository(byte[] repositoryBytes, PublishInfo publishInfo)
        {
            DataverseMetaData   dataverseMetaData = publishInfo.metaData.ToDataverseMetaData();
            HttpResponseMessage response          = await CreateDataset(dataverseMetaData, publishInfo.token);

            if (!response.IsSuccessStatusCode)
            {
                return(await PublishErrorResponse(response));
            }

            DataverseCreateResponse dataverseCreateResponse = await response.ToDataverseCreateResponse();

            int datasetId = dataverseCreateResponse.data.id;

            response = await UploadFile(datasetId, repositoryBytes, publishInfo.repoName, publishInfo.token);

            if (!response.IsSuccessStatusCode)
            {
                await DeleteDataset(datasetId, publishInfo.token);

                return(await PublishErrorResponse(response));
            }

            response = await PublishDataset(datasetId, publishInfo.token);

            if (!response.IsSuccessStatusCode)
            {
                await DeleteDataset(datasetId, publishInfo.token);

                return(await PublishErrorResponse(response));
            }

            dataverseCreateResponse = await response.ToDataverseCreateResponse();

            return(new PublishResponse()
            {
                message = "Repository succesfully published.",
                publishUrl = dataverseCreateResponse.data.persistentUrl
            });
        }
Ejemplo n.º 2
0
        public async Task <Response> PublishMultipleRepositories(List <PublishInfo> publishInfos, List <Publication> duplicates, PublishInfo bundlePublishInfo)
        {
            List <PublishingSystemPublication> publications = new List <PublishingSystemPublication>();
            List <Response> responses = new List <Response>();

            for (int i = 0; i < publishInfos.Count; i++)
            {
                DataverseMetaData   dataverseMetaData = publishInfos[i].metaData.ToDataverseMetaData();
                HttpResponseMessage response          = await CreateDataset(dataverseMetaData, publishInfos[i].token);

                if (!response.IsSuccessStatusCode)
                {
                    for (int j = 0; j < i; j++)
                    {
                        // Delete all drafts to ensure transactional nature of request
                        await DeleteDataset(int.Parse(publications[j].publicationId), publishInfos[j].token);
                    }
                    return(await PublishErrorResponse(response));
                }

                DataverseCreateResponse createResponse = await response.ToDataverseCreateResponse();

                int datasetId = createResponse.data.id;

                response = await UploadFile(datasetId, publishInfos[i].snapshot.zippedBytes, publishInfos[i].repoName, publishInfos[i].token);

                if (!response.IsSuccessStatusCode)
                {
                    for (int j = 0; j < i; j++)
                    {
                        // Delete all drafts to ensure transactional nature of request
                        await DeleteDataset(int.Parse(publications[j].publicationId), publishInfos[j].token);
                    }
                    return(await PublishErrorResponse(response));
                }

                publications.Add(new PublishingSystemPublication()
                {
                    publicationId = datasetId.ToString(),
                    publishInfo   = publishInfos[i]
                });
            }

            for (int i = 0; i < publications.Count; i++)
            {
                HttpResponseMessage response = await PublishDataset(int.Parse(publications[i].publicationId), publications[i].publishInfo.token);

                if (!response.IsSuccessStatusCode)
                {
                    for (int j = 0; j < i; j++)
                    {
                        // Delete all drafts to ensure transactional nature of request
                        await DeleteDataset(int.Parse(publications[j].publicationId), publishInfos[j].token);
                    }
                    return(await PublishErrorResponse(response));
                }
                else
                {
                    DataverseCreateResponse createResponse = await response.ToDataverseCreateResponse();

                    publications[i].publicationUrl = createResponse.data.persistentUrl;
                }
            }

            DataverseMetaData bundleDataverseMetaData = bundlePublishInfo.metaData.ToDataverseMetaData();
            //TODO: fix references to repositories

            /*bundleDataverseMetaData.references = publications.Select(x => x.publicationUrl)
             *  .Union(duplicates.Select(x => x.PublicationUrl))
             *  .ToArray();*/

            HttpResponseMessage bundleResponse = await CreateDataset(bundleDataverseMetaData, bundlePublishInfo.token);

            if (!bundleResponse.IsSuccessStatusCode)
            {
                return(await PublishErrorResponse(bundleResponse));
            }

            DataverseCreateResponse dataverseCreateResponse = await bundleResponse.ToDataverseCreateResponse();

            int bundleArticleId = dataverseCreateResponse.data.id;

            bundleResponse = await PublishDataset(bundleArticleId, bundlePublishInfo.token);

            if (!bundleResponse.IsSuccessStatusCode)
            {
                await DeleteDataset(bundleArticleId, bundlePublishInfo.token);

                return(await PublishErrorResponse(bundleResponse));
            }

            dataverseCreateResponse = await bundleResponse.ToDataverseCreateResponse();

            return(await bundleResponse.ToMultiplePublishResponse(publications, dataverseCreateResponse.data.persistentUrl));
        }