@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 ); } }
@Override public <T extends Resource> List<ResourceLocation<T>> findResourceLocations( ResourceManagerMetadata<T> metadata ) { List<ResourceLocation<T>> list = new ArrayList<ResourceLocation<T>>(); if ( extraResources.get( metadata.getProviderClass() ) != null ) { list.addAll( (Collection) extraResources.get( metadata.getProviderClass() ) ); } File dir = new File( directory, metadata.getWorkspacePath() ); if ( !dir.isDirectory() ) { return list; } URI base = dir.getAbsoluteFile().toURI(); for ( File f : FileUtils.listFiles( dir, new String[] { "xml", "ignore" }, true ) ) { URI uri = f.getAbsoluteFile().toURI(); uri = base.relativize( uri ); String p = uri.getPath(); ResourceState state = null; if ( p.endsWith( "xml" ) ) { p = p.substring( 0, p.length() - 4 ); } else { p = p.substring( 0, p.length() - 7 ); state = ResourceState.Deactivated; } DefaultResourceIdentifier<T> identifier = new DefaultResourceIdentifier<T>( metadata.getProviderClass(), p ); if ( state != null ) { states.setState( identifier, state ); } list.add( new DefaultResourceLocation<T>( f, identifier ) ); } return list; }
ResourceManager<?> mgr = iter.next(); LOG.info( "Found resource manager {}.", mgr.getClass().getSimpleName() ); resourceManagers.put( mgr.getMetadata().getProviderClass(), mgr ); LOG.info( "Starting up resource manager {}.", mgr.getClass().getSimpleName() );
/** * Returns a list of possible resource identifiers for a given workspace path. * * @param workspace * @param path * @return */ public static List<ResourceIdentifier<?>> getPossibleIdentifiers( Workspace workspace, String path ) { List<ResourceManager<?>> list = getManagersForWorkspacePath( workspace, path ); List<ResourceIdentifier<?>> result = new ArrayList<ResourceIdentifier<?>>(); for ( ResourceManager<?> mgr : list ) { Class<?> cls = mgr.getMetadata().getProviderClass(); int one = mgr.getMetadata().getWorkspacePath().endsWith( "/" ) ? 0 : 1; String id = path.substring( mgr.getMetadata().getWorkspacePath().length() + one ); result.add( new DefaultResourceIdentifier( cls, id ) ); } return result; }