class TransUnitSaveService implements TransUnitSaveEventHandler,
        CheckStateHasChangedHandler {

    @Override
    public void onTransUnitSave(TransUnitSaveEvent event) {
        TransUnitId idToSave = event.getTransUnitId();
        Log.info("TU save event: new[" + event.getTargets() + "] + old: ["
                + event.getOldContents());
        if (stateHasNotChanged(event)) {
            Log.info("NO OP! state has not changed for " + idToSave);
            return;
        }

        queue.push(event);
        if (queue.isSaving(idToSave)) {
            Log.info(idToSave + " has saving event. Put in queue and return.");
            return;
        }

        performSave(idToSave);
    }

    @Inject public  TransUnitSaveService(EventBus eventBus,
            CachingDispatchAsync dispatcher,
            Provider<UndoLink> undoLinkProvider,
            DocumentListPresenter documentListPresenter,
            TargetContentsPresenter targetContentsPresenter,
            TableEditorMessages messages, NavigationService navigationService,
            Provider<GoToRowLink> goToRowLinkProvider, SaveEventQueue queue);

}