[feed] Added Channel for link to feed item; Updated rome library to version 1.15 (#8893)

* Added Channel for link to latest feed; update rome deoendency to version 1.15
* Removed unsed interface
* Run spotless

Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
This commit is contained in:
Christoph Weitkamp 2020-10-30 20:27:09 +01:00 committed by GitHub
parent 9a5832a2ee
commit 1e89b792a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 43 additions and 41 deletions

View File

@ -35,8 +35,9 @@ The binding supports following channels
| Channel Type ID | Item Type | Description | | Channel Type ID | Item Type | Description |
|--------------------|-----------|-----------------------------------------------------| |--------------------|-----------|-----------------------------------------------------|
| latest-title | String | Contains the title of the last feed entry. | | 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-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. | | author | String | The name of the feed author, if author is present. |
| title | String | The title of the feed. | | title | String | The title of the feed. |
| description | String | Description of the feed. | | description | String | Description of the feed. |
@ -48,8 +49,8 @@ The binding supports following channels
Things: Things:
```java ```java
feed:feed:bbc [ URL="http://feeds.bbci.co.uk/news/video_and_audio/news_front_page/rss.xml?edition=uk"] 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:techCrunch [URL="http://feeds.feedburner.com/TechCrunch/", refresh=60]
``` ```
Items: Items:
@ -58,6 +59,7 @@ Items:
String latest_title {channel="feed:feed:bbc:latest-title"} String latest_title {channel="feed:feed:bbc:latest-title"}
String latest_description {channel="feed:feed:bbc:latest-description"} String latest_description {channel="feed:feed:bbc:latest-description"}
DateTime latest_date {channel="feed:feed:bbc:latest-date"} 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"} Number number_of_entries {channel="feed:feed:bbc:number-of-entries"}
String description {channel="feed:feed:bbc:description"} String description {channel="feed:feed:bbc:description"}
String author {channel="feed:feed:bbc:author"} String author {channel="feed:feed:bbc:author"}

View File

@ -16,13 +16,15 @@
<properties> <properties>
<bnd.importpackage>org.jaxen.*;resolution:=optional</bnd.importpackage> <bnd.importpackage>org.jaxen.*;resolution:=optional</bnd.importpackage>
<rome.version>1.15.0</rome.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.rometools</groupId> <groupId>com.rometools</groupId>
<artifactId>rome</artifactId> <artifactId>rome</artifactId>
<version>1.12.0</version> <version>${rome.version}</version>
<scope>compile</scope> <scope>compile</scope>
<exclusions> <exclusions>
<exclusion> <exclusion>
@ -34,7 +36,7 @@
<dependency> <dependency>
<groupId>com.rometools</groupId> <groupId>com.rometools</groupId>
<artifactId>rome-utils</artifactId> <artifactId>rome-utils</artifactId>
<version>1.12.0</version> <version>${rome.version}</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -41,10 +41,15 @@ public class FeedBindingConstants {
public static final String CHANNEL_LATEST_TITLE = "latest-title"; 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"; 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. * Description of the feed.
*/ */

View File

@ -162,6 +162,13 @@ public class FeedHandler extends BaseThingHandler {
state = new StringType(getValueSafely(description)); state = new StringType(getValueSafely(description));
} }
break; 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_LATEST_PUBLISHED_DATE:
case CHANNEL_LAST_UPDATE: case CHANNEL_LAST_UPDATE:
if (latestEntry == null || latestEntry.getPublishedDate() == null) { if (latestEntry == null || latestEntry.getPublishedDate() == null) {

View File

@ -19,6 +19,7 @@
<channel id="latest-title" typeId="latest-title"/> <channel id="latest-title" typeId="latest-title"/>
<channel id="latest-description" typeId="latest-description"/> <channel id="latest-description" typeId="latest-description"/>
<channel id="latest-date" typeId="latest-date"/> <channel id="latest-date" typeId="latest-date"/>
<channel id="latest-link" typeId="latest-link"/>
<channel id="author" typeId="author"/> <channel id="author" typeId="author"/>
<channel id="description" typeId="description"/> <channel id="description" typeId="description"/>
<channel id="title" typeId="title"/> <channel id="title" typeId="title"/>
@ -52,7 +53,7 @@
<channel-type id="latest-description"> <channel-type id="latest-description">
<item-type>String</item-type> <item-type>String</item-type>
<label>Latest Description</label> <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"/> <state readOnly="true" pattern="%s"/>
</channel-type> </channel-type>
@ -63,6 +64,13 @@
<state readOnly="true" pattern="%tc %n"/> <state readOnly="true" pattern="%tc %n"/>
</channel-type> </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"> <channel-type id="author" advanced="true">
<item-type>String</item-type> <item-type>String</item-type>
<label>Author</label> <label>Author</label>

View File

@ -16,6 +16,8 @@
<properties> <properties>
<org.osgi.service.http.port>9090</org.osgi.service.http.port> <org.osgi.service.http.port>9090</org.osgi.service.http.port>
<rome.version>1.15.0</rome.version>
</properties> </properties>
<dependencies> <dependencies>
@ -27,7 +29,7 @@
<dependency> <dependency>
<groupId>com.rometools</groupId> <groupId>com.rometools</groupId>
<artifactId>rome</artifactId> <artifactId>rome</artifactId>
<version>1.12.0</version> <version>${rome.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.servicemix.bundles</groupId> <groupId>org.apache.servicemix.bundles</groupId>

View File

@ -15,7 +15,6 @@ package org.openhab.binding.feed.test;
import static java.lang.Thread.sleep; import static java.lang.Thread.sleep;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
import static org.openhab.core.thing.ThingStatus.*;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -46,6 +45,7 @@ import org.openhab.core.thing.ManagedThingProvider;
import org.openhab.core.thing.Thing; import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingProvider; import org.openhab.core.thing.ThingProvider;
import org.openhab.core.thing.ThingRegistry; import org.openhab.core.thing.ThingRegistry;
import org.openhab.core.thing.ThingStatus;
import org.openhab.core.thing.ThingStatusDetail; import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.thing.ThingUID; import org.openhab.core.thing.ThingUID;
import org.openhab.core.thing.binding.builder.ChannelBuilder; import org.openhab.core.thing.binding.builder.ChannelBuilder;
@ -232,7 +232,7 @@ public class FeedHandlerTest extends JavaOSGiTest {
// This will ensure that the configuration is read before the channelLinked() method in FeedHandler is called ! // This will ensure that the configuration is read before the channelLinked() method in FeedHandler is called !
waitForAssert(() -> { waitForAssert(() -> {
assertThat(feedThing.getStatus(), anyOf(is(ONLINE), is(OFFLINE))); assertThat(feedThing.getStatus(), anyOf(is(ThingStatus.ONLINE), is(ThingStatus.OFFLINE)));
}, 60000, DFL_SLEEP_TIME); }, 60000, DFL_SLEEP_TIME);
initializeItem(channelUID); initializeItem(channelUID);
} }
@ -270,7 +270,7 @@ public class FeedHandlerTest extends JavaOSGiTest {
initializeDefaultFeedHandler(); initializeDefaultFeedHandler();
waitForAssert(() -> { 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())); assertThat("Item's state is not updated on initialize", currentItemState, is(notNullValue()));
}); });
@ -294,7 +294,7 @@ public class FeedHandlerTest extends JavaOSGiTest {
waitForAssert(() -> { waitForAssert(() -> {
assertThat("Error occurred while trying to connect to server. Content is not downloaded!", 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(() -> { waitForAssert(() -> {
@ -361,7 +361,7 @@ public class FeedHandlerTest extends JavaOSGiTest {
feedHandler.handleCommand(channelUID, RefreshType.REFRESH); feedHandler.handleCommand(channelUID, RefreshType.REFRESH);
waitForAssert(() -> { waitForAssert(() -> {
assertThat(feedThing.getStatus(), is(equalTo(OFFLINE))); assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.OFFLINE)));
}); });
servlet.httpStatus = HttpStatus.OK_200; servlet.httpStatus = HttpStatus.OK_200;
@ -372,7 +372,7 @@ public class FeedHandlerTest extends JavaOSGiTest {
feedHandler.handleCommand(channelUID, RefreshType.REFRESH); feedHandler.handleCommand(channelUID, RefreshType.REFRESH);
waitForAssert(() -> { waitForAssert(() -> {
assertThat(feedThing.getStatus(), is(equalTo(ONLINE))); assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.ONLINE)));
}); });
} }
@ -384,7 +384,7 @@ public class FeedHandlerTest extends JavaOSGiTest {
initializeFeedHandler(invalidURL); initializeFeedHandler(invalidURL);
waitForAssert(() -> { waitForAssert(() -> {
assertThat(feedThing.getStatus(), is(equalTo(OFFLINE))); assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.OFFLINE)));
assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.CONFIGURATION_ERROR))); assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.CONFIGURATION_ERROR)));
}); });
} }
@ -397,7 +397,7 @@ public class FeedHandlerTest extends JavaOSGiTest {
initializeFeedHandler(invalidURL); initializeFeedHandler(invalidURL);
waitForAssert(() -> { waitForAssert(() -> {
assertThat(feedThing.getStatus(), is(equalTo(OFFLINE))); assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.OFFLINE)));
assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.COMMUNICATION_ERROR))); assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.COMMUNICATION_ERROR)));
}, 30000, DFL_SLEEP_TIME); }, 30000, DFL_SLEEP_TIME);
} }
@ -410,7 +410,7 @@ public class FeedHandlerTest extends JavaOSGiTest {
initializeFeedHandler(invalidURL); initializeFeedHandler(invalidURL);
waitForAssert(() -> { waitForAssert(() -> {
assertThat(feedThing.getStatus(), is(equalTo(OFFLINE))); assertThat(feedThing.getStatus(), is(equalTo(ThingStatus.OFFLINE)));
assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.COMMUNICATION_ERROR))); assertThat(feedThing.getStatusInfo().getStatusDetail(), is(equalTo(ThingStatusDetail.COMMUNICATION_ERROR)));
}); });
} }

View File

@ -1,24 +0,0 @@
/**
* 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 {
}