blob: b1b240915adc914a6c21789842420ca93f1a83ce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Tasktop Technologies - initial API and implementation
* Red Hat, Inc - Bug 412953.
*******************************************************************************/
package org.eclipse.mylyn.internal.commons.notifications.feed;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.core.StatusHandler;
/**
* @author Steffen Pingel
*/
public class FeedEntry extends ServiceMessage {
private final RSSItem source;
public FeedEntry(String eventId, RSSItem source) {
super(eventId);
this.source = source;
setId(source.getGuid());
setTitle(source.getTitle());
if (source.getDescription() != null) {
setDescription(source.getDescription());
}
setUrl(source.getLink());
setImage("dialog_messasge_info_image"); //$NON-NLS-1$
setDate(getDate(source));
}
private Date getDate(RSSItem source) {
SimpleDateFormat sdf = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss ZZZZ", Locale.US); //$NON-NLS-1$
try {
return sdf.parse(source.getPubDate());
} catch (ParseException e) {
StatusHandler.log(new Status(IStatus.ERROR, INotificationsFeed.ID_PLUGIN, "Processing pub date of \"" //$NON-NLS-1$
+ source + "\" failed", e)); //$NON-NLS-1$
}
return null;
}
public FeedEntry(String eventId) {
super(eventId);
this.source = null;
}
public RSSItem getSource() {
return source;
}
public List<String> getFilters(String key) {
Assert.isNotNull(key);
List<String> result = new ArrayList<String>();
if (source.getSubjects() != null) {
for (String subject : source.getSubjects()) {
String value = parseFilter(key, subject);
if (value != null) {
result.add(value);
}
}
}
return result;
}
public String getFilter(String key) {
Assert.isNotNull(key);
if (source.getSubjects() != null) {
for (String subject : source.getSubjects()) {
String value = parseFilter(key, subject);
if (value != null) {
return value;
}
}
}
return null;
}
private String parseFilter(String key, String category) {
if (category != null) {
int i = category.indexOf("="); //$NON-NLS-1$
if (i != -1) {
if (category.substring(0, i).trim().equals(key)) {
return category.substring(i + 1).trim();
}
}
}
return null;
}
}