/*
 * 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.logging.log4j.core.util;

import java.util.ArrayList;
import java.util.List;

/**
 *
 */
public enum ExtensionLanguageMapping {
    JS("js", "JavaScript"), JAVASCRIPT("javascript", "JavaScript"), GVY("gvy", "Groovy"),
    GROOVY("groovy", "Groovy"), BSH("bsh", "beanshell"), BEANSHELL("beanshell", "beanshell"),
    JY("jy", "jython"), JYTHON("jython", "jython"), FTL("ftl", "freemarker"),
    FREEMARKER("freemarker", "freemarker"), VM("vm", "velocity"), VELOCITY("velocity", "velocity"),
    AWK("awk", "awk"), EJS("ejs", "ejs"), TCL("tcl", "tcl"), HS("hs", "jaskell"), JELLY("jelly", "jelly"),
    JEP("jep", "jep"), JEXL("jexl", "jexl"), JEXL2("jexl2", "jexl2"),
    RB("rb", "ruby"), RUBY("ruby", "ruby"), JUDO("judo", "judo"), JUDI("judi", "judo"), SCALA("scala", "scala"),
    CLJ("clj", "Clojure");


    private final String extension;
    private final String language;

    ExtensionLanguageMapping(final String extension, final String language) {
        this.extension = extension;
        this.language = language;
    }

    public String getExtension() {
        return this.extension;
    }

    public String getLanguage() {
        return this.language;
    }

    public static ExtensionLanguageMapping getByExtension(final String extension) {
        for (final ExtensionLanguageMapping mapping : values()) {
            if (mapping.extension.equals(extension)) {
                return mapping;
            }
        }
        return null;
    }

    public static List<ExtensionLanguageMapping> getByLanguage(final String language) {
        final List<ExtensionLanguageMapping> list = new ArrayList<>();
        for (final ExtensionLanguageMapping mapping : values()) {
            if (mapping.language.equals(language)) {
                list.add(mapping);
            }
        }
        return list;
    }

}
