[DSL] Removed deleted things from internal map (#1058)
* Applied formatter * Fixed warnings * Removed deleted things from internal map Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>pull/1062/head
parent
8b72770bf3
commit
e8fcba2ccf
|
@ -56,7 +56,6 @@ import org.eclipse.smarthome.model.thing.thing.ModelPropertyContainer
|
||||||
import org.eclipse.smarthome.model.thing.thing.ModelThing
|
import org.eclipse.smarthome.model.thing.thing.ModelThing
|
||||||
import org.eclipse.smarthome.model.thing.thing.ThingModel
|
import org.eclipse.smarthome.model.thing.thing.ThingModel
|
||||||
import org.eclipse.xtend.lib.annotations.Data
|
import org.eclipse.xtend.lib.annotations.Data
|
||||||
import org.osgi.framework.FrameworkUtil
|
|
||||||
import org.osgi.service.component.annotations.Component
|
import org.osgi.service.component.annotations.Component
|
||||||
import org.osgi.service.component.annotations.Reference
|
import org.osgi.service.component.annotations.Reference
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
|
@ -74,7 +73,6 @@ import org.eclipse.smarthome.core.thing.type.AutoUpdatePolicy
|
||||||
* factory cannot load a thing yet (bug 470368),
|
* factory cannot load a thing yet (bug 470368),
|
||||||
* added delay until ThingTypes are fully loaded
|
* added delay until ThingTypes are fully loaded
|
||||||
* @author Markus Rathgeb - Add locale provider support
|
* @author Markus Rathgeb - Add locale provider support
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@Component(immediate=true, service=ThingProvider)
|
@Component(immediate=true, service=ThingProvider)
|
||||||
class GenericThingProvider extends AbstractProvider<Thing> implements ThingProvider, ModelRepositoryChangeListener, ReadyService.ReadyTracker {
|
class GenericThingProvider extends AbstractProvider<Thing> implements ThingProvider, ModelRepositoryChangeListener, ReadyService.ReadyTracker {
|
||||||
|
@ -153,7 +151,9 @@ class GenericThingProvider extends AbstractProvider<Thing> implements ThingProvi
|
||||||
val bindingId = new ThingUID(modelThing.bridgeUID).bindingId
|
val bindingId = new ThingUID(modelThing.bridgeUID).bindingId
|
||||||
return new ThingUID(bindingId, modelThing.thingTypeId, modelThing.thingId)
|
return new ThingUID(bindingId, modelThing.thingTypeId, modelThing.thingId)
|
||||||
} else {
|
} else {
|
||||||
logger.warn("Thing {} does not have a bridge so it needs to be defined in full notation like <bindingId>:{}:{}", modelThing.thingTypeId, modelThing.thingTypeId, modelThing.thingId)
|
logger.warn(
|
||||||
|
"Thing {} does not have a bridge so it needs to be defined in full notation like <bindingId>:{}:{}",
|
||||||
|
modelThing.thingTypeId, modelThing.thingTypeId, modelThing.thingId)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,7 +189,8 @@ class GenericThingProvider extends AbstractProvider<Thing> implements ThingProvi
|
||||||
return things + flattenModelThings(things.filter(typeof(ModelBridge)).map(b|b.things).flatten);
|
return things + flattenModelThings(things.filter(typeof(ModelBridge)).map(b|b.things).flatten);
|
||||||
}
|
}
|
||||||
|
|
||||||
def private void createThing(ModelThing modelThing, Collection<Thing> thingList, ThingHandlerFactory thingHandlerFactory) {
|
def private void createThing(ModelThing modelThing, Collection<Thing> thingList,
|
||||||
|
ThingHandlerFactory thingHandlerFactory) {
|
||||||
val ThingUID thingUID = getThingUID(modelThing, null)
|
val ThingUID thingUID = getThingUID(modelThing, null)
|
||||||
if (thingUID === null) {
|
if (thingUID === null) {
|
||||||
// ignore the Thing because its definition is broken
|
// ignore the Thing because its definition is broken
|
||||||
|
@ -372,12 +373,9 @@ class GenericThingProvider extends AbstractProvider<Thing> implements ThingProvi
|
||||||
parsedKind = ChannelKind.parse(kind)
|
parsedKind = ChannelKind.parse(kind)
|
||||||
}
|
}
|
||||||
|
|
||||||
var channel = ChannelBuilder.create(new ChannelUID(thingUID, id), itemType)
|
var channel = ChannelBuilder.create(new ChannelUID(thingUID, id), itemType).withKind(parsedKind).
|
||||||
.withKind(parsedKind)
|
withConfiguration(configuration).withType(channelTypeUID).withLabel(label).
|
||||||
.withConfiguration(configuration)
|
withAutoUpdatePolicy(autoUpdatePolicy)
|
||||||
.withType(channelTypeUID)
|
|
||||||
.withLabel(label)
|
|
||||||
.withAutoUpdatePolicy(autoUpdatePolicy)
|
|
||||||
channels += channel.build()
|
channels += channel.build()
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -386,8 +384,8 @@ class GenericThingProvider extends AbstractProvider<Thing> implements ThingProvi
|
||||||
val channelType = it.channelTypeUID.channelType
|
val channelType = it.channelTypeUID.channelType
|
||||||
if (channelType !== null) {
|
if (channelType !== null) {
|
||||||
channels +=
|
channels +=
|
||||||
ChannelBuilder.create(new ChannelUID(thingTypeUID, thingUID, id), channelType.itemType).
|
ChannelBuilder.create(new ChannelUID(thingUID, id), channelType.itemType).withType(
|
||||||
withType(it.channelTypeUID).withAutoUpdatePolicy(channelType.autoUpdatePolicy).build
|
it.channelTypeUID).withAutoUpdatePolicy(channelType.autoUpdatePolicy).build
|
||||||
} else {
|
} else {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"Could not create channel '{}' for thing '{}', because channel type '{}' could not be found.",
|
"Could not create channel '{}' for thing '{}', because channel type '{}' could not be found.",
|
||||||
|
@ -431,12 +429,12 @@ class GenericThingProvider extends AbstractProvider<Thing> implements ThingProvi
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException ex) {
|
} catch (NumberFormatException ex) {
|
||||||
logger.warn("Could not parse default value '{}' as type '{}': {}", defaultValue, parameterType, ex.getMessage(), ex);
|
logger.warn("Could not parse default value '{}' as type '{}': {}", defaultValue, parameterType,
|
||||||
|
ex.getMessage(), ex);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def private createConfiguration(ModelPropertyContainer propertyContainer) {
|
def private createConfiguration(ModelPropertyContainer propertyContainer) {
|
||||||
val configuration = new Configuration
|
val configuration = new Configuration
|
||||||
propertyContainer.properties.forEach [
|
propertyContainer.properties.forEach [
|
||||||
|
@ -490,12 +488,15 @@ class GenericThingProvider extends AbstractProvider<Thing> implements ThingProvi
|
||||||
val newThingUIDs = model.allThingUIDs
|
val newThingUIDs = model.allThingUIDs
|
||||||
val removedThings = oldThings.filter[!newThingUIDs.contains(it.UID)]
|
val removedThings = oldThings.filter[!newThingUIDs.contains(it.UID)]
|
||||||
removedThings.forEach [
|
removedThings.forEach [
|
||||||
|
logger.debug("Removing thing '{}' from model '{}'.", it.UID, modelName)
|
||||||
notifyListenersAboutRemovedElement
|
notifyListenersAboutRemovedElement
|
||||||
]
|
]
|
||||||
createThingsFromModel(modelName)
|
createThingsFromModel(modelName)
|
||||||
|
thingsMap.get(modelName).removeAll(removedThings)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case org.eclipse.smarthome.model.core.EventType.REMOVED: {
|
case org.eclipse.smarthome.model.core.EventType.REMOVED: {
|
||||||
|
logger.debug("Removing all things from model '{}'.", modelName)
|
||||||
val things = thingsMap.remove(modelName) ?: newArrayList
|
val things = thingsMap.remove(modelName) ?: newArrayList
|
||||||
things.forEach [
|
things.forEach [
|
||||||
notifyListenersAboutRemovedElement
|
notifyListenersAboutRemovedElement
|
||||||
|
|
Loading…
Reference in New Issue