[icalendar] Add relevant handling of last_update channel (#9616)

Also add migration for older things as compatible.
Fixes #9613

Signed-off-by: Michael Wodniok <michi@noorganization.org>
This commit is contained in:
Michael Wodniok 2020-12-31 16:48:24 +01:00 committed by GitHub
parent 43d1e43c33
commit ede94354f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 0 deletions

View File

@ -22,6 +22,7 @@ import org.openhab.core.thing.type.ChannelTypeUID;
* used across the whole binding.
*
* @author Michael Wodniok - Initial contribution
* @author Michael Wodniok - Added last_update related constants
*/
@NonNullByDefault
public class ICalendarBindingConstants {
@ -41,6 +42,7 @@ public class ICalendarBindingConstants {
public static final String CHANNEL_NEXT_EVENT_START = "next_start";
public static final String CHANNEL_NEXT_EVENT_END = "next_end";
public static final String CHANNEL_LAST_UPDATE = "last_update";
public static final ChannelTypeUID LAST_UPDATE_TYPE_UID = new ChannelTypeUID(BINDING_ID, "last_update");
// additional constants
public static final int HTTP_TIMEOUT_SECS = 60;

View File

@ -49,6 +49,8 @@ import org.openhab.core.thing.ThingStatus;
import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.thing.binding.BaseBridgeHandler;
import org.openhab.core.thing.binding.ThingHandler;
import org.openhab.core.thing.binding.builder.ChannelBuilder;
import org.openhab.core.thing.binding.builder.ThingBuilder;
import org.openhab.core.types.Command;
import org.openhab.core.types.RefreshType;
import org.openhab.core.types.UnDefType;
@ -61,6 +63,7 @@ import org.slf4j.LoggerFactory;
*
* @author Michael Wodniok - Initial contribution
* @author Andrew Fiddian-Green - Support for Command Tags embedded in the Event description
* @author Michael Wodniok - Added last_update-channel and additional needed handling of it
*/
@NonNullByDefault
public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdateListener {
@ -110,6 +113,7 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat
case CHANNEL_NEXT_EVENT_TITLE:
case CHANNEL_NEXT_EVENT_START:
case CHANNEL_NEXT_EVENT_END:
case CHANNEL_LAST_UPDATE:
if (command instanceof RefreshType) {
updateStates();
}
@ -121,6 +125,8 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat
@Override
public void initialize() {
migrateLastUpdateChannel();
final ICalendarConfiguration currentConfiguration = getConfigAs(ICalendarConfiguration.class);
configuration = currentConfiguration;
@ -259,6 +265,20 @@ public class ICalendarHandler extends BaseBridgeHandler implements CalendarUpdat
}
}
/**
* Migration for last_update-channel as this change is compatible to previous instances.
*/
private void migrateLastUpdateChannel() {
Thing thing = getThing();
if (thing.getChannel(CHANNEL_LAST_UPDATE) == null) {
logger.debug("last_update channel is missing in this Thing. Adding it.");
ThingBuilder thingBuilder = editThing();
ChannelBuilder channelBuilder = ChannelBuilder.create(new ChannelUID(thing.getUID(), CHANNEL_LAST_UPDATE));
thingBuilder.withChannel(channelBuilder.withType(LAST_UPDATE_TYPE_UID).build());
updateThing(thingBuilder.build());
}
}
/**
* Reloads the calendar from local ical-file. Replaces the class internal calendar - if loading succeeds. Else
* logging details at warn-level logger.