Exemplo n.º 1
0
        public async Task <ActionResult <PagedList <WorkflowDefinitionSummaryModel> > > Handle(
            [FromQuery] string?ids,
            [FromQuery] string?searchTerm = default,
            int?page               = default,
            int?pageSize           = default,
            VersionOptions?version = default,
            CancellationToken cancellationToken = default)
        {
            var tenantId = await _tenantAccessor.GetTenantIdAsync(cancellationToken);

            version ??= VersionOptions.Latest;
            var specification = GetSpecification(ids, version.Value).And(new TenantSpecification <WorkflowDefinition>(tenantId));

            if (!string.IsNullOrWhiteSpace(searchTerm))
            {
                specification = specification.And(new WorkflowDefinitionSearchTermSpecification(searchTerm));
            }

            var totalCount = await _workflowDefinitionStore.CountAsync(specification, cancellationToken);

            var paging                         = page == null || pageSize == null ? default : Paging.Page(page.Value, pageSize.Value);
                                     var items = await _workflowDefinitionStore.FindManyAsync(specification, new OrderBy <WorkflowDefinition>(x => x.Name !, SortDirection.Ascending), paging, cancellationToken);

                                     var summaries = _mapper.Map <IList <WorkflowDefinitionSummaryModel> >(items);
                                     var pagedList = new PagedList <WorkflowDefinitionSummaryModel>(summaries, page, pageSize, totalCount);

                                     return(Json(pagedList, SerializationHelper.GetSettingsForWorkflowDefinition()));
        }
        public static bool WithVersion(this WorkflowDefinition workflowDefinition, VersionOptions?version = default)
        {
            var versionOption = version ?? VersionOptions.Latest;

            if (versionOption.IsDraft)
            {
                return(!workflowDefinition.IsPublished);
            }
            if (versionOption.IsLatest)
            {
                return(workflowDefinition.IsLatest);
            }
            if (versionOption.IsPublished)
            {
                return(workflowDefinition.IsPublished);
            }
            if (versionOption.IsLatestOrPublished)
            {
                return(workflowDefinition.IsPublished || workflowDefinition.IsLatest);
            }
            if (versionOption.Version > 0)
            {
                return(workflowDefinition.Version == versionOption.Version);
            }

            return(true);
        }
Exemplo n.º 3
0
    public async Task <IActionResult> Handle(VersionOptions?version = default, CancellationToken cancellationToken = default)
    {
        version ??= VersionOptions.Latest;
        var tenantId = await _tenantAccessor.GetTenantIdAsync(cancellationToken);

        var workflowBlueprints = await ListAllAsync(tenantId, version.Value, cancellationToken).OrderBy(x => x.DisplayName ?? x.Name ?? "(Untitled)").ToListAsync(cancellationToken);

        var model = _mapper.Map <IEnumerable <WorkflowBlueprintSummaryModel> >(workflowBlueprints).ToList();

        return(Ok(model).ConfigureForWorkflowDefinition());
    }
Exemplo n.º 4
0
        public async Task <ActionResult <WorkflowBlueprintModel> > Handle(string id, VersionOptions?versionOptions = default, CancellationToken cancellationToken = default)
        {
            versionOptions ??= VersionOptions.Latest;
            var workflowBlueprint = await _workflowRegistry.GetAsync(id, null, versionOptions.Value, cancellationToken, true);

            if (workflowBlueprint == null)
            {
                return(NotFound());
            }

            var model = await _workflowBlueprintMapper.MapAsync(workflowBlueprint, cancellationToken);

            return(Json(model, _contentSerializer.GetSettings()));
        }
Exemplo n.º 5
0
        internal override int CalculateVersionHeight(VersionOptions?committedVersion, VersionOptions?workingVersion)
        {
            var headCommitVersion = committedVersion?.Version ?? SemVer0;

            if (IsVersionFileChangedInWorkingTree(committedVersion, workingVersion))
            {
                var workingCopyVersion = workingVersion?.Version?.Version;

                if (workingCopyVersion is null || !workingCopyVersion.Equals(headCommitVersion))
                {
                    // The working copy has changed the major.minor version.
                    // So by definition the version height is 0, since no commit represents it yet.
                    return(0);
                }
            }

            return(LibGit2GitExtensions.GetVersionHeight(this));
        }
        internal static Version GetIdAsVersionHelper(this Commit?commit, VersionOptions?versionOptions, int versionHeight)
        {
            var baseVersion = versionOptions?.Version?.Version ?? Version0;
            int buildNumber = baseVersion.Build;
            int revision    = baseVersion.Revision;

            // Don't use the ?? coalescing operator here because the position property getters themselves can return null, which should NOT be overridden with our default.
            // The default value is only appropriate if versionOptions itself is null.
            var versionHeightPosition = versionOptions is not null ? versionOptions.VersionHeightPosition : SemanticVersion.Position.Build;
            var commitIdPosition      = versionOptions is not null ? versionOptions.GitCommitIdPosition : SemanticVersion.Position.Revision;

            // The compiler (due to WinPE header requirements) only allows 16-bit version components,
            // and forbids 0xffff as a value.
            if (versionHeightPosition.HasValue)
            {
                int adjustedVersionHeight = versionHeight == 0 ? 0 : versionHeight + (versionOptions?.VersionHeightOffset ?? 0);
                Verify.Operation(adjustedVersionHeight <= MaximumBuildNumberOrRevisionComponent, "Git height is {0}, which is greater than the maximum allowed {0}.", adjustedVersionHeight, MaximumBuildNumberOrRevisionComponent);
                switch (versionHeightPosition.Value)
                {
                case SemanticVersion.Position.Build:
                    buildNumber = adjustedVersionHeight;
                    break;

                case SemanticVersion.Position.Revision:
                    revision = adjustedVersionHeight;
                    break;
                }
            }

            if (commitIdPosition.HasValue)
            {
                switch (commitIdPosition.Value)
                {
                case SemanticVersion.Position.Revision:
                    revision = commit is object
                               ?Math.Min(MaximumBuildNumberOrRevisionComponent, commit.GetTruncatedCommitIdAsUInt16())
                                   : 0;

                    break;
                }
            }

            return(VersionExtensions.Create(baseVersion.Major, baseVersion.Minor, buildNumber, revision));
        }
Exemplo n.º 7
0
        public async Task <WorkflowDefinition?> GetDraftAsync(string workflowDefinitionId, VersionOptions?versionOptions = default, CancellationToken cancellationToken = default)
        {
            var definition = await _workflowDefinitionStore.FindByDefinitionIdAsync(
                workflowDefinitionId,
                versionOptions ?? VersionOptions.Latest,
                cancellationToken);

            if (definition == null)
            {
                return(null);
            }

            if (definition.IsLatest && !definition.IsPublished)
            {
                return(definition);
            }

            var latest = definition.IsLatest ? definition : (await _workflowDefinitionStore.FindByDefinitionIdAsync(workflowDefinitionId, VersionOptions.Latest, cancellationToken));

            if (latest == null)
            {
                latest = (await _workflowDefinitionStore.FindManyAsync(new Persistence.Specifications.WorkflowDefinitions.WorkflowDefinitionIdSpecification(workflowDefinitionId, VersionOptions.All),
                                                                       new OrderBy <WorkflowDefinition>(x => x.Version, SortDirection.Descending), new Paging(0, 1), cancellationToken)).FirstOrDefault();

                if (latest != null)
                {
                    latest.IsLatest = true;
                    return(latest);
                }
            }

            var draft = _cloner.Clone(definition);

            draft.Id          = _idGenerator.Generate();
            draft.IsPublished = false;
            draft.IsLatest    = true;
            draft.CreatedAt   = _clock.GetCurrentInstant();
            draft.Version     = latest != null ? latest.Version + 1 : 1;

            return(draft);
        }
 public static Task <PagedList <WorkflowBlueprintSummary> > ListAsync(this IWorkflowRegistryService service, int?page = default, int?pageSize = default, VersionOptions?versionOptions = default) =>
 service.ListAsync(new ListWorkflowBlueprintsRequest(page, pageSize, versionOptions));
Exemplo n.º 9
0
 internal override Version GetIdAsVersion(VersionOptions?committedVersion, VersionOptions?workingVersion, int versionHeight) => throw new NotImplementedException();
Exemplo n.º 10
0
        public async Task <IActionResult> Handle(string providerName, int?page = default, int?pageSize = default, VersionOptions?version = default, CancellationToken cancellationToken = default)
        {
            var workflowProvider = _workflowProviders.FirstOrDefault(x => x.GetType().Name == providerName);

            if (workflowProvider == null)
            {
                return(BadRequest(new { Error = $"Unknown workflow provider: {providerName}" }));
            }

            version ??= VersionOptions.Latest;
            var tenantId = await _tenantAccessor.GetTenantIdAsync(cancellationToken);

            var skip = page * pageSize;
            var workflowBlueprints = await workflowProvider.ListAsync(version.Value, skip, pageSize, tenantId, cancellationToken).ToListAsync(cancellationToken);

            var totalCount = await workflowProvider.CountAsync(version.Value, tenantId, cancellationToken);

            var mappedItems = _mapper.Map <IEnumerable <WorkflowBlueprintSummaryModel> >(workflowBlueprints).ToList();

            var model = new PagedList <WorkflowBlueprintSummaryModel>(mappedItems, page, pageSize, totalCount);

            return(Ok(model).ConfigureForWorkflowDefinition());
        }
Exemplo n.º 11
0
        public async Task <ActionResult <PagedList <WorkflowDefinitionSummaryModel> > > Handle(int?page = default, int?pageSize = default, VersionOptions?version = default, CancellationToken cancellationToken = default)
        {
            version ??= VersionOptions.Latest;
            var specification = new VersionOptionsSpecification(version.Value);
            var totalCount    = await _workflowDefinitionStore.CountAsync(specification, cancellationToken);

            var paging                         = page == null || pageSize == null ? default : Paging.Page(page.Value, pageSize.Value);
                                     var items = await _workflowDefinitionStore.FindManyAsync(specification, paging: paging, cancellationToken : cancellationToken);

                                     var summaries = _mapper.Map <IList <WorkflowDefinitionSummaryModel> >(items);
                                     var pagedList = new PagedList <WorkflowDefinitionSummaryModel>(summaries, page, pageSize, totalCount);

                                     return(Json(pagedList, _serializer.GetSettings()));
        }
Exemplo n.º 12
0
 internal override int CalculateVersionHeight(VersionOptions?committedVersion, VersionOptions?workingVersion) => 0;
 public static async Task <WorkflowDefinition> GetByIdAsync(this IWorkflowDefinitionService service, string workflowDefinitionId, VersionOptions?versionOptions = default) => await service.GetByIdAsync(new GetWorkflowDefinitionByIdRequest(workflowDefinitionId, versionOptions));
Exemplo n.º 14
0
 public async Task <ActionResult <WorkflowBlueprintModel> > Handle(string id, VersionOptions?versionOptions = default, CancellationToken cancellationToken = default)
 {
     versionOptions ??= VersionOptions.Latest;
     var workflowBlueprint = await _workflowRegistry.FindAsync(id, versionOptions.Value, default, cancellationToken);
 public ManyWorkflowDefinitionIdsSpecification(IEnumerable <string> ids, VersionOptions?versionOptions = default)
 {
     Ids            = ids;
     VersionOptions = versionOptions;
 }
Exemplo n.º 16
0
        internal override System.Version GetIdAsVersion(VersionOptions?committedVersion, VersionOptions?workingVersion, int versionHeight)
        {
            VersionOptions?version = IsVersionFileChangedInWorkingTree(committedVersion, workingVersion) ? workingVersion : committedVersion;

            return(this.Commit.GetIdAsVersionHelper(version, versionHeight));
        }
 public WorkflowDefinitionTagSpecification(string tag, VersionOptions?versionOptions = default, string?tenantId = default)
 {
     Tag            = tag;
     VersionOptions = versionOptions;
 }
Exemplo n.º 18
0
        public async Task <IActionResult> Handle(string workflowDefinitionId, string?context = default, VersionOptions?version = default, CancellationToken cancellationToken = default)
        {
            version ??= VersionOptions.Latest;
            var workflowDefinition = await _workflowDefinitionStore.FindByDefinitionIdAsync(workflowDefinitionId, version.Value, cancellationToken);

            var typeDefinitions = await _typeScriptDefinitionService.GenerateTypeScriptDefinitionsAsync(workflowDefinition, context, cancellationToken);

            var fileName = $"elsa.{workflowDefinitionId}.d.ts";
            var data     = Encoding.UTF8.GetBytes(typeDefinitions);

            return(File(data, "application/x-typescript", fileName));
        }
Exemplo n.º 19
0
 public ListWorkflowBlueprintsRequest(int?page, int?pageSize, VersionOptions?versionOptions)
 {
     Page           = page;
     PageSize       = pageSize;
     VersionOptions = versionOptions;
 }
 public static async Task <PagedList <WorkflowDefinition> > ListAsync(this IWorkflowDefinitionService service, int?page = default, int?pageSize = default, VersionOptions?versionOptions = default) => await service.ListAsync(new ListWorkflowDefinitionsRequest(page, pageSize, versionOptions));
Exemplo n.º 21
0
        public async Task <ActionResult <PagedList <WorkflowBlueprintSummaryModel> > > Handle(int?page = default, int?pageSize = default, VersionOptions?version = default, CancellationToken cancellationToken = default)
        {
            version ??= VersionOptions.LatestOrPublished;
            var workflowBlueprints = await _workflowRegistry.FindManyAsync(x => x.WithVersion(version.Value), cancellationToken).ToList();

            var totalCount = workflowBlueprints.Count;
            var skip       = page * pageSize;
            var items      = workflowBlueprints.AsEnumerable();

            if (skip != null)
            {
                items = items.Skip(skip.Value);
            }

            if (pageSize != null)
            {
                items = items.Take(pageSize.Value);
            }

            using var scope = _serviceProvider.CreateScope();
            var mappedItems = _mapper.Map <IEnumerable <WorkflowBlueprintSummaryModel> >(items).ToList();

            return(new PagedList <WorkflowBlueprintSummaryModel>(mappedItems, page, pageSize, totalCount));
        }
 public WorkflowDefinitionNameSpecification(string name, VersionOptions?versionOptions = default, string?tenantId = default)
 {
     Name           = name;
     VersionOptions = versionOptions;
 }
        public static IQueryable <WorkflowDefinition> WithVersion(this IQueryable <WorkflowDefinition> query, VersionOptions?version = default)
        {
            var versionOption = version ?? VersionOptions.Latest;

            if (versionOption.IsDraft)
            {
                return(query.Where(x => !x.IsPublished));
            }
            if (versionOption.IsLatest)
            {
                return(query.Where(x => x.IsLatest));
            }
            if (versionOption.IsPublished)
            {
                return(query.Where(x => x.IsPublished));
            }
            if (versionOption.IsLatestOrPublished)
            {
                return(query.Where(x => x.IsPublished || x.IsLatest));
            }
            if (versionOption.Version > 0)
            {
                return(query.Where(x => x.Version == versionOption.Version));
            }

            return(query);
        }
Exemplo n.º 24
0
 public WorkflowDefinitionIdSpecification(string id, VersionOptions?versionOptions = default)
 {
     Id             = id;
     VersionOptions = versionOptions;
 }
Exemplo n.º 25
0
 public GetWorkflowDefinitionByIdRequest(string workflowDefinitionId, VersionOptions?versionOptions)
 {
     WorkflowDefinitionId = workflowDefinitionId;
     VersionOptions       = versionOptions;
 }
        public static Expression <Func <WorkflowDefinition, bool> > WithVersion(this Expression <Func <WorkflowDefinition, bool> > predicate, VersionOptions?version = default)
        {
            var versionOption = version ?? VersionOptions.Latest;

            if (versionOption.IsDraft)
            {
                return(predicate.And(x => !x.IsPublished));
            }
            if (versionOption.IsLatest)
            {
                return(predicate.And(x => x.IsLatest));
            }
            if (versionOption.IsPublished)
            {
                return(predicate.And(x => x.IsPublished));
            }
            if (versionOption.IsLatestOrPublished)
            {
                return(predicate.And(x => x.IsPublished || x.IsLatest));
            }
            if (versionOption.Version > 0)
            {
                return(predicate.And(x => x.Version == versionOption.Version));
            }

            return(predicate);
        }
Exemplo n.º 27
0
        public async Task <ActionResult <WorkflowDefinitionSummaryModel[]> > Handle([RequiredFromQuery] string?ids, VersionOptions?version = default, CancellationToken cancellationToken = default)
        {
            IList <WorkflowDefinitionSummaryModel> summaries = new List <WorkflowDefinitionSummaryModel>();

            if (!string.IsNullOrWhiteSpace(ids))
            {
                version ??= VersionOptions.Latest;
                var splitIds      = ids.Split(',', StringSplitOptions.RemoveEmptyEntries);
                var specification = new VersionOptionsSpecification(version.Value).And(new ManyWorkflowDefinitionIdsSpecification(splitIds));
                var items         = await _workflowDefinitionStore.FindManyAsync(specification, cancellationToken : cancellationToken);

                summaries = _mapper.Map <IList <WorkflowDefinitionSummaryModel> >(items);
            }

            return(Json(new ListModel <WorkflowDefinitionSummaryModel>(summaries), _serializer.GetSettings()));
        }