package org.apache.maven.settings.io;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Map;
import java.util.Objects;
import javax.inject.Named;
import javax.inject.Singleton;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@Named
@Singleton
public class DefaultSettingsReader
implements SettingsReader
{
@Override
public Settings read( File input, Map<String, ?> options )
throws IOException
{
Objects.requireNonNull( input, "input cannot be null" );
Settings settings = read( ReaderFactory.newXmlReader( input ), options );
return settings;
}
@Override
public Settings read( Reader input, Map<String, ?> options )
throws IOException
{
Objects.requireNonNull( input, "input cannot be null" );
try ( final Reader in = input )
{
return new SettingsXpp3Reader().read( in, isStrict( options ) );
}
catch ( XmlPullParserException e )
{
throw new SettingsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
}
}
@Override
public Settings read( InputStream input, Map<String, ?> options )
throws IOException
{
Objects.requireNonNull( input, "input cannot be null" );
try ( final InputStream in = input )
{
return new SettingsXpp3Reader().read( in, isStrict( options ) );
}
catch ( XmlPullParserException e )
{
throw new SettingsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
}
}
private boolean isStrict( Map<String, ?> options )
{
Object value = ( options != null ) ? options.get( IS_STRICT ) : null;
return value == null || Boolean.parseBoolean( value.toString() );
}
}