blob: 2d378c166c49afeeb72a920d868dcfa5ed9fbcbb [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2003, 2016 IBM Corporation and others.
* 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
*
* Contributors:
* IBM Corporation - Initial API and implementation
**********************************************************************/
package org.eclipse.wst.server.ui;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
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.swt.widgets.Shell;
import org.eclipse.wst.server.core.ServerCore;
import org.eclipse.wst.server.discovery.Discovery;
import org.eclipse.wst.server.ui.internal.Messages;
import org.eclipse.wst.server.ui.internal.ProgressUtil;
import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
/**
* Server UI utility methods.
* <p>
* This class provides all its functionality through static members.
* It is not intended to be subclassed or instantiated.
* </p>
* @since 1.0
*/
public final class ServerUIUtil {
/**
* Cannot instantiate ServerUIUtil - use static methods.
*/
private ServerUIUtil() {
// can't create
}
/**
* Open the new runtime wizard. The given typeId and versionId are used to filter
* the set of runtimes displayed.
*
* @param shell a shell to use when creating the wizard
* @param typeId a module type id, or null for any module type
* @param versionId a module version, or null for any version
* @return <code>true</code> if a runtime was created, or
* <code>false</code> otherwise
*/
public static boolean showNewRuntimeWizard(Shell shell, String typeId, String versionId) {
return ServerUIPlugin.showNewRuntimeWizard(shell, typeId, versionId, null);
}
/**
* Open the new runtime wizard. The given typeId, versionId, and runtimeTypeId are
* used to filter the set of runtimes displayed.
*
* @param shell a shell to use when creating the wizard
* @param typeId a module type id, or null for any module type
* @param versionId a module version, or null for any version
* @param runtimeTypeId a server runtime type, or null for any type
* @return <code>true</code> if a runtime was created, or
* <code>false</code> otherwise
* @since 2.0
*/
public static boolean showNewRuntimeWizard(Shell shell, String typeId, String versionId, String runtimeTypeId) {
return ServerUIPlugin.showNewRuntimeWizard(shell, typeId, versionId, runtimeTypeId);
}
/**
* Open the new server wizard.
*
* @param shell a shell to use when creating the wizard
* @param typeId a module type id, or null for any module type
* @param versionId a module version, or null for any version
* @param serverTypeId a server runtime type, or null for any type
* @return <code>true</code> if a server was created, or
* <code>false</code> otherwise
* @since 2.0
*/
public static boolean showNewServerWizard(Shell shell, String typeId, String versionId, String serverTypeId) {
return ServerUIPlugin.showNewServerWizard(shell, typeId, versionId, serverTypeId);
}
public static Job refreshServerNode(final boolean userInitiated){
class RefreshJob extends Job{
public RefreshJob() {
super(Messages.jobRefreshingServerAdapter);
}
public boolean belongsTo(Object family) {
return "org.eclipse.wst.server.ui.family".equals(family);
}
protected IStatus run(IProgressMonitor monitor) {
monitor = ProgressUtil.getMonitorFor(monitor);
monitor.beginTask("", 1000);
refreshButtonText = Messages.cacheUpdate_refreshing;
if (cacheUpdateJobListener != null)
cacheUpdateJobListener.start();
Discovery.refreshServerAdapters(ProgressUtil.getSubMonitorFor(monitor, 500));
monitor.worked(700);
refreshButtonText = Messages.cacheUpdate_refreshNow;
if (cacheUpdateJobListener!= null)
cacheUpdateJobListener.done();
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
ServerCore.resetDownloadableServers();
monitor.worked(900);
return Status.OK_STATUS;
}
}
if (!userInitiated){
if (!ServerUIPlugin.getPreferences().getExtAdapter())
return null;
int cacheFrequency = ServerUIPlugin.getPreferences().getCacheFrequency();
if (cacheFrequency == 0 /*Manual*/){
// User will explicitly refresh
return null;
}
String dateString = Discovery.getLastUpdatedDate();
DateFormat df = new SimpleDateFormat("EEE MMM dd yyyy kk:mm:ss zzz", Locale.ENGLISH);
try {
Date lastUpDatedDate = ((dateString == null) || (dateString.equals(Messages.cacheUpdate_never)))
? new Date(0) : df.parse(dateString.trim());
Date currentDate = new Date(System.currentTimeMillis());
Calendar cal = Calendar.getInstance();
cal.setTime(lastUpDatedDate);
switch(cacheFrequency){
case 1: //daily
cal.add(Calendar.DATE, 1); // add 1 day
if (cal.getTime().after(currentDate))
return null;
break;
case 2: //weekly
cal.add(Calendar.DATE, 7); // add 7 days
if (cal.getTime().after(currentDate))
return null;
break;
case 3: //monthly
cal.add(Calendar.MONTH, 1); // add 1 Month
if (cal.getTime().after(currentDate))
return null;
break;
case 4: //quarterly
cal.add(Calendar.MONTH, 3); // add 3 Months
if (cal.getTime().after(currentDate))
return null;
break;
}
} catch (ParseException e) {
// The last updated date is malformed. Continue further to do a refresh.
}
}
RefreshJob job = new RefreshJob();
job.schedule();
job.setPriority(Job.SHORT);
return job;
}
public static String refreshButtonText = Messages.cacheUpdate_refreshNow;
static ICacheUpdateListener cacheUpdateJobListener;
public static void setListener(ICacheUpdateListener listener){
cacheUpdateJobListener = listener;
}
}