All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.tinkerpop.gremlin.process.traversal.dsl.GremlinDsl Maven / Gradle / Ivy

/*
 * 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.process.traversal.dsl;

import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * An annotation that specifies that an interface is meant to be used to produce Gremlin DSL. This annotation should
 * be applied to an interface that extends {@link GraphTraversal}. This interface should be suffixed with
 * {@code TraversalDsl}. The DSL classes will be generated to the package of the annotated class or the to the value
 * specified in the {@link #packageName()} and will use the part of the interface name up to the suffix to generate
 * the classes. Therefore, assuming an interface, annotated with {@code GremlinDsl}, called {@code SocialTraversalDsl},
 * there will be three classes generated:
 *
 * 
    *
  • {@code SocialTraversal} - an interface that is an extension to {@code SocialTraversalDsl}
  • *
  • {@code DefaultSocialTraversal} - an implementation of the {@code SocialTraversal}
  • *
  • {@code SocialTraversalSource} - an extension of {@link GraphTraversalSource} which spawns {@code DefaultSocialTraversal} instances
  • *
  • {@code __} - which spawns anonymous {@code DefaultSocialTraversal} instances
  • *
* * Together these generated classes provide all the infrastructure required to properly Gremlin traversals enhanced * with domain specific steps. * * @author Stephen Mallette (http://stephen.genoprime.com) */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface GremlinDsl { /** * The default package name in which to generate the DSL. If this value is left unset or set to an empty string, * it will default to the same package as the class or interface the annotation is on. */ public String packageName() default ""; /** * Defines the optional canonical name of the {@link GraphTraversalSource} that this DSL should extend from. If * this value is not supplied the generated "source" will simply extend from {@link GraphTraversalSource}. */ public String traversalSource() default "org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource"; /** * When set to {@code true}, which is the default, the following methods will be generated to the DSL * implementation of the {@link GraphTraversalSource}: * *
    *
  • {@link GraphTraversalSource#addV()}
  • *
  • {@link GraphTraversalSource#addV(String)}
  • *
  • {@link GraphTraversalSource#V(Object...)}
  • *
  • {@link GraphTraversalSource#E(Object...)}
  • *
*/ public boolean generateDefaultMethods() default true; /** * Annotation that allows the user to directly override the type parameters on generated anonymous methods. If this * annotation is not specified then the processor will attempt to infer the correct type parameters to use when * generating the anonymous method representations of the DSL methods. */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) public @interface AnonymousMethod { /** * The type parameters to apply to the return type of the method applied in the order that they are specified. */ public String[] returnTypeParameters() default {}; /** * The type parameters to apply to the method in the order that they are specified. */ public String[] methodTypeParameters() default {}; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy