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    /*
021     * Copyright (C) 2012 eXo Platform SAS.
022     *  
023     * This is free software; you can redistribute it and/or modify it
024     * under the terms of the GNU Lesser General Public License as
025     * published by the Free Software Foundation; either version 2.1 of
026     * the License, or (at your option) any later version.
027     *
028     * This software is distributed in the hope that it will be useful,
029     * but WITHOUT ANY WARRANTY; without even the implied warranty of
030     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
031     * Lesser General Public License for more details.
032     *
033     * You should have received a copy of the GNU Lesser General Public
034     * License along with this software; if not, write to the Free
035     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
036     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
037     */
038    
039    package org.crsh.cli.impl.descriptor;
040    
041    import org.crsh.cli.descriptor.CommandDescriptor;
042    import org.crsh.cli.descriptor.Description;
043    import org.crsh.cli.impl.completion.CompletionMatcher;
044    import org.crsh.cli.impl.invocation.CommandInvoker;
045    import org.crsh.cli.impl.invocation.InvocationMatch;
046    import org.crsh.cli.impl.invocation.InvocationMatcher;
047    
048    import java.util.Map;
049    
050    /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */
051    public abstract class CommandDescriptorImpl<T> extends CommandDescriptor<T> {
052    
053      public CommandDescriptorImpl(String name, Description description) throws IntrospectionException {
054        super(name, description);
055      }
056    
057      @Override
058      public abstract Map<String, ? extends CommandDescriptorImpl<T>> getSubordinates();
059    
060      @Override
061      public abstract CommandDescriptorImpl<T> getSubordinate(String name);
062    
063      public abstract CommandInvoker<T> getInvoker(InvocationMatch<T> match);
064    
065      public final InvocationMatcher<T> invoker() {
066        return new InvocationMatcher<T>(this, null);
067      }
068    
069      public final InvocationMatcher<T> invoker(String mainName) {
070        return new InvocationMatcher<T>(this, mainName);
071      }
072    
073      public final CompletionMatcher<T> completer() {
074        return new CompletionMatcher<T>(this);
075      }
076    
077      public final CompletionMatcher<T> completer(String mainName) {
078        return new CompletionMatcher<T>(mainName, this);
079      }
080    
081    }