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 }