@@ -0,0 +1,1454 @@
+// Copyright (C) 2013 The Android Open Source Project%0A//%0A// Licensed under the Apache License, Version 2.0 (the %22License%22);%0A// you may not use this file except in compliance with the License.%0A// You may obtain a copy of the License at%0A//%0A// http://www.apache.org/licenses/LICENSE-2.0%0A//%0A// Unless required by applicable law or agreed to in writing, software%0A// distributed under the License is distributed on an %22AS IS%22 BASIS,%0A// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A// See the License for the specific language governing permissions and%0A// limitations under the License.%0A%0Apackage com.google.gerrit.sshd;%0A%0Aimport com.google.common.base.Preconditions;%0Aimport com.google.gerrit.extensions.annotations.PluginName;%0Aimport com.google.inject.binder.LinkedBindingBuilder;%0A%0Aimport org.apache.sshd.server.Command;%0A%0Aimport javax.inject.Inject;%0A%0A/**%0A * Binds one SSH command to the plugin name itself.%0A * %3Cp%3E%0A * Cannot be combined with %7B@link PluginCommandModule%7D.%0A */%0Apublic abstract class SingleCommandPluginModule extends CommandModule %7B%0A  private CommandName command;%0A%0A  @Inject%0A  void setPluginName(@PluginName String name) %7B%0A    this.command = Commands.named(name);%0A  %7D%0A%0A  @Override%0A  protected final void configure() %7B%0A    Preconditions.checkState(command != null, %22@PluginName must be provided%22);%0A    configure(bind(Commands.key(command)));%0A  %7D%0A%0A  protected abstract void configure(LinkedBindingBuilder%3CCommand%3E bind);%0A%7D%0A

Add support for plugin root level command