package org.eclipselabs.e4.tapiji.translator.ui.window; import java.io.File; 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.Execute; import org.eclipse.e4.ui.services.IServiceConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; import org.eclipselabs.e4.tapiji.logger.Log; import org.eclipselabs.e4.tapiji.translator.core.api.IGlossaryService; import org.eclipselabs.e4.tapiji.translator.preference.StoreInstanceState; import org.eclipselabs.e4.tapiji.utils.FileUtils; public class OpenGlossaryHandler { private static final String TAG = OpenGlossaryHandler.class.getSimpleName(); @Execute public void execute(@Named(IServiceConstants.ACTIVE_SHELL) final Shell shell, final IGlossaryService glossaryService, final StoreInstanceState instanceState) { final String[] fileNames = FileUtils.queryFileName(shell, "Open Glossary", SWT.OPEN, FileUtils.XML_FILE_ENDINGS); if (fileNames != null) { final String fileName = fileNames[0]; if (FileUtils.isGlossary(fileName)) { final File file = new File(fileName); loadGlossaryAsync(glossaryService, file); instanceState.setGlossaryFile(file.toString()); } else { showErrorDialog(shell, fileName); Log.i(TAG, String.format("Cannot open Glossary %s", fileName)); return; } } } private void loadGlossaryAsync(final IGlossaryService glossaryService, final File file) { final Job job = new Job("loading") { @Override protected IStatus run(final IProgressMonitor monitor) { glossaryService.openGlossary(file); return Status.OK_STATUS; } }; job.schedule(); } private void showErrorDialog(final Shell shell, final String fileName) { MessageDialog.openError(shell, String.format("Cannot open Glossary %s", fileName), "The choosen file does not represent a Glossary!"); } }