@Override public void startup( Workspace workspace ) { this.workspace = workspace; // load providers Iterator<? extends ResourceProvider<T>> iter = ServiceLoader.load( metadata.getProviderClass(), workspace.getModuleClassLoader() ).iterator(); while ( iter.hasNext() ) { ResourceProvider<T> prov = iter.next(); nsToProvider.put( prov.getNamespace(), prov ); } }
protected void read( List<ResourceLocation<T>> list ) { for ( ResourceLocation<T> loc : list ) { try { ResourceProvider<T> prov = nsToProvider.get( loc.getNamespace() ); if ( prov != null ) { LOG.info( "Scanning resource {} with provider {}.", loc, prov.getClass().getSimpleName() ); ResourceMetadata<T> md = prov.read( workspace, loc ); metadataMap.put( md.getIdentifier(), md ); } else { LOG.warn( "Not scanning resource {}, no provider found for namespace {}.", loc, loc.getNamespace() ); } } catch ( Exception e ) { LOG.error( "Unable to scan resource {}: {}.", loc.getIdentifier(), e.getLocalizedMessage() ); LOG.trace( "Stack trace:", e ); } } }
@Override public void find() { LOG.info( "--------------------------------------------------------------------------------" ); LOG.info( "Scanning for {}.", metadata.getName() ); LOG.info( "--------------------------------------------------------------------------------" ); List<ResourceLocation<T>> list = workspace.getLocationHandler().findResourceLocations( metadata ); read( list ); Iterator<ResourceProvider<T>> iter = nsToProvider.values().iterator(); while ( iter.hasNext() ) { ResourceProvider<T> prov = iter.next(); try { for ( ResourceMetadata<T> md : prov.getAdditionalResources( workspace ) ) { // only overrides if the resource has not been overridden if ( !metadataMap.containsKey( md.getIdentifier() ) ) { metadataMap.put( md.getIdentifier(), md ); } } } catch ( Exception e ) { LOG.error( "Unable to obtain additional resources from {}: {}", prov.getClass().getSimpleName(), e.getLocalizedMessage() ); LOG.trace( "Stack trace:", e ); } } }