/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 jena.cmd;
import static java.util.Arrays.asList;
import java.util.ArrayList ;
import java.util.Iterator ;
import java.util.List ;
/** A command line argument specification. */
public class ArgDecl
{
boolean takesValue ;
List<String> names = new ArrayList<>() ;
public static final boolean HasValue = true ;
public static final boolean NoValue = false ;
/** Create a declaration for a command argument.
*
* @param hasValue Does it take a value or not?
*/
public ArgDecl(boolean hasValue)
{
takesValue = hasValue ;
}
/** Create a declaration for a command argument.
*
* @param hasValue Does it take a value or not?
* @param names Names of arguments
*/
public ArgDecl(boolean hasValue, String... names)
{
this(hasValue) ;
asList(names).forEach(this::addName);
}
public void addName(String name)
{
name = canonicalForm(name) ;
if ( ! names.contains(name))
names.add(name) ;
}
public String getKeyName() { return names.get(0) ; }
public List<String> getNames() { return names ; }
public Iterator<String> names() { return names.iterator() ; }
public boolean takesValue() { return takesValue ; }
public boolean matches(Arg a)
{
String name = a.getName();
return names.stream().anyMatch(name::equals);
}
public boolean matches(String arg)
{
arg = canonicalForm(arg) ;
return names.contains(arg) ;
}
public static String canonicalForm(String str)
{
if ( str.startsWith("--") )
return str.substring(2) ;
if ( str.startsWith("-") )
return str.substring(1) ;
return str ;
}
}