001/*
002 *  Licensed to the Apache Software Foundation (ASF) under one
003 *  or more contributor license agreements.  See the NOTICE file
004 *  distributed with this work for additional information
005 *  regarding copyright ownership.  The ASF licenses this file
006 *  to you under the Apache License, Version 2.0 (the
007 *  "License"); you may not use this file except in compliance
008 *  with the License.  You may obtain a copy of the License at
009 *
010 *        http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *  Unless required by applicable law or agreed to in writing,
013 *  software distributed under the License is distributed on an
014 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 *  KIND, either express or implied.  See the License for the
016 *  specific language governing permissions and limitations
017 *  under the License.
018 */
019
020package org.apache.isis.core.commons.config;
021
022import java.util.ArrayList;
023import java.util.Arrays;
024
025import com.google.common.collect.Lists;
026
027import org.slf4j.Logger;
028import org.slf4j.LoggerFactory;
029
030import org.apache.isis.core.commons.resource.ResourceStreamSource;
031import org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
032import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
033
034/**
035 * Convenience implementation of {@link IsisConfigurationBuilder} that loads
036 * configuration resource as per {@link IsisConfigurationBuilderFileSystem} and
037 * otherwise from the {@link ResourceStreamSourceContextLoaderClassPath
038 * classpath}.
039 * 
040 * @see ResourceStreamSourceFileSystem
041 */
042public class IsisConfigurationBuilderDefault extends IsisConfigurationBuilderResourceStreams {
043
044    @SuppressWarnings("unused")
045    private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderDefault.class);
046
047    public IsisConfigurationBuilderDefault() {
048        super(resourceStreamSources(null));
049    }
050
051    public IsisConfigurationBuilderDefault(final String firstDirectory) {
052        super(resourceStreamSources(firstDirectory));
053    }
054
055    private static ResourceStreamSource[] resourceStreamSources(final String firstDirectory) {
056        final ArrayList<ResourceStreamSource> rssList = Lists.newArrayList();
057        if (firstDirectory != null) {
058            rssList.add(fromFileSystem(firstDirectory));
059        }
060        rssList.addAll(Arrays.asList(fromFileSystem(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY), fromFileSystem(ConfigurationConstants.WEBINF_FULL_DIRECTORY), fromClassPath(), fromClassPath(ConfigurationConstants.WEBINF_DIRECTORY)));
061        return rssList.toArray(new ResourceStreamSource[0]);
062    }
063
064    private static ResourceStreamSource fromFileSystem(final String directory) {
065        return ResourceStreamSourceFileSystem.create(directory);
066    }
067
068    private static ResourceStreamSource fromClassPath() {
069        return ResourceStreamSourceContextLoaderClassPath.create();
070    }
071
072    private static ResourceStreamSource fromClassPath(final String prefix) {
073        return ResourceStreamSourceContextLoaderClassPath.create(prefix);
074    }
075
076}