/***************************************************************************** * 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 ); } } }