001    package org.apache.maven.scm.provider.svn;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     * http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import org.codehaus.plexus.util.IOUtil;
023    import org.codehaus.plexus.util.Os;
024    import org.codehaus.plexus.util.StringUtils;
025    
026    import java.io.BufferedReader;
027    import java.io.File;
028    import java.io.FileReader;
029    import java.io.IOException;
030    import java.util.ArrayList;
031    import java.util.Iterator;
032    import java.util.List;
033    
034    /**
035     * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
036     * @version $Id: SvnConfigFileReader.java 1058775 2011-01-13 22:52:38Z olamy $
037     */
038    public class SvnConfigFileReader
039    {
040        private File configDirectory;
041    
042        public File getConfigDirectory()
043        {
044            if ( configDirectory == null )
045            {
046                if ( Os.isFamily( "windows" ) )
047                {
048                    configDirectory = new File( System.getProperty( "user.home" ), "Application Data/Subversion" );
049                }
050                else
051                {
052                    configDirectory = new File( System.getProperty( "user.home" ), ".subversion" );
053                }
054            }
055    
056            return configDirectory;
057        }
058    
059        public void setConfigDirectory( File configDirectory )
060        {
061            this.configDirectory = configDirectory;
062        }
063    
064        public String getProperty( String group, String propertyName )
065        {
066            List<String> lines = getConfLines();
067    
068            boolean inGroup = false;
069            for ( Iterator<String> i = lines.iterator(); i.hasNext(); )
070            {
071                String line = i.next().trim();
072    
073                if ( !inGroup )
074                {
075                    if ( ( "[" + group + "]" ).equals( line ) )
076                    {
077                        inGroup = true;
078                    }
079                }
080                else
081                {
082                    if ( line.startsWith( "[" ) && line.endsWith( "]" ) )
083                    {
084                        //a new group start
085                        return null;
086                    }
087    
088                    if ( line.startsWith( "#" ) )
089                    {
090                        continue;
091                    }
092                    if ( line.indexOf( '=' ) < 0 )
093                    {
094                        continue;
095                    }
096    
097                    String property = line.substring( 0, line.indexOf( '=' ) ).trim();
098    
099                    if ( !property.equals( propertyName ) )
100                    {
101                        continue;
102                    }
103    
104                    String value = line.substring( line.indexOf( '=' ) + 1 );
105                    return value.trim();
106                }
107            }
108    
109            return null;
110        }
111    
112        /**
113         * Load the svn config file
114         *
115         * @return the list of all lines
116         */
117        private List<String> getConfLines()
118        {
119            List<String> lines = new ArrayList<String>();
120    
121            BufferedReader reader = null;
122    
123            try
124            {
125                if ( getConfigDirectory().exists() )
126                {
127                    reader = new BufferedReader( new FileReader( new File( getConfigDirectory(), "config" ) ) );
128                    String line;
129                    while ( ( line = reader.readLine() ) != null )
130                    {
131                        if ( !line.startsWith( "#" ) && StringUtils.isNotEmpty( line ) )
132                        {
133                            lines.add( line );
134                        }
135                    }
136                }
137            }
138            catch ( IOException e )
139            {
140                lines.clear();
141            }
142            finally
143            {
144                IOUtil.close( reader );
145                reader = null;
146            }
147    
148            return lines;
149        }
150    }