public override object BuildDetail(EntityDTO dto)
        {
            BpmnDetailDTO detail = new BpmnDetailDTO();
            EntityData data = new EntityData();

            detail.Title = dto.Name;
            EntityDTO parent = data.GetActivityOverviewParent(dto.ID);
            //TODO:
            detail.RelatedSubprocess = parent.Name;
            detail.User = dto.RenderHTML(GlobalStringResource.User, RenderOption.Break);
            detail.ActivityNature = dto.RenderHTML(GlobalStringResource.ActivityNature, RenderOption.Break);
            detail.TriggerInput = dto.RenderHTML(GlobalStringResource.TriggerInput, RenderOption.Break);
            detail.Output = dto.RenderHTML(GlobalStringResource.Output, RenderOption.Break);
            detail.ActivityStepDescription = dto.RenderHTML(GlobalStringResource.ActivityStepDescription, RenderOption.Break);
            detail.ActivityNarrative = dto.RenderHTML(GlobalStringResource.ActivityNarrative,
                RenderOption.Break);

            List<EntityDTO> variations = data.GetActivityVariations(dto.ID);

            if (variations.Count > 0)
            {
                foreach (EntityDTO variation in variations)
                {
                    ActivityVariationItem av = new ActivityVariationItem();
                    variation.ExtractProperties();
                    av.ActivityVariation = variation.Name;
                    av.Description = variation.RenderHTML(GlobalStringResource.Description, RenderOption.Break);
                    detail.ActivityVariations.Add(av);
                }
            }

            List<EntityDTO> mappings = data.GetSubProcessParagraphs(dto.ID);

            if (mappings.Count > 0)
            {
                foreach (EntityDTO map in mappings)
                {
                    ParagraphItem p = new ParagraphItem();
                    map.ExtractProperties();
                    p.ParagraphName = MappingToolUrlHelper.GenerateValidParagraphLinkMarkup(map.Name);
                    p.ParagraphRef = map.RenderHTMLAsAnchor(GlobalStringResource.ParagraphReference, RenderOption.Span, true);
                    detail.Paragraphs.Add(p);
                }
            }

            List<EntityDTO> useCases = data.GetUseCases(dto.ID);

            if (useCases.Count > 0)
            {
                foreach (EntityDTO useCase in useCases)
                {
                    UseCaseItem uc = new UseCaseItem();
                    useCase.ExtractProperties();
                    uc.UseCaseID = useCase.Name;
                    uc.Description = useCase.RenderHTML(GlobalStringResource.Description, RenderOption.Break);
                    detail.UseCases.Add(uc);
                }
            }

            List<EntityDTO> requiredData = data.GetRequiredData(dto.ID);

            if (requiredData.Count > 0)
            {
                requiredData.Sort((b1, b2) => string.Compare(b1.Name, b2.Name, true));
                foreach (EntityDTO document in requiredData)
                {
                    RequiredDataItem rq = new RequiredDataItem();
                    document.ExtractProperties();
                    rq.RequiredData = document.Name;
                    rq.Description = document.RenderHTML(GlobalStringResource.Description, RenderOption.Break);
                    detail.RequiredData.Add(rq);
                }
            }

            List<EntityDTO> sampleReferences = data.GetSampleReference(dto.ID);

            if (sampleReferences.Count > 0)
            {
                foreach (EntityDTO reference in sampleReferences)
                {
                    SampleReferenceItem sr = new SampleReferenceItem();
                    reference.ExtractProperties();
                    sr.SampleReference = reference.Name;
                    sr.Description = reference.RenderHTML(GlobalStringResource.Description, RenderOption.Break);
                    sr.ReferenceLink = reference.RenderHTMLAsAnchor(GlobalStringResource.ReferenceLink, RenderOption.Span, true);
                    detail.SampleReferences.Add(sr);
                }
            }
            return detail;
        }