/**
 * 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.distributedlog.service.streamset;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * A stream-to-partition converter that caches the mapping between stream and partitions.
 */
public abstract class CacheableStreamPartitionConverter implements StreamPartitionConverter {

    private final ConcurrentMap<String, Partition> partitions;

    protected CacheableStreamPartitionConverter() {
        this.partitions = new ConcurrentHashMap<String, Partition>();
    }

    @Override
    public Partition convert(String streamName) {
        Partition p = partitions.get(streamName);
        if (null != p) {
            return p;
        }
        // not found
        Partition newPartition = newPartition(streamName);
        Partition oldPartition = partitions.putIfAbsent(streamName, newPartition);
        if (null == oldPartition) {
            return newPartition;
        } else {
            return oldPartition;
        }
    }

    /**
     * Create the partition from <code>streamName</code>.
     *
     * @param streamName
     *          stream name
     * @return partition id of the stream
     */
    protected abstract Partition newPartition(String streamName);
}
