public void checkForUpdates()

in tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MessagesSourceImpl.java [98:175]


    public void checkForUpdates()
    {
        if (tracker != null)
        {
            final Set<MessagesTrackingInfo> changedResources = tracker.getChangedResourcesInfo();
            if (!changedResources.isEmpty() && logger.isInfoEnabled())
            {
                logger.info("Changed message file(s): {}", changedResources.stream()
                        .map(MessagesTrackingInfo::getResource)
                        .map(Resource::toString)
                        .collect(Collectors.joining(", ")));
            }
            
            boolean applicationLevelChange = false;
            
            for (MessagesTrackingInfo info : changedResources) 
            {
                
                final String className = info.getClassName();
                
                // An application-level file was changed, so we need to invalidate everything.
                if (className == null || !multipleClassLoaders)
                {
                    invalidate();
                    applicationLevelChange = true;
                    break;
                }
                else
                {
                    
                    final Iterator<Entry<MultiKey, Messages>> messagesByBundleIdAndSelectorIterator = 
                            messagesByBundleIdAndSelector.entrySet().iterator();
                    
                    while (messagesByBundleIdAndSelectorIterator.hasNext())
                    {
                        final Entry<MultiKey, Messages> entry = messagesByBundleIdAndSelectorIterator.next();
                        if (className.equals(entry.getKey().getValues()[0]))
                        {
                            messagesByBundleIdAndSelectorIterator.remove();
                        }
                    }
                    
                    final Iterator<Entry<MultiKey, Map<String, String>>> cookedPropertiesIterator = 
                            cookedProperties.entrySet().iterator();
                    
                    while (cookedPropertiesIterator.hasNext())
                    {
                        final Entry<MultiKey, Map<String, String>> entry = cookedPropertiesIterator.next();
                        if (className.equals(entry.getKey().getValues()[0]))
                        {
                            cookedPropertiesIterator.remove();
                        }
                    }
                    
                    final String resourceFile = info.getResource().getFile();
                    final Iterator<Entry<Resource, Map<String, String>>> rawPropertiesIterator = rawProperties.entrySet().iterator();
                    while (rawPropertiesIterator.hasNext())
                    {
                        final Entry<Resource, Map<String, String>> entry = rawPropertiesIterator.next();
                        if (resourceFile.equals(entry.getKey().getFile()))
                        {
                            rawPropertiesIterator.remove();
                        }
                    }
                    
                }
            }
            
            if (!changedResources.isEmpty() && !applicationLevelChange)
            {
                fireInvalidationEvent(changedResources.stream()
                        .filter(Objects::nonNull)
                        .map(ClassNameHolder::getClassName)
                        .filter(Objects::nonNull)
                        .collect(Collectors.toList()));
            }
        }
    }