package org.vertexium.cli.commands;
import org.codehaus.groovy.tools.shell.CommandSupport;
import org.codehaus.groovy.tools.shell.Groovysh;
import org.vertexium.Authorizations;
import org.vertexium.cli.VertexiumScript;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class SetAuthsCommand extends CommandSupport {
public SetAuthsCommand(Groovysh shell) {
super(shell, ":setauths", ":sa");
}
@Override
public Object execute(List<String> args) {
List<String> auths = parseAuths(args);
Authorizations authorizations = VertexiumScript.getGraph().createAuthorizations(auths.toArray(new String[auths.size()]));
VertexiumScript.setAuthorizations(authorizations);
return authorizations;
}
static List<String> parseAuths(List<String> args) {
List<String> auths = new ArrayList<>();
for (String arg : args) {
auths.addAll(parseAuths(arg));
}
return auths;
}
private static Collection<String> parseAuths(String arg) {
List<String> auths = new ArrayList<>();
for (int i = 0; i < arg.length(); i++) {
char ch = arg.charAt(i);
if (ch == '\'') {
int start = i + 1;
int end = arg.indexOf('\'', start);
if (end == -1) {
throw new RuntimeException("Missing end '");
}
auths.add(arg.substring(start, end));
i = end + 1;
} else if (ch == '"') {
int start = i + 1;
int end = arg.indexOf('"', start);
if (end == -1) {
throw new RuntimeException("Missing end \"");
}
auths.add(arg.substring(start, end));
i = end + 1;
} else if (!Character.isWhitespace(ch)) {
int start = i;
int end = arg.indexOf(',', start);
if (end == -1) {
end = arg.length();
}
String auth = arg.substring(start, end).trim();
if (auth.length() > 0) {
auths.add(auth);
}
i = end;
}
}
return auths;
}
}