// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.service;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.talend.core.model.general.ModuleNeeded;
import org.talend.core.model.general.ModuleNeeded.ELibraryInstallStatus;
import org.talend.librariesmanager.model.ModulesNeededProvider;
import org.talend.librariesmanager.ui.dialogs.ExternalModulesInstallDialogWithProgress;
import com.amalto.workbench.i18n.Messages;
/**
* created by HHB on 2013-9-22 Detailled comment
*
*/
public class MissingJarService {
private MissingJarService() {
}
private static MissingJarService instance = new MissingJarService();
public static MissingJarService getInstance() {
return instance;
}
private List<String> getMissingJarList() {
List<ModuleNeeded> modulesNeeded = ModulesNeededProvider.getModulesNeeded("plugin:org.talend.mdm.workbench"); //$NON-NLS-1$
List<String> jars = new LinkedList<String>();
for (ModuleNeeded module : modulesNeeded) {
if (module.getStatus() == ELibraryInstallStatus.NOT_INSTALLED) {
jars.add(module.getModuleName());
}
}
return jars.isEmpty() ? null : jars;
}
private boolean needRestart = false;
private boolean isOkForFirstTime = true;
public void initialCheck() {
isOkForFirstTime = getMissingJarList() == null;
}
public boolean checkMissingJar(boolean showUI) {
if (getMissingJarList() == null) {
if (!isOkForFirstTime) {
needRestart = true;
isOkForFirstTime = true;
}
if (needRestart) {
showRestartConfirmDialog();
return false;
} else {
return true;
}
}
if (showUI && !needRestart) {
showMissingJarDialog();
if (getMissingJarList() == null) {
needRestart = true;
showRestartConfirmDialog();
return false;
} else {
showOperationCanceldDialog();
}
}
return false;
}
private void showOperationCanceldDialog() {
Display.getDefault().syncExec(new Runnable() {
public void run() {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
MessageDialog.openWarning(shell, Messages.MissingJarService_InstallJarTitle,
Messages.MissingJarService_OperationAborted);
}
});
}
private void showRestartConfirmDialog() {
Display.getDefault().syncExec(new Runnable() {
public void run() {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
boolean restart = MessageDialog.openQuestion(shell, Messages.MissingJarService_InstallJarTitle,
Messages.MissingJarService_RestartStudioMsg);
if (restart) {
PlatformUI.getWorkbench().restart();
}
}
});
}
private void showMissingJarDialog() {
Display.getDefault().syncExec(new Runnable() {
public void run() {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
ExternalModulesInstallDialogWithProgress dialog = new ExternalModulesInstallDialogWithProgress(shell,
Messages.MissingJarDialog_title, Messages.MissingJarDialog_text, SWT.APPLICATION_MODAL);
dialog.showDialog(true, getMissingJarList().toArray(new String[0]));
}
});
}
}