test_class.declarator: bundleMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) Bundle bundleMock;
test_class.type: Bundle
test_class.var_name: bundleMock
test_class.declarator: bundleResolverMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) BundleResolver bundleResolverMock;
test_class.type: BundleResolver
test_class.var_name: bundleResolverMock
test_class.declarator: channelGroupTypeRegistryMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) ChannelGroupTypeRegistry channelGroupTypeRegistryMock;
test_class.type: ChannelGroupTypeRegistry
test_class.var_name: channelGroupTypeRegistryMock
test_class.declarator: channelTypeRegistryMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) ChannelTypeRegistry channelTypeRegistryMock;
test_class.type: ChannelTypeRegistry
test_class.var_name: channelTypeRegistryMock
test_class.declarator: communicationManagerMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) CommunicationManager communicationManagerMock;
test_class.type: CommunicationManager
test_class.var_name: communicationManagerMock
test_class.declarator: eventPublisherMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) EventPublisher eventPublisherMock;
test_class.type: EventPublisher
test_class.var_name: eventPublisherMock
test_class.declarator: configDescriptionRegistryMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) ConfigDescriptionRegistry configDescriptionRegistryMock;
test_class.type: ConfigDescriptionRegistry
test_class.var_name: configDescriptionRegistryMock
test_class.declarator: configDescriptionValidatorMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) ConfigDescriptionValidator configDescriptionValidatorMock;
test_class.type: ConfigDescriptionValidator
test_class.var_name: configDescriptionValidatorMock
test_class.declarator: itemChannelLinkRegistryMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) ItemChannelLinkRegistry itemChannelLinkRegistryMock;
test_class.type: ItemChannelLinkRegistry
test_class.var_name: itemChannelLinkRegistryMock
test_class.declarator: thingTypeRegistryMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) ThingTypeRegistry thingTypeRegistryMock;
test_class.type: ThingTypeRegistry
test_class.var_name: thingTypeRegistryMock
test_class.declarator: readyServiceMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) ReadyService readyServiceMock;
test_class.type: ReadyService
test_class.var_name: readyServiceMock
test_class.declarator: safeCallerMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) SafeCaller safeCallerMock;
test_class.type: SafeCaller
test_class.var_name: safeCallerMock
test_class.declarator: storageMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) Storage<Object> storageMock;
test_class.type: Storage<Object>
test_class.var_name: storageMock
test_class.declarator: storageServiceMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) StorageService storageServiceMock;
test_class.type: StorageService
test_class.var_name: storageServiceMock
test_class.declarator: thingMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) Thing thingMock;
test_class.type: Thing
test_class.var_name: thingMock
test_class.declarator: thingRegistryMock
test_class.modifier: private @Mock @NonNullByDefault({})
test_class.original_string: private @Mock @NonNullByDefault({}) ThingRegistryImpl thingRegistryMock;
test_class.type: ThingRegistryImpl
test_class.var_name: thingRegistryMock
test_class.declarator: thingStatusInfoI18nLocalizationService = new ThingStatusInfoI18nLocalizationService()
test_class.modifier: private final
test_class.original_string: private final ThingStatusInfoI18nLocalizationService thingStatusInfoI18nLocalizationService = new ThingStatusInfoI18nLocalizationService();
test_class.type: ThingStatusInfoI18nLocalizationService
test_class.var_name: thingStatusInfoI18nLocalizationService
test_class.file: bundles/org.openhab.core.thing/src/test/java/org/openhab/core/thing/internal/ThingManagerImplTest.java
test_class.identifier: ThingManagerImplTest
test_case.body: @Test
      public void isEnabledWithUnknownThingUIDAndNonNullStorage() throws Exception {
          ThingUID unknownUID = new ThingUID("someBundle", "someType", "someID");
  
          when(storageMock.containsKey(unknownUID.getAsString())).thenReturn(false);
          when(storageServiceMock.getStorage(eq("thing_status_storage"), any(ClassLoader.class))).thenReturn(storageMock);
  
          ThingManagerImpl thingManager = createThingManager();
  
          assertTrue(thingManager.isEnabled(unknownUID));
  
          when(storageMock.containsKey(unknownUID.getAsString())).thenReturn(true);
          when(storageServiceMock.getStorage(eq("thing_status_storage"), any(ClassLoader.class))).thenReturn(storageMock);
  
          assertFalse(thingManager.isEnabled(unknownUID));
      }
test_case.class_method_signature: ThingManagerImplTest.isEnabledWithUnknownThingUIDAndNonNullStorage()
test_case.full_signature: @Test public void isEnabledWithUnknownThingUIDAndNonNullStorage()
test_case.identifier: isEnabledWithUnknownThingUIDAndNonNullStorage
test_case.invocations: thenReturn when containsKey getAsString thenReturn when getStorage eq any createThingManager assertTrue isEnabled thenReturn when containsKey getAsString thenReturn when getStorage eq any assertFalse isEnabled
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void isEnabledWithUnknownThingUIDAndNonNullStorage()
focal_class.declarator: XML_THING_TYPE = "esh.xmlThingTypes"
focal_class.modifier: static final
focal_class.original_string: static final String XML_THING_TYPE = "esh.xmlThingTypes";
focal_class.type: String
focal_class.var_name: XML_THING_TYPE
focal_class.declarator: THING_STATUS_STORAGE_NAME = "thing_status_storage"
focal_class.modifier: private static final
focal_class.original_string: private static final String THING_STATUS_STORAGE_NAME = "thing_status_storage";
focal_class.type: String
focal_class.var_name: THING_STATUS_STORAGE_NAME
focal_class.declarator: FORCEREMOVE_THREADPOOL_NAME = "forceRemove"
focal_class.modifier: private static final
focal_class.original_string: private static final String FORCEREMOVE_THREADPOOL_NAME = "forceRemove";
focal_class.type: String
focal_class.var_name: FORCEREMOVE_THREADPOOL_NAME
focal_class.declarator: THING_MANAGER_THREADPOOL_NAME = "thingManager"
focal_class.modifier: private static final
focal_class.original_string: private static final String THING_MANAGER_THREADPOOL_NAME = "thingManager";
focal_class.type: String
focal_class.var_name: THING_MANAGER_THREADPOOL_NAME
focal_class.declarator: logger = LoggerFactory.getLogger(ThingManagerImpl.class)
focal_class.modifier: private final
focal_class.original_string: private final Logger logger = LoggerFactory.getLogger(ThingManagerImpl.class);
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: scheduler = ThreadPoolManager
              .getScheduledPool(THING_MANAGER_THREADPOOL_NAME)
focal_class.modifier: private final
focal_class.original_string: private final ScheduledExecutorService scheduler = ThreadPoolManager
              .getScheduledPool(THING_MANAGER_THREADPOOL_NAME);
focal_class.type: ScheduledExecutorService
focal_class.var_name: scheduler
focal_class.declarator: thingHandlerFactories = new CopyOnWriteArrayList<>()
focal_class.modifier: private final
focal_class.original_string: private final List<ThingHandlerFactory> thingHandlerFactories = new CopyOnWriteArrayList<>();
focal_class.type: List<ThingHandlerFactory>
focal_class.var_name: thingHandlerFactories
focal_class.declarator: thingHandlers = new ConcurrentHashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<ThingUID, ThingHandler> thingHandlers = new ConcurrentHashMap<>();
focal_class.type: Map<ThingUID, ThingHandler>
focal_class.var_name: thingHandlers
focal_class.declarator: thingHandlersByFactory = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<ThingHandlerFactory, Set<ThingHandler>> thingHandlersByFactory = new HashMap<>();
focal_class.type: Map<ThingHandlerFactory, Set<ThingHandler>>
focal_class.var_name: thingHandlersByFactory
focal_class.declarator: things = new CopyOnWriteArraySet<>()
focal_class.modifier: private final
focal_class.original_string: private final Set<Thing> things = new CopyOnWriteArraySet<>();
focal_class.type: Set<Thing>
focal_class.var_name: things
focal_class.declarator: thingLocks = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<ThingUID, Lock> thingLocks = new HashMap<>();
focal_class.type: Map<ThingUID, Lock>
focal_class.var_name: thingLocks
focal_class.declarator: thingUpdatedLock = new HashSet<>()
focal_class.modifier: private final
focal_class.original_string: private final Set<ThingUID> thingUpdatedLock = new HashSet<>();
focal_class.type: Set<ThingUID>
focal_class.var_name: thingUpdatedLock
focal_class.declarator: loadedXmlThingTypes = new CopyOnWriteArraySet<>()
focal_class.modifier: private final
focal_class.original_string: private final Set<String> loadedXmlThingTypes = new CopyOnWriteArraySet<>();
focal_class.type: Set<String>
focal_class.var_name: loadedXmlThingTypes
focal_class.declarator: bundleResolver
focal_class.modifier: private
focal_class.original_string: private BundleResolver bundleResolver;
focal_class.type: BundleResolver
focal_class.var_name: bundleResolver
focal_class.declarator: channelGroupTypeRegistry
focal_class.modifier: private final
focal_class.original_string: private final ChannelGroupTypeRegistry channelGroupTypeRegistry;
focal_class.type: ChannelGroupTypeRegistry
focal_class.var_name: channelGroupTypeRegistry
focal_class.declarator: channelTypeRegistry
focal_class.modifier: private final
focal_class.original_string: private final ChannelTypeRegistry channelTypeRegistry;
focal_class.type: ChannelTypeRegistry
focal_class.var_name: channelTypeRegistry
focal_class.declarator: communicationManager
focal_class.modifier: private final
focal_class.original_string: private final CommunicationManager communicationManager;
focal_class.type: CommunicationManager
focal_class.var_name: communicationManager
focal_class.declarator: configDescriptionRegistry
focal_class.modifier: private final
focal_class.original_string: private final ConfigDescriptionRegistry configDescriptionRegistry;
focal_class.type: ConfigDescriptionRegistry
focal_class.var_name: configDescriptionRegistry
focal_class.declarator: configDescriptionValidator
focal_class.modifier: private final
focal_class.original_string: private final ConfigDescriptionValidator configDescriptionValidator;
focal_class.type: ConfigDescriptionValidator
focal_class.var_name: configDescriptionValidator
focal_class.declarator: eventPublisher
focal_class.modifier: private final
focal_class.original_string: private final EventPublisher eventPublisher;
focal_class.type: EventPublisher
focal_class.var_name: eventPublisher
focal_class.declarator: thingTypeRegistry
focal_class.modifier: private final
focal_class.original_string: private final ThingTypeRegistry thingTypeRegistry;
focal_class.type: ThingTypeRegistry
focal_class.var_name: thingTypeRegistry
focal_class.declarator: itemChannelLinkRegistry
focal_class.modifier: private final
focal_class.original_string: private final ItemChannelLinkRegistry itemChannelLinkRegistry;
focal_class.type: ItemChannelLinkRegistry
focal_class.var_name: itemChannelLinkRegistry
focal_class.declarator: readyService
focal_class.modifier: private final
focal_class.original_string: private final ReadyService readyService;
focal_class.type: ReadyService
focal_class.var_name: readyService
focal_class.declarator: safeCaller
focal_class.modifier: private final
focal_class.original_string: private final SafeCaller safeCaller;
focal_class.type: SafeCaller
focal_class.var_name: safeCaller
focal_class.declarator: storage
focal_class.modifier: private final
focal_class.original_string: private final Storage<String> storage;
focal_class.type: Storage<String>
focal_class.var_name: storage
focal_class.declarator: thingRegistry
focal_class.modifier: private final
focal_class.original_string: private final ThingRegistryImpl thingRegistry;
focal_class.type: ThingRegistryImpl
focal_class.var_name: thingRegistry
focal_class.declarator: thingStatusInfoI18nLocalizationService
focal_class.modifier: private final
focal_class.original_string: private final ThingStatusInfoI18nLocalizationService thingStatusInfoI18nLocalizationService;
focal_class.type: ThingStatusInfoI18nLocalizationService
focal_class.var_name: thingStatusInfoI18nLocalizationService
focal_class.declarator: thingHandlerCallback = new ThingHandlerCallback() {
  
          @Override
          public void stateUpdated(ChannelUID channelUID, State state) {
              communicationManager.stateUpdated(channelUID, state);
          }
  
          @Override
          public void postCommand(ChannelUID channelUID, Command command) {
              communicationManager.postCommand(channelUID, command);
          }
  
          @Override
          public void channelTriggered(Thing thing, ChannelUID channelUID, String event) {
              communicationManager.channelTriggered(thing, channelUID, event);
          }
  
          @Override
          public void statusUpdated(Thing thing, ThingStatusInfo statusInfo) {
              // note: all provoked operations based on a status update should be executed asynchronously!
              ThingStatusInfo oldStatusInfo = thing.getStatusInfo();
              ensureValidStatus(oldStatusInfo.getStatus(), statusInfo.getStatus());
  
              if (ThingStatus.REMOVING.equals(oldStatusInfo.getStatus())
                      && !ThingStatus.REMOVED.equals(statusInfo.getStatus())) {
                  // only allow REMOVING -> REMOVED transition, all others are illegal
                  throw new IllegalArgumentException(MessageFormat.format(
                          "Illegal status transition from REMOVING to {0}, only REMOVED would have been allowed.",
                          statusInfo.getStatus()));
              }
  
              // update thing status and send event about new status
              setThingStatus(thing, statusInfo);
  
              // if thing is a bridge
              if (isBridge(thing)) {
                  handleBridgeStatusUpdate((Bridge) thing, statusInfo, oldStatusInfo);
              }
              // if thing has a bridge
              if (hasBridge(thing)) {
                  handleBridgeChildStatusUpdate(thing, oldStatusInfo);
              }
              // notify thing registry about thing removal
              if (ThingStatus.REMOVED.equals(thing.getStatus())) {
                  notifyRegistryAboutForceRemove(thing);
              }
          }
  
          private void ensureValidStatus(ThingStatus oldStatus, ThingStatus newStatus) {
              if (!(ThingStatus.UNKNOWN.equals(newStatus) || ThingStatus.ONLINE.equals(newStatus)
                      || ThingStatus.OFFLINE.equals(newStatus) || ThingStatus.REMOVED.equals(newStatus))) {
                  throw new IllegalArgumentException(MessageFormat.format(
                          "Illegal status {0}. Bindings only may set {1}, {2}, {3} or {4}.", newStatus,
                          ThingStatus.UNKNOWN, ThingStatus.ONLINE, ThingStatus.OFFLINE, ThingStatus.REMOVED));
              }
              if (ThingStatus.REMOVED.equals(newStatus) && !ThingStatus.REMOVING.equals(oldStatus)) {
                  throw new IllegalArgumentException(
                          MessageFormat.format("Illegal status {0}. The thing was in state {1} and not in {2}", newStatus,
                                  oldStatus, ThingStatus.REMOVING));
              }
          }
  
          private void handleBridgeStatusUpdate(Bridge bridge, ThingStatusInfo statusInfo,
                  ThingStatusInfo oldStatusInfo) {
              if (ThingHandlerHelper.isHandlerInitialized(bridge)
                      && (ThingStatus.INITIALIZING.equals(oldStatusInfo.getStatus()))) {
                  // bridge has just been initialized: initialize child things as well
                  registerChildHandlers(bridge);
              } else if (!statusInfo.equals(oldStatusInfo)) {
                  // bridge status has been changed: notify child things about status change
                  notifyThingsAboutBridgeStatusChange(bridge, statusInfo);
              }
          }
  
          private void handleBridgeChildStatusUpdate(Thing thing, ThingStatusInfo oldStatusInfo) {
              if (ThingHandlerHelper.isHandlerInitialized(thing)
                      && ThingStatus.INITIALIZING.equals(oldStatusInfo.getStatus())) {
                  // child thing has just been initialized: notify bridge about it
                  notifyBridgeAboutChildHandlerInitialization(thing);
              }
          }
  
          @Override
          public void thingUpdated(final Thing thing) {
              thingUpdatedLock.add(thing.getUID());
              AccessController.doPrivileged(new PrivilegedAction<@Nullable Void>() {
                  @Override
                  public @Nullable Void run() {
                      Provider<Thing> provider = thingRegistry.getProvider(thing);
                      if (provider == null) {
                          throw new IllegalArgumentException(MessageFormat.format(
                                  "Provider for thing {0} cannot be determined because it is not known to the registry",
                                  thing.getUID().getAsString()));
                      }
                      if (provider instanceof ManagedProvider) {
                          @SuppressWarnings("unchecked")
                          ManagedProvider<Thing, ThingUID> managedProvider = (ManagedProvider<Thing, ThingUID>) provider;
                          managedProvider.update(thing);
                      } else {
                          logger.debug("Only updating thing {} in the registry because provider {} is not managed.",
                                  thing.getUID().getAsString(), provider);
                          Thing oldThing = thingRegistry.get(thing.getUID());
                          if (oldThing == null) {
                              throw new IllegalArgumentException(MessageFormat.format(
                                      "Cannot update thing {0} because it is not known to the registry",
                                      thing.getUID().getAsString()));
                          }
                          thingRegistry.updated(provider, oldThing, thing);
                      }
                      return null;
                  }
              });
              thingUpdatedLock.remove(thing.getUID());
          }
  
          @Override
          public void validateConfigurationParameters(Thing thing, Map<String, Object> configurationParameters) {
              ThingType thingType = thingTypeRegistry.getThingType(thing.getThingTypeUID());
              if (thingType != null && thingType.getConfigDescriptionURI() != null) {
                  configDescriptionValidator.validate(configurationParameters, thingType.getConfigDescriptionURI());
              }
          }
  
          @Override
          public void configurationUpdated(Thing thing) {
              if (!ThingHandlerHelper.isHandlerInitialized(thing)) {
                  initializeHandler(thing);
              }
          }
  
          @Override
          public void migrateThingType(final Thing thing, final ThingTypeUID thingTypeUID,
                  final Configuration configuration) {
              ThingManagerImpl.this.migrateThingType(thing, thingTypeUID, configuration);
          }
  
          @Override
          public ChannelBuilder createChannelBuilder(ChannelUID channelUID, ChannelTypeUID channelTypeUID) {
              ChannelType channelType = channelTypeRegistry.getChannelType(channelTypeUID);
              if (channelType == null) {
                  throw new IllegalArgumentException(String.format("Channel type '%s' is not known", channelTypeUID));
              }
              return ThingFactoryHelper.createChannelBuilder(channelUID, channelType, configDescriptionRegistry);
          };
  
          @Override
          public ChannelBuilder editChannel(Thing thing, ChannelUID channelUID) {
              Channel channel = thing.getChannel(channelUID.getId());
              if (channel == null) {
                  throw new IllegalArgumentException(
                          String.format("Channel '%s' does not exist for thing '%s'", channelUID, thing.getUID()));
              }
              return ChannelBuilder.create(channel);
          }
  
          @Override
          public List<ChannelBuilder> createChannelBuilders(ChannelGroupUID channelGroupUID,
                  ChannelGroupTypeUID channelGroupTypeUID) {
              ChannelGroupType channelGroupType = channelGroupTypeRegistry.getChannelGroupType(channelGroupTypeUID);
              if (channelGroupType == null) {
                  throw new IllegalArgumentException(
                          String.format("Channel group type '%s' is not known", channelGroupTypeUID));
              }
              List<ChannelBuilder> channelBuilders = new ArrayList<>();
              for (ChannelDefinition channelDefinition : channelGroupType.getChannelDefinitions()) {
                  ChannelType channelType = channelTypeRegistry.getChannelType(channelDefinition.getChannelTypeUID());
                  if (channelType != null) {
                      ChannelUID channelUID = new ChannelUID(channelGroupUID, channelDefinition.getId());
                      channelBuilders.add(ThingFactoryHelper.createChannelBuilder(channelUID, channelType,
                              configDescriptionRegistry));
                  }
              }
              return channelBuilders;
          }
  
          @Override
          public boolean isChannelLinked(ChannelUID channelUID) {
              return itemChannelLinkRegistry.isLinked(channelUID);
          }
  
          @Override
          public @Nullable Bridge getBridge(ThingUID bridgeUID) {
              return (Bridge) thingRegistry.get(bridgeUID);
          }
      }
focal_class.modifier: private final
focal_class.original_string: private final ThingHandlerCallback thingHandlerCallback = new ThingHandlerCallback() {
  
          @Override
          public void stateUpdated(ChannelUID channelUID, State state) {
              communicationManager.stateUpdated(channelUID, state);
          }
  
          @Override
          public void postCommand(ChannelUID channelUID, Command command) {
              communicationManager.postCommand(channelUID, command);
          }
  
          @Override
          public void channelTriggered(Thing thing, ChannelUID channelUID, String event) {
              communicationManager.channelTriggered(thing, channelUID, event);
          }
  
          @Override
          public void statusUpdated(Thing thing, ThingStatusInfo statusInfo) {
              // note: all provoked operations based on a status update should be executed asynchronously!
              ThingStatusInfo oldStatusInfo = thing.getStatusInfo();
              ensureValidStatus(oldStatusInfo.getStatus(), statusInfo.getStatus());
  
              if (ThingStatus.REMOVING.equals(oldStatusInfo.getStatus())
                      && !ThingStatus.REMOVED.equals(statusInfo.getStatus())) {
                  // only allow REMOVING -> REMOVED transition, all others are illegal
                  throw new IllegalArgumentException(MessageFormat.format(
                          "Illegal status transition from REMOVING to {0}, only REMOVED would have been allowed.",
                          statusInfo.getStatus()));
              }
  
              // update thing status and send event about new status
              setThingStatus(thing, statusInfo);
  
              // if thing is a bridge
              if (isBridge(thing)) {
                  handleBridgeStatusUpdate((Bridge) thing, statusInfo, oldStatusInfo);
              }
              // if thing has a bridge
              if (hasBridge(thing)) {
                  handleBridgeChildStatusUpdate(thing, oldStatusInfo);
              }
              // notify thing registry about thing removal
              if (ThingStatus.REMOVED.equals(thing.getStatus())) {
                  notifyRegistryAboutForceRemove(thing);
              }
          }
  
          private void ensureValidStatus(ThingStatus oldStatus, ThingStatus newStatus) {
              if (!(ThingStatus.UNKNOWN.equals(newStatus) || ThingStatus.ONLINE.equals(newStatus)
                      || ThingStatus.OFFLINE.equals(newStatus) || ThingStatus.REMOVED.equals(newStatus))) {
                  throw new IllegalArgumentException(MessageFormat.format(
                          "Illegal status {0}. Bindings only may set {1}, {2}, {3} or {4}.", newStatus,
                          ThingStatus.UNKNOWN, ThingStatus.ONLINE, ThingStatus.OFFLINE, ThingStatus.REMOVED));
              }
              if (ThingStatus.REMOVED.equals(newStatus) && !ThingStatus.REMOVING.equals(oldStatus)) {
                  throw new IllegalArgumentException(
                          MessageFormat.format("Illegal status {0}. The thing was in state {1} and not in {2}", newStatus,
                                  oldStatus, ThingStatus.REMOVING));
              }
          }
  
          private void handleBridgeStatusUpdate(Bridge bridge, ThingStatusInfo statusInfo,
                  ThingStatusInfo oldStatusInfo) {
              if (ThingHandlerHelper.isHandlerInitialized(bridge)
                      && (ThingStatus.INITIALIZING.equals(oldStatusInfo.getStatus()))) {
                  // bridge has just been initialized: initialize child things as well
                  registerChildHandlers(bridge);
              } else if (!statusInfo.equals(oldStatusInfo)) {
                  // bridge status has been changed: notify child things about status change
                  notifyThingsAboutBridgeStatusChange(bridge, statusInfo);
              }
          }
  
          private void handleBridgeChildStatusUpdate(Thing thing, ThingStatusInfo oldStatusInfo) {
              if (ThingHandlerHelper.isHandlerInitialized(thing)
                      && ThingStatus.INITIALIZING.equals(oldStatusInfo.getStatus())) {
                  // child thing has just been initialized: notify bridge about it
                  notifyBridgeAboutChildHandlerInitialization(thing);
              }
          }
  
          @Override
          public void thingUpdated(final Thing thing) {
              thingUpdatedLock.add(thing.getUID());
              AccessController.doPrivileged(new PrivilegedAction<@Nullable Void>() {
                  @Override
                  public @Nullable Void run() {
                      Provider<Thing> provider = thingRegistry.getProvider(thing);
                      if (provider == null) {
                          throw new IllegalArgumentException(MessageFormat.format(
                                  "Provider for thing {0} cannot be determined because it is not known to the registry",
                                  thing.getUID().getAsString()));
                      }
                      if (provider instanceof ManagedProvider) {
                          @SuppressWarnings("unchecked")
                          ManagedProvider<Thing, ThingUID> managedProvider = (ManagedProvider<Thing, ThingUID>) provider;
                          managedProvider.update(thing);
                      } else {
                          logger.debug("Only updating thing {} in the registry because provider {} is not managed.",
                                  thing.getUID().getAsString(), provider);
                          Thing oldThing = thingRegistry.get(thing.getUID());
                          if (oldThing == null) {
                              throw new IllegalArgumentException(MessageFormat.format(
                                      "Cannot update thing {0} because it is not known to the registry",
                                      thing.getUID().getAsString()));
                          }
                          thingRegistry.updated(provider, oldThing, thing);
                      }
                      return null;
                  }
              });
              thingUpdatedLock.remove(thing.getUID());
          }
  
          @Override
          public void validateConfigurationParameters(Thing thing, Map<String, Object> configurationParameters) {
              ThingType thingType = thingTypeRegistry.getThingType(thing.getThingTypeUID());
              if (thingType != null && thingType.getConfigDescriptionURI() != null) {
                  configDescriptionValidator.validate(configurationParameters, thingType.getConfigDescriptionURI());
              }
          }
  
          @Override
          public void configurationUpdated(Thing thing) {
              if (!ThingHandlerHelper.isHandlerInitialized(thing)) {
                  initializeHandler(thing);
              }
          }
  
          @Override
          public void migrateThingType(final Thing thing, final ThingTypeUID thingTypeUID,
                  final Configuration configuration) {
              ThingManagerImpl.this.migrateThingType(thing, thingTypeUID, configuration);
          }
  
          @Override
          public ChannelBuilder createChannelBuilder(ChannelUID channelUID, ChannelTypeUID channelTypeUID) {
              ChannelType channelType = channelTypeRegistry.getChannelType(channelTypeUID);
              if (channelType == null) {
                  throw new IllegalArgumentException(String.format("Channel type '%s' is not known", channelTypeUID));
              }
              return ThingFactoryHelper.createChannelBuilder(channelUID, channelType, configDescriptionRegistry);
          };
  
          @Override
          public ChannelBuilder editChannel(Thing thing, ChannelUID channelUID) {
              Channel channel = thing.getChannel(channelUID.getId());
              if (channel == null) {
                  throw new IllegalArgumentException(
                          String.format("Channel '%s' does not exist for thing '%s'", channelUID, thing.getUID()));
              }
              return ChannelBuilder.create(channel);
          }
  
          @Override
          public List<ChannelBuilder> createChannelBuilders(ChannelGroupUID channelGroupUID,
                  ChannelGroupTypeUID channelGroupTypeUID) {
              ChannelGroupType channelGroupType = channelGroupTypeRegistry.getChannelGroupType(channelGroupTypeUID);
              if (channelGroupType == null) {
                  throw new IllegalArgumentException(
                          String.format("Channel group type '%s' is not known", channelGroupTypeUID));
              }
              List<ChannelBuilder> channelBuilders = new ArrayList<>();
              for (ChannelDefinition channelDefinition : channelGroupType.getChannelDefinitions()) {
                  ChannelType channelType = channelTypeRegistry.getChannelType(channelDefinition.getChannelTypeUID());
                  if (channelType != null) {
                      ChannelUID channelUID = new ChannelUID(channelGroupUID, channelDefinition.getId());
                      channelBuilders.add(ThingFactoryHelper.createChannelBuilder(channelUID, channelType,
                              configDescriptionRegistry));
                  }
              }
              return channelBuilders;
          }
  
          @Override
          public boolean isChannelLinked(ChannelUID channelUID) {
              return itemChannelLinkRegistry.isLinked(channelUID);
          }
  
          @Override
          public @Nullable Bridge getBridge(ThingUID bridgeUID) {
              return (Bridge) thingRegistry.get(bridgeUID);
          }
      };
focal_class.type: ThingHandlerCallback
focal_class.var_name: thingHandlerCallback
focal_class.file: bundles/org.openhab.core.thing/src/main/java/org/openhab/core/thing/internal/ThingManagerImpl.java
focal_class.identifier: ThingManagerImpl
focal_class.interfaces: implements ThingManager, ThingTracker, ThingTypeMigrationService, ReadyService.ReadyTracker
focal_class.class_method_signature: ThingManagerImpl.ThingManagerImpl( //
              final @Reference BundleResolver bundleResolver,
              final @Reference ChannelGroupTypeRegistry channelGroupTypeRegistry,
              final @Reference ChannelTypeRegistry channelTypeRegistry,
              final @Reference CommunicationManager communicationManager,
              final @Reference ConfigDescriptionRegistry configDescriptionRegistry,
              final @Reference ConfigDescriptionValidator configDescriptionValidator,
              final @Reference EventPublisher eventPublisher,
              final @Reference ItemChannelLinkRegistry itemChannelLinkRegistry,
              final @Reference ReadyService readyService, //
              final @Reference SafeCaller safeCaller, //
              final @Reference StorageService storageService, //
              final @Reference ThingRegistry thingRegistry,
              final @Reference ThingStatusInfoI18nLocalizationService thingStatusInfoI18nLocalizationService,
              final @Reference ThingTypeRegistry thingTypeRegistry)
focal_class.full_signature: @Activate public  ThingManagerImpl( //
              final @Reference BundleResolver bundleResolver,
              final @Reference ChannelGroupTypeRegistry channelGroupTypeRegistry,
              final @Reference ChannelTypeRegistry channelTypeRegistry,
              final @Reference CommunicationManager communicationManager,
              final @Reference ConfigDescriptionRegistry configDescriptionRegistry,
              final @Reference ConfigDescriptionValidator configDescriptionValidator,
              final @Reference EventPublisher eventPublisher,
              final @Reference ItemChannelLinkRegistry itemChannelLinkRegistry,
              final @Reference ReadyService readyService, //
              final @Reference SafeCaller safeCaller, //
              final @Reference StorageService storageService, //
              final @Reference ThingRegistry thingRegistry,
              final @Reference ThingStatusInfoI18nLocalizationService thingStatusInfoI18nLocalizationService,
              final @Reference ThingTypeRegistry thingTypeRegistry)
focal_class.identifier: ThingManagerImpl
focal_class.modifiers: @Activate public
focal_class.parameters: ( //
              final @Reference BundleResolver bundleResolver,
              final @Reference ChannelGroupTypeRegistry channelGroupTypeRegistry,
              final @Reference ChannelTypeRegistry channelTypeRegistry,
              final @Reference CommunicationManager communicationManager,
              final @Reference ConfigDescriptionRegistry configDescriptionRegistry,
              final @Reference ConfigDescriptionValidator configDescriptionValidator,
              final @Reference EventPublisher eventPublisher,
              final @Reference ItemChannelLinkRegistry itemChannelLinkRegistry,
              final @Reference ReadyService readyService, //
              final @Reference SafeCaller safeCaller, //
              final @Reference StorageService storageService, //
              final @Reference ThingRegistry thingRegistry,
              final @Reference ThingStatusInfoI18nLocalizationService thingStatusInfoI18nLocalizationService,
              final @Reference ThingTypeRegistry thingTypeRegistry)
focal_class.signature:  ThingManagerImpl( //
              final @Reference BundleResolver bundleResolver,
              final @Reference ChannelGroupTypeRegistry channelGroupTypeRegistry,
              final @Reference ChannelTypeRegistry channelTypeRegistry,
              final @Reference CommunicationManager communicationManager,
              final @Reference ConfigDescriptionRegistry configDescriptionRegistry,
              final @Reference ConfigDescriptionValidator configDescriptionValidator,
              final @Reference EventPublisher eventPublisher,
              final @Reference ItemChannelLinkRegistry itemChannelLinkRegistry,
              final @Reference ReadyService readyService, //
              final @Reference SafeCaller safeCaller, //
              final @Reference StorageService storageService, //
              final @Reference ThingRegistry thingRegistry,
              final @Reference ThingStatusInfoI18nLocalizationService thingStatusInfoI18nLocalizationService,
              final @Reference ThingTypeRegistry thingTypeRegistry)
focal_class.class_method_signature: ThingManagerImpl.deactivate(ComponentContext componentContext)
focal_class.full_signature: @Deactivate protected synchronized void deactivate(ComponentContext componentContext)
focal_class.identifier: deactivate
focal_class.modifiers: @Deactivate protected synchronized
focal_class.parameters: (ComponentContext componentContext)
focal_class.return: void
focal_class.signature: void deactivate(ComponentContext componentContext)
focal_class.class_method_signature: ThingManagerImpl.migrateThingType(final Thing thing, final ThingTypeUID thingTypeUID,
              final @Nullable Configuration configuration)
focal_class.full_signature: @Override public void migrateThingType(final Thing thing, final ThingTypeUID thingTypeUID,
              final @Nullable Configuration configuration)
focal_class.identifier: migrateThingType
focal_class.modifiers: @Override public
focal_class.parameters: (final Thing thing, final ThingTypeUID thingTypeUID,
              final @Nullable Configuration configuration)
focal_class.return: void
focal_class.signature: void migrateThingType(final Thing thing, final ThingTypeUID thingTypeUID,
              final @Nullable Configuration configuration)
focal_class.class_method_signature: ThingManagerImpl.thingAdded(Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.full_signature: @Override public void thingAdded(Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.identifier: thingAdded
focal_class.modifiers: @Override public
focal_class.parameters: (Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.return: void
focal_class.signature: void thingAdded(Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.class_method_signature: ThingManagerImpl.thingRemoving(Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.full_signature: @Override public void thingRemoving(Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.identifier: thingRemoving
focal_class.modifiers: @Override public
focal_class.parameters: (Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.return: void
focal_class.signature: void thingRemoving(Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.class_method_signature: ThingManagerImpl.thingRemoved(final Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.full_signature: @Override public void thingRemoved(final Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.identifier: thingRemoved
focal_class.modifiers: @Override public
focal_class.parameters: (final Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.return: void
focal_class.signature: void thingRemoved(final Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.class_method_signature: ThingManagerImpl.thingUpdated(final Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.full_signature: @Override public void thingUpdated(final Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.identifier: thingUpdated
focal_class.modifiers: @Override public
focal_class.parameters: (final Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.return: void
focal_class.signature: void thingUpdated(final Thing thing, ThingTrackerEvent thingTrackerEvent)
focal_class.class_method_signature: ThingManagerImpl.replaceThing(@Nullable Thing oldThing, Thing newThing)
focal_class.full_signature: private @Nullable ThingHandler replaceThing(@Nullable Thing oldThing, Thing newThing)
focal_class.identifier: replaceThing
focal_class.modifiers: private @Nullable
focal_class.parameters: (@Nullable Thing oldThing, Thing newThing)
focal_class.return: ThingHandler
focal_class.signature: ThingHandler replaceThing(@Nullable Thing oldThing, Thing newThing)
focal_class.class_method_signature: ThingManagerImpl.getThing(ThingUID id)
focal_class.full_signature: private @Nullable Thing getThing(ThingUID id)
focal_class.identifier: getThing
focal_class.modifiers: private @Nullable
focal_class.parameters: (ThingUID id)
focal_class.return: Thing
focal_class.signature: Thing getThing(ThingUID id)
focal_class.class_method_signature: ThingManagerImpl.getThingType(Thing thing)
focal_class.full_signature: private @Nullable ThingType getThingType(Thing thing)
focal_class.identifier: getThingType
focal_class.modifiers: private @Nullable
focal_class.parameters: (Thing thing)
focal_class.return: ThingType
focal_class.signature: ThingType getThingType(Thing thing)
focal_class.class_method_signature: ThingManagerImpl.findThingHandlerFactory(ThingTypeUID thingTypeUID)
focal_class.full_signature: private @Nullable ThingHandlerFactory findThingHandlerFactory(ThingTypeUID thingTypeUID)
focal_class.identifier: findThingHandlerFactory
focal_class.modifiers: private @Nullable
focal_class.parameters: (ThingTypeUID thingTypeUID)
focal_class.return: ThingHandlerFactory
focal_class.signature: ThingHandlerFactory findThingHandlerFactory(ThingTypeUID thingTypeUID)
focal_class.class_method_signature: ThingManagerImpl.registerHandler(Thing thing, ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: private void registerHandler(Thing thing, ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: registerHandler
focal_class.modifiers: private
focal_class.parameters: (Thing thing, ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void registerHandler(Thing thing, ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.doRegisterHandler(final Thing thing, final ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: private void doRegisterHandler(final Thing thing, final ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: doRegisterHandler
focal_class.modifiers: private
focal_class.parameters: (final Thing thing, final ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void doRegisterHandler(final Thing thing, final ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.registerChildHandlers(final Bridge bridge)
focal_class.full_signature: private void registerChildHandlers(final Bridge bridge)
focal_class.identifier: registerChildHandlers
focal_class.modifiers: private
focal_class.parameters: (final Bridge bridge)
focal_class.return: void
focal_class.signature: void registerChildHandlers(final Bridge bridge)
focal_class.class_method_signature: ThingManagerImpl.initializeHandler(Thing thing)
focal_class.full_signature: private void initializeHandler(Thing thing)
focal_class.identifier: initializeHandler
focal_class.modifiers: private
focal_class.parameters: (Thing thing)
focal_class.return: void
focal_class.signature: void initializeHandler(Thing thing)
focal_class.class_method_signature: ThingManagerImpl.isInitializable(Thing thing, @Nullable ThingType thingType)
focal_class.full_signature: private boolean isInitializable(Thing thing, @Nullable ThingType thingType)
focal_class.identifier: isInitializable
focal_class.modifiers: private
focal_class.parameters: (Thing thing, @Nullable ThingType thingType)
focal_class.return: boolean
focal_class.signature: boolean isInitializable(Thing thing, @Nullable ThingType thingType)
focal_class.class_method_signature: ThingManagerImpl.isComplete(@Nullable T prototype, UID targetUID,
              Function<T, @Nullable URI> configDescriptionURIFunction, Configuration configuration)
focal_class.full_signature: private boolean isComplete(@Nullable T prototype, UID targetUID,
              Function<T, @Nullable URI> configDescriptionURIFunction, Configuration configuration)
focal_class.identifier: isComplete
focal_class.modifiers: private
focal_class.parameters: (@Nullable T prototype, UID targetUID,
              Function<T, @Nullable URI> configDescriptionURIFunction, Configuration configuration)
focal_class.return: boolean
focal_class.signature: boolean isComplete(@Nullable T prototype, UID targetUID,
              Function<T, @Nullable URI> configDescriptionURIFunction, Configuration configuration)
focal_class.class_method_signature: ThingManagerImpl.resolve(@Nullable URI configDescriptionURI, @Nullable Locale locale)
focal_class.full_signature: private @Nullable ConfigDescription resolve(@Nullable URI configDescriptionURI, @Nullable Locale locale)
focal_class.identifier: resolve
focal_class.modifiers: private @Nullable
focal_class.parameters: (@Nullable URI configDescriptionURI, @Nullable Locale locale)
focal_class.return: ConfigDescription
focal_class.signature: ConfigDescription resolve(@Nullable URI configDescriptionURI, @Nullable Locale locale)
focal_class.class_method_signature: ThingManagerImpl.getRequiredParameters(ConfigDescription description)
focal_class.full_signature: private List<String> getRequiredParameters(ConfigDescription description)
focal_class.identifier: getRequiredParameters
focal_class.modifiers: private
focal_class.parameters: (ConfigDescription description)
focal_class.return: List<String>
focal_class.signature: List<String> getRequiredParameters(ConfigDescription description)
focal_class.class_method_signature: ThingManagerImpl.doInitializeHandler(final ThingHandler thingHandler)
focal_class.full_signature: private void doInitializeHandler(final ThingHandler thingHandler)
focal_class.identifier: doInitializeHandler
focal_class.modifiers: private
focal_class.parameters: (final ThingHandler thingHandler)
focal_class.return: void
focal_class.signature: void doInitializeHandler(final ThingHandler thingHandler)
focal_class.class_method_signature: ThingManagerImpl.isInitializing(Thing thing)
focal_class.full_signature: private boolean isInitializing(Thing thing)
focal_class.identifier: isInitializing
focal_class.modifiers: private
focal_class.parameters: (Thing thing)
focal_class.return: boolean
focal_class.signature: boolean isInitializing(Thing thing)
focal_class.class_method_signature: ThingManagerImpl.isHandlerRegistered(Thing thing)
focal_class.full_signature: private boolean isHandlerRegistered(Thing thing)
focal_class.identifier: isHandlerRegistered
focal_class.modifiers: private
focal_class.parameters: (Thing thing)
focal_class.return: boolean
focal_class.signature: boolean isHandlerRegistered(Thing thing)
focal_class.class_method_signature: ThingManagerImpl.isBridge(Thing thing)
focal_class.full_signature: private boolean isBridge(Thing thing)
focal_class.identifier: isBridge
focal_class.modifiers: private
focal_class.parameters: (Thing thing)
focal_class.return: boolean
focal_class.signature: boolean isBridge(Thing thing)
focal_class.class_method_signature: ThingManagerImpl.hasBridge(final Thing thing)
focal_class.full_signature: private boolean hasBridge(final Thing thing)
focal_class.identifier: hasBridge
focal_class.modifiers: private
focal_class.parameters: (final Thing thing)
focal_class.return: boolean
focal_class.signature: boolean hasBridge(final Thing thing)
focal_class.class_method_signature: ThingManagerImpl.getBridge(@Nullable ThingUID bridgeUID)
focal_class.full_signature: private @Nullable Bridge getBridge(@Nullable ThingUID bridgeUID)
focal_class.identifier: getBridge
focal_class.modifiers: private @Nullable
focal_class.parameters: (@Nullable ThingUID bridgeUID)
focal_class.return: Bridge
focal_class.signature: Bridge getBridge(@Nullable ThingUID bridgeUID)
focal_class.class_method_signature: ThingManagerImpl.unregisterHandler(Thing thing, ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: private void unregisterHandler(Thing thing, ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: unregisterHandler
focal_class.modifiers: private
focal_class.parameters: (Thing thing, ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void unregisterHandler(Thing thing, ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.doUnregisterHandler(final Thing thing, final ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: private void doUnregisterHandler(final Thing thing, final ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: doUnregisterHandler
focal_class.modifiers: private
focal_class.parameters: (final Thing thing, final ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void doUnregisterHandler(final Thing thing, final ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.disposeHandler(Thing thing, ThingHandler thingHandler)
focal_class.full_signature: private void disposeHandler(Thing thing, ThingHandler thingHandler)
focal_class.identifier: disposeHandler
focal_class.modifiers: private
focal_class.parameters: (Thing thing, ThingHandler thingHandler)
focal_class.return: void
focal_class.signature: void disposeHandler(Thing thing, ThingHandler thingHandler)
focal_class.class_method_signature: ThingManagerImpl.doDisposeHandler(final ThingHandler thingHandler)
focal_class.full_signature: private void doDisposeHandler(final ThingHandler thingHandler)
focal_class.identifier: doDisposeHandler
focal_class.modifiers: private
focal_class.parameters: (final ThingHandler thingHandler)
focal_class.return: void
focal_class.signature: void doDisposeHandler(final ThingHandler thingHandler)
focal_class.class_method_signature: ThingManagerImpl.unregisterAndDisposeChildHandlers(Bridge bridge, ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: private void unregisterAndDisposeChildHandlers(Bridge bridge, ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: unregisterAndDisposeChildHandlers
focal_class.modifiers: private
focal_class.parameters: (Bridge bridge, ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void unregisterAndDisposeChildHandlers(Bridge bridge, ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.unregisterAndDisposeHandler(ThingHandlerFactory thingHandlerFactory, Thing thing,
              ThingHandler handler)
focal_class.full_signature: private void unregisterAndDisposeHandler(ThingHandlerFactory thingHandlerFactory, Thing thing,
              ThingHandler handler)
focal_class.identifier: unregisterAndDisposeHandler
focal_class.modifiers: private
focal_class.parameters: (ThingHandlerFactory thingHandlerFactory, Thing thing,
              ThingHandler handler)
focal_class.return: void
focal_class.signature: void unregisterAndDisposeHandler(ThingHandlerFactory thingHandlerFactory, Thing thing,
              ThingHandler handler)
focal_class.class_method_signature: ThingManagerImpl.addThingsToBridge(Bridge bridge)
focal_class.full_signature: private void addThingsToBridge(Bridge bridge)
focal_class.identifier: addThingsToBridge
focal_class.modifiers: private
focal_class.parameters: (Bridge bridge)
focal_class.return: void
focal_class.signature: void addThingsToBridge(Bridge bridge)
focal_class.class_method_signature: ThingManagerImpl.notifyThingsAboutBridgeStatusChange(final Bridge bridge, final ThingStatusInfo bridgeStatus)
focal_class.full_signature: private void notifyThingsAboutBridgeStatusChange(final Bridge bridge, final ThingStatusInfo bridgeStatus)
focal_class.identifier: notifyThingsAboutBridgeStatusChange
focal_class.modifiers: private
focal_class.parameters: (final Bridge bridge, final ThingStatusInfo bridgeStatus)
focal_class.return: void
focal_class.signature: void notifyThingsAboutBridgeStatusChange(final Bridge bridge, final ThingStatusInfo bridgeStatus)
focal_class.class_method_signature: ThingManagerImpl.notifyBridgeAboutChildHandlerInitialization(final Thing thing)
focal_class.full_signature: private void notifyBridgeAboutChildHandlerInitialization(final Thing thing)
focal_class.identifier: notifyBridgeAboutChildHandlerInitialization
focal_class.modifiers: private
focal_class.parameters: (final Thing thing)
focal_class.return: void
focal_class.signature: void notifyBridgeAboutChildHandlerInitialization(final Thing thing)
focal_class.class_method_signature: ThingManagerImpl.notifyBridgeAboutChildHandlerDisposal(final Thing thing, final ThingHandler thingHandler)
focal_class.full_signature: private void notifyBridgeAboutChildHandlerDisposal(final Thing thing, final ThingHandler thingHandler)
focal_class.identifier: notifyBridgeAboutChildHandlerDisposal
focal_class.modifiers: private
focal_class.parameters: (final Thing thing, final ThingHandler thingHandler)
focal_class.return: void
focal_class.signature: void notifyBridgeAboutChildHandlerDisposal(final Thing thing, final ThingHandler thingHandler)
focal_class.class_method_signature: ThingManagerImpl.notifyThingHandlerAboutRemoval(final Thing thing)
focal_class.full_signature: private void notifyThingHandlerAboutRemoval(final Thing thing)
focal_class.identifier: notifyThingHandlerAboutRemoval
focal_class.modifiers: private
focal_class.parameters: (final Thing thing)
focal_class.return: void
focal_class.signature: void notifyThingHandlerAboutRemoval(final Thing thing)
focal_class.class_method_signature: ThingManagerImpl.notifyRegistryAboutForceRemove(final Thing thing)
focal_class.full_signature: private void notifyRegistryAboutForceRemove(final Thing thing)
focal_class.identifier: notifyRegistryAboutForceRemove
focal_class.modifiers: private
focal_class.parameters: (final Thing thing)
focal_class.return: void
focal_class.signature: void notifyRegistryAboutForceRemove(final Thing thing)
focal_class.class_method_signature: ThingManagerImpl.addThingHandlerFactory(ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC) protected synchronized void addThingHandlerFactory(ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: addThingHandlerFactory
focal_class.modifiers: @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC) protected synchronized
focal_class.parameters: (ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void addThingHandlerFactory(ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.onReadyMarkerAdded(ReadyMarker readyMarker)
focal_class.full_signature: @Override public void onReadyMarkerAdded(ReadyMarker readyMarker)
focal_class.identifier: onReadyMarkerAdded
focal_class.modifiers: @Override public
focal_class.parameters: (ReadyMarker readyMarker)
focal_class.return: void
focal_class.signature: void onReadyMarkerAdded(ReadyMarker readyMarker)
focal_class.class_method_signature: ThingManagerImpl.onReadyMarkerRemoved(ReadyMarker readyMarker)
focal_class.full_signature: @Override public void onReadyMarkerRemoved(ReadyMarker readyMarker)
focal_class.identifier: onReadyMarkerRemoved
focal_class.modifiers: @Override public
focal_class.parameters: (ReadyMarker readyMarker)
focal_class.return: void
focal_class.signature: void onReadyMarkerRemoved(ReadyMarker readyMarker)
focal_class.class_method_signature: ThingManagerImpl.handleThingHandlerFactoryAddition(String bundleIdentifier)
focal_class.full_signature: private void handleThingHandlerFactoryAddition(String bundleIdentifier)
focal_class.identifier: handleThingHandlerFactoryAddition
focal_class.modifiers: private
focal_class.parameters: (String bundleIdentifier)
focal_class.return: void
focal_class.signature: void handleThingHandlerFactoryAddition(String bundleIdentifier)
focal_class.class_method_signature: ThingManagerImpl.getBundleIdentifier(ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: private String getBundleIdentifier(ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: getBundleIdentifier
focal_class.modifiers: private
focal_class.parameters: (ThingHandlerFactory thingHandlerFactory)
focal_class.return: String
focal_class.signature: String getBundleIdentifier(ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.registerAndInitializeHandler(final Thing thing,
              final @Nullable ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: private void registerAndInitializeHandler(final Thing thing,
              final @Nullable ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: registerAndInitializeHandler
focal_class.modifiers: private
focal_class.parameters: (final Thing thing,
              final @Nullable ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void registerAndInitializeHandler(final Thing thing,
              final @Nullable ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.getThingHandlerFactory(Thing thing)
focal_class.full_signature: private @Nullable ThingHandlerFactory getThingHandlerFactory(Thing thing)
focal_class.identifier: getThingHandlerFactory
focal_class.modifiers: private @Nullable
focal_class.parameters: (Thing thing)
focal_class.return: ThingHandlerFactory
focal_class.signature: ThingHandlerFactory getThingHandlerFactory(Thing thing)
focal_class.class_method_signature: ThingManagerImpl.removeThingHandlerFactory(ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: protected synchronized void removeThingHandlerFactory(ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: removeThingHandlerFactory
focal_class.modifiers: protected synchronized
focal_class.parameters: (ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void removeThingHandlerFactory(ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.handleThingHandlerFactoryRemoval(ThingHandlerFactory thingHandlerFactory)
focal_class.full_signature: private void handleThingHandlerFactoryRemoval(ThingHandlerFactory thingHandlerFactory)
focal_class.identifier: handleThingHandlerFactoryRemoval
focal_class.modifiers: private
focal_class.parameters: (ThingHandlerFactory thingHandlerFactory)
focal_class.return: void
focal_class.signature: void handleThingHandlerFactoryRemoval(ThingHandlerFactory thingHandlerFactory)
focal_class.class_method_signature: ThingManagerImpl.getLockForThing(ThingUID thingUID)
focal_class.full_signature: private synchronized Lock getLockForThing(ThingUID thingUID)
focal_class.identifier: getLockForThing
focal_class.modifiers: private synchronized
focal_class.parameters: (ThingUID thingUID)
focal_class.return: Lock
focal_class.signature: Lock getLockForThing(ThingUID thingUID)
focal_class.class_method_signature: ThingManagerImpl.buildStatusInfo(ThingStatus thingStatus, ThingStatusDetail thingStatusDetail,
              @Nullable String description)
focal_class.full_signature: private ThingStatusInfo buildStatusInfo(ThingStatus thingStatus, ThingStatusDetail thingStatusDetail,
              @Nullable String description)
focal_class.identifier: buildStatusInfo
focal_class.modifiers: private
focal_class.parameters: (ThingStatus thingStatus, ThingStatusDetail thingStatusDetail,
              @Nullable String description)
focal_class.return: ThingStatusInfo
focal_class.signature: ThingStatusInfo buildStatusInfo(ThingStatus thingStatus, ThingStatusDetail thingStatusDetail,
              @Nullable String description)
focal_class.class_method_signature: ThingManagerImpl.buildStatusInfo(ThingStatus thingStatus, ThingStatusDetail thingStatusDetail)
focal_class.full_signature: private ThingStatusInfo buildStatusInfo(ThingStatus thingStatus, ThingStatusDetail thingStatusDetail)
focal_class.identifier: buildStatusInfo
focal_class.modifiers: private
focal_class.parameters: (ThingStatus thingStatus, ThingStatusDetail thingStatusDetail)
focal_class.return: ThingStatusInfo
focal_class.signature: ThingStatusInfo buildStatusInfo(ThingStatus thingStatus, ThingStatusDetail thingStatusDetail)
focal_class.class_method_signature: ThingManagerImpl.setThingStatus(Thing thing, ThingStatusInfo thingStatusInfo)
focal_class.full_signature: private void setThingStatus(Thing thing, ThingStatusInfo thingStatusInfo)
focal_class.identifier: setThingStatus
focal_class.modifiers: private
focal_class.parameters: (Thing thing, ThingStatusInfo thingStatusInfo)
focal_class.return: void
focal_class.signature: void setThingStatus(Thing thing, ThingStatusInfo thingStatusInfo)
focal_class.class_method_signature: ThingManagerImpl.setEnabled(ThingUID thingUID, boolean enabled)
focal_class.full_signature: @Override public void setEnabled(ThingUID thingUID, boolean enabled)
focal_class.identifier: setEnabled
focal_class.modifiers: @Override public
focal_class.parameters: (ThingUID thingUID, boolean enabled)
focal_class.return: void
focal_class.signature: void setEnabled(ThingUID thingUID, boolean enabled)
focal_class.class_method_signature: ThingManagerImpl.updateChildThingStatusForDisabledBridges(Bridge bridge)
focal_class.full_signature: private void updateChildThingStatusForDisabledBridges(Bridge bridge)
focal_class.identifier: updateChildThingStatusForDisabledBridges
focal_class.modifiers: private
focal_class.parameters: (Bridge bridge)
focal_class.return: void
focal_class.signature: void updateChildThingStatusForDisabledBridges(Bridge bridge)
focal_class.class_method_signature: ThingManagerImpl.persistThingEnableStatus(ThingUID thingUID, boolean enabled)
focal_class.full_signature: private void persistThingEnableStatus(ThingUID thingUID, boolean enabled)
focal_class.identifier: persistThingEnableStatus
focal_class.modifiers: private
focal_class.parameters: (ThingUID thingUID, boolean enabled)
focal_class.return: void
focal_class.signature: void persistThingEnableStatus(ThingUID thingUID, boolean enabled)
focal_class.class_method_signature: ThingManagerImpl.isEnabled(ThingUID thingUID)
focal_class.full_signature: @Override public boolean isEnabled(ThingUID thingUID)
focal_class.identifier: isEnabled
focal_class.modifiers: @Override public
focal_class.parameters: (ThingUID thingUID)
focal_class.return: boolean
focal_class.signature: boolean isEnabled(ThingUID thingUID)
focal_class.class_method_signature: ThingManagerImpl.isDisabledByStorage(ThingUID thingUID)
focal_class.full_signature: private boolean isDisabledByStorage(ThingUID thingUID)
focal_class.identifier: isDisabledByStorage
focal_class.modifiers: private
focal_class.parameters: (ThingUID thingUID)
focal_class.return: boolean
focal_class.signature: boolean isDisabledByStorage(ThingUID thingUID)
focal_class.class_method_signature: ThingManagerImpl.setBundleResolver(BundleResolver bundleResolver)
focal_class.full_signature:  void setBundleResolver(BundleResolver bundleResolver)
focal_class.identifier: setBundleResolver
focal_class.parameters: (BundleResolver bundleResolver)
focal_class.return: void
focal_class.signature: void setBundleResolver(BundleResolver bundleResolver)
focal_method.body: @Override
      public boolean isEnabled(ThingUID thingUID) {
          Thing thing = getThing(thingUID);
          if (thing != null) {
              return thing.isEnabled();
          }
  
          logger.debug("Thing with UID {} is unknown. Will try to get the enabled status from the persistent storage.",
                  thingUID);
          return !isDisabledByStorage(thingUID);
      }
focal_method.class_method_signature: ThingManagerImpl.isEnabled(ThingUID thingUID)
focal_method.full_signature: @Override public boolean isEnabled(ThingUID thingUID)
focal_method.identifier: isEnabled
focal_method.invocations: getThing isEnabled debug isDisabledByStorage
focal_method.modifiers: @Override public
focal_method.parameters: (ThingUID thingUID)
focal_method.return: boolean
focal_method.signature: boolean isEnabled(ThingUID thingUID)