All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.maven.mae.conf.MAEConfiguration Maven / Gradle / Ivy

The newest version!
/*
 * 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.maven.mae.conf;

import org.apache.maven.mae.MAEExecutionRequest;
import org.apache.maven.mae.conf.ext.ExtensionConfiguration;
import org.apache.maven.mae.internal.container.ComponentKey;
import org.apache.maven.mae.internal.container.ComponentSelector;
import org.apache.maven.mae.internal.container.InstanceRegistry;
import org.apache.maven.mae.internal.container.ServiceAuthorizer;

import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class MAEConfiguration
{

    public static final String STANDARD_LOG_HANDLE_CORE = "core";

    public static final String STANDARD_LOG_HANDLE_LOADER = "emb-loader";

    private static final File DEFAULT_CONFIGURATION_DIRECTORY =
        new File( System.getProperty( "user.home" ), ".m2/conf" );

    private ComponentSelector componentSelector;

    private InstanceRegistry instanceRegistry;

    private Set libraries;

    private File configurationDirectory = DEFAULT_CONFIGURATION_DIRECTORY;

    private MAEExecutionRequest executionRequest;

    private InputStream stdin = System.in;

    private PrintStream stdout = System.out;

    private PrintStream stderr = System.err;

    private boolean debug;

    private boolean interactive = true;

    public MAEConfiguration()
    {
    }

    public MAEConfiguration withExecutionRequest( final MAEExecutionRequest request )
    {
        executionRequest = request;
        return this;
    }

    public MAEConfiguration withStandardIn( final InputStream stdin )
    {
        this.stdin = stdin;
        return this;
    }

    public InputStream getStandardIn()
    {
        return stdin;
    }

    public MAEConfiguration withStandardOut( final PrintStream stdout )
    {
        this.stdout = stdout;
        return this;
    }

    public PrintStream getStandardOut()
    {
        return stdout;
    }

    public MAEConfiguration withStandardErr( final PrintStream stderr )
    {
        this.stderr = stderr;
        return this;
    }

    public PrintStream getStandardErr()
    {
        return stderr;
    }

    public MAEExecutionRequest getEMBExecutionRequest()
    {
        return executionRequest;
    }

    public boolean isInteractive()
    {
        return interactive;
    }

    public boolean isDebugEnabled()
    {
        return debug;
    }

    public MAEConfiguration withConfigurationDirectory( final File configurationDirectory )
    {
        this.configurationDirectory = configurationDirectory;
        return this;
    }

    public File getConfigurationDirectory()
    {
        return configurationDirectory;
    }

    public MAEConfiguration withLibraries( final Collection libraries )
    {
        for ( final MAELibrary library : libraries )
        {
            withLibrary( library );
        }
        return this;
    }

    public MAEConfiguration withLibraries( final MAELibrary... libraries )
    {
        for ( final MAELibrary library : libraries )
        {
            withLibrary( library );
        }
        return this;
    }

    public MAELibrary getLibrary( final String id )
    {
        for ( final MAELibrary library : getLibraries() )
        {
            if ( library.getId().equalsIgnoreCase( id ) )
            {
                return library;
            }
        }

        return null;
    }

    public Set getLibraries()
    {
        if ( libraries == null )
        {
            libraries = new HashSet();
        }

        return libraries;
    }

    public ComponentSelector getComponentSelector()
    {
        if ( componentSelector == null )
        {
            componentSelector = new ComponentSelector();
        }

        return componentSelector;
    }

    public synchronized MAEConfiguration withComponentSelection( final ComponentKey key, final String newHint )
    {
        getComponentSelector().setSelection( key, newHint );
        return this;
    }

    public synchronized MAEConfiguration withComponentSelections( final Map, String> selections )
    {
        if ( selections != null )
        {
            for ( final Map.Entry, String> entry : selections.entrySet() )
            {
                if ( entry == null || entry.getKey() == null || entry.getValue() == null )
                {
                    continue;
                }

                getComponentSelector().setSelection( entry.getKey(), entry.getValue() );
            }
        }

        return this;
    }

    public synchronized MAEConfiguration withComponentSelections( final ComponentSelector newSelector )
    {
        if ( newSelector != null )
        {
            getComponentSelector().merge( newSelector );
        }

        return this;
    }

    public MAEConfiguration withComponentSelector( final ComponentSelector selector )
    {
        getComponentSelector().merge( selector );

        return this;
    }

    public MAEConfiguration withoutDebug()
    {
        debug = false;
        return this;
    }

    public MAEConfiguration withDebug()
    {
        debug = true;
        return this;
    }

    public MAEConfiguration interactive()
    {
        interactive = true;
        return this;
    }

    public MAEConfiguration nonInteractive()
    {
        interactive = false;
        return this;
    }

    @SuppressWarnings( { "rawtypes", "unchecked" } )
    public MAEConfiguration withLibrary( final MAELibrary library )
    {
        getLibraries().add( library );
        withComponentSelector( library.getComponentSelector() );
        withInstanceRegistry( library.getInstanceRegistry() );
        withComponentInstance( new ComponentKey( MAELibrary.class, library.getId() ), library );

        final ExtensionConfiguration configuration = library.getConfiguration();
        if ( configuration != null )
        {
            withComponentInstance( new ComponentKey( ExtensionConfiguration.class,
                                                                             library.getId() ), configuration );

            withComponentInstance( new ComponentKey( configuration.getClass() ), configuration );
        }

        return this;
    }

    public synchronized  MAEConfiguration withComponentInstance( final ComponentKey key, final T instance )
    {
        getInstanceRegistry().add( key, instance );

        return this;
    }

    public synchronized MAEConfiguration withComponentInstance( final Object instance )
    {
        getInstanceRegistry().add( instance );
        return this;
    }

    public synchronized MAEConfiguration withInstanceRegistry( final InstanceRegistry instanceRegistry )
    {
        if ( instanceRegistry != null )
        {
            getInstanceRegistry().overrideMerge( instanceRegistry );
        }

        return this;
    }

    public synchronized InstanceRegistry getInstanceRegistry()
    {
        if ( instanceRegistry == null )
        {
            instanceRegistry = new InstanceRegistry();
        }

        final Set> keys = new HashSet>();
        for ( final MAELibrary lib : getLibraries() )
        {
            final Set> exports = lib.getExportedComponents();
            if ( exports != null && !exports.isEmpty() )
            {
                keys.addAll( exports );
            }
        }

        instanceRegistry.add( new ComponentKey( ServiceAuthorizer.class ),
                              new ServiceAuthorizer( keys ) );
        instanceRegistry.add( MAEConfiguration.class, this );

        return instanceRegistry;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy