/**
*
*/
package name.webdizz.clt.crx.client.presenter;
import name.webdizz.clt.crx.client.ExtConfiguration;
import name.webdizz.clt.crx.client.ExtEventBus;
import name.webdizz.clt.crx.client.event.message.SelectTextMessage;
import name.webdizz.clt.crx.client.event.message.ShowTranslatedTextMessage;
import name.webdizz.clt.crx.client.event.message.TranslateTextMessage;
import name.webdizz.clt.crx.client.event.message.TranslationResultMessage;
import name.webdizz.clt.crx.client.translation.ITranslationHandler;
import name.webdizz.clt.crx.client.translation.TranslationException;
import name.webdizz.clt.crx.client.translation.TranslationFactory;
import name.webdizz.clt.crx.client.translation.TranslationResult;
import name.webdizz.clt.crx.client.view.BackgroundPageView;
import com.google.gwt.chrome.crx.client.Tabs;
import com.google.gwt.chrome.crx.client.Tabs.OnDetectLanguageCallback;
import com.google.gwt.chrome.crx.client.Tabs.OnTabCallback;
import com.google.gwt.chrome.crx.client.Tabs.Tab;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Widget;
import com.mvp4g.client.annotation.Presenter;
import com.mvp4g.client.presenter.BasePresenter;
/**
* @author Izzet_Mustafayev
*
*/
@Presenter(view = BackgroundPageView.class)
public class BackgroundPagePresenter extends BasePresenter<BackgroundPagePresenter.IBackgroundPageView, ExtEventBus> {
/**
* Holds reference to the last received {@link SelectTextMessage} to be able
* to display translation in the appropriate place.
*/
private SelectTextMessage selectTextMessage;
private ExtConfiguration configuration;
public BackgroundPagePresenter() {
configuration = new ExtConfiguration();
}
/**
* The interface for background page.
*
* @author Izzet_Mustafayev
*
*/
public interface IBackgroundPageView {
}
public void onStart() {
// detect language
detectLanguage();
}
private void detectLanguage() {
if ("".equals(configuration.getDestLanguage())) {
Tabs.detectLanguage(new OnDetectLanguageCallback() {
public void onDetect(String languageCode) {
eventBus.trace("BackgroundPagePresenter.detectLanguage(): Detected lang - " + languageCode);
configuration.setDestLanguage(languageCode);
}
});
}
}
/**
* Is called by {@link ExtEventBus} when a "selectText" event triggered.
*
* @param message
* the {@link SelectTextMessage} contains text to translate
*/
public void onSelectText(final SelectTextMessage message) {
eventBus.trace("BackgroundPagePresenter.onSelectText() :" + message.getText() + " should be translated");
TranslateTextMessage transTextMessage;
transTextMessage = TranslateTextMessage.create(message.getText());
eventBus.translateText(transTextMessage);
selectTextMessage = message;
}
/**
* Performs translation of the given {@link TranslateTextMessage}.
*
* @param message
* the message to translate
*/
public void onTranslateText(final TranslateTextMessage message) {
try {
TranslationFactory.instance().translate(message.getText(), new ITranslationHandler() {
public void onTranslate(final TranslationResult result) {
if (null == result) {
Window.alert("Word not found");
}
TranslationResultMessage message;
message = TranslationResultMessage.create(result);
eventBus.showTranslatedText(message);
}
});
} catch (TranslationException exc) {
eventBus.error(exc.getMessage());
}
}
/**
* Send message to the extension script to display translated text within a
* window.
*
* @param widget
* a {@link Widget} to show as a translation
*/
public void onShowTranslatedText(final TranslationResultMessage translation) {
Tabs.getSelected(new OnTabCallback() {
public void onTab(Tab tab) {
ShowTranslatedTextMessage message;
message = ShowTranslatedTextMessage.create(selectTextMessage, translation.getTranslation());
Tabs.sendRequest(tab.getId(), message);
}
});
}
}