blob: cc7881c0448ed83c20019385c133783ad5d2ec9c [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.jsr223;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.commons.configuration.CombinedConfiguration;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationBuilder;
import org.apache.commons.configuration.ConfigurationUtils;
import org.apache.commons.configuration.FileConfiguration;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.MapConfiguration;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.SubsetConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.tinkerpop.gremlin.process.computer.Computer;
import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.computer.Memory;
import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.bulkdumping.BulkDumperVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.bulkloading.BulkLoader;
import org.apache.tinkerpop.gremlin.process.computer.bulkloading.BulkLoaderVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.bulkloading.IncrementalBulkLoader;
import org.apache.tinkerpop.gremlin.process.computer.bulkloading.OneTimeBulkLoader;
import org.apache.tinkerpop.gremlin.process.computer.clone.CloneVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.clustering.connected.ConnectedComponentVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.ClusterCountMapReduce;
import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.ClusterPopulationMapReduce;
import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankMapReduce;
import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.search.path.ShortestPathVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.traversal.MemoryTraversalSideEffects;
import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ConnectedComponent;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressure;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ShortestPath;
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.optimization.GraphFilterStrategy;
import org.apache.tinkerpop.gremlin.process.remote.RemoteConnection;
import org.apache.tinkerpop.gremlin.process.traversal.Bindings;
import org.apache.tinkerpop.gremlin.process.traversal.IO;
import org.apache.tinkerpop.gremlin.process.traversal.Operator;
import org.apache.tinkerpop.gremlin.process.traversal.Order;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.Pop;
import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.process.traversal.TextP;
import org.apache.tinkerpop.gremlin.process.traversal.Translator;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.WithOptions;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ReferenceElementStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.AdjacentToIncidentStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.EarlyLimitStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.FilterRankingStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IncidentToAdjacentStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchPredicateStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.OrderLimitStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathProcessorStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EdgeLabelVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LambdaRestrictionStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.StandardVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
import org.apache.tinkerpop.gremlin.structure.Column;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Transaction;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
import org.apache.tinkerpop.gremlin.structure.io.GraphWriter;
import org.apache.tinkerpop.gremlin.structure.io.Io;
import org.apache.tinkerpop.gremlin.structure.io.IoCore;
import org.apache.tinkerpop.gremlin.structure.io.Storage;
import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLIo;
import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLMapper;
import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLReader;
import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLWriter;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONIo;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
import org.apache.tinkerpop.gremlin.structure.io.graphson.LegacyGraphSONReader;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoClassResolverV1d0;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoClassResolverV3d0;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoMapper;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoVersion;
import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter;
import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.tinkerpop.gremlin.structure.util.GraphFactory;
import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
import org.apache.tinkerpop.gremlin.util.Gremlin;
import org.apache.tinkerpop.gremlin.util.TimeUtil;
import org.apache.tinkerpop.gremlin.util.function.Lambda;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.javatuples.Pair;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Stream;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public final class CoreImports {
private final static Set<Class> CLASS_IMPORTS = new LinkedHashSet<>();
private final static Set<Field> FIELD_IMPORTS = new LinkedHashSet<>();
private final static Set<Method> METHOD_IMPORTS = new LinkedHashSet<>();
private final static Set<Enum> ENUM_IMPORTS = new LinkedHashSet<>();
static {
/////////////
// CLASSES //
/////////////
CLASS_IMPORTS.add(Edge.class);
CLASS_IMPORTS.add(Element.class);
CLASS_IMPORTS.add(Graph.class);
CLASS_IMPORTS.add(Property.class);
CLASS_IMPORTS.add(Transaction.class);
CLASS_IMPORTS.add(Vertex.class);
CLASS_IMPORTS.add(VertexProperty.class);
CLASS_IMPORTS.add(GraphFactory.class);
CLASS_IMPORTS.add(ElementHelper.class);
// tokens
CLASS_IMPORTS.add(SackFunctions.class);
CLASS_IMPORTS.add(SackFunctions.Barrier.class);
CLASS_IMPORTS.add(VertexProperty.Cardinality.class);
CLASS_IMPORTS.add(Column.class);
CLASS_IMPORTS.add(Direction.class);
CLASS_IMPORTS.add(Operator.class);
CLASS_IMPORTS.add(Order.class);
CLASS_IMPORTS.add(Pop.class);
CLASS_IMPORTS.add(Scope.class);
CLASS_IMPORTS.add(T.class);
CLASS_IMPORTS.add(TraversalOptionParent.class);
CLASS_IMPORTS.add(TraversalOptionParent.Pick.class);
CLASS_IMPORTS.add(P.class);
CLASS_IMPORTS.add(TextP.class);
CLASS_IMPORTS.add(WithOptions.class);
// remote
CLASS_IMPORTS.add(RemoteConnection.class);
CLASS_IMPORTS.add(EmptyGraph.class);
// io
CLASS_IMPORTS.add(GraphReader.class);
CLASS_IMPORTS.add(GraphWriter.class);
CLASS_IMPORTS.add(Io.class);
CLASS_IMPORTS.add(IO.class);
CLASS_IMPORTS.add(IoCore.class);
CLASS_IMPORTS.add(Storage.class);
CLASS_IMPORTS.add(GraphMLIo.class);
CLASS_IMPORTS.add(GraphMLMapper.class);
CLASS_IMPORTS.add(GraphMLReader.class);
CLASS_IMPORTS.add(GraphMLWriter.class);
CLASS_IMPORTS.add(GraphSONIo.class);
CLASS_IMPORTS.add(GraphSONMapper.class);
CLASS_IMPORTS.add(GraphSONReader.class);
CLASS_IMPORTS.add(GraphSONTokens.class);
CLASS_IMPORTS.add(GraphSONVersion.class);
CLASS_IMPORTS.add(GraphSONWriter.class);
CLASS_IMPORTS.add(LegacyGraphSONReader.class);
CLASS_IMPORTS.add(GryoClassResolverV1d0.class);
CLASS_IMPORTS.add(GryoClassResolverV3d0.class);
CLASS_IMPORTS.add(GryoIo.class);
CLASS_IMPORTS.add(GryoMapper.class);
CLASS_IMPORTS.add(GryoReader.class);
CLASS_IMPORTS.add(GryoVersion.class);
CLASS_IMPORTS.add(GryoWriter.class);
// configuration
CLASS_IMPORTS.add(BaseConfiguration.class);
CLASS_IMPORTS.add(CombinedConfiguration.class);
CLASS_IMPORTS.add(CompositeConfiguration.class);
CLASS_IMPORTS.add(Configuration.class);
CLASS_IMPORTS.add(ConfigurationBuilder.class);
CLASS_IMPORTS.add(ConfigurationUtils.class);
CLASS_IMPORTS.add(FileConfiguration.class);
CLASS_IMPORTS.add(HierarchicalConfiguration.class);
CLASS_IMPORTS.add(MapConfiguration.class);
CLASS_IMPORTS.add(PropertiesConfiguration.class);
CLASS_IMPORTS.add(SubsetConfiguration.class);
CLASS_IMPORTS.add(XMLConfiguration.class);
// strategies
CLASS_IMPORTS.add(ConnectiveStrategy.class);
CLASS_IMPORTS.add(ElementIdStrategy.class);
CLASS_IMPORTS.add(EventStrategy.class);
CLASS_IMPORTS.add(HaltedTraverserStrategy.class);
CLASS_IMPORTS.add(PartitionStrategy.class);
CLASS_IMPORTS.add(SubgraphStrategy.class);
CLASS_IMPORTS.add(LazyBarrierStrategy.class);
CLASS_IMPORTS.add(MatchAlgorithmStrategy.class);
CLASS_IMPORTS.add(ProfileStrategy.class);
CLASS_IMPORTS.add(AdjacentToIncidentStrategy.class);
CLASS_IMPORTS.add(FilterRankingStrategy.class);
CLASS_IMPORTS.add(IdentityRemovalStrategy.class);
CLASS_IMPORTS.add(IncidentToAdjacentStrategy.class);
CLASS_IMPORTS.add(MatchPredicateStrategy.class);
CLASS_IMPORTS.add(EarlyLimitStrategy.class);
CLASS_IMPORTS.add(OrderLimitStrategy.class);
CLASS_IMPORTS.add(PathProcessorStrategy.class);
CLASS_IMPORTS.add(CountStrategy.class);
CLASS_IMPORTS.add(ComputerVerificationStrategy.class);
CLASS_IMPORTS.add(LambdaRestrictionStrategy.class);
CLASS_IMPORTS.add(ReadOnlyStrategy.class);
CLASS_IMPORTS.add(ReferenceElementStrategy.class);
CLASS_IMPORTS.add(StandardVerificationStrategy.class);
CLASS_IMPORTS.add(EdgeLabelVerificationStrategy.class);
// graph traversal
CLASS_IMPORTS.add(AnonymousTraversalSource.class);
CLASS_IMPORTS.add(__.class);
CLASS_IMPORTS.add(GraphTraversal.class);
CLASS_IMPORTS.add(GraphTraversalSource.class);
CLASS_IMPORTS.add(Traversal.class);
CLASS_IMPORTS.add(TraversalMetrics.class);
CLASS_IMPORTS.add(Translator.class);
CLASS_IMPORTS.add(Bindings.class);
// graph computer
CLASS_IMPORTS.add(Computer.class);
CLASS_IMPORTS.add(ComputerResult.class);
CLASS_IMPORTS.add(ConnectedComponent.class);
CLASS_IMPORTS.add(ConnectedComponentVertexProgram.class);
CLASS_IMPORTS.add(GraphComputer.class);
CLASS_IMPORTS.add(Memory.class);
CLASS_IMPORTS.add(VertexProgram.class);
CLASS_IMPORTS.add(CloneVertexProgram.class);
CLASS_IMPORTS.add(BulkDumperVertexProgram.class);
CLASS_IMPORTS.add(BulkLoader.class);
CLASS_IMPORTS.add(BulkLoaderVertexProgram.class);
CLASS_IMPORTS.add(IncrementalBulkLoader.class);
CLASS_IMPORTS.add(OneTimeBulkLoader.class);
CLASS_IMPORTS.add(ClusterCountMapReduce.class);
CLASS_IMPORTS.add(ClusterPopulationMapReduce.class);
CLASS_IMPORTS.add(MemoryTraversalSideEffects.class);
CLASS_IMPORTS.add(PeerPressure.class);
CLASS_IMPORTS.add(PeerPressureVertexProgram.class);
CLASS_IMPORTS.add(PageRank.class);
CLASS_IMPORTS.add(PageRankMapReduce.class);
CLASS_IMPORTS.add(PageRankVertexProgram.class);
CLASS_IMPORTS.add(ShortestPath.class);
CLASS_IMPORTS.add(ShortestPathVertexProgram.class);
CLASS_IMPORTS.add(GraphFilterStrategy.class);
CLASS_IMPORTS.add(TraversalVertexProgram.class);
CLASS_IMPORTS.add(VertexProgramStrategy.class);
// utils
CLASS_IMPORTS.add(Gremlin.class);
CLASS_IMPORTS.add(IteratorUtils.class);
CLASS_IMPORTS.add(TimeUtil.class);
CLASS_IMPORTS.add(Lambda.class);
/////////////
// METHODS //
/////////////
uniqueMethods(IoCore.class).forEach(METHOD_IMPORTS::add);
uniqueMethods(P.class).forEach(METHOD_IMPORTS::add);
uniqueMethods(AnonymousTraversalSource.class).forEach(METHOD_IMPORTS::add);
uniqueMethods(TextP.class).forEach(METHOD_IMPORTS::add);
uniqueMethods(__.class).filter(m -> !m.getName().equals("__")).forEach(METHOD_IMPORTS::add);
uniqueMethods(Computer.class).forEach(METHOD_IMPORTS::add);
uniqueMethods(TimeUtil.class).forEach(METHOD_IMPORTS::add);
uniqueMethods(Lambda.class).forEach(METHOD_IMPORTS::add);
///////////
// ENUMS //
///////////
Collections.addAll(ENUM_IMPORTS, SackFunctions.Barrier.values());
Collections.addAll(ENUM_IMPORTS, VertexProperty.Cardinality.values());
Collections.addAll(ENUM_IMPORTS, Column.values());
Collections.addAll(ENUM_IMPORTS, Direction.values());
Collections.addAll(ENUM_IMPORTS, Operator.values());
Collections.addAll(ENUM_IMPORTS, Order.values());
Collections.addAll(ENUM_IMPORTS, Pop.values());
Collections.addAll(ENUM_IMPORTS, Scope.values());
Collections.addAll(ENUM_IMPORTS, T.values());
Collections.addAll(ENUM_IMPORTS, TraversalOptionParent.Pick.values());
}
private CoreImports() {
// static methods only, do not instantiate class
}
public static Set<Class> getClassImports() {
return Collections.unmodifiableSet(CLASS_IMPORTS);
}
public static Set<Method> getMethodImports() {
return Collections.unmodifiableSet(METHOD_IMPORTS);
}
public static Set<Enum> getEnumImports() {
return Collections.unmodifiableSet(ENUM_IMPORTS);
}
public static Set<Field> getFieldImports() {
return Collections.unmodifiableSet(FIELD_IMPORTS);
}
/**
* Filters to unique method names on each class.
*/
private static Stream<Method> uniqueMethods(final Class<?> clazz) {
final Set<String> unique = new LinkedHashSet<>();
return Stream.of(clazz.getMethods())
.filter(m -> Modifier.isStatic(m.getModifiers()))
.map(m -> Pair.with(generateMethodDescriptor(m), m))
.filter(p -> {
final boolean exists = unique.contains(p.getValue0());
if (!exists) unique.add(p.getValue0());
return !exists;
})
.map(Pair::getValue1);
}
private static String generateMethodDescriptor(final Method m) {
return m.getDeclaringClass().getCanonicalName() + "." + m.getName();
}
}