Coloring systems in ABAP in Eclipse
One feature I was missing since I switched from SAP GUI to ABAP in Eclipse is the possibility to change the color theme for specific systems, in particular different themes for Development, Quality Assurance and the Productive system.
Therefore I started to build a plugin functionality for the ABAP in Eclipse Editor that enables coloring of my different ABAP projects.
The plugin is not already completely ready. But at least its very easy to get it up and running – so give it a try. There are only 3 simple steps to get colored projects in ABAP in Eclipse:
- Download and install the free plugin ABAP Continuous Integration from the Eclipse Marketplace
- Open Window->Preferences Section ABAP CI and activate one or more of the selection boxes at the end of the configuration tab. The coloring functionality can be set for tab header, left ruler bar and / or right ruler bar
- Open Window->Show View->Other and Search for the “ABAP Colored Projects” view to assign colors for specific projects
The source code for the plugin can be found at: https://github.com/andau/abapCI. Ideas welcome.
Some remarks on the current functionality:
- the tab header works for all development objects but my PC is flickering when changing from one ABAP project to another
- the coloring for the left and right bar works quite good, but it does not work for example for transactions as there are no left and right bars
- on the left and right bars annotations are shown – therefore I do not use the coloring for the DEV system–> I am currently working with left and right bar coloring enabled for all not DEV systems and skip the tab header coloring
There are still some small flaws in the functionality. Like the first opened editor in a new system is not colored at the first time and when working on two screens the tab header coloring does not work perfectly.
I am curious about suggestions to improve the functionality, in particular ideas about other possible visualisation options or even a yet existing better solution.
Have colorful Easter Holidays,
Andreas
Hi Andreas,
Great! I will try it.
Regards,
Roberto
Hi Andreas,
'Nice feature', was my first reaction. So I downloaded it and installed it.
But unfortunately, it does not work well together with the darkest of dark theme I'm using. The ABAP CI plug-in messes up the entire settings (see picture).
Any idea what causes this? Would be nice to use both plugins, alongside.
Kind regards,
Micky
P.S. After uninstalling the ABAP CI plugin, the dark theme is working just fine again.
Hei Micky!
Sorry if the plugin messed up your development environment a bit – thats really not the intention.
I installed the darkest of dark theme and I think if you deactivate the two options:
– change theme layout on failed tests
– chage color of tab header for colored projects
… then you should get only a colored bar and the rest of the theme remains unchanged.
Maybe you have to reset the dark theme and restart Eclipse once after disabling the two checkboxes. I could only verfiy on a Neo Eclipse with Oxygen the darkest dark theme g
As far as I have seen a programmatically initialized Theme change always starts from the Default theme, I have to check if this can be changed.
Let me know if it works for you if you deactivate the two mentioned options.
Regards, Andreas
I give it another try on tuesday. I'll keep you informed.
Thanks.
Micky.
Hi Andreas,
indeed this works, however the coloring does not always 'cover' the entire (left) side bar as one can see in the image below.
But no real argument not to keep using this plugin.
Thanks.
Gr. Micky.
Hi!
I didn't want to override the marker functionality for the scope of the current method.
Of course not yet perfect, but I am happy that the darkest dark theme is not messed up any more 🙂
Woohoo!!! Color.
I'll have to download. Thank you,
Michelle
Hi Andreas,
thanks for sharing this tool!
I tried to use the coloring, but when I open the view 'ABAP Colored Projects' I get the error message 'Failed to create the part's controls' ( details at the end of this comment).
Any idea what could be the problem?
Best regards,
Dominik
java.lang.NullPointerException
at abapci.xml.ColoredProjectModelXml.getColoredProjects(ColoredProjectModelXml.java:130)
at abapci.model.ColoredProjectModel.getColoredProjects(ColoredProjectModel.java:33)
at abapci.presenter.ColoredProjectsPresenter.setViewerInput(ColoredProjectsPresenter.java:25)
at abapci.presenter.ColoredProjectsPresenter.<init>(ColoredProjectsPresenter.java:16)
at abapci.views.AbapCiColoredProjectView.createPartControl(AbapCiColoredProjectView.java:54)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:151)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityView.createPartControl(CompatibilityView.java:147)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:355)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:990)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:955)
at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399)
at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:105)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:56)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:992)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:661)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:546)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:530)
at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:70)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:992)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:661)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:767)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:738)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:732)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:716)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.subscribeTopicToBeRendered(PartRenderingEngine.java:154)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
at org.eclipse.e4.core.di.internal.extensions.EventObjectSupplier$DIEventHandler.handleEvent(EventObjectSupplier.java:88)
at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:201)
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:52)
at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:60)
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.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:615)
at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:584)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:769)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:743)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:681)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:676)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1179)
at org.eclipse.ui.internal.WorkbenchPage.showPart(WorkbenchPage.java:1287)
at org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:1278)
at org.eclipse.ui.internal.WorkbenchPage$12.run(WorkbenchPage.java:4329)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4325)
at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4305)
at org.eclipse.ui.handlers.ShowViewHandler.openView(ShowViewHandler.java:132)
at org.eclipse.ui.handlers.ShowViewHandler.openOther(ShowViewHandler.java:110)
at org.eclipse.ui.handlers.ShowViewHandler.execute(ShowViewHandler.java:77)
at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:291)
at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:305)
at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:239)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:152)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:494)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487)
at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210)
at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:390)
at org.eclipse.ui.internal.ShowViewMenu$1.run(ShowViewMenu.java:139)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:473)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:565)
at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:397)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4428)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4238)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3817)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
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:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
Hi Dominik!
Could you please try to update the plugin to version 0.3.4.
Maybe you have to additionally delete the following file on your computer and restart eclipse: $WORKSPACE\.metadata\.plugins\com.abapci.core\coloredProjectModel.xml
Then hopefully it works also in your Environment.
Regards, Andreas
Hi Andreas,
i would love to have your addon in my eclipse envirement. because i am a starter using eclipse as my development envirement, the coloring is one thing that i miss most.
Unfortunately i am not able to install your add on from eclipse marketplace... I get that error message after confirming the installation etc.:
Cannot complete the install because one or more required items could not be found.
Software currently installed: ABAP Continuous Integration 0.3.13 (com.abapci.feature.feature.group 0.3.13)
Missing requirement: com.abapci.core 0.3.13 requires 'bundle com.sap.adt.atc 2.68.3' but it could not be found
Cannot satisfy dependency:
From: ABAP Continuous Integration 0.3.13 (com.abapci.feature.feature.group 0.3.13)
To: com.abapci.core [0.3.13]
Thx a lot for your feedback
Tom
Hi Thomas!
This seems for me that you have not installed one of the lates version of the ABAP Core Development tools.
If you go to Help->About Eclipse->Installation Details, which Version do you see there for the ABAP Core Development Tools (Developer version)?
Greetings, Andreas
Love it Andreas. Thanks!
Is it possible to change coloration by client for the same system, not by different systems?