parent
935c76ae34
commit
00275d61a4
|
|
@ -19,9 +19,10 @@ public class Example8 extends Example {
|
|||
}
|
||||
|
||||
private void test() throws MikrotikApiException, InterruptedException {
|
||||
List<Map<String, String>> res = con.execute("/ip/hotspot/user/print where uptime!=1");
|
||||
List<Map<String, String>> res = con.execute("/ip/hotspot/user/print where uptime!=1");
|
||||
for (Map<String, String> r : res) {
|
||||
System.out.println(r);
|
||||
}
|
||||
// con.execute("/ip/firewall/filter/add chain=forward hotspot=!auth protocol=tcp src-port=8000-8084");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,8 +51,13 @@ class Parser {
|
|||
next();
|
||||
if (token == Token.EQUALS) {
|
||||
next();
|
||||
StringBuilder val = new StringBuilder();
|
||||
if (token == Token.PIPE) { // handle cases like hotspot=!auth
|
||||
val.append(token);
|
||||
next();
|
||||
}
|
||||
expect(Token.TEXT);
|
||||
StringBuilder val = new StringBuilder(text);
|
||||
val.append(text);
|
||||
next();
|
||||
while (is(Token.COMMA, Token.SLASH)) {
|
||||
val.append(token);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
*/
|
||||
package me.legrange.mikrotik.impl;
|
||||
|
||||
import static me.legrange.mikrotik.impl.Scanner.Token.*;
|
||||
/**
|
||||
* A simple scanner.
|
||||
*
|
||||
|
|
@ -25,7 +26,7 @@ class Scanner {
|
|||
enum Token {
|
||||
|
||||
SLASH("/"), COMMA(","), EOL(), WS, TEXT,
|
||||
LESS("<"), MORE(">"), EQUALS("="), NOT_EQUALS("!="),
|
||||
LESS("<"), MORE(">"), EQUALS("="), NOT_EQUALS("!="), PIPE("!"),
|
||||
WHERE, NOT, AND, OR, RETURN;
|
||||
|
||||
@Override
|
||||
|
|
@ -59,27 +60,27 @@ class Scanner {
|
|||
text = null;
|
||||
switch (c) {
|
||||
case '\n':
|
||||
return Token.EOL;
|
||||
return EOL;
|
||||
case ' ':
|
||||
case '\t':
|
||||
return whiteSpace();
|
||||
case ',':
|
||||
nextChar();
|
||||
return Token.COMMA;
|
||||
return COMMA;
|
||||
case '/':
|
||||
nextChar();
|
||||
return Token.SLASH;
|
||||
return SLASH;
|
||||
case '<':
|
||||
nextChar();
|
||||
return Token.LESS;
|
||||
return LESS;
|
||||
case '>':
|
||||
nextChar();
|
||||
return Token.MORE;
|
||||
return MORE;
|
||||
case '=':
|
||||
nextChar();
|
||||
return Token.EQUALS;
|
||||
return EQUALS;
|
||||
case '!':
|
||||
return notEquals();
|
||||
return pipe();
|
||||
case '"':
|
||||
return quotedText('"');
|
||||
case '\'':
|
||||
|
|
@ -119,17 +120,17 @@ class Scanner {
|
|||
String val = text.toString().toLowerCase();
|
||||
switch (val) {
|
||||
case "where":
|
||||
return Token.WHERE;
|
||||
return WHERE;
|
||||
case "not":
|
||||
return Token.NOT;
|
||||
return NOT;
|
||||
case "and":
|
||||
return Token.AND;
|
||||
return AND;
|
||||
case "or":
|
||||
return Token.OR;
|
||||
return OR;
|
||||
case "return":
|
||||
return Token.RETURN;
|
||||
return RETURN;
|
||||
}
|
||||
return Token.TEXT;
|
||||
return TEXT;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -146,7 +147,19 @@ class Scanner {
|
|||
nextChar();
|
||||
}
|
||||
nextChar(); // eat the '"'
|
||||
return Token.TEXT;
|
||||
return TEXT;
|
||||
}
|
||||
|
||||
/**
|
||||
* process notEquals !
|
||||
*/
|
||||
private Token pipe() {
|
||||
nextChar(); // eat !
|
||||
if (c == '=') {
|
||||
nextChar(); // eat =
|
||||
return NOT_EQUALS;
|
||||
}
|
||||
return PIPE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -156,19 +169,7 @@ class Scanner {
|
|||
while ((c == ' ') || (c == '\t')) {
|
||||
nextChar();
|
||||
}
|
||||
return Token.WS;
|
||||
}
|
||||
|
||||
/**
|
||||
* process the not equals token
|
||||
*/
|
||||
private Token notEquals() throws ScanException {
|
||||
nextChar(); // eat the !
|
||||
if (c != '=') {
|
||||
throw new ScanException(String.format("Expected = after !, found '%c'", c));
|
||||
}
|
||||
nextChar(); // eat the =
|
||||
return Token.NOT_EQUALS;
|
||||
return WS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -183,6 +184,17 @@ class Scanner {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* look ahead one character
|
||||
*/
|
||||
private char peek() {
|
||||
if (pos < line.length()) {
|
||||
return line.charAt(pos);
|
||||
} else {
|
||||
return '\n';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check if the character matches the give expression
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue