/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Container for command line arguments.
*
* @author Artem Zatsarynnyi
*/
public class CommandLine {
private final List<String> arguments;
/** Create empty container for a command line. */
public CommandLine() {
arguments = new ArrayList<>();
}
/** Create container for command line with the specified {@code args}. */
public CommandLine(String... args) {
arguments = new ArrayList<>();
if (args != null && args.length > 0) {
Collections.addAll(arguments, args);
}
}
/** Create container for command line based on the specified {@code commandLine}. */
public CommandLine(String commandLine) {
final String[] args = commandLine.split(" +");
arguments = new ArrayList<>();
if (args.length > 0) {
Collections.addAll(arguments, args);
}
}
/** Get list of command line arguments. */
public List<String> getArguments() {
return new ArrayList<>(arguments);
}
/** Get command line argument by index. */
public String getArgument(int index) {
return arguments.get(index);
}
/** Get index of the specified command line argument. */
public int indexOf(String arg) {
return arguments.indexOf(arg);
}
/**
* Adds list of arguments to command line.
*
* @param args
* arguments
* @return this {@code CommandLine}
*/
public CommandLine add(String... args) {
if (args != null && args.length > 0) {
Collections.addAll(arguments, args);
}
return this;
}
/**
* Adds list of arguments to command line.
*
* @param args
* arguments
* @return this {@code CommandLine}
*/
public CommandLine add(List<String> args) {
if (args != null && !args.isEmpty()) {
arguments.addAll(args);
}
return this;
}
/** Checks whether the specified argument is present in this command line or not. */
public boolean hasArgument(String arg) {
return arguments.contains(arg);
}
/** Remove the specified argument from this command line. */
public boolean removeArgument(String arg) {
return arguments.remove(arg);
}
public String[] asArray() {
return arguments.toArray(new String[arguments.size()]);
}
@Override
public String toString() {
final String[] str = asArray();
final StringBuilder sb = new StringBuilder();
for (String s : str) {
if (sb.length() > 1) {
sb.append(' ');
}
sb.append(s);
}
return sb.toString();
}
}