/**
*
*/
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.PrepareTranslatedTextDisplayMessage;
import name.webdizz.clt.crx.client.event.message.ShowTranslatedTextMessage;
import name.webdizz.clt.crx.client.event.message.TranslateTextMessage;
import name.webdizz.clt.crx.client.view.TranslationView;
import com.google.gwt.language.client.translation.LangDetCallback;
import com.google.gwt.language.client.translation.LangDetResult;
import com.google.gwt.language.client.translation.Language;
import com.google.gwt.language.client.translation.Translation;
import com.google.gwt.language.client.translation.TranslationCallback;
import com.google.gwt.language.client.translation.TranslationResult;
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 = TranslationView.class)
public class TranslationPresenter extends
BasePresenter<TranslationPresenter.ITranslationView, ExtEventBus> {
public interface ITranslationView {
void setTranslatedText(String text);
void setTranslateableText(final String text);
String widgetAsString();
Widget asWidget();
}
private ExtConfiguration configuration;
public TranslationPresenter() {
configuration = new ExtConfiguration();
}
/**
* Performs translation of the given {@link TranslateTextMessage}.
*
* @param message
* the message to translate
*/
public void onTranslateText(final TranslateTextMessage message) {
detectSrcLanguage(message);
}
/**
* Performs visualization of the given translated
* {@link ShowTranslatedTextMessage}.
*
* @param message
* the translated message to display
*/
public void onTranslatedText(
final PrepareTranslatedTextDisplayMessage message) {
view.setTranslatedText(message.getTranslation());
view.setTranslateableText(message.getTextFrom());
eventBus.showTranslatedText(view.asWidget());
}
private void detectSrcLanguage(final TranslateTextMessage message) {
Translation.detect(message.getText(), new LangDetCallback() {
protected void onCallback(LangDetResult result) {
translateText(message, result);
}
});
}
private void translateText(final TranslateTextMessage message,
LangDetResult result) {
if (null == result.getError()) {
final String src = result.getLanguage();
final String dest = resolveDestLanguage();
final String from = message.getText();
Translation.translate(from, src, dest, new TranslationCallback() {
protected void onCallback(TranslationResult result) {
handleTranslationResult(src, dest, from, result);
}
});
}
if (null != result.getError()) {
// TODO: display error message
}
}
private void handleTranslationResult(final String src, final String dest,
final String from, TranslationResult result) {
String translation = result.getTranslatedText();
PrepareTranslatedTextDisplayMessage transTextMsg;
transTextMsg = PrepareTranslatedTextDisplayMessage.create(from,
translation, src, dest);
eventBus.handleTranslatedText(transTextMsg);
}
/**
* Resolves destination language from the Browser or user's preferences.
*
* @return language code
*/
private String resolveDestLanguage() {
String lang = configuration.getDestLanguage();
if (null == lang || "".equals(lang)) {
lang = Language.RUSSIAN.getLangCode();
}
return lang;
}
}