/* * 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.beam.runners.core; import java.io.IOException; /** * A namespace used for scoping state stored with {@link StateInternals}. * * <p>Instances of {@link StateNamespace} are guaranteed to have a {@link Object#hashCode} and * {@link Object#equals} that uniquely identify the namespace. */ public interface StateNamespace { /** * Return a {@link String} representation of the key. It is guaranteed that this * {@link String} will uniquely identify the key. * * <p>This will encode the actual namespace as a {@link String}. It is * preferable to use the {@link StateNamespace} object when possible. * * <p>The string produced by the standard implementations will not contain a '+' character. This * enables adding a '+' between the actual namespace and other information, if needed, to separate * the two. */ String stringKey(); /** * Append the string representation of this key to the {@link Appendable}. */ void appendTo(Appendable sb) throws IOException; /** * Return an {@link Object} to use as a key in a cache. * * <p>Different namespaces may use the same key in order to be treated as a unit in the cache. * The {@link Object}'s {@link Object#hashCode} and {@link Object#equals} methods will be used to * determine equality. */ Object getCacheKey(); }