/*
 * 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.internal.util;

import java.io.File;
import java.net.URL;

/**
 * Internal file utilities.
 */
public class FileUtil {

    private static final String META_INF = "META-INF/";
    public enum FileLocation {
        MODULE, CLASSLOADER, URL, FILE;
    }

    public FileLocation findLocation(final Module module, final ClassLoader classLoader, final String fileName) {
        if (module != null) {
            try {
                final URL url = module.getClassLoader().getResource(META_INF + fileName);
                if (url != null) {
                    return FileLocation.MODULE;
                }
            } catch (Exception ex) {
                // Ignore the exception.
            }
        }
        if (classLoader != null) {
            try {
                final URL url = classLoader.getResource(META_INF + fileName);
                if (url != null) {
                    return FileLocation.CLASSLOADER;
                }
            } catch (Exception ex) {
                // Ignore the exception.
            }
        }
        try {
            final File file = new File(fileName);
            if (file.exists()) {
                return FileLocation.FILE;
            }
        } catch (Exception ex) {
            // Ignore the error.
        }

        return null;
    }


}
