com.jetbrains.commandInterface.command.KnownArgumentsInfo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of python-community Show documentation
Show all versions of python-community Show documentation
A packaging of the IntelliJ Community Edition python-community library.
This is release number 1 of trunk branch 142.
The newest version!
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* 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.jetbrains.commandInterface.command;
import com.google.common.base.Preconditions;
import com.intellij.openapi.util.Pair;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* In some special cases we have insight about command arguments.
* In this case we use this class to improve arguments and validation support.
* Command may have several arguments, while some are optional and some may have many values.
* Arguments are positional (not named!) by optparse design, so only last argument may be optional but it also may be repeated several times.
*
* Examples:
*
* my_command required_arg1_value required_arg2_value [optinal_arg3_value] [optinal_arg4_value]
*
* Or even like this:
*
* my_command required_arg1_value [optional_another_arg1_value_1] [optional_another_arg1_value_2] ... [optional_another_arg1_value_N]
*
.
*
*
* @author Ilya.Kazakevich
*/
public final class KnownArgumentsInfo implements ArgumentsInfo {
/**
* List of real arguments.
*/
@NotNull
private final List myArguments = new ArrayList();
/**
* Minimum number of arguments this command requires (actually, number of required arguments)
*/
private final int myMinArguments;
/**
* Maximum number of arguments this command accepts
* (number of required arguments + num of optional arguments or {@link java.lang.Integer#MAX_VALUE} if last argument may have infinite
* number of values)
*/
private final int myMaxArguments;
/**
* For command with fixed number of arguments. In this case all arguments are fixed and required!
*
* @param arguments arguments this command have
*/
public KnownArgumentsInfo(@NotNull final Collection arguments) {
this(arguments, arguments.size(), arguments.size());
}
/**
*
* @param minArguments minimum arguments required
* @param maxArguments maximum argument allowed
* @param arguments arguments
*/
public KnownArgumentsInfo(final int minArguments, final int maxArguments, @NotNull final Argument... arguments) {
this(Arrays.asList(arguments), minArguments, maxArguments);
}
/**
* For commands with infinite number of values last argument accepts (my_command VAL1 VAL2 .. VALN)
*
* @param arguments list of known arguments (last one would be used to accept all residual values)
* @param minArguments number of required arguments
*/
public KnownArgumentsInfo(@NotNull final Collection arguments,
final int minArguments) {
this(arguments, minArguments, Integer.MAX_VALUE);
}
/**
* For commands with finite number of values last argument accepts.
*
* @param arguments list of known arguments (last one would be used to accept all residual values, but when {@link #myMaxArguments} reached,
* null will be returned)
* @param minArguments number of required arguments
* @param maxArguments maximum number of argument values this command accepts
*/
public KnownArgumentsInfo(@NotNull final Collection arguments,
final int minArguments,
final int maxArguments) {
Preconditions.checkArgument(!arguments.isEmpty(), "At least one argument should be provided");
myArguments.addAll(arguments);
myMinArguments = minArguments;
myMaxArguments = maxArguments;
}
@Nullable
@Override
public Pair getArgument(final int argumentPosition) {
if (argumentPosition >= myMaxArguments) {
return null;
}
final boolean optional = argumentPosition >= myMinArguments;
if (myArguments.size() > argumentPosition) {
return Pair.create(!optional, myArguments.get(argumentPosition));
}
// We may need last one
if (argumentPosition < myMaxArguments) {
return Pair.create(false, myArguments.get(myArguments.size() - 1));
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy