/*
 * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package com.sun.enterprise.config.modularity;

import com.sun.enterprise.config.modularity.customization.CustomizationTokensProvider;

/**
 * A factory that creates a CustomizationTokensProvider so that it could be used to create list of customization tokens
 *
 * @author Masoud Kalali
 */
public class CustomizationTokensProviderFactory {

    public static CustomizationTokensProvider createCustomizationTokensProvider() {
        return new CustomizationTokensProvider();
    }
}
