
br.com.objectos.args.Args Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2016 Objectos, Fábrica de Software LTDA.
*
* 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 br.com.objectos.args;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author [email protected] (Marcio Endo)
*/
public class Args implements CanOnCommand {
private final List partList;
private final Command command;
private final OptionMap optionMap;
private Args(List partList, Command command, OptionMap optionMap) {
this.partList = partList;
this.command = command;
this.optionMap = optionMap;
}
public static Args of(String[] args) {
List argList = Arrays.asList(args);
Collections.reverse(argList);
Box box = new Box(null);
List partList = argList.stream()
.flatMap(s -> Part.parse(box, s))
.collect(Collectors.toList());
Collections.reverse(partList);
Command command = Command.empty();
OptionMap.Builder optionMap = OptionMap.builder();
Iterator partIterator = partList.iterator();
if (partIterator.hasNext()) {
Part part = partIterator.next();
command = part.toCommand();
part.acceptOptionMap(optionMap);
while (partIterator.hasNext()) {
part = partIterator.next();
part.acceptOptionMap(optionMap);
}
}
return new Args(
partList,
command,
optionMap.build());
}
public Argument argument() {
return argumentStream().findFirst().get();
}
public Stream argumentStream() {
return partList.stream()
.filter(Part::unvisited)
.filter(Part::isArgument)
.map(Argument.class::cast);
}
@Override
public CommandBuilder onCommand(String name, ArgsParser parser) {
return command.onCommand(this, name, parser);
}
@Override
public CommandBuilder onCommand(String name, String subCommand, ArgsParser parser) {
return command.onCommand(this, name, subCommand, parser);
}
public OptionQuery option(String... names) {
return optionMap.query(names);
}
@Override
public String toString() {
return partList.stream()
.map(Part::toString)
.collect(Collectors.joining(" "));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy