/*******************************************************************************
* Copyright (c) 2014 Pivotal Software, Inc. and others.
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
* License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
*
* Contributors:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.gettingstarted.dashboard;
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.springsource.ide.eclipse.commons.browser.IEclipseToBrowserFunction;
import org.springsource.ide.eclipse.dashboard.internal.ui.feeds.FeedMonitor;
import org.springsource.ide.eclipse.dashboard.internal.ui.feeds.IFeedListener;
/**
* @author Miles Parker
*
* Code refactored from org.springsource.ide.eclipse.dashboard.internal.ui
* .editors.DashboardMainPage:
*
* @author Terry Denney
* @author Christian Dupuis
* @author Steffen Pingel
* @author Leo Dos Santos
*/
public abstract class FeedProvider extends IEclipseToBrowserFunction.Extension {
private static final long TIMEOUT = 20000;
private boolean isTimeout;
public FeedProvider(final String feedId) {
FeedMonitor.getInstance().addListener(new IFeedListener() {
@Override
public void updated(String id) {
if (id.equals(feedId)) {
notifyIfReady();
}
}
});
Job timeouter = new Job("Timeouter") {
@Override
protected IStatus run(IProgressMonitor arg0) {
isTimeout = true;
notifyIfReady();
return Status.OK_STATUS;
}
};
timeouter.setSystem(true);
timeouter.schedule(TIMEOUT);
}
/*
* (non-Javadoc)
*
* @see
* org.springsource.ide.eclipse.commons.browser.IBrowserElementProvider#
* dispose()
*/
@Override
public void dispose() {
FeedMonitor.getInstance().markRead();
}
@Override
public final String getDynamicArgumentValue(String id) {
if ("html".equals(id)) {
String html = getFeedHtml();
if (html!=null) {
return html;
} else if (isTimeout()) {
return getTimeoutMessage();
}
}
return null;
}
public String getTimeoutMessage() {
return "<p>No entries. Check internet connection?</p>";
}
private boolean isTimeout() {
return isTimeout;
}
public abstract String getFeedHtml();
public abstract boolean isFeedReady();
public final boolean isReady() {
boolean ready = isTimeout || isFeedReady();
return ready;
}
}