blob: ec282de3df4f2544143b2a3ad7c89a3c292e2450 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.tinkerpop.gremlin.language.grammar;
import org.antlr.v4.runtime.tree.ParseTree;
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.structure.Direction;
/**
* Traversal enum parser parses all the enums like (e.g. {@link Scope} in graph traversal.
*/
public class TraversalEnumParser {
/**
* Parse enum text from a parse tree context into a enum object
* @param enumType : class of enum
* @param context : parse tree context
* @return enum object
*/
public static <E extends Enum<E>, C extends ParseTree> E parseTraversalEnumFromContext(final Class<E> enumType, final C context) {
final String text = context.getText();
final String className = enumType.getSimpleName();
// Support qualified class names like (ex: T.id or Scope.local)
if (text.startsWith(className)) {
final String strippedText = text.substring(className.length() + 1);
return E.valueOf(enumType, strippedText);
} else {
return E.valueOf(enumType, text);
}
}
/**
* Parsing of {@link Direction} requires some special handling because of aliases (from/to).
*/
public static Direction parseTraversalDirectionFromContext(final GremlinParser.TraversalDirectionContext context) {
String text = context.getText();
if (text.startsWith(Direction.class.getSimpleName()))
text = text.substring(Direction.class.getSimpleName().length() + 1);
return Direction.directionValueOf(text);
}
}