package org.semanticsoft.vaaclipse.behaviour.idgenerator; import java.util.UUID; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Inject; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.ui.MElementContainer; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.workbench.UIEvents; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; public class ElementIdGeneratorAddon { @Inject IEventBroker eventBroker; @Inject MApplication app; private EventHandler childrenHandler = new EventHandler() { public void handleEvent(Event event) { Object changedObj = event.getProperty(UIEvents.EventTags.ELEMENT); if (!(changedObj instanceof MElementContainer<?>)) return; String eventType = (String) event.getProperty(UIEvents.EventTags.TYPE); if (UIEvents.EventTypes.ADD.equals(eventType)) { Object newValue = event.getProperty(UIEvents.EventTags.NEW_VALUE); if (!(newValue instanceof MUIElement)) return; MUIElement element = (MUIElement) newValue; if (element.getElementId() == null || element.getElementId().trim().isEmpty()) { element.setElementId(UUID.randomUUID().toString()); } } } }; @PostConstruct void init(IEclipseContext context) { eventBroker.subscribe(UIEvents.ElementContainer.TOPIC_CHILDREN, childrenHandler); } @PreDestroy void removeListeners() { eventBroker.unsubscribe(childrenHandler); } }