Java tutorial
/***************************************************************************** * Copyright (c) 2007, 2008 g-Eclipse Consortium * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Initial development of the original code was made for the * g-Eclipse project founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributors: * Ariel Garcia - initial API and implementation * - updated to new problem reporting *****************************************************************************/ package eu.geclipse.ui.problems; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import eu.geclipse.core.reporting.ISolution; import eu.geclipse.core.reporting.ISolver; import eu.geclipse.core.reporting.ProblemException; import eu.geclipse.core.util.TimeChecker; import eu.geclipse.ui.dialogs.ProblemDialog; /** * {@link ISolution} for checking the system time against * a set of reference time servers. * * @author agarcia */ public class CheckSystemTimeSolution implements ISolver { /* (non-Javadoc) * @see eu.geclipse.core.reporting.ISolver#solve() */ public void solve() { final TimeChecker tr = new TimeChecker(); boolean timeOK = false; boolean timeCheckValid = true; // Get the shell first IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); Shell shell = null; if (window != null) { shell = window.getShell(); } IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { tr.checkSysTime(monitor); } catch (ProblemException pe) { throw new InvocationTargetException(pe); } } }; // Run the dialog try { new ProgressMonitorDialog(shell).run(true, true, runnable); } catch (InterruptedException ie) { // The user interrupted the operation timeCheckValid = false; } catch (InvocationTargetException ite) { // The system time check failed, inform the user Throwable cause = ite.getCause(); if (cause instanceof ProblemException) { String title = Messages.getString("CheckSystemTimeSolution.failed_dialog_title"); //$NON-NLS-1$ String msg = Messages.getString("CheckSystemTimeSolution.failed_check_system_time"); //$NON-NLS-1$ ProblemDialog.openProblem(shell, title, msg, cause); timeCheckValid = false; } } // Don't display any more dialogs, we cannot help further... if (!timeCheckValid) { return; } // The servers have been queried timeOK = tr.getTimeCheckStatus(); String title = Messages.getString("CheckSystemTimeSolution.dialog_title"); //$NON-NLS-1$ Shell parent = shell; // Construct the message string String message; if (timeOK) { message = Messages.getString("CheckSystemTimeSolution.system_clock_ok"); //$NON-NLS-1$ message = String.format(message, Integer.valueOf(tr.getTolerance())); } else { message = Messages.getString("CheckSystemTimeSolution.system_clock_not_ok"); //$NON-NLS-1$ message = String.format(message, Long.valueOf(tr.getOffset())); } message += ":\n\t" + tr.getSystemDate() + "\n\n"; //$NON-NLS-1$ //$NON-NLS-2$ message += Messages.getString("CheckSystemTimeSolution.queried_servers_report"); //$NON-NLS-1$ message += ":\n\t" + tr.getReferenceDate(); //$NON-NLS-1$ // Show the appropriate dialog if (timeOK) { MessageDialog.openInformation(parent, title, message); } else { MessageDialog.openError(parent, title, message); } } }