| /* |
| * 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.structure.io.gryo; |
| |
| import org.apache.tinkerpop.gremlin.process.computer.GraphFilter; |
| import org.apache.tinkerpop.gremlin.process.computer.MapReduce; |
| 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.computer.util.MapMemory; |
| import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.Bytecode; |
| import org.apache.tinkerpop.gremlin.process.traversal.Contains; |
| 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.Path; |
| 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.step.TraversalOptionParent; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupCountStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.map.MeanGlobalStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.map.TreeStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep; |
| import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; |
| import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConnectiveStrategy; |
| 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.decoration.SubgraphStrategy; |
| import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.MatchAlgorithmStrategy; |
| 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.InlineFilterStrategy; |
| 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.PathRetractionStrategy; |
| import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy; |
| import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy; |
| 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.ReservedKeysVerificationStrategy; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_P_S_SE_SL_Traverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_O_S_SE_SL_Traverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_P_S_SE_SL_Traverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.LP_O_OB_S_SE_SL_Traverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_OB_S_SE_SL_Traverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.ProjectedTraverser; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.IndexedTraverserSet; |
| import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet; |
| import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics; |
| import org.apache.tinkerpop.gremlin.process.traversal.util.ImmutableMetrics; |
| import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics; |
| import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics; |
| import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation; |
| 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.Property; |
| import org.apache.tinkerpop.gremlin.structure.T; |
| import org.apache.tinkerpop.gremlin.structure.Vertex; |
| import org.apache.tinkerpop.gremlin.structure.VertexProperty; |
| import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim; |
| import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge; |
| import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedPath; |
| import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty; |
| import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex; |
| import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty; |
| import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge; |
| import org.apache.tinkerpop.gremlin.structure.util.reference.ReferencePath; |
| import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceProperty; |
| import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex; |
| import org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertexProperty; |
| import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph; |
| import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphSerializer; |
| import org.apache.tinkerpop.gremlin.util.function.FunctionUtils; |
| import org.apache.tinkerpop.gremlin.util.function.HashSetSupplier; |
| import org.apache.tinkerpop.gremlin.util.function.Lambda; |
| import org.apache.tinkerpop.gremlin.util.function.MultiComparator; |
| import org.apache.tinkerpop.shaded.kryo.ClassResolver; |
| import org.apache.tinkerpop.shaded.kryo.KryoSerializable; |
| import org.apache.tinkerpop.shaded.kryo.serializers.JavaSerializer; |
| import org.javatuples.Pair; |
| import org.javatuples.Triplet; |
| |
| import java.math.BigDecimal; |
| import java.math.BigInteger; |
| import java.net.InetAddress; |
| import java.net.URI; |
| import java.nio.ByteBuffer; |
| import java.time.Duration; |
| import java.time.Instant; |
| import java.time.LocalDate; |
| import java.time.LocalDateTime; |
| import java.time.LocalTime; |
| import java.time.MonthDay; |
| import java.time.OffsetDateTime; |
| import java.time.OffsetTime; |
| import java.time.Period; |
| import java.time.Year; |
| import java.time.YearMonth; |
| import java.time.ZoneOffset; |
| import java.time.ZonedDateTime; |
| import java.util.AbstractMap; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Calendar; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.Currency; |
| import java.util.Date; |
| import java.util.EnumSet; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.LinkedHashMap; |
| import java.util.LinkedHashSet; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.Locale; |
| import java.util.Optional; |
| import java.util.TimeZone; |
| import java.util.TreeMap; |
| import java.util.TreeSet; |
| import java.util.UUID; |
| import java.util.concurrent.ConcurrentHashMap; |
| import java.util.concurrent.atomic.AtomicLong; |
| import java.util.function.Supplier; |
| |
| /** |
| * @author Stephen Mallette (http://stephen.genoprime.com) |
| */ |
| public enum GryoVersion { |
| V1_0("1.0", initV1d0Registrations(), GryoClassResolverV1d0::new), |
| V3_0("3.0", initV3d0Registrations(), GryoClassResolverV3d0::new); |
| |
| private final String versionNumber; |
| private final List<TypeRegistration<?>> registrations; |
| private final Supplier<ClassResolver> classResolverMaker; |
| |
| /** |
| * Creates a new {@link GryoVersion}. |
| * |
| * @param versionNumber the user facing string representation of the version which should follow an {@code x.y} |
| * pattern |
| * @param registrations the list of registrations for this version |
| * @param classResolverMaker providers the default {@code ClassResolver} for a particular version of Gryo |
| */ |
| GryoVersion(final String versionNumber, final List<TypeRegistration<?>> registrations, final Supplier<ClassResolver> classResolverMaker) { |
| // Validate the default registrations |
| // For justification of these default registration rules, see TinkerPopKryoRegistrator |
| for (TypeRegistration<?> tr : registrations) { |
| if (tr.hasSerializer() /* no serializer is acceptable */ && |
| null == tr.getSerializerShim() /* a shim serializer is acceptable */ && |
| !(tr.getShadedSerializer() instanceof JavaSerializer) /* shaded JavaSerializer is acceptable */) { |
| // everything else is invalid |
| final String msg = String.format("The default GryoMapper type registration %s is invalid. " + |
| "It must supply either an implementation of %s or %s, but supplies neither. " + |
| "This is probably a bug in GryoMapper's default serialization class registrations.", tr, |
| SerializerShim.class.getCanonicalName(), JavaSerializer.class.getCanonicalName()); |
| throw new IllegalStateException(msg); |
| } |
| } |
| |
| this.versionNumber = versionNumber; |
| this.registrations = registrations; |
| this.classResolverMaker = classResolverMaker; |
| } |
| |
| public List<TypeRegistration<?>> cloneRegistrations() { |
| return new ArrayList<>(registrations); |
| } |
| |
| public List<TypeRegistration<?>> getRegistrations() { |
| return Collections.unmodifiableList(registrations); |
| } |
| |
| public Supplier<ClassResolver> getClassResolverMaker() { |
| return classResolverMaker; |
| } |
| |
| public String getVersion() { |
| return versionNumber; |
| } |
| |
| public static List<TypeRegistration<?>> initV3d0Registrations() { |
| return new ArrayList<TypeRegistration<?>>() {{ |
| add(GryoTypeReg.of(byte[].class, 25)); |
| add(GryoTypeReg.of(char[].class, 26)); |
| add(GryoTypeReg.of(short[].class, 27)); |
| add(GryoTypeReg.of(int[].class, 28)); |
| add(GryoTypeReg.of(long[].class, 29)); |
| add(GryoTypeReg.of(float[].class, 30)); |
| add(GryoTypeReg.of(double[].class, 31)); |
| add(GryoTypeReg.of(String[].class, 32)); |
| add(GryoTypeReg.of(Object[].class, 33)); |
| add(GryoTypeReg.of(ArrayList.class, 10)); |
| add(GryoTypeReg.of(Types.ARRAYS_AS_LIST, 134, new UtilSerializers.ArraysAsListSerializer())); |
| add(GryoTypeReg.of(BigInteger.class, 34)); |
| add(GryoTypeReg.of(BigDecimal.class, 35)); |
| add(GryoTypeReg.of(Calendar.class, 39)); |
| add(GryoTypeReg.of(Class.class, 41, new UtilSerializers.ClassSerializer())); |
| add(GryoTypeReg.of(Class[].class, 166, new UtilSerializers.ClassArraySerializer())); |
| add(GryoTypeReg.of(Collection.class, 37)); |
| add(GryoTypeReg.of(Collections.EMPTY_LIST.getClass(), 51)); |
| add(GryoTypeReg.of(Collections.EMPTY_MAP.getClass(), 52)); |
| add(GryoTypeReg.of(Collections.EMPTY_SET.getClass(), 53)); |
| add(GryoTypeReg.of(Collections.singleton(null).getClass(), 54)); |
| add(GryoTypeReg.of(Collections.singletonList(null).getClass(), 24)); |
| add(GryoTypeReg.of(Collections.singletonMap(null, null).getClass(), 23)); |
| add(GryoTypeReg.of(Types.COLLECTIONS_SYNCHRONIZED_MAP, 185, new UtilSerializers.SynchronizedMapSerializer())); |
| add(GryoTypeReg.of(Contains.class, 49)); |
| add(GryoTypeReg.of(Currency.class, 40)); |
| add(GryoTypeReg.of(Date.class, 38)); |
| add(GryoTypeReg.of(Direction.class, 12)); |
| add(GryoTypeReg.of(DetachedEdge.class, 21)); |
| add(GryoTypeReg.of(DetachedVertexProperty.class, 20)); |
| add(GryoTypeReg.of(DetachedProperty.class, 18)); |
| add(GryoTypeReg.of(DetachedVertex.class, 19)); |
| add(GryoTypeReg.of(DetachedPath.class, 60)); |
| // skip 14 |
| add(GryoTypeReg.of(EnumSet.class, 46)); |
| add(GryoTypeReg.of(HashMap.class, 11)); |
| add(GryoTypeReg.of(HashMap.Entry.class, 16)); |
| add(GryoTypeReg.of(Types.HASH_MAP_NODE, 92)); |
| add(GryoTypeReg.of(Types.HASH_MAP_TREE_NODE, 172)); |
| add(GryoTypeReg.of(KryoSerializable.class, 36)); |
| add(GryoTypeReg.of(LinkedHashMap.class, 47)); |
| add(GryoTypeReg.of(LinkedHashSet.class, 71)); |
| add(GryoTypeReg.of(ConcurrentHashMap.class, 170)); |
| add(GryoTypeReg.of(ConcurrentHashMap.Entry.class, 171)); |
| add(GryoTypeReg.of(LinkedList.class, 116)); |
| add(GryoTypeReg.of(Types.LINKED_HASH_MAP_ENTRY_CLASS, 15)); |
| add(GryoTypeReg.of(Locale.class, 22)); |
| add(GryoTypeReg.of(StringBuffer.class, 43)); |
| add(GryoTypeReg.of(StringBuilder.class, 44)); |
| add(GryoTypeReg.of(T.class, 48)); |
| add(GryoTypeReg.of(TimeZone.class, 42)); |
| add(GryoTypeReg.of(TreeMap.class, 45)); |
| add(GryoTypeReg.of(TreeSet.class, 50)); |
| add(GryoTypeReg.of(UUID.class, 17, new UtilSerializers.UUIDSerializer())); |
| add(GryoTypeReg.of(URI.class, 72, new UtilSerializers.URISerializer())); |
| add(GryoTypeReg.of(VertexTerminator.class, 13)); |
| add(GryoTypeReg.of(AbstractMap.SimpleEntry.class, 120)); |
| add(GryoTypeReg.of(AbstractMap.SimpleImmutableEntry.class, 121)); |
| add(GryoTypeReg.of(java.sql.Timestamp.class, 161)); |
| add(GryoTypeReg.of(InetAddress.class, 162, new UtilSerializers.InetAddressSerializer())); |
| add(GryoTypeReg.of(ByteBuffer.class, 163, new UtilSerializers.ByteBufferSerializer())); |
| |
| add(GryoTypeReg.of(ReferenceEdge.class, 81)); |
| add(GryoTypeReg.of(ReferenceVertexProperty.class, 82)); |
| add(GryoTypeReg.of(ReferenceProperty.class, 83)); |
| add(GryoTypeReg.of(ReferenceVertex.class, 84)); |
| add(GryoTypeReg.of(ReferencePath.class, 85)); |
| |
| add(GryoTypeReg.of(StarGraph.class, 86, new StarGraphSerializer(Direction.BOTH, new GraphFilter()))); |
| |
| add(GryoTypeReg.of(Edge.class, 65, new GryoSerializersV3d0.EdgeSerializer())); |
| add(GryoTypeReg.of(Vertex.class, 66, new GryoSerializersV3d0.VertexSerializer())); |
| add(GryoTypeReg.of(Property.class, 67, new GryoSerializersV3d0.PropertySerializer())); |
| add(GryoTypeReg.of(VertexProperty.class, 68, new GryoSerializersV3d0.VertexPropertySerializer())); |
| add(GryoTypeReg.of(Path.class, 59, new GryoSerializersV3d0.PathSerializer())); |
| // skip 55 |
| add(GryoTypeReg.of(B_O_Traverser.class, 75)); |
| add(GryoTypeReg.of(O_Traverser.class, 76)); |
| add(GryoTypeReg.of(B_LP_O_P_S_SE_SL_Traverser.class, 77)); |
| add(GryoTypeReg.of(B_O_S_SE_SL_Traverser.class, 78)); |
| add(GryoTypeReg.of(B_LP_O_S_SE_SL_Traverser.class, 87)); |
| add(GryoTypeReg.of(O_OB_S_SE_SL_Traverser.class, 89)); |
| add(GryoTypeReg.of(LP_O_OB_S_SE_SL_Traverser.class, 90)); |
| add(GryoTypeReg.of(LP_O_OB_P_S_SE_SL_Traverser.class, 91)); |
| add(GryoTypeReg.of(ProjectedTraverser.class, 168)); |
| add(GryoTypeReg.of(DefaultRemoteTraverser.class, 123, new GryoSerializersV3d0.DefaultRemoteTraverserSerializer())); |
| |
| add(GryoTypeReg.of(Bytecode.class, 122, new GryoSerializersV3d0.BytecodeSerializer())); |
| add(GryoTypeReg.of(P.class, 124, new GryoSerializersV3d0.PSerializer())); |
| add(GryoTypeReg.of(Lambda.class, 125, new GryoSerializersV3d0.LambdaSerializer())); |
| add(GryoTypeReg.of(Bytecode.Binding.class, 126, new GryoSerializersV3d0.BindingSerializer())); |
| add(GryoTypeReg.of(Order.class, 127)); |
| add(GryoTypeReg.of(Scope.class, 128)); |
| add(GryoTypeReg.of(VertexProperty.Cardinality.class, 131)); |
| add(GryoTypeReg.of(Column.class, 132)); |
| add(GryoTypeReg.of(Pop.class, 133)); |
| add(GryoTypeReg.of(SackFunctions.Barrier.class, 135)); |
| add(GryoTypeReg.of(TraversalOptionParent.Pick.class, 137)); |
| add(GryoTypeReg.of(HashSetSupplier.class, 136, new UtilSerializers.HashSetSupplierSerializer())); |
| add(GryoTypeReg.of(MultiComparator.class, 165)); |
| |
| add(GryoTypeReg.of(ConnectiveStrategy.class, 138)); |
| add(GryoTypeReg.of(HaltedTraverserStrategy.class, 139)); |
| add(GryoTypeReg.of(PartitionStrategy.class, 140, new JavaSerializer())); |
| add(GryoTypeReg.of(SubgraphStrategy.class, 141, new JavaSerializer())); |
| add(GryoTypeReg.of(VertexProgramStrategy.class, 142, new JavaSerializer())); |
| add(GryoTypeReg.of(MatchAlgorithmStrategy.class, 143)); |
| add(GryoTypeReg.of(MatchStep.GreedyMatchAlgorithm.class, 144)); |
| add(GryoTypeReg.of(AdjacentToIncidentStrategy.class, 145)); |
| add(GryoTypeReg.of(FilterRankingStrategy.class, 146)); |
| add(GryoTypeReg.of(IdentityRemovalStrategy.class, 147)); |
| add(GryoTypeReg.of(IncidentToAdjacentStrategy.class, 148)); |
| add(GryoTypeReg.of(InlineFilterStrategy.class, 149)); |
| add(GryoTypeReg.of(LazyBarrierStrategy.class, 150)); |
| add(GryoTypeReg.of(MatchPredicateStrategy.class, 151)); |
| add(GryoTypeReg.of(OrderLimitStrategy.class, 152)); |
| add(GryoTypeReg.of(PathProcessorStrategy.class, 153)); |
| add(GryoTypeReg.of(PathRetractionStrategy.class, 154)); |
| add(GryoTypeReg.of(CountStrategy.class, 155)); |
| add(GryoTypeReg.of(RepeatUnrollStrategy.class, 156)); |
| add(GryoTypeReg.of(GraphFilterStrategy.class, 157)); |
| add(GryoTypeReg.of(LambdaRestrictionStrategy.class, 158)); |
| add(GryoTypeReg.of(ReadOnlyStrategy.class, 159)); |
| add(GryoTypeReg.of(EarlyLimitStrategy.class, 188)); |
| add(GryoTypeReg.of(MatchStep.CountMatchAlgorithm.class, 160)); |
| add(GryoTypeReg.of(MatchStep.GreedyMatchAlgorithm.class, 164)); |
| add(GryoTypeReg.of(EdgeLabelVerificationStrategy.class, 189)); |
| add(GryoTypeReg.of(ReservedKeysVerificationStrategy.class, 190)); // ***LAST ID*** |
| |
| add(GryoTypeReg.of(TraverserSet.class, 58)); |
| add(GryoTypeReg.of(Tree.class, 61)); |
| add(GryoTypeReg.of(HashSet.class, 62)); |
| add(GryoTypeReg.of(BulkSet.class, 64)); |
| add(GryoTypeReg.of(Metrics.class, 69, new GryoSerializersV3d0.MetricsSerializer())); |
| add(GryoTypeReg.of(TraversalMetrics.class, 70, new GryoSerializersV3d0.TraversalMetricsSerializer())); |
| add(GryoTypeReg.of(MapMemory.class, 73)); |
| add(GryoTypeReg.of(MapReduce.NullObject.class, 74)); |
| add(GryoTypeReg.of(AtomicLong.class, 79)); |
| add(GryoTypeReg.of(Pair.class, 88, new UtilSerializers.PairSerializer())); |
| add(GryoTypeReg.of(TraversalExplanation.class, 106, new JavaSerializer())); |
| |
| add(GryoTypeReg.of(Duration.class, 93, new JavaTimeSerializers.DurationSerializer())); |
| add(GryoTypeReg.of(Instant.class, 94, new JavaTimeSerializers.InstantSerializer())); |
| add(GryoTypeReg.of(LocalDate.class, 95, new JavaTimeSerializers.LocalDateSerializer())); |
| add(GryoTypeReg.of(LocalDateTime.class, 96, new JavaTimeSerializers.LocalDateTimeSerializer())); |
| add(GryoTypeReg.of(LocalTime.class, 97, new JavaTimeSerializers.LocalTimeSerializer())); |
| add(GryoTypeReg.of(MonthDay.class, 98, new JavaTimeSerializers.MonthDaySerializer())); |
| add(GryoTypeReg.of(OffsetDateTime.class, 99, new JavaTimeSerializers.OffsetDateTimeSerializer())); |
| add(GryoTypeReg.of(OffsetTime.class, 100, new JavaTimeSerializers.OffsetTimeSerializer())); |
| add(GryoTypeReg.of(Period.class, 101, new JavaTimeSerializers.PeriodSerializer())); |
| add(GryoTypeReg.of(Year.class, 102, new JavaTimeSerializers.YearSerializer())); |
| add(GryoTypeReg.of(YearMonth.class, 103, new JavaTimeSerializers.YearMonthSerializer())); |
| add(GryoTypeReg.of(ZonedDateTime.class, 104, new JavaTimeSerializers.ZonedDateTimeSerializer())); |
| add(GryoTypeReg.of(ZoneOffset.class, 105, new JavaTimeSerializers.ZoneOffsetSerializer())); |
| |
| add(GryoTypeReg.of(Operator.class, 107)); |
| add(GryoTypeReg.of(FoldStep.FoldBiOperator.class, 108)); |
| add(GryoTypeReg.of(GroupCountStep.GroupCountBiOperator.class, 109)); |
| add(GryoTypeReg.of(GroupStep.GroupBiOperator.class, 117)); |
| add(GryoTypeReg.of(MeanGlobalStep.MeanGlobalBiOperator.class, 110)); |
| add(GryoTypeReg.of(MeanGlobalStep.MeanNumber.class, 111)); |
| add(GryoTypeReg.of(TreeStep.TreeBiOperator.class, 112)); |
| // skip 113 |
| add(GryoTypeReg.of(RangeGlobalStep.RangeBiOperator.class, 114)); |
| add(GryoTypeReg.of(OrderGlobalStep.OrderBiOperator.class, 118)); |
| add(GryoTypeReg.of(ProfileStep.ProfileBiOperator.class, 119)); |
| add(GryoTypeReg.of(IndexedTraverserSet.VertexIndexedTraverserSet.class, 173)); |
| |
| // placeholder serializers for classes that don't live here in core. this will allow them to be used if |
| // present or ignored if the class isn't available. either way the registration numbers are held as |
| // placeholders so that the format stays stable |
| tryAddDynamicType(this, "org.apache.tinkerpop.gremlin.driver.message.RequestMessage", |
| "org.apache.tinkerpop.gremlin.driver.ser.RequestMessageGryoSerializer", 167); |
| tryAddDynamicType(this, "org.apache.tinkerpop.gremlin.driver.message.ResponseMessage", |
| "org.apache.tinkerpop.gremlin.driver.ser.ResponseMessageGryoSerializer", 169); |
| }}; |
| } |
| |
| public static List<TypeRegistration<?>> initV1d0Registrations() { |
| return new ArrayList<TypeRegistration<?>>() {{ |
| add(GryoTypeReg.of(byte[].class, 25)); |
| add(GryoTypeReg.of(char[].class, 26)); |
| add(GryoTypeReg.of(short[].class, 27)); |
| add(GryoTypeReg.of(int[].class, 28)); |
| add(GryoTypeReg.of(long[].class, 29)); |
| add(GryoTypeReg.of(float[].class, 30)); |
| add(GryoTypeReg.of(double[].class, 31)); |
| add(GryoTypeReg.of(String[].class, 32)); |
| add(GryoTypeReg.of(Object[].class, 33)); |
| add(GryoTypeReg.of(ArrayList.class, 10)); |
| add(GryoTypeReg.of(Types.ARRAYS_AS_LIST, 134, new UtilSerializers.ArraysAsListSerializer())); |
| add(GryoTypeReg.of(BigInteger.class, 34)); |
| add(GryoTypeReg.of(BigDecimal.class, 35)); |
| add(GryoTypeReg.of(Calendar.class, 39)); |
| add(GryoTypeReg.of(Class.class, 41, new UtilSerializers.ClassSerializer())); |
| add(GryoTypeReg.of(Class[].class, 166, new UtilSerializers.ClassArraySerializer())); |
| add(GryoTypeReg.of(Collection.class, 37)); |
| add(GryoTypeReg.of(Collections.EMPTY_LIST.getClass(), 51)); |
| add(GryoTypeReg.of(Collections.EMPTY_MAP.getClass(), 52)); |
| add(GryoTypeReg.of(Collections.EMPTY_SET.getClass(), 53)); |
| add(GryoTypeReg.of(Collections.singleton(null).getClass(), 54)); |
| add(GryoTypeReg.of(Collections.singletonList(null).getClass(), 24)); |
| add(GryoTypeReg.of(Collections.singletonMap(null, null).getClass(), 23)); |
| add(GryoTypeReg.of(Types.COLLECTIONS_SYNCHRONIZED_MAP, 185, new UtilSerializers.SynchronizedMapSerializer())); |
| add(GryoTypeReg.of(Contains.class, 49)); |
| add(GryoTypeReg.of(Currency.class, 40)); |
| add(GryoTypeReg.of(Date.class, 38)); |
| add(GryoTypeReg.of(Direction.class, 12)); |
| add(GryoTypeReg.of(DetachedEdge.class, 21)); |
| add(GryoTypeReg.of(DetachedVertexProperty.class, 20)); |
| add(GryoTypeReg.of(DetachedProperty.class, 18)); |
| add(GryoTypeReg.of(DetachedVertex.class, 19)); |
| add(GryoTypeReg.of(DetachedPath.class, 60)); |
| // skip 14 |
| add(GryoTypeReg.of(EnumSet.class, 46)); |
| add(GryoTypeReg.of(HashMap.class, 11)); |
| add(GryoTypeReg.of(HashMap.Entry.class, 16)); |
| add(GryoTypeReg.of(Types.HASH_MAP_NODE, 92)); |
| add(GryoTypeReg.of(Types.HASH_MAP_TREE_NODE, 170)); |
| add(GryoTypeReg.of(KryoSerializable.class, 36)); |
| add(GryoTypeReg.of(LinkedHashMap.class, 47)); |
| add(GryoTypeReg.of(LinkedHashSet.class, 71)); |
| add(GryoTypeReg.of(LinkedList.class, 116)); |
| add(GryoTypeReg.of(ConcurrentHashMap.class, 168)); |
| add(GryoTypeReg.of(ConcurrentHashMap.Entry.class, 169)); |
| add(GryoTypeReg.of(Types.LINKED_HASH_MAP_ENTRY_CLASS, 15)); |
| add(GryoTypeReg.of(Locale.class, 22)); |
| add(GryoTypeReg.of(StringBuffer.class, 43)); |
| add(GryoTypeReg.of(StringBuilder.class, 44)); |
| add(GryoTypeReg.of(T.class, 48)); |
| add(GryoTypeReg.of(TimeZone.class, 42)); |
| add(GryoTypeReg.of(TreeMap.class, 45)); |
| add(GryoTypeReg.of(TreeSet.class, 50)); |
| add(GryoTypeReg.of(UUID.class, 17, new UtilSerializers.UUIDSerializer())); |
| add(GryoTypeReg.of(URI.class, 72, new UtilSerializers.URISerializer())); |
| add(GryoTypeReg.of(VertexTerminator.class, 13)); |
| add(GryoTypeReg.of(AbstractMap.SimpleEntry.class, 120)); |
| add(GryoTypeReg.of(AbstractMap.SimpleImmutableEntry.class, 121)); |
| add(GryoTypeReg.of(java.sql.Timestamp.class, 161)); |
| add(GryoTypeReg.of(InetAddress.class, 162, new UtilSerializers.InetAddressSerializer())); |
| add(GryoTypeReg.of(ByteBuffer.class, 163, new UtilSerializers.ByteBufferSerializer())); |
| |
| add(GryoTypeReg.of(ReferenceEdge.class, 81)); |
| add(GryoTypeReg.of(ReferenceVertexProperty.class, 82)); |
| add(GryoTypeReg.of(ReferenceProperty.class, 83)); |
| add(GryoTypeReg.of(ReferenceVertex.class, 84)); |
| add(GryoTypeReg.of(ReferencePath.class, 85)); |
| |
| add(GryoTypeReg.of(StarGraph.class, 86, new StarGraphSerializer(Direction.BOTH, new GraphFilter()))); |
| |
| add(GryoTypeReg.of(Edge.class, 65, new GryoSerializersV1d0.EdgeSerializer())); |
| add(GryoTypeReg.of(Vertex.class, 66, new GryoSerializersV1d0.VertexSerializer())); |
| add(GryoTypeReg.of(Property.class, 67, new GryoSerializersV1d0.PropertySerializer())); |
| add(GryoTypeReg.of(VertexProperty.class, 68, new GryoSerializersV1d0.VertexPropertySerializer())); |
| add(GryoTypeReg.of(Path.class, 59, new GryoSerializersV1d0.PathSerializer())); |
| // skip 55 |
| add(GryoTypeReg.of(B_O_Traverser.class, 75)); |
| add(GryoTypeReg.of(O_Traverser.class, 76)); |
| add(GryoTypeReg.of(B_LP_O_P_S_SE_SL_Traverser.class, 77)); |
| add(GryoTypeReg.of(B_O_S_SE_SL_Traverser.class, 78)); |
| add(GryoTypeReg.of(B_LP_O_S_SE_SL_Traverser.class, 87)); |
| add(GryoTypeReg.of(O_OB_S_SE_SL_Traverser.class, 89)); |
| add(GryoTypeReg.of(LP_O_OB_S_SE_SL_Traverser.class, 90)); |
| add(GryoTypeReg.of(LP_O_OB_P_S_SE_SL_Traverser.class, 91)); |
| add(GryoTypeReg.of(ProjectedTraverser.class, 164)); |
| add(GryoTypeReg.of(DefaultRemoteTraverser.class, 123, new GryoSerializersV1d0.DefaultRemoteTraverserSerializer())); |
| |
| add(GryoTypeReg.of(Bytecode.class, 122, new GryoSerializersV1d0.BytecodeSerializer())); |
| add(GryoTypeReg.of(P.class, 124, new GryoSerializersV1d0.PSerializer())); |
| add(GryoTypeReg.of(Lambda.class, 125, new GryoSerializersV1d0.LambdaSerializer())); |
| add(GryoTypeReg.of(Bytecode.Binding.class, 126, new GryoSerializersV1d0.BindingSerializer())); |
| add(GryoTypeReg.of(Order.class, 127)); |
| add(GryoTypeReg.of(Scope.class, 128)); |
| add(GryoTypeReg.of(VertexProperty.Cardinality.class, 131)); |
| add(GryoTypeReg.of(Column.class, 132)); |
| add(GryoTypeReg.of(Pop.class, 133)); |
| add(GryoTypeReg.of(SackFunctions.Barrier.class, 135)); |
| add(GryoTypeReg.of(TraversalOptionParent.Pick.class, 137)); |
| add(GryoTypeReg.of(HashSetSupplier.class, 136, new UtilSerializers.HashSetSupplierSerializer())); |
| add(GryoTypeReg.of(MultiComparator.class, 165)); |
| |
| add(GryoTypeReg.of(TraverserSet.class, 58)); |
| |
| add(GryoTypeReg.of(Tree.class, 61)); |
| add(GryoTypeReg.of(HashSet.class, 62)); |
| add(GryoTypeReg.of(BulkSet.class, 64)); |
| add(GryoTypeReg.of(MutableMetrics.class, 69)); |
| add(GryoTypeReg.of(ImmutableMetrics.class, 115)); |
| add(GryoTypeReg.of(DefaultTraversalMetrics.class, 70)); |
| add(GryoTypeReg.of(MapMemory.class, 73)); |
| add(GryoTypeReg.of(MapReduce.NullObject.class, 74)); |
| add(GryoTypeReg.of(AtomicLong.class, 79)); |
| add(GryoTypeReg.of(Pair.class, 88, new UtilSerializers.PairSerializer())); |
| add(GryoTypeReg.of(Triplet.class, 183, new UtilSerializers.TripletSerializer())); |
| add(GryoTypeReg.of(TraversalExplanation.class, 106, new JavaSerializer())); |
| |
| add(GryoTypeReg.of(Duration.class, 93, new JavaTimeSerializers.DurationSerializer())); |
| add(GryoTypeReg.of(Instant.class, 94, new JavaTimeSerializers.InstantSerializer())); |
| add(GryoTypeReg.of(LocalDate.class, 95, new JavaTimeSerializers.LocalDateSerializer())); |
| add(GryoTypeReg.of(LocalDateTime.class, 96, new JavaTimeSerializers.LocalDateTimeSerializer())); |
| add(GryoTypeReg.of(LocalTime.class, 97, new JavaTimeSerializers.LocalTimeSerializer())); |
| add(GryoTypeReg.of(MonthDay.class, 98, new JavaTimeSerializers.MonthDaySerializer())); |
| add(GryoTypeReg.of(OffsetDateTime.class, 99, new JavaTimeSerializers.OffsetDateTimeSerializer())); |
| add(GryoTypeReg.of(OffsetTime.class, 100, new JavaTimeSerializers.OffsetTimeSerializer())); |
| add(GryoTypeReg.of(Period.class, 101, new JavaTimeSerializers.PeriodSerializer())); |
| add(GryoTypeReg.of(Year.class, 102, new JavaTimeSerializers.YearSerializer())); |
| add(GryoTypeReg.of(YearMonth.class, 103, new JavaTimeSerializers.YearMonthSerializer())); |
| add(GryoTypeReg.of(ZonedDateTime.class, 104, new JavaTimeSerializers.ZonedDateTimeSerializer())); |
| add(GryoTypeReg.of(ZoneOffset.class, 105, new JavaTimeSerializers.ZoneOffsetSerializer())); |
| |
| add(GryoTypeReg.of(Operator.class, 107)); |
| add(GryoTypeReg.of(FoldStep.FoldBiOperator.class, 108)); |
| add(GryoTypeReg.of(GroupCountStep.GroupCountBiOperator.class, 109)); |
| add(GryoTypeReg.of(GroupStep.GroupBiOperator.class, 117, new JavaSerializer())); |
| add(GryoTypeReg.of(MeanGlobalStep.MeanGlobalBiOperator.class, 110)); |
| add(GryoTypeReg.of(MeanGlobalStep.MeanNumber.class, 111)); |
| add(GryoTypeReg.of(TreeStep.TreeBiOperator.class, 112)); |
| // skip 113 |
| add(GryoTypeReg.of(RangeGlobalStep.RangeBiOperator.class, 114)); |
| add(GryoTypeReg.of(OrderGlobalStep.OrderBiOperator.class, 118, new JavaSerializer())); |
| add(GryoTypeReg.of(ProfileStep.ProfileBiOperator.class, 119)); |
| |
| add(GryoTypeReg.of(ConnectiveStrategy.class, 138)); |
| add(GryoTypeReg.of(HaltedTraverserStrategy.class, 139)); |
| add(GryoTypeReg.of(PartitionStrategy.class, 140, new JavaSerializer())); |
| add(GryoTypeReg.of(SubgraphStrategy.class, 141, new JavaSerializer())); |
| add(GryoTypeReg.of(VertexProgramStrategy.class, 142, new JavaSerializer())); |
| add(GryoTypeReg.of(MatchAlgorithmStrategy.class, 143)); |
| add(GryoTypeReg.of(MatchStep.GreedyMatchAlgorithm.class, 144)); |
| add(GryoTypeReg.of(AdjacentToIncidentStrategy.class, 145)); |
| add(GryoTypeReg.of(FilterRankingStrategy.class, 146)); |
| add(GryoTypeReg.of(IdentityRemovalStrategy.class, 147)); |
| add(GryoTypeReg.of(IncidentToAdjacentStrategy.class, 148)); |
| add(GryoTypeReg.of(InlineFilterStrategy.class, 149)); |
| add(GryoTypeReg.of(LazyBarrierStrategy.class, 150)); |
| add(GryoTypeReg.of(MatchPredicateStrategy.class, 151)); |
| add(GryoTypeReg.of(OrderLimitStrategy.class, 152)); |
| add(GryoTypeReg.of(PathProcessorStrategy.class, 153)); |
| add(GryoTypeReg.of(PathRetractionStrategy.class, 154)); |
| add(GryoTypeReg.of(CountStrategy.class, 155)); |
| add(GryoTypeReg.of(RepeatUnrollStrategy.class, 156)); |
| add(GryoTypeReg.of(GraphFilterStrategy.class, 157)); |
| add(GryoTypeReg.of(LambdaRestrictionStrategy.class, 158)); |
| add(GryoTypeReg.of(ReadOnlyStrategy.class, 159)); |
| add(GryoTypeReg.of(EarlyLimitStrategy.class, 188)); |
| add(GryoTypeReg.of(MatchStep.CountMatchAlgorithm.class, 160)); |
| add(GryoTypeReg.of(MatchStep.GreedyMatchAlgorithm.class, 167)); |
| add(GryoTypeReg.of(EdgeLabelVerificationStrategy.class, 189)); |
| add(GryoTypeReg.of(ReservedKeysVerificationStrategy.class, 190)); // ***LAST ID*** |
| // skip 171, 172 to sync with the 3.3.x |
| add(GryoTypeReg.of(IndexedTraverserSet.VertexIndexedTraverserSet.class, 173)); |
| }}; |
| } |
| |
| private static void tryAddDynamicType(final List<TypeRegistration<?>> types, final String type, |
| final String serializer, final int registrationId) { |
| try { |
| final Class typeClass = Class.forName(type); |
| final Optional<SerializerShim<?>> serializerInstance = Optional.of(serializer) |
| .map(FunctionUtils.wrapFunction(Class::forName)) |
| .map(FunctionUtils.wrapFunction(c -> (SerializerShim<?>) c.getConstructor().newInstance())); |
| if (serializerInstance.isPresent()) { |
| types.add(GryoTypeReg.of(typeClass, registrationId, serializerInstance.get())); |
| } else { |
| types.add(GryoTypeReg.of(typeClass, registrationId)); |
| } |
| } catch (Exception ignored) { |
| // if the class isn't here - no worries |
| } |
| } |
| |
| private static final class Types { |
| /** |
| * Map with one entry that is used so that it is possible to get the class of LinkedHashMap.Entry. |
| */ |
| private static final LinkedHashMap m = new LinkedHashMap() {{ |
| put("junk", "dummy"); |
| }}; |
| |
| private static final Class ARRAYS_AS_LIST = Arrays.asList("dummy").getClass(); |
| |
| private static final Class LINKED_HASH_MAP_ENTRY_CLASS = m.entrySet().iterator().next().getClass(); |
| |
| /** |
| * The {@code HashMap$Node} class comes into serialization play when a {@code Map.entrySet()} is |
| * serialized. |
| */ |
| private static final Class HASH_MAP_NODE; |
| |
| private static final Class HASH_MAP_TREE_NODE; |
| |
| private static final Class COLLECTIONS_SYNCHRONIZED_MAP; |
| |
| static { |
| // have to instantiate this via reflection because it is a private inner class of HashMap |
| String className = HashMap.class.getName() + "$Node"; |
| try { |
| HASH_MAP_NODE = Class.forName(className); |
| } catch (Exception ex) { |
| throw new RuntimeException("Could not access " + className, ex); |
| } |
| |
| className = HashMap.class.getName() + "$TreeNode"; |
| try { |
| HASH_MAP_TREE_NODE = Class.forName(className); |
| } catch (Exception ex) { |
| throw new RuntimeException("Could not access " + className, ex); |
| } |
| |
| className = Collections.class.getName() + "$SynchronizedMap"; |
| try { |
| COLLECTIONS_SYNCHRONIZED_MAP = Class.forName(className); |
| } catch (Exception ex) { |
| throw new RuntimeException("Could not access " + className, ex); |
| } |
| } |
| |
| private Types() {} |
| } |
| } |