/* * Copyright 2011-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file 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 com.amazonaws.services.stepfunctions.builder.internal; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * Interface to build a particular type. * * @param <T> Type to build. */ public interface Buildable<T> { T build(); /** * Utilities to convert collections of {@link Buildable}'s to collections of the thing being built. */ class Utils { private Utils() { } /** * Converts the Map of {@link Buildable}s into a Map of the built object. * * @param buildableMap Map where values are {@link Buildable}s. * @param <K> Key type * @param <T> Type of object being built. * @return Unmodifiable map of built objects. */ public static <K, T> Map<K, T> build(Map<K, ? extends Buildable<T>> buildableMap) { final Map<K, T> builtMap = new LinkedHashMap<K, T>(buildableMap.size()); for (Map.Entry<K, ? extends Buildable<T>> entry : buildableMap.entrySet()) { builtMap.put(entry.getKey(), entry.getValue().build()); } return Collections.unmodifiableMap(builtMap); } /** * Converts the List of {@link Buildable}s into a List of the built object. * * @param buildableList List of {@link Buildable}s to build. * @param <T> Type of object being built * @return Unmodifiable list of built objects. */ public static <T> List<T> build(List<? extends Buildable<T>> buildableList) { List<T> builtList = new ArrayList<T>(buildableList.size()); for (Buildable<T> buildable : buildableList) { builtList.add(buildable.build()); } return Collections.unmodifiableList(builtList); } } }