package name.abuchen.portfolio.bootstrap;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.contexts.RunAndTrack;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.workbench.UIEvents;
import org.eclipse.e4.ui.workbench.modeling.ISaveHandler;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;
// see http://www.eclipse.org/forums/index.php/t/369989/
public class SaveHandlerProcessor
{
private final MWindow window;
private final IEventBroker eventBroker;
@Inject
public SaveHandlerProcessor(@Named("name.abuchen.portfolio.ui.window.mainwindow") MWindow window, IEventBroker eventBroker)
{
this.window = window;
this.eventBroker = eventBroker;
}
@Execute
void installIntoContext()
{
eventBroker.subscribe(UIEvents.Context.TOPIC_CONTEXT, new EventHandler()
{
@Override
public void handleEvent(Event event)
{
if (!UIEvents.isSET(event))
return;
if (!window.equals(event.getProperty("ChangedElement")) || window.getContext() == null) //$NON-NLS-1$
return;
window.getContext().runAndTrack(new RunAndTrack()
{
private final ISaveHandler saveHandler = new CustomSaveHandler();
@Override
public boolean changed(IEclipseContext context)
{
Object value = context.get(ISaveHandler.class);
if (!saveHandler.equals(value))
context.set(ISaveHandler.class, saveHandler);
return true;
}
});
}
});
}
}