VSTA 2010 – UML Profiles [make your own…]

Does anyone have seen that there is the capability to attach UML Profiles to the UML Diagrams in the new CTP..?
Just take a look at the property window of the component diagram or use case diagram or any other diagram and you can see that there are 3 out of the box ‘trial’ profiles available.

profile1

You can find this ‘profiles’ property on the design surface and after selecting one [or more] profiles you get a new property on the shape named ‘Stereotypes’ with values depending on the profile you selected.

profile2

That’s it for Profiles and Stereotypes in the VSTA diagrams. It doesn’t seem that valuable at first sight, but you can do magic with it.

UML Profiles
First a brief explanation of UML Profiles, better and less time consuming a copy-past from Wiki and  OMG [a little bit more fuzzy than wiki].

A profile in the Unified Modeling Language provides a generic extension mechanism for customizing UML models for particular domains and platforms. Profiles are defined using stereotypes, tagged values, and constraints that are applied to specific model elements, such as Classes, Attributes, Operations, and Activities. A Profile is a collection of such extensions that collectively customize UML for a particular domain (e.g., aerospace, healthcare, financial) or platform (J2EE, .NET).   

    • Identifies a subset of the UML metamodel.
    • Specifies “well-formedness rules” beyond those specified by the identified subset of the UML metamodel.
      “Well-formedness rule” is a term used in the normative UML metamodel specification to describe a set of constraints written in UML’s Object Constraint Language (OCL) that contributes to the definition of a metamodel element.
    • Specifies “standard elements” beyond those specified by the identified subset of the UML metamodel.
      “Standard element” is a term used in the UML metamodel specification to describe a standard instance of a UML stereotype, tagged value or constraint.
    • Specifies semantics, expressed in natural language, beyond those specified by the identified subset of the UML metamodel. 
    • Specifies common model elements, expressed in terms of the profile.

An UML Profile for VSTA.
Why do you actually want a profile? you can add additional information to the diagrams and shapes and use this extra information for everything you can think of, just for visualization and communication but also for generation and validation.

For example the component diagram is often used for visualizing the structure [components] of the solution and the interfaces between those components. as Scot Ambler writes:

UML component diagrams are great for doing this as they enable you to model the high-level software components, and more importantly the interfaces to those components.  Once the interfaces are defined, and agreed to by your team, it makes it much easier to organize the development effort between subteams.

While in UML 1.1 a component referred to files, UML 2.x describes them more as a autonomous, encapsulated unit with interfaces [see UML basics: The component diagram] which gives us a wider view what we can describe with it. But thinking of subteams, development effort, autonomous, encapsulated unit and file structures we can make a useful profile for our solution structure. Some time ago I wrote something about Autonomous Develop Services for SOA Projects with Team Architect and Service Factory, it’s about in what way you want to have your solution structure to be sure development teams [subteams] don’t interfere with each other.
So, with the component diagram you can design your solution “autonomous, encapsulated units with interfaces”. With a profile attached to this diagram, which gives these units extra meaning according to the solution structure and what kind of units they are, we have valuable information how the solution should be structured, even more interesting we can make a ‘Solution Structure Generator’ for the component diagram.

Make your own
The UML Profiles in VSTA are XML files in the “C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\UmlProfiles” folder. this is the .NET Profiles profile file. Just copy your own “.Profile” file to this folder and it will appear in the combo box [after restarting VS].

profile4

When looking at the property window the structure gets really easy clear. I selected the .NET Profiles profile at the diagram [first yellow marker] and the .NET Assembly stereotype [yellow marker] can be used with components [next yellow marker] and this stereotype has some more properties [vertical yellow marker].

profile3

So, now we know how to make a profile… or actually add some additional information to a diagram. We can make it useful create a menuitem for the diagram with some functionality that takes this additional information and creates the solution structure for you.

 foreach (Microsoft.VisualStudio.Uml.Classes.ProfileInstance pi in componentmodel.ProfileInstances)
                    {
                        if (pi.Name == "Project Structure")
                        {
                            foreach (var item in elm.AppliedStereotypes)
                            {
                                switch (item.Name)
                                {
                                    case "Single":
                                        Single(componentmodel);
                                        break;
                                    case "Partinoned":
                                        Partinoned(componentmodel);
                                        break;
                                    case "Multiple":
                                        Multiple(componentmodel);
                                        break;
                                    default:
                                        break;
                                }

As you can see I used the same solution structure types as described in Chapter 3 – Structuring Projects and Solutions in Source Control of the TFS Guidance from the Patterns and Practices group. [ I still like the "Partinoned" solution structure ] .

Bb668953_pponline(en-us,MSDN_10)

and some code to create the projects…

 foreach (ComponentProxy cp in componentmodel.ComponentProxies)
            {
                Microsoft.VisualStudio.Uml.Classes.Element elm = cp as Microsoft.VisualStudio.Uml.Classes.Element;
                if (cp.AppliedStereotypes[0].PropertyInstances[3] != null)
                {
                     projectype = cp.AppliedStereotypes[0].PropertyInstances[3].Value;
                }
                string projectTemplate = "";
                Solution2 soln = (Solution2)vsApp.Solution;

                System.IO.FileInfo fi = new System.IO.FileInfo(soln.FileName);
                string solutiondirectory = fi.Directory.FullName ;

                switch (projectype)
                {
                    case "ASP.NET Web Application":
                        projectTemplate = soln.GetProjectTemplate("WebApplicationProject.zip", "csproj");
                        break;

Final Notes.
The profile and the use of the profile used in the ‘solution structure’ example has some value, although if you want to use it in the real world it would probably more complex with regeneration, versioning and that kind of things. But that we can add, by using a very simple mechanism, additional information to the diagrams is a very powerful extensibility mechanism. Scenarios like, using a Data Modeling UML Profile for logical modeling and upgrade this model to the physical level with the Entity Framework are very interesting and I need stereotypes for the Usecase diagrams to implement the estimation scenario.

More on this in the future…

Add comment


Şarkı Sozleri