/*
 * Copyright 2006 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.gwt.util.tools;

/**
 * Argument handler that handles arguments that do not have preceding flags.
 */
public abstract class ArgHandlerExtra extends ArgHandler {

  /**
   * Processes the given "extra" argument.
   * @return false to abort the command and print a usage error.
   */
  public abstract boolean addExtraArg(String arg);

  @Override
  public final String getTag() {
    return null;
  }

  @Override
  public int handle(String[] args, int startIndex) {
    if (addExtraArg(args[startIndex])) {
      return 0;
    } else {
      return -1;
    }
  }

  @Override
  public boolean isRequired() {
    return false;
  }

}
