001    /*
002     * Copyright (C) 2012 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.shell.impl.command;
021    
022    import org.crsh.plugin.CRaSHPlugin;
023    import org.crsh.plugin.PluginContext;
024    import org.crsh.shell.Shell;
025    import org.crsh.shell.ShellFactory;
026    import org.crsh.shell.impl.async.AsyncShell;
027    
028    import java.security.Principal;
029    
030    public class CRaSHShellFactory extends CRaSHPlugin<ShellFactory> implements ShellFactory {
031    
032      /** . */
033      private CRaSH crash;
034    
035      public CRaSHShellFactory() {
036      }
037    
038      @Override
039      public void init() {
040        PluginContext context = getContext();
041        crash = new CRaSH(context);
042      }
043    
044      @Override
045      public ShellFactory getImplementation() {
046        return this;
047      }
048    
049      public Shell create(Principal principal, boolean async) {
050        CRaSHSession session = crash.createSession(principal);
051        if (async) {
052          return new AsyncShell(getContext().getExecutor(), session);
053        } else {
054          return session;
055        }
056      }
057    
058      public Shell create(Principal principal) {
059        return create(principal, true);
060      }
061    }