001    package 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    
022    import java.net.URI;
023    
024    /**
025     * Provides access to the contents of a POM independently of the backing store (e.g. file system, database, memory).
026     * <p>
027     * Unlike {@link ModelSource}, this interface supports loading of parent POM(s) from the same backing store and allows
028     * construction of MavenProject instances without the need to have parent POM(s) available from local or remote
029     * repositories.
030     * <p>
031     * ModelSource2 instances are cached in {@link ModelBuildingRequest#getModelCache()}. Implementations must guarantee
032     * that the connection to the backing store remains active until request's {@link ModelCache} is discarded or flushed.
033     */
034    public interface ModelSource2
035        extends ModelSource
036    {
037        /**
038         * Returns model source identified by a path relative to this model source POM. Implementation <strong>MUST</strong>
039         * be able to accept <code>relPath</code> parameter values that
040         * <ul>
041         * <li>use either / or \ file path separator</li>
042         * <li>have .. parent directory references</li>
043         * <li>point either at file or directory, in the latter case POM file name 'pom.xml' needs to be used by the
044         * requested model source.</li>
045         * </ul>
046         * 
047         * @param relPath is the path of the requested model source relative to this model source POM.
048         * @return related model source or <code>null</code> if no such model source.
049         */
050        ModelSource2 getRelatedSource( String relPath );
051    
052        /**
053         * Returns location of the POM, never <code>null</code>.
054         */
055        URI getLocationURI();
056    }