Example #1
0
        protected override Resource ConvertToIssueTracker(AttachmentResource attachment)
        {
            Resource a = new Resource();

            if (!MasonBuilderContext.PreferMinimalResponse)
            {
                a.Meta.Title       = "Attachment";
                a.Meta.Description = "This resource represents a single attachment with its data and related actions.";
            }

            Uri     selfUrl  = typeof(AttachmentResource).CreateUri(new { id = attachment.Attachment.Id });
            Control selfLink = MasonBuilderContext.NewLink("self", selfUrl);

            a.AddControl(selfLink);

            Uri     issueUrl  = typeof(IssueResource).CreateUri(new { id = attachment.Attachment.OwnerIssue.Id });
            Control issueLink = MasonBuilderContext.NewLink("up", issueUrl, "Containing issue");

            a.AddControl(issueLink);

            if (attachment.Attachment.ContentType != null)
            {
                Uri     contentUrl  = typeof(AttachmentContentResource).CreateUri(new { id = attachment.Attachment.Id });
                Control contentLink = MasonBuilderContext.NewLink(RelTypes.AttachmentContent, contentUrl, "Download content", attachment.Attachment.ContentType);
                a.AddControl(contentLink);
            }

            dynamic updateTemplate = new DynamicDictionary();

            updateTemplate.Title       = attachment.Attachment.Title;
            updateTemplate.Description = attachment.Attachment.Description;

            Control updateAction = MasonBuilderContext.NewJsonFilesAction(RelTypes.AttachmentUpdate, selfUrl, "args", "Update attachment details", description: "Update title and description of attachment", template: (DynamicDictionary)updateTemplate);

            if (!MasonBuilderContext.PreferMinimalResponse)
            {
                updateAction.AddFile(new FileDefinition {
                    name = "attachment", title = "Attachment content"
                });
            }
            a.AddControl(updateAction);

            Control deleteAction = MasonBuilderContext.NewVoidAction(RelTypes.AttachmentDelete, selfUrl, "Delete attachment", method: "DELETE");

            a.AddControl(deleteAction);

            dynamic da = a;

            da.ID            = attachment.Attachment.Id;
            da.Title         = attachment.Attachment.Title;
            da.Description   = attachment.Attachment.Description;
            da.ContentType   = attachment.Attachment.ContentType;
            da.ContentLength = attachment.Attachment.ContentLength;
            da.CreatedDate   = attachment.Attachment.CreatedDate;

            return(a);
        }
Example #2
0
        protected override Resource ConvertToIssueTracker(ProjectResource project)
        {
            Resource p = new Resource();

            if (!MasonBuilderContext.PreferMinimalResponse)
            {
                p.Meta.Title       = "Project";
                p.Meta.Description = "This resource represents a single project with its data and related actions.";
            }

            Uri     selfUrl  = typeof(ProjectResource).CreateUri(new { id = project.Project.Id });
            Control selfLink = MasonBuilderContext.NewLink("self", selfUrl);

            p.AddControl(selfLink);

            Uri     issuesUrl  = typeof(ProjectIssuesResource).CreateUri(new { id = project.Project.Id });
            Control issuesLink = MasonBuilderContext.NewLink(RelTypes.Issues, issuesUrl, "All issues in project");

            p.AddControl(issuesLink);

            dynamic updateTemplate = new DynamicDictionary();

            updateTemplate.Code        = project.Project.Code;
            updateTemplate.Title       = project.Project.Title;
            updateTemplate.Description = project.Project.Description;

            Control updateAction = MasonBuilderContext.NewJsonAction(RelTypes.ProjectUpdate, selfUrl, "Update project details", template: (DynamicDictionary)updateTemplate);

            p.AddControl(updateAction);

            Uri     addIssueSchemaUrl = typeof(SchemaTypeResource).CreateUri(new { name = "create-issue" });
            Control addIssueAction    = MasonBuilderContext.NewJsonFilesAction(RelTypes.ProjectAddIssue, issuesUrl, "args", "Add issue", "Add new issue to project", schemaUrl: addIssueSchemaUrl);

            if (!MasonBuilderContext.PreferMinimalResponse)
            {
                addIssueAction.AddFile(new FileDefinition {
                    name = "attachment", title = "Attachment", description = "Include attachment for new issue."
                });
            }
            p.AddControl(addIssueAction);

            Control deleteAction = MasonBuilderContext.NewVoidAction(RelTypes.ProjectDelete, selfUrl, "Delete project", "This will delete the whole project and all issues in it.", method: "DELETE");

            p.AddControl(deleteAction);

            ((dynamic)p).Id          = project.Project.Id;
            ((dynamic)p).Code        = project.Project.Code;
            ((dynamic)p).Title       = project.Project.Title;
            ((dynamic)p).Description = project.Project.Description;

            return(p);
        }
Example #3
0
        protected override Resource ConvertToIssueTracker(IssueResource issue)
        {
            Resource i = new Resource();

            if (!MasonBuilderContext.PreferMinimalResponse)
            {
                i.Meta.Title       = "Issue";
                i.Meta.Description = "This resource represents a single issue with its data and related actions.";
            }

            Uri     selfUrl  = typeof(IssueResource).CreateUri(new { id = issue.Issue.Id });
            Control selfLink = MasonBuilderContext.NewLink("self", selfUrl);

            i.AddControl(selfLink);

            Uri     projectUrl  = typeof(ProjectResource).CreateUri(new { id = issue.Issue.OwnerProject.Id });
            Control projectLink = MasonBuilderContext.NewLink("up", projectUrl, "Containing project");

            i.AddControl(projectLink);

            Uri     attachmentsUrl  = typeof(IssueAttachmentsResource).CreateUri(new { id = issue.Issue.Id });
            Control attachmentsLink = MasonBuilderContext.NewLink(RelTypes.Attachments, attachmentsUrl, "All attachments for this issue");

            i.AddControl(attachmentsLink);

            dynamic updateTemplate = new DynamicDictionary();

            updateTemplate.Title       = issue.Issue.Title;
            updateTemplate.Description = issue.Issue.Description;
            updateTemplate.Severity    = issue.Issue.Severity;

            Control updateAction = MasonBuilderContext.NewJsonAction(RelTypes.IssueUpdate, selfUrl, "Update issue details", template: (DynamicDictionary)updateTemplate);

            i.AddControl(updateAction);

            Control deleteAction = MasonBuilderContext.NewVoidAction(RelTypes.IssueDelete, selfUrl, "Delete issue", method: "DELETE");

            i.AddControl(deleteAction);

            Uri     addAttachmentSchemaUrl = typeof(SchemaTypeResource).CreateUri(new { name = "create-attachment" });
            Control addAttachmentAction    = MasonBuilderContext.NewJsonFilesAction(RelTypes.IssueAddAttachment, attachmentsUrl, "args", "Add new attachment to issue", schemaUrl: addAttachmentSchemaUrl);

            if (!MasonBuilderContext.PreferMinimalResponse)
            {
                addAttachmentAction.AddFile(new FileDefinition {
                    name = "attachment", title = "Attachment for issue"
                });
            }
            i.AddControl(addAttachmentAction);

            ((dynamic)i).ID          = issue.Issue.Id;
            ((dynamic)i).Title       = issue.Issue.Title;
            ((dynamic)i).Description = issue.Issue.Description;
            ((dynamic)i).Severity    = issue.Issue.Severity;

            List <SubResource> attachments = new List <SubResource>();

            foreach (Attachment att in issue.Attachments)
            {
                dynamic a = new SubResource();
                a.Id    = att.Id;
                a.Title = att.Title;

                Uri     attachmentUrl  = typeof(AttachmentResource).CreateUri(new { id = att.Id });
                Control attachmentLink = MasonBuilderContext.NewLink("self", attachmentUrl);
                a.AddControl(attachmentLink);

                Uri     contentUrl  = typeof(AttachmentContentResource).CreateUri(new { id = att.Id });
                Control contentLink = MasonBuilderContext.NewLink(RelTypes.AttachmentContent, contentUrl, "Download content", att.ContentType);
                a.AddControl(contentLink);

                attachments.Add(a);
            }

            ((dynamic)i).Attachments = attachments;

            return(i);
        }