View Javadoc
1   package org.apache.maven.configuration;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.File;
23  
24  /**
25   * A path translator that resolves relative paths against a specific base directory.
26   * 
27   * @author Benjamin Bentmann
28   */
29  public class BasedirBeanConfigurationPathTranslator
30      implements BeanConfigurationPathTranslator
31  {
32  
33      private final File basedir;
34  
35      /**
36       * Creates a new path translator using the specified base directory.
37       * 
38       * @param basedir The base directory to resolve relative paths against, may be {@code null} to disable path
39       *            translation.
40       */
41      public BasedirBeanConfigurationPathTranslator( File basedir )
42      {
43          this.basedir = basedir;
44      }
45  
46      public File translatePath( File path )
47      {
48          File result = path;
49  
50          if ( path != null && basedir != null )
51          {
52              if ( path.isAbsolute() )
53              {
54                  // path is already absolute, we're done
55              }
56              else if ( path.getPath().startsWith( File.separator ) )
57              {
58                  // drive-relative Windows path, don't align with base dir but with drive root
59                  result = path.getAbsoluteFile();
60              }
61              else
62              {
63                  // an ordinary relative path, align with base dir
64                  result = new File( new File( basedir, path.getPath() ).toURI().normalize() ).getAbsoluteFile();
65              }
66          }
67  
68          return result;
69      }
70  
71  }