001    package org.apache.maven.artifact.repository;
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.util.List;
023    
024    import org.apache.maven.artifact.Artifact;
025    import org.apache.maven.artifact.metadata.ArtifactMetadata;
026    import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
027    import org.apache.maven.repository.Proxy;
028    
029    /**
030     * Abstraction of an artifact repository. Artifact repositories can be remote, local, or even build reactor or
031     * IDE workspace.
032     */
033    public interface ArtifactRepository
034    {
035        String pathOf( Artifact artifact );
036    
037        String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata );
038    
039        String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository );
040    
041        String getUrl();
042    
043        void setUrl( String url );
044    
045        String getBasedir();
046    
047        String getProtocol();
048    
049        String getId();
050    
051        void setId( String id );
052    
053        ArtifactRepositoryPolicy getSnapshots();
054    
055        void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy );
056    
057        ArtifactRepositoryPolicy getReleases();
058    
059        void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy );
060    
061        ArtifactRepositoryLayout getLayout();
062    
063        void setLayout( ArtifactRepositoryLayout layout );
064    
065        String getKey();
066    
067        @Deprecated
068        boolean isUniqueVersion();
069    
070        @Deprecated
071        boolean isBlacklisted();
072    
073        @Deprecated
074        void setBlacklisted( boolean blackListed );
075    
076        //
077        // New interface methods for the repository system.
078        //
079        /**
080         *
081         * @param artifact
082         * @return
083         * @since 3.0-alpha-3
084         */
085        Artifact find( Artifact artifact );
086    
087        /**
088         * Finds the versions of the specified artifact that are available in this repository.
089         *
090         * @param artifact The artifact whose available versions should be determined, must not be {@code null}.
091         * @return The available versions of the artifact or an empty list if none, never {@code null}.
092         * @since 3.0-alpha-3
093         */
094        List<String> findVersions( Artifact artifact );
095    
096        /**
097         * Indicates whether this repository is backed by actual projects. For instance, the build reactor or IDE workspace
098         * are examples of such repositories.
099         *
100         * @return {@code true} if the repository is backed by actual projects, {@code false} otherwise.
101         * @since 3.0-beta-1
102         */
103        boolean isProjectAware();
104    
105        /**
106         * @since 3.0-alpha-3
107         */
108        void setAuthentication( Authentication authentication );
109        /**
110         * @since 3.0-alpha-3
111         */
112        Authentication getAuthentication();
113    
114        /**
115         * @since 3.0-alpha-3
116         */
117        void setProxy( Proxy proxy );
118        /**
119         * @since 3.0-alpha-3
120         */
121        Proxy getProxy();
122    
123        /**
124         * @since 3.0.3
125         * @return the repositories mirrored by the actual one
126         */
127        List<ArtifactRepository> getMirroredRepositories();
128    
129        /**
130         * @since 3.0.3
131         * @param mirroredRepositories the repositories that the actual one mirrors
132         */
133        void setMirroredRepositories( List<ArtifactRepository> mirroredRepositories );
134    
135    }