Git Product home page Git Product logo

archimate-plantuml's Introduction

Archimate-PlantUML

PlantUML macros and other includes for creating Archimate Diagrams easily. Archimate-PlantUML Sample image - Internet Browser

Background

PlantUML

PlantUML is an open source project that allows you to create UML diagrams. Diagrams are defined using a simple and intuitive plain text language. It uses Graphviz software to lay out its diagrams. Images can be generated in PNG, in SVG or in LaTeX format.

ArchiMate

ArchiMate is an open and independent enterprise architecture modeling language to support the description, analysis and visualization of architecture within and across business domains in an unambiguous way.

ArchiMate offers a common language for describing the construction and operation of business processes, organizational structures, information flows, IT systems, and technical infrastructure. This is just like an architectural drawing in classical building where the architecture describes the various aspects of the construction and use of a building. This insight helps the different stakeholders to design, assess, and communicate the consequences of decisions and changes within and between these business domains.

Archimate-PlanUML combines the benefits of PlantUML and ArchiMate for providing a simple way of creating and managing ArchiMate diagrams. The Archimate-PlantUML is a set of macros and other includes written on top of PlantUML Archimate specification, with an aim to simplify the syntax for creating elements and defining relationships.

Getting Started

Include the Archimate.puml file to the top of your ArchiMate PlantUML .puml or .wsd file. This will allow you to use all the macros that are defined in the Archimate.puml file.

To always use the most updated version from this repo, add the following inlcude statement

!includeurl https://raw.githubusercontent.com/ebbypeter/Archimate-PlantUML/master/Archimate.puml

However, if you want offline capability and be independent of any internet connectivity, you can also download the files found in the root of this repository and referece in locally with

!include path/to/Archimate.puml

Usage

After you have included Archimate.puml you can use the defined macros for ArchiMate elements.

ArchiMate Elements

The ArchiMate elements are defined in the following pattern:

Category_ElementName(nameOfTheElement, "description")

For example:

  • To define a Stakeholder element, which is part of Motivation category, the synax will be
    Motivation_Stakeholder(StakeholderElement, "Stakeholder Description")
    Output:
    Stakeholder
  • To define a Business Service element,
    Business_Service(BService, "Business Service")
    Output:
    Business Service

ArchiMate Relationships

The ArchiMate relationships are defined with the following pattern:

Rel_RelationType(fromElement, toElement, "description")

and to define the direction / orientation of the two elements:

Rel_RelationType_Direction(fromElement, toElement, "description")

The RelationTypes supported are:

  • Access
  • Aggregation
  • Assignment
  • Association
  • Composition
  • Flow
  • Influence
  • Realization
  • Serving
  • Specialization
  • Triggering

The Directions supported are:

  • Up
  • Down
  • Left
  • Right

For example:

  • To denote a composition relationship between the Stakeholder and Business Service defined above, the syntax will be
    Rel_Composition(StakeholderElement, BService, "Description for the relationship")
    Output:
    Composition Relationship
  • To orient the two elements in top - down position, the syntax will be
    Rel_Composition_Down(StakeholderElement, BService, "Description for the relationship")
    Output:
    Composition Relationship Down

ArchiMate Groups

Groups in ArchiMate are denoted using the following syntax:

Grouping(nameOfTheGroup, "Group Description"){
    //Define the ArchiMate Elements
}

and to define the direction / orientation of the two elements:

Group(nameOfTheGroup, "Group Description"){
    //Define the ArchiMate Elements
}

For example

  • Group Type 1:

    Grouping(Example01, "Group Type 01"){
        Motivation_Stakeholder(StakeholderElement, "Stakeholder Description")
        Business_Service(BService, "Business Service")
    }

    Output:
    Group Type 1

  • Group Type 2:

    Group(Example01, "Group Type 01"){
        Motivation_Stakeholder(StakeholderElement, "Stakeholder Description")
        Business_Service(BService, "Business Service")
    }

    Output:
    Group Type 2

Example

@startuml
!includeurl https://raw.githubusercontent.com/ebbypeter/Archimate-PlantUML/master/Archimate.puml

title Archimate Sample - Requirement & Application Services

'Elements'
Motivation_Requirement(ReqPayrollStandard, "Do Payroll with a standard system")
Motivation_Requirement(ReqBudgetPlanning, "Do budget planning within the ERP system")

Application_Service(ASPayroll,"Payroll Service")
Application_Service(ASBudgetPlanning,"Budget Planning Service")
Application_Component(ACSAPFinanceAccRec, "SAP Finance - Accounts Recievables")
Application_Component(ACSAPHR, "SAP Human Resources")
Application_Component(ACSAPFin, "SAP Finance")
Application_Component(ACSAP,"SAP") 

'Relationships'
Rel_Realization_Up(ASPayroll, ReqPayrollStandard)
Rel_Realization_Up(ASBudgetPlanning, ReqBudgetPlanning)
Rel_Realization_Up(ACSAPFinanceAccRec, ASBudgetPlanning)
Rel_Realization_Up(ACSAPHR, ASPayroll)

Rel_Composition_Up(ACSAPFin, ACSAPFinanceAccRec)
Rel_Composition_Up(ACSAP, ACSAPHR)
Rel_Composition_Up(ACSAP, ACSAPFin)
@enduml

Output:
Archimate-PlantUML Sample image - Internet Browser

Contributing

If you have any ideas, just open an issue and tell me what you think.

If you'd like to contribute, please fork the repository and use a feature branch.
Pull requests are warmly welcome.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

archimate-plantuml's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

archimate-plantuml's Issues

Archimate Layers

Why can't we build something that we can define the layers like in the attached image and place the objects in them?
Maybe we can use some syntax like below?

archimate {
    business "Business" as bs {
      passive {
      
      }
      behavior {
      
      }
      active {
      
      }
    }
    application "Application" as app {
      passive {
      
      }
      behavior {
      
      }
      active {
      
      }
    }
    technology "Technology" as tech {
        passive {
        
        }
        behavior {
        
        }
        active {
        
        }
      }
      physical "Physical" as phys {
        passive {
        
        }
        behavior {
        
        }
        active {
        
        }
      }
    }

}

fig-ArchiMate-Core-Framework

Application Component as nesting container

I'd like to reopen #38 to get an implementation into the code.
I am not asking for every component to offer a macro for nesting.
Also, I have no idea how you could implement this. Like, can a macro leave an open { at the end?
So you could do
Application_ComponentNesting(MyAppComp,"My AppComponent)
Application_Function(...)
Application_Function(...)
NestEnd

If it's possible to give examples that show an answer to #38 without requiring that you abandon all the Archimate macros inside your nesting, that would also be fine.
Thanks!

Solid line instead of dotted line with Rel_Access_rw

@startuml
left to right direction
skinparam nodesep 4
!include <archimate/Archimate>
Rel_(i5, j5, Access_rw_RIGHT, "<~~>")
Rel_Access_rw(i4, j4, Access_rw_WRONG)
Rel_Access_w(i3, j3, Access_w)
Rel_Access_r(i2, j2, Access_r)
Rel_Access(i1, j1, Access)
@enduml
You can see

Nested Group of Archimate Component

Hey can we have grouping by Archimate Component?

Let's say I have requirement to create catalog of many Business Services. Each Business Services consist of many Business Process.

Cannot generate an Archimate image according to the manual: 'syntax error'

I am using the last release of plantUML

PlantUML version 1.2019.01 (Sat Feb 09 23:32:04 CST 2019)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 1.8.0_191-b12
Operating System: Linux
OS Version: 4.19.7
Default Encoding: UTF-8
Language: en
Country: US
Machine: mymachine
PLANTUML_LIMIT_SIZE: 4096
Processors: 4
Max Memory: 1,847,590,912
Total Memory: 124,780,544
Free Memory: 119,906,768
Used Memory: 4,873,776
Thread Active Count: 1

The environment variable GRAPHVIZ_DOT has not been set
Dot executable is /usr/bin/dot
Dot version: dot - graphviz version 2.40.1 (20161225.0304)
Installation seems OK. File generation OK

I am trying to use the code from plantuml's guide almost verbatim:

@startuml Internet Browser Example
!includeurl https://raw.githubusercontent.com/ebbypeter/Archimate-PlantUML/master/Archimate.puml
title "Archimate Sample - Internet Browser"
' Elements
Business_Object (businessObject , "A Business Object ")
Business_Process(someBusinessProcess ," Some Business Process ")
Business_Service(itSupportService , "IT Support for Business (Application Service )")
Application_DataObject(dataObject , "Web Page Data \n 'on the fly '")
Application_Function(webpageBehaviour , "Web page behaviour ")
Application_Component (ActivePartWebPage , "Active Part of the web page \n 'on the fly '")
Technology_Artifact (inMemoryItem ,"in memory / 'on the fly ' html/javascript ")
Technology_Service(internetBrowser , "Internet Browser Generic & Plugin ")
Technology_Service(internetBrowserPlugin , "Some Internet Browser Plugin ")
Technology_Service(webServer , "Some web server ")
'Relationships
Rel_Flow_Left(someBusinessProcess , businessObject , "")
Rel_Serving_Up(itSupportService , someBusinessProcess , "")
Rel_Specilization_Up(webpageBehaviour , itSupportService , "")
Rel_Flow_Right(dataObject , webpageBehaviour , "")
Rel_Specilization_Up(dataObject , businessObject , "")
Rel_Assignment_Left (ActivePartWebPage , webpageBehaviour , "")
Rel_Specilization_Up(inMemoryItem , dataObject , "")
Rel_Realization_Up(inMemoryItem , ActivePartWebPage , "")
Rel_Specilization_Right (inMemoryItem ,internetBrowser , "")
Rel_Serving_Up(internetBrowser , webpageBehaviour , "")
Rel_Serving_Up(internetBrowserPlugin , webpageBehaviour , "")
Rel_Aggregation_Right (internetBrowser , internetBrowserPlugin , "")
Rel_Access_Up(webServer , inMemoryItem , "")
Rel_Serving_Up(webServer , internetBrowser , "")
@enduml

But the code doesn't compile:

lockywolf@delllaptop:~/InternetBrowserExample$ java -jar ../.emacs.d/plantuml.jar -v DrMe.iuml
(0.000 - 119 Mo) 114 Mo - PlantUML Version 1.2019.01
(0.004 - 119 Mo) 114 Mo - GraphicsEnvironment.isHeadless() false
(0.004 - 119 Mo) 114 Mo - Forcing resource load on OpenJdk
(0.103 - 119 Mo) 114 Mo - Found 1 files
(0.103 - 119 Mo) 114 Mo - Working on /home/lockywolf/InternetBrowserExample/DrMe.iuml
(0.141 - 119 Mo) 113 Mo - Setting current dir: .
(0.141 - 119 Mo) 113 Mo - Setting current dir: /home/lockywolf/InternetBrowserExample
(0.148 - 119 Mo) 113 Mo - Using default charset
(0.154 - 119 Mo) 113 Mo - Reading from DrMe.iuml
(0.156 - 119 Mo) 113 Mo - Creating AParentFolderRegular /home/lockywolf/InternetBrowserExample
(0.183 - 119 Mo) 112 Mo - Using default charset
(1.561 - 119 Mo) 98 Mo - Reading from https://raw.githubusercontent.com/ebbypeter/Archimate-PlantUML/master/Archimate.puml
(2.314 - 119 Mo) 97 Mo - Using default charset
(2.314 - 119 Mo) 97 Mo - Reading from https://raw.githubusercontent.com/ebbypeter/Archimate-PlantUML/master/Archimate.puml
(2.695 - 119 Mo) 93 Mo - Reading file: DrMe.iuml
(2.697 - 119 Mo) 93 Mo - name from block=Internet Browser Example
(2.697 - 119 Mo) 93 Mo - Checking=Internet Browser Example
(2.697 - 119 Mo) 93 Mo - f=Internet Browser Example
(2.698 - 119 Mo) 93 Mo - Relative, so let's change it
(2.698 - 119 Mo) 93 Mo - f=/home/lockywolf/InternetBrowserExample/Internet Browser Example
(2.698 - 119 Mo) 93 Mo - It's not a directory
(2.699 - 119 Mo) 93 Mo - Internet Browser Example is not taken as a directory
(2.700 - 119 Mo) 93 Mo - We are going to put data in /home/lockywolf/InternetBrowserExample/Internet Browser Example[0]
(3.758 - 150 Mo) 57 Mo - Creating file: /home/lockywolf/InternetBrowserExample/Internet Browser Example.png
(3.871 - 150 Mo) 47 Mo - Creating image 731x132
(3.925 - 150 Mo) 38 Mo - Ok for com.sun.imageio.plugins.png.PNGMetadata
(4.009 - 150 Mo) 38 Mo - Number of image(s): 1
Error line 9 in file: /home/lockywolf/InternetBrowserExample/DrMe.iuml
Some diagram description contains errors

The image, however, has a different error on it:

internet browser example

skinparam defaultTextAlignment center

What to do?

Feedback

Just a quick note to thank you.

Its a fabulous project and something that we have been looking for.

Minor request - flat Technology_Node

Thanks for an eminently useful package. I have a small request:

For the Technology_Service, possible to add a "flat" version of the node graphic?
E.g.:

!define Technology_Node_f(e_alias, e_label) rectangle #TECHNOLOGY "e_label" <<$archimate/technology-node>> as e_alias

This will allow similar look to diagrams created with Archi.

Join https://github.com/plantuml-stdlib and/or migrate there?

Several of us have been making an effort to bring together the projects and people who feed sprites into the official plantuml-stdlib.

We've been doing this under https://github.com/plantuml-stdlib/, with the go-ahead of Arnaud Roques (creator of PlantUML)

This ticket is to ask whether you would be interested in joining that effort and/or migrating this project to the PlantUML-StdLib organization.

The main reason for asking is to see if, by joining forces, we can make sure that any sprites already added to the official plantuml-stdlib remain maintained.

So, what do you think?

Multiple regressions after last PRs

After all the PR merges some things have broken, several things have reverted, other need to be updated, and some other things were broken before and I just found them:

  • Typo: Influnce โ†’ Influence
  • Regression of assignment arrowhead
  • Regression of access dotted line
  • Regression of using unespecific technology-process/interaction/event icons, which now exist because they where added in plantuml/plantuml#205 last year
  • Missing rounded corners for: business-event related #11
  • Missing horizontal lines in spec to Business_Contrat, Business_Object & Business_Representation
  • Bad icon for Technology_Node, Equipment_Facility, Physical_Facility after their conversion to node
  • Remove unneeded horizontal lines according to spec, from Material, .... TODO
  • Wrong Location color

Technology Process - Missing Sprite

The technology-process while a valid Archimate item doesn't exist as a valid sprite, per this diagram (listsprite):

listsprite

It's possible to use process however to recreate a valid looking entity:

Working Technology Sprite

PlantUML code:

@startuml
!includeurl https://raw.githubusercontent.com/ebbypeter/Archimate-PlantUML/master/Archimate.puml

title Archimate Overview

'LAYOUT_AS_SKETCH
'LAYOUT_LEFT_RIGHT
'LAYOUT_TOP_DOWN

Grouping(B_Group,"Business"){
        Business_Process(BProcess, "Business Process")
}

Grouping(T_Group, "Technology"){

    Technology_Process(TProcess, "Technology Process")
archimate #TECHNOLOGY "Working Technology Process" <<process>>
archimate #TECHNOLOGY "Non-Working Technology Process" <<technology-process>>

}
@enduml

It could be addressed by a simple change in the include define for that macro, (line 104) from:

!define Technology_Process(e_alias, e_label) archimate #TECHNOLOGY "e_label" <<technology-process>> as e_alias

to:

!define Technology_Process(e_alias, e_label) archimate #TECHNOLOGY "e_label" <<process>> as e_alias

I know it doesn't look as nice, but it would fix an error in one of your samples - https://github.com/ebbypeter/Archimate-PlantUML/blob/master/samples/Archimate-Overview.wsd without need to change the code in that sample however.

Add directed association relationship, and thicken the association arrow line

The association relationhip can be undirected by default, but also directed. As seen in https://pubs.opengroup.org/architecture/archimate3-doc/chap05.html#_Toc10045321

The directed version it should present a half-arrowhead, but that one isn't available in plantuml, so the next best solution is to mantain consistency with the rest of the dependency relationships and use the same arrowhead as them.

And to avoid confusion with the serving relationship my proposal is to thick the body of the association relationship. As seen in the following diagram (which already has the corrections from PR #19)

imagen

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.