/** * Adds a metadata provider to the list of registered providers. * * @param newProvider the provider to be added * * @throws MetadataProviderException thrown if there is a problem adding the metadata provider */ public void addMetadataProvider(MetadataProvider newProvider) throws MetadataProviderException { Lock writeLock = providerLock.writeLock(); writeLock.lock(); try { ArrayList<MetadataProvider> checkedProviders = new ArrayList<MetadataProvider>(providers); doAddMetadataProvider(newProvider, checkedProviders); providers = Collections.unmodifiableList(checkedProviders); } finally { writeLock.unlock(); } }
/** {@inheritDoc} */ public void onEvent(MetadataProvider provider) { emitChangeEvent(); } }
/** * Method provides list of active providers - those which are valid and can be queried for metadata. Returned * value is a copy. * * @return active providers */ public List<MetadataProvider> getProviders() { try { lock.readLock().lock(); return new ArrayList<MetadataProvider>(super.getProviders()); } finally { lock.readLock().unlock(); } }
chainingMetadataProvider = new ChainingMetadataProvider(); chainingMetadataProvider.setProviders(listMetadataProviders);
super.setProviders(Collections.<MetadataProvider>emptyList()); super.addMetadataProvider(provider); log.debug("Metadata provider was initialized {}", provider.toString());
/** * Stops and removes the timer in case it was started. Cleans all metadata objects. */ public void destroy() { try { refreshLock.writeLock().lock(); lock.writeLock().lock(); for (MetadataProvider provider : getProviders()) { if (provider instanceof ExtendedMetadataDelegate) { ((ExtendedMetadataDelegate) provider).destroy(); } } super.destroy(); if (timer != null) { timer.cancel(); timer.purge(); timer = null; } // Workaround for Tomcat detection of terminated threads try { Thread.sleep(1000); } catch (InterruptedException ie) { } setRefreshRequired(false); } finally { lock.writeLock().unlock(); refreshLock.writeLock().unlock(); } }
/** * Adds a metadata provider to the given collection. The new provider is checked to see if it is null, if not the * providers {@link MetadataProvider#requireValidMetadata()} property is set to the value of this metadata * provider's property. If the given metadata provider is an instance of {@link ObservableMetadataProvider} then a * ContainedProviderObserver is added to it as well. * * @param provider provider to be added to the collection * @param providerList collection to which the provider is added */ protected void doAddMetadataProvider(MetadataProvider provider, List<MetadataProvider> providerList) { if (provider != null) { provider.setRequireValidMetadata(requireValidMetadata()); if (provider instanceof ObservableMetadataProvider) { ((ObservableMetadataProvider) provider).getObservers().add(new ContainedProviderObserver()); } providerList.add(provider); } }
/** * Replaces the current set of metadata providers with give collection. * * @param newProviders the metadata providers to replace the current providers with * * @throws MetadataProviderException thrown if there is a problem adding the metadata provider */ public void setProviders(List<MetadataProvider> newProviders) throws MetadataProviderException { Lock writeLock = providerLock.writeLock(); writeLock.lock(); try { if (newProviders == null || newProviders.isEmpty()) { providers = Collections.emptyList(); return; } ArrayList<MetadataProvider> checkedProviders = new ArrayList<MetadataProvider>(); for (MetadataProvider provider : newProviders) { doAddMetadataProvider(provider, checkedProviders); } providers = Collections.unmodifiableList(checkedProviders); } finally { writeLock.unlock(); } }