package org.codehaus.mojo.setup.maven3.settings;
/*
* 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.
*/
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.List;
import java.util.Map;
import org.apache.maven.settings.Server;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.SettingsUtils;
import org.apache.maven.settings.TrackableBase;
import org.apache.maven.settings.io.SettingsReader;
import org.apache.maven.settings.io.SettingsWriter;
import org.codehaus.mojo.setup.AbstractSetupManager;
import org.codehaus.mojo.setup.SetupExecutionRequest;
import org.codehaus.mojo.setup.SetupMergeException;
/**
*
* @author Robert Scholte
* @since 1.0.0
*/
public abstract class AbstractSettingsSetupManager
extends AbstractSetupManager
{
/**
* @plexus.requirement role="org.apache.maven.settings.io.SettingsReader"
*/
// Using List instead of the class to mislead Maven. Now we can warn.
private List<?> settingsReaderList;
/**
* @plexus.requirement role="org.apache.maven.settings.io.SettingsWriter"
*/
// Using List instead of the class to mislead Maven. Now we can warn.
private List<?> settingsWriterList;
private SettingsReader getSettingsReader()
{
return (SettingsReader) settingsReaderList.get( 0 );
}
private SettingsWriter getSettingsWriter()
{
return (SettingsWriter) settingsWriterList.get( 0 );
}
@Override
protected Reader merge( Reader dominant, Reader recessive )
throws SetupMergeException
{
try
{
Settings dominantSettings = getSettingsReader().read( dominant, null );
Settings recessiveSettings = getSettingsReader().read( recessive, null );
SettingsUtils.merge( dominantSettings, recessiveSettings, TrackableBase.GLOBAL_LEVEL );
Writer writer = new StringWriter();
getSettingsWriter().write( writer, null, dominantSettings );
return new StringReader( writer.toString() );
}
catch ( IOException e )
{
throw new SetupMergeException( e.getMessage() );
}
}
@SuppressWarnings( "unchecked" )
@Override
protected Reader postMerge( Reader targetSettingsFileReader, SetupExecutionRequest request )
throws SetupMergeException
{
Reader result = targetSettingsFileReader;
try
{
Settings settings;
if ( targetSettingsFileReader != null )
{
settings = getSettingsReader().read( targetSettingsFileReader, null );
}
else
{
settings = new Settings();
}
Map < String, String > encryptedPasswordsMap =
( Map < String, String > ) request.getAdditionalProperties().get( "encryptedPasswordMap" );
if ( encryptedPasswordsMap != null )
{
for ( Server server : (List < Server > ) settings.getServers() )
{
if ( encryptedPasswordsMap.containsKey( server.getPassword() ) )
{
server.setPassword( encryptedPasswordsMap.get( server.getPassword() ) );
}
}
}
Writer writer = new StringWriter();
getSettingsWriter().write( writer, null, settings );
result = new StringReader( writer.toString() );
}
catch ( IOException e )
{
throw new SetupMergeException( e.getMessage() );
}
return result;
}
@Override
protected String getPrototypeFilename()
{
return "settings.xml";
}
}