001package org.apache.maven.model.building;
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
022import java.io.File;
023import java.net.URI;
024
025import org.apache.maven.building.FileSource;
026
027/**
028 * Wraps an ordinary {@link File} as a model source.
029 *
030 * @author Benjamin Bentmann
031 */
032public class FileModelSource extends FileSource implements ModelSource2
033{
034
035    /**
036     * Creates a new model source backed by the specified file.
037     *
038     * @param pomFile The POM file, must not be {@code null}.
039     */
040    public FileModelSource( File pomFile )
041    {
042        super( pomFile );
043    }
044    
045    /**
046     * 
047     * @return the file of this source
048     * 
049     * @deprecated instead use {@link #getFile()}
050     */
051    @Deprecated
052    public File getPomFile()
053    {
054        return getFile();
055    }
056    
057    @Override
058    public ModelSource2 getRelatedSource( String relPath )
059    {
060        relPath = relPath.replace( '\\', File.separatorChar ).replace( '/', File.separatorChar );
061
062        File relatedPom = new File( getFile().getParentFile(), relPath );
063
064        if ( relatedPom.isDirectory() )
065        {
066            // TODO figure out how to reuse ModelLocator.locatePom(File) here
067            relatedPom = new File( relatedPom, "pom.xml" );
068        }
069
070        if ( relatedPom.isFile() && relatedPom.canRead() )
071        {
072            return new FileModelSource( new File( relatedPom.toURI().normalize() ) );
073        }
074
075        return null;
076    }
077
078    @Override
079    public URI getLocationURI()
080    {
081        return getFile().toURI();
082    }
083}