Plugin for Archi - CarTool (EIRA oriented)

Started by barrel, October 03, 2016, 08:59:39 AM

Previous topic - Next topic

barrel

Hello Archi enthousiasts,

This might be interesting for some of you.

The "European Interoperability Reference Architecture (EIRA)" has been using ArchiMate as its underlying language and we have been
using Archi as our main tool for development since more than 1 year.
Last week, we have released a plugin for Archi called the 'CarTool' (short for "Cartography Tool").

From our documentation:
The CarTool is a tool built by the European Commission's ISA unit designed to provide support in
using the European Interoperability Reference Architecture (EIRA) and accessing a portfolio
(Cartography) of solutions that are documented using the EIRA. It is built as a plug-in for the
popular open source ArchiMate® modelling tool Archi®, building upon its modelling capabilities
and providing higher level EIRA support. The CarTool itself is open-source  and distributed under
the "ISA Product Non-Commercial Licence v1.1 for CarTool" licence.

The CarTool can be downloaded from the following location:
https://joinup.ec.europa.eu/asset/eia/asset_release/cartography-tool-v100

Here is a shortcut to the documentation: https://joinup.ec.europa.eu/anonymous_validation/155768/31034
The sources can be downloaded right here: https://webgate.ec.europa.eu/CITnet/stash/projects/CARTOOL/repos/cartoolplugin/browse

We are looking forward to hearing your feedback!

Barry Nauta

Phil Beauvoir

Hi Barry,

thanks for sharing this with the community. This is very interesting...I shall take a closer look at it...

Regards,

Phil
If you value and use Archi, please consider making a donation!
Ask your ArchiMate related questions to the ArchiMate Community's Discussion Board.

Jean-Baptiste Sarrodie

Hi,

This seems very interresting and could well be used outside EIRA (in fact this seems a good option for anyone that has a reference architecture).

I've just tested (on Linux) but I can't get it to work. The update seems ok but when trying to "Activate EIRA support" a view pane open with the following messages: "Failed to create the part's controls". In addition, here is what comes in the "Details":


java.lang.ArrayIndexOutOfBoundsException: 0
   at eu.europa.ec.eira.cartool.views.tree.EiraTreeModelView.doCreatePartControl(EiraTreeModelView.java:138)
   at com.archimatetool.editor.views.AbstractModelView.createPartControl(AbstractModelView.java:67)
   at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:141)
   at org.eclipse.ui.internal.e4.compatibility.CompatibilityView.createPartControl(CompatibilityView.java:155)
   at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:327)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
   at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:888)
   at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:869)
   at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:120)
   at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:337)
   at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:258)
   at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
   at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:104)
   at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:73)
   at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:55)
   at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:127)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:983)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$6.run(PartRenderingEngine.java:547)
   at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531)
   at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:69)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:983)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
   at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
   at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1250)
   at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer$1.handleEvent(LazyStackRenderer.java:68)
   at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
   at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:187)
   at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:156)
   at org.eclipse.swt.widgets.Display.syncExec(Display.java:4590)
   at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:218)
   at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
   at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
   at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
   at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
   at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
   at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
   at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
   at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
   at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
   at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:81)
   at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
   at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
   at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:171)
   at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:678)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:766)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$2(PartRenderingEngine.java:737)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$7.run(PartRenderingEngine.java:731)
   at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:715)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.handleEvent(PartRenderingEngine.java:141)
   at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
   at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:187)
   at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:156)
   at org.eclipse.swt.widgets.Display.syncExec(Display.java:4590)
   at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:218)
   at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
   at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197)
   at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
   at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
   at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
   at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
   at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
   at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
   at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
   at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:81)
   at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59)
   at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
   at org.eclipse.e4.ui.model.application.ui.impl.UIElementImpl.setToBeRendered(UIElementImpl.java:303)
   at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.createElement(PartServiceImpl.java:1165)
   at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1138)
   at org.eclipse.ui.internal.WorkbenchPage.showPart(WorkbenchPage.java:1311)
   at org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:1283)
   at org.eclipse.ui.internal.WorkbenchPage$14.run(WorkbenchPage.java:4208)
   at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
   at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4204)
   at com.archimatetool.editor.ui.services.ViewManager.showViewPart(ViewManager.java:38)
   at eu.europa.ec.eira.cartool.views.EiraViewManager.showView(EiraViewManager.java:29)
   at eu.europa.ec.eira.cartool.command.EiraViewHandler.execute(EiraViewHandler.java:24)
   at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:294)
   at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
   at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:247)
   at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:229)
   at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
   at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:149)
   at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
   at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
   at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210)
   at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:825)
   at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.handleWidgetSelection(HandledContributionItem.java:701)
   at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.access$6(HandledContributionItem.java:685)
   at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem$4.handleEvent(HandledContributionItem.java:613)
   at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
   at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4454)
   at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1388)
   at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3799)
   at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3409)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
   at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
   at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
   at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
   at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
   at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
   at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
   at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
   at com.archimatetool.editor.Application.start(Application.java:87)
   at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
   at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
   at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
   at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
   at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
   at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
   at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
   at org.eclipse.equinox.launcher.Main.main(Main.java:1438)


Any idea about this issue?

Regards,

JB
If you value and use Archi, please consider making a donation!
Ask your ArchiMate related questions to the ArchiMate Community's Discussion Board.

Hervé

Hi Barry,

Thanks a lot for sharing it with us. I'll definitively have a look.

On my desktop (Windows 10), I did not experienced the same error than Jean-Baptiste, but the link to download the user guide gives me an "unable to open" message. I could get it through the ZIP file though.

Best regards
Hervé

barrel

We are currently using the plugin for
* EIRA as reference architecture, this should be easy to replace with any reference architecture (indeed like you mention, Jean-Baptiste!)
* Solution Architecture Templates; some sort of reference for a specific problem domain (we currently have two available, one for open data, one for human interfaces within the EC)
* Cartography!!! Many solutions that have been built with your reference architecture can be located here and be queried/searched for to promote reusability and or sunsetting existing applications where mutliple implementations exist that serve the same purpose. The query tool of the plugin is quite powerful (if I may say so myself)

@JB: we have tested it on Windows and Mac, never on Linux, I see if we can come up with something
@Hervé, thanks for the notification, we will look into that!

Jean-Baptiste Sarrodie

Hi,

I've just tested on Windows and it works. I'll try to find some time to see why it fails on Linux (elementary OS freya).

Regards,

JB
If you value and use Archi, please consider making a donation!
Ask your ArchiMate related questions to the ArchiMate Community's Discussion Board.

Phil Beauvoir

Regarding the possible bug. I would not do this at line 138:

eiraTreeModelViewer.getTree().setSelection(eiraTreeModelViewer.getTree().getItems()[0]);

You should really select a model object wrapped in an ISelection on the tree viewer:

eiraTreeModelViewer.setSelection(ISelection)

Phil
If you value and use Archi, please consider making a donation!
Ask your ArchiMate related questions to the ArchiMate Community's Discussion Board.

barrel

Thanks for the fast replies!

We will try to setup a Linux environment and see how we can fix this, thanks @Phil for the code correction.
In anyway, we expect a new release in a short period (we aim within two weeks, but cannot promise anything).

Needless to say, if we can reproduce and fix the bug, we will post our findings here as well!


barrel

For those who are interested to work with templates (we call them Solution Architecture Templates) and how the CarTool uses them, I have modelled some views of TOGAF, ITIL, IT4IT in ArchiMate, I could share them for others to have a look. This work is totally independant of the work that is done for the EIRA/CarTool and is my own production.

I have modelled them while studying for the certifications, but I think they can be useful, just let me know and I can guide you through the process (fairly simple to do)

Jean-Baptiste Sarrodie

Quote from: barrel on October 04, 2016, 14:01:42 PM
For those who are interested to work with templates (we call them Solution Architecture Templates) and how the CarTool uses them, I have modelled some views of TOGAF, ITIL, IT4IT in ArchiMate, I could share them for others to have a look. This work is totally independant of the work that is done for the EIRA/CarTool and is my own production.

I have modelled them while studying for the certifications, but I think they can be useful, just let me know and I can guide you through the process (fairly simple to do)

I'm definitely intesserted !

Regards,

JB
If you value and use Archi, please consider making a donation!
Ask your ArchiMate related questions to the ArchiMate Community's Discussion Board.

barrel

The information below is a bit of a workaround, undocumented, so I might have missed one or two steps, let's give it a try though.
Ok, here are a few models (let's see if the attachments work).

* Copy the attached models to your home/.cartool/resources/archimate/SATs folder (note; this folder will be purged on a plugin update, so place a copy here, not the original!)
* restart Archi
* When the EIRA option is activate, you have a pane containing the EIRA itself and a folder called SATs. Your models (the ones you just added to the SAT folder) should be in there (in the user guide on page 10/45, we call this pane the "CarTool model overview")
* Open one of the SATs
* Your template will open somewhere, in the user guide on page 10/45, we call this pane the "CarTool model details"
* Create a solution or an SAT (right-click on the EIRA in the CarTool model overview) based on the EIRA, works even if you don't want to model using the EIRA. The difference between a solution and an template is that a solution will only contain Solution Building Blocks (refering to the TOGAF Enterprise Continuum), while an SAT will contain a mix containing Architecture Building Blocks (ABBs) and Solution Building Blocks (SBBs), the SBBs will be annotated if they refer to the EIRA, which is irrelevant for  this case.
* Each SAT has potentially many views, when looking at the user documentation on page 13/45, you will see a small button bar, one of the buttons here will allow you to switch between the views of an SAT
* Rightclick on any building block in the view you have opened in the "CarTool model details" pane and you can add that specific BB to you solution effectively using the template as template to build your solution.

Models below are incomplete, but remember, this is just to play with the possibilities of the tool!!!
* TOGAF
* ITIL
* IT4IT


barrel

#11
@JB, we have installed the tool and the plugin on an Ubuntu 16.04.1 TLS (Freya is based on Ubuntu, hence the choice), and everything works just fine, so we cannot reproduce the error.... Any suggestions?

We will try on Freya, but the answer will not be very conclusive in order to say that it will work on any Linux distribution and we do not have the resources to test all distributions....

By the way, java version is: openjdk version 1.8.0_91

Jean-Baptiste Sarrodie

Hi,

Thank you for this test. Freya is based on an older version of Ubuntu, so I guess this is linked to my openjdk version. I'm going to upgrade to the latest elementary OS version soon, so I will re-test at that time.

Regards,

JB
If you value and use Archi, please consider making a donation!
Ask your ArchiMate related questions to the ArchiMate Community's Discussion Board.

barrel

Great, then we will wait to see if that brings anything!  :)

barrel

@JB; latest Freya installation worked as well, no problems using the plugin