package org.eclipselabs.e4.tapiji.translator.ui.treeviewer.handler;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import javax.inject.Named;
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.e4.core.di.annotations.CanExecute;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.swt.widgets.Shell;
import org.eclipselabs.e4.tapiji.translator.core.api.IGlossaryService;
import org.eclipselabs.e4.tapiji.translator.model.Term;
import org.eclipselabs.e4.tapiji.translator.preference.StoreInstanceState;
import org.eclipselabs.e4.tapiji.utils.LocaleUtils;
public final class RemoveTranslationHandler {
private final ArrayList<Locale> languageLocales;
private final ArrayList<String> languageCodes;
public RemoveTranslationHandler() {
languageLocales = new ArrayList<Locale>();
languageCodes = new ArrayList<String>();
}
@Execute
public void execute(@Optional @Named(IServiceConstants.ACTIVE_SELECTION) final Term term, @Named(IServiceConstants.ACTIVE_SHELL) final Shell shell, final IGlossaryService glossaryService, final StoreInstanceState storeInstanceState) {
/* final CheckedTreeSelectionDialog localeDialog = new CheckedTreeSelectionDialog(shell, new LocaleLabelProvider(), new LocaleContentProvider());
localeDialog.setInput(generateLocales(glossaryService.getTranslations(), storeInstanceState.getReferenceLanguage()));
localeDialog.setTitle("Translation Selection");
if (localeDialog.open() == Window.OK) {
removeTranslationAsync(glossaryService, localeDialog.getResult());
}*/
}
private void removeTranslationAsync(final IGlossaryService glossaryService, final Object[] translations) {
final Job job = new Job("Remove Locales") {
@Override
protected IStatus run(final IProgressMonitor monitor) {
final List<String> toRemove = new ArrayList<String>();
for (final Object delLoc : translations) {
toRemove.add(languageCodes.get(languageLocales.indexOf(delLoc)));
}
glossaryService.removeLocales(toRemove);
return Status.OK_STATUS;
}
};
job.schedule();
}
private ArrayList<Locale> generateLocales(final String[] translations, final String referenceLanguage) {
final ArrayList<Locale> locales = new ArrayList<Locale>();
languageLocales.clear();
for (final String languageCode : translations) {
if (languageCode.equalsIgnoreCase(referenceLanguage)) {
continue;
}
locales.add(LocaleUtils.getLocaleFromLanguageCode(languageCode));
languageLocales.add(LocaleUtils.getLocaleFromLanguageCode(languageCode));
languageCodes.add(languageCode);
}
return locales;
}
@CanExecute
public boolean canExecute(final IGlossaryService glossaryService) {
if ((null == glossaryService.getGlossary()) || (glossaryService.getTranslations().length == 1) || (glossaryService.getTranslations().length == 0)) {
return false;
}
return true;
}
}