/**
* Copyright (c) 2016 Codetrails GmbH.
* 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:
* Andreas Sewe - initial API and implementation.
*/
package org.eclipse.recommenders.internal.news.rcp.poll;
import static java.util.concurrent.TimeUnit.MINUTES;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
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.e4.core.services.events.IEventBroker;
import org.eclipse.recommenders.internal.news.rcp.FeedDescriptor;
import org.eclipse.recommenders.internal.news.rcp.NewsRcpPreferences;
import org.eclipse.recommenders.internal.news.rcp.TopicConstants;
import org.eclipse.recommenders.news.api.poll.INewsPollingService;
import org.eclipse.recommenders.news.api.poll.PollingPolicy;
import org.eclipse.recommenders.news.api.poll.PollingRequest;
import org.eclipse.recommenders.news.api.poll.PollingResult;
public class PollFeedsJob extends Job {
private final boolean periodic;
private final NewsRcpPreferences preferences;
private final INewsPollingService pollingService;
private final IEventBroker eventBroker;
public PollFeedsJob(String name, boolean periodic, NewsRcpPreferences preferences,
INewsPollingService pollingService, IEventBroker eventBroker) {
super(name);
this.periodic = periodic;
this.preferences = preferences;
this.pollingService = pollingService;
this.eventBroker = eventBroker;
}
@Override
protected IStatus run(IProgressMonitor monitor) {
if (periodic && preferences.isEnabled()) {
schedule(MINUTES.toMillis(preferences.getPollingInterval()));
}
List<FeedDescriptor> feeds = preferences.getFeedDescriptors();
List<PollingRequest> requests = new ArrayList<>();
for (FeedDescriptor feed : feeds) {
if (!feed.isEnabled()) {
continue;
}
PollingPolicy policy = periodic ? PollingPolicy.every(feed.getPollingInterval(), MINUTES)
: PollingPolicy.always();
PollingRequest request = new PollingRequest(feed.getUri(), policy);
requests.add(request);
}
Collection<PollingResult> results = pollingService.poll(requests, monitor);
eventBroker.post(TopicConstants.POLLING_RESULTS, results);
return Status.OK_STATUS; // TODO Real error status
}
}