001    /*
002     * Copyright (C) 2010 eXo Platform SAS.
003     *
004     * This is free software; you can redistribute it and/or modify it
005     * under the terms of the GNU Lesser General Public License as
006     * published by the Free Software Foundation; either version 2.1 of
007     * the License, or (at your option) any later version.
008     *
009     * This software is distributed in the hope that it will be useful,
010     * but WITHOUT ANY WARRANTY; without even the implied warranty of
011     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012     * Lesser General Public License for more details.
013     *
014     * You should have received a copy of the GNU Lesser General Public
015     * License along with this software; if not, write to the Free
016     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
017     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
018     */
019    
020    package org.crsh.standalone;
021    
022    import org.crsh.plugin.PluginContext;
023    import org.crsh.plugin.PluginDiscovery;
024    import org.crsh.plugin.PluginLifeCycle;
025    import org.crsh.plugin.ServiceLoaderDiscovery;
026    import org.crsh.vfs.FS;
027    import org.crsh.vfs.Path;
028    
029    /**
030     * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
031     * @version $Revision$
032     */
033    public class Bootstrap extends PluginLifeCycle {
034    
035      /** . */
036      private final ClassLoader classLoader;
037    
038      /** . */
039      private PluginDiscovery discovery;
040    
041      /** . */
042      private FS fileSystem;
043    
044      public Bootstrap(ClassLoader classLoader) throws Exception {
045    
046        //
047        FS fs = new FS();
048        fs.mount(new java.io.File("crash"));
049        fs.mount(Thread.currentThread().getContextClassLoader(), Path.get("/crash/"));
050    
051        //
052        this.fileSystem = fs;
053        this.classLoader = classLoader;
054        this.discovery = new ServiceLoaderDiscovery(classLoader);
055      }
056    
057      public PluginDiscovery getDiscovery() {
058        return discovery;
059      }
060    
061      public void setDiscovery(PluginDiscovery discovery) {
062        this.discovery = discovery;
063      }
064    
065      public FS getFileSystem() {
066        return fileSystem;
067      }
068    
069      public void setFileSystem(FS fileSystem) {
070        this.fileSystem = fileSystem;
071      }
072    
073      public void bootstrap() throws Exception {
074        PluginContext context = new PluginContext(discovery, fileSystem, classLoader);
075        context.refresh();
076        start(context);
077      }
078    
079      public void shutdown() {
080        stop();
081      }
082    }