@Override public <T extends Resource> ResourceBuilder<T> prepare( ResourceIdentifier<T> id ) { if ( states.getState( id ) == Deactivated ) { return null; } LOG.info( "Preparing {}", id ); ResourceMetadata<T> md = (ResourceMetadata) resourceMetadata.get( id ); ResourceBuilder<T> builder = md.prepare(); if ( builder == null ) { states.setState( id, Error ); } else { graph.insertNode( md ); states.setState( id, Prepared ); } return builder; }
@Override public <T extends Resource> void activate( ResourceLocation<T> location ) { location.activate(); states.setState( location.getIdentifier(), Scanned ); }
@Override public <T extends Resource> void deactivate( ResourceLocation<T> location ) { location.deactivate(); states.setState( location.getIdentifier(), Deactivated ); }
@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; }
private void scan() { LOG.info( "--------------------------------------------------------------------------------" ); LOG.info( "Scanning resources." ); LOG.info( "--------------------------------------------------------------------------------" ); for ( ResourceManager<? extends Resource> mgr : resourceManagers.values() ) { mgr.find(); Collection<? extends ResourceMetadata<? extends Resource>> mds = mgr.getResourceMetadata(); for ( ResourceMetadata<? extends Resource> md : mds ) { resourceMetadata.put( md.getIdentifier(), md ); if ( states.getState( md.getIdentifier() ) != Deactivated ) { states.setState( md.getIdentifier(), Scanned ); } } } }
@Override public <T extends Resource> void destroy( ResourceIdentifier<T> id ) { ResourceNode<T> node = graph.getNode( id ); if ( node == null ) { return; } for ( ResourceNode<? extends Resource> n : node.getDependents() ) { destroy( n.getMetadata().getIdentifier() ); } T res = (T) resources.get( id ); if ( res != null ) { LOG.info( "Shutting down {}.", id ); res.destroy(); } states.setState( id, null ); removeMetadataFromResourceManager( id ); resources.remove( id ); errors.clear( id ); }
Resource res = builder.build(); if ( res == null ) { states.setState( metadata.getIdentifier(), Error ); errors.registerError( metadata.getIdentifier(), "Unable to build resource." ); LOG.error( "Unable to build resource {}.", metadata.getIdentifier() ); throw new ResourceInitException( "Unable to build resource " + metadata.getIdentifier() + "." ); states.setState( metadata.getIdentifier(), Built ); LOG.info( "Initializing resource {}.", metadata.getIdentifier() ); res.init(); states.setState( metadata.getIdentifier(), Initialized ); resources.put( res.getMetadata().getIdentifier(), res ); } catch ( Exception ex ) { states.setState( metadata.getIdentifier(), Error ); String msg = "Unable to build resource " + metadata.getIdentifier() + ": " + ex.getLocalizedMessage(); errors.registerError( metadata.getIdentifier(), msg );
for ( ResourceIdentifier<? extends Resource> dep : md.getDependencies() ) { if ( states.getState( dep ) != Initialized ) { states.setState( md.getIdentifier(), Error ); String msg = "Dependent resource " + dep + " failed to initialize."; LOG.error( "Unable to build resource {}: " + msg, md.getIdentifier() ); if ( res == null ) { errors.registerError( md.getIdentifier(), "Unable to prepare." ); states.setState( md.getIdentifier(), Error ); LOG.error( "Unable to build resource {}.", md.getIdentifier() ); continue; states.setState( md.getIdentifier(), Built ); LOG.info( "Initializing resource {}.", md.getIdentifier() ); res.init(); states.setState( md.getIdentifier(), Initialized ); resources.put( res.getMetadata().getIdentifier(), res ); } catch ( Exception ex ) { states.setState( md.getIdentifier(), Error ); String msg = "Unable to build resource " + md.getIdentifier() + ": " + ex.getLocalizedMessage(); errors.registerError( md.getIdentifier(), msg );