package eu.jucy.ui.translation;
import helpers.GH;
import java.io.IOException;
import logger.LoggerFactory;
import org.apache.log4j.Logger;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.handlers.HandlerUtil;
import uc.DCClient;
import uihelpers.SUIJob;
import com.google.api.translate.Translate;
import eu.jucy.gui.texteditor.UCTextEditor;
public class TranslateHandler extends AbstractHandler implements IHandler {
private static final Logger logger = LoggerFactory.make();
static {
Translate.setHttpReferrer(DCClient.URL);
}
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
ISelection sel = HandlerUtil.getCurrentSelection(event);
if (sel instanceof IStructuredSelection && !sel.isEmpty()) {
IStructuredSelection ssel = (IStructuredSelection)sel;
final String s = ssel.getFirstElement().toString();
final UCTextEditor ucte = (UCTextEditor)HandlerUtil.getActiveEditorChecked(event);
new Job(Lang.Translate) {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
final String translated = translate(s);
new SUIJob() {
@Override
public void run() {
ucte.replaceSelectedText(translated, s);
}
}.schedule();
} catch(IOException ioe) {
logger.warn(ioe,ioe);
}
return Status.OK_STATUS;
}
}.schedule();
}
logger.debug("Sel: "+sel.toString() +" "+sel.isEmpty()+ " "+sel.getClass().getName());
return null;
}
private static String translate(String text) throws IOException {
if (!GH.isEmpty(text.trim())) {
try {
return Translate.execute(text
, TransPI.getLang(TransPI.sourceLanguage)
, TransPI.getLang(TransPI.targetLanguage));
} catch (Exception e) {
throw new IOException(e);
}
} else {
return text;
}
}
}