| Channel Type ID | Item Type | Description |
|--------------------|-----------|-----------------------------------------------------|
| latest-title | String | Contains the title of the last feed entry. |
-| latest-description | String | Contains the description of last feed entry. |
+| latest-description | String | Contains the description of the last feed entry. |
| latest-date | DateTime | Contains the published date of the last feed entry. |
+| latest-link | String | Contains the link of the last feed entry. |
| author | String | The name of the feed author, if author is present. |
| title | String | The title of the feed. |
| description | String | Description of the feed. |
Things:
```java
-feed:feed:bbc [ URL="http://feeds.bbci.co.uk/news/video_and_audio/news_front_page/rss.xml?edition=uk"]
-feed:feed:techCrunch [ URL="http://feeds.feedburner.com/TechCrunch/", refresh=60]
+feed:feed:bbc [URL="http://feeds.bbci.co.uk/news/video_and_audio/news_front_page/rss.xml?edition=uk"]
+feed:feed:techCrunch [URL="http://feeds.feedburner.com/TechCrunch/", refresh=60]
```
Items:
String latest_title {channel="feed:feed:bbc:latest-title"}
String latest_description {channel="feed:feed:bbc:latest-description"}
DateTime latest_date {channel="feed:feed:bbc:latest-date"}
+String latest_link {channel="feed:feed:bbc:latest-link"}
Number number_of_entries {channel="feed:feed:bbc:number-of-entries"}
String description {channel="feed:feed:bbc:description"}
String author {channel="feed:feed:bbc:author"}
<properties>
<bnd.importpackage>org.jaxen.*;resolution:=optional</bnd.importpackage>
+
+ <rome.version>1.15.0</rome.version>
</properties>
<dependencies>
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome</artifactId>
- <version>1.12.0</version>
+ <version>${rome.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome-utils</artifactId>
- <version>1.12.0</version>
+ <version>${rome.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
public static final String CHANNEL_LATEST_TITLE = "latest-title";
/**
- * Contains the description of last feed entry.
+ * Contains the description of the last feed entry.
*/
public static final String CHANNEL_LATEST_DESCRIPTION = "latest-description";
+ /**
+ * Contains the link to the last feed entry.
+ */
+ public static final String CHANNEL_LATEST_LINK = "latest-link";
+
/**
* Description of the feed.
*/
state = new StringType(getValueSafely(description));
}
break;
+ case CHANNEL_LATEST_LINK:
+ if (latestEntry == null || latestEntry.getLink() == null) {
+ state = UnDefType.UNDEF;
+ } else {
+ state = new StringType(getValueSafely(latestEntry.getLink()));
+ }
+ break;
case CHANNEL_LATEST_PUBLISHED_DATE:
case CHANNEL_LAST_UPDATE:
if (latestEntry == null || latestEntry.getPublishedDate() == null) {
<channel id="latest-title" typeId="latest-title"/>
<channel id="latest-description" typeId="latest-description"/>
<channel id="latest-date" typeId="latest-date"/>
+ <channel id="latest-link" typeId="latest-link"/>
<channel id="author" typeId="author"/>
<channel id="description" typeId="description"/>
<channel id="title" typeId="title"/>
<channel-type id="latest-description">
<item-type>String</item-type>
<label>Latest Description</label>
- <description>Contains the description of last feed entry.</description>
+ <description>Contains the description of the last feed entry.</description>
<state readOnly="true" pattern="%s"/>
</channel-type>
<state readOnly="true" pattern="%tc %n"/>
</channel-type>
+ <channel-type id="latest-link">
+ <item-type>String</item-type>
+ <label>Latest Link</label>
+ <description>Contains the link of the last feed entry.</description>
+ <state readOnly="true" pattern="%s"/>
+ </channel-type>
+
<channel-type id="author" advanced="true">
<item-type>String</item-type>
<label>Author</label>
<properties>
<org.osgi.service.http.port>9090</org.osgi.service.http.port>
+
+ <rome.version>1.15.0</rome.version>
</properties>
<dependencies>
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome</artifactId>
- <version>1.12.0</version>
+ <version>${rome.version}</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
import static java.lang.Thread.sleep;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.openhab.core.thing.ThingStatus.*;
import java.io.IOException;
import java.math.BigDecimal;
import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingProvider;
import org.openhab.core.thing.ThingRegistry;
+import org.openhab.core.thing.ThingStatus;
import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.thing.ThingUID;
import org.openhab.core.thing.binding.builder.ChannelBuilder;
// This will ensure that the configuration is read before the channelLinked() method in FeedHandler is called !
waitForAssert(() -> {
- assertThat(feedThing.getStatus(), anyOf(is(ONLINE), is(OFFLINE)));
+ assertThat(feedThing.getStatus(), anyOf(is(ThingStatus.ONLINE), is(ThingStatus.OFFLINE)));
}, 60000, DFL_SLEEP_TIME);
initializeItem(channelUID);
}
initializeDefaultFeedHandler();
waitForAssert(() -> {
- assertThat("Feed Thing can not be initialized", feedThing.getStatus(), is(equalTo(ONLINE)));
+ assertThat("Feed Thing can not be initialized", feedThing.getStatus(), is(equalTo(ThingStatus.ONLINE)));
assertThat("Item's state is not updated on initialize", currentItemState, is(notNullValue()));
});
waitForAssert(() -> {
assertThat("Error occurred while trying to connect to server. Content is not downloaded!",
- feedThing.getStatus(), is(equalTo(ONLINE)));
+ feedThing.getStatus(), is(equalTo(ThingStatus.ONLINE)));
});
waitForAssert(() -> {
feedHandler.handleCommand(channelUID, RefreshType.REFRESH);
waitForAssert(() -> {
- assertThat(feedThing.getStatus(), is(equalTo(OFFLINE)));
+ assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.OFFLINE)));
});
servlet.httpStatus = HttpStatus.OK_200;
feedHandler.handleCommand(channelUID, RefreshType.REFRESH);
waitForAssert(() -> {
- assertThat(feedThing.getStatus(), is(equalTo(ONLINE)));
+ assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.ONLINE)));
});
}
initializeFeedHandler(invalidURL);
waitForAssert(() -> {
- assertThat(feedThing.getStatus(), is(equalTo(OFFLINE)));
+ assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.OFFLINE)));
assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.CONFIGURATION_ERROR)));
});
}
initializeFeedHandler(invalidURL);
waitForAssert(() -> {
- assertThat(feedThing.getStatus(), is(equalTo(OFFLINE)));
+ assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.OFFLINE)));
assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.COMMUNICATION_ERROR)));
}, 30000, DFL_SLEEP_TIME);
}
initializeFeedHandler(invalidURL);
waitForAssert(() -> {
- assertThat(feedThing.getStatus(), is(equalTo(OFFLINE)));
+ assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.OFFLINE)));
assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.COMMUNICATION_ERROR)));
});
}
+++ /dev/null
-/**
- * Copyright (c) 2010-2020 Contributors to the openHAB project
- *
- * See the NOTICE file(s) distributed with this work for additional
- * information.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License 2.0 which is available at
- * http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- */
-package org.openhab.binding.feed.test;
-
-import org.eclipse.jdt.annotation.NonNullByDefault;
-
-/**
- * This interface is used to mark tests that take too much time
- *
- * @author Svilen Valkanov - Initial contribution
- */
-@NonNullByDefault
-public interface SlowTests {
-}