001    package org.apache.maven.artifact;
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.io.File;
023    import java.util.Collection;
024    import java.util.List;
025    import java.util.regex.Pattern;
026    
027    import org.apache.maven.artifact.handler.ArtifactHandler;
028    import org.apache.maven.artifact.metadata.ArtifactMetadata;
029    import org.apache.maven.artifact.repository.ArtifactRepository;
030    import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
031    import org.apache.maven.artifact.versioning.ArtifactVersion;
032    import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
033    import org.apache.maven.artifact.versioning.VersionRange;
034    
035    /**
036     * Maven Artifact interface. Notice that it mixes artifact definition concepts (groupId, artifactId, version)
037     * with dependency information (version range, scope). 
038     */
039    public interface Artifact
040        extends Comparable<Artifact>
041    {
042    
043        String RELEASE_VERSION = "RELEASE";
044    
045        String LATEST_VERSION = "LATEST";
046    
047        String SNAPSHOT_VERSION = "SNAPSHOT";
048    
049        Pattern VERSION_FILE_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}.[0-9]{6})-([0-9]+)$" );
050    
051        // TODO: into artifactScope handler
052    
053        String SCOPE_COMPILE = "compile";
054    
055        String SCOPE_COMPILE_PLUS_RUNTIME = "compile+runtime";
056    
057        String SCOPE_TEST = "test";
058    
059        String SCOPE_RUNTIME = "runtime";
060    
061        String SCOPE_RUNTIME_PLUS_SYSTEM = "runtime+system";
062    
063        String SCOPE_PROVIDED = "provided";
064    
065        String SCOPE_SYSTEM = "system";
066    
067        String SCOPE_IMPORT = "import";   // Used to import dependencyManagement dependencies
068    
069        String getGroupId();
070    
071        String getArtifactId();
072    
073        String getVersion();
074    
075        void setVersion( String version );
076    
077        String getScope();
078    
079        String getType();
080    
081        String getClassifier();
082    
083        boolean hasClassifier();
084    
085        File getFile();
086    
087        void setFile( File destination );
088    
089        String getBaseVersion();
090    
091        void setBaseVersion( String baseVersion );
092    
093        String getId();
094    
095        String getDependencyConflictId();
096    
097        void addMetadata( ArtifactMetadata metadata );
098    
099        Collection<ArtifactMetadata> getMetadataList();
100    
101        void setRepository( ArtifactRepository remoteRepository );
102    
103        ArtifactRepository getRepository();
104    
105        void updateVersion( String version, ArtifactRepository localRepository );
106    
107        String getDownloadUrl();
108    
109        void setDownloadUrl( String downloadUrl );
110    
111        ArtifactFilter getDependencyFilter();
112    
113        void setDependencyFilter( ArtifactFilter artifactFilter );
114    
115        ArtifactHandler getArtifactHandler();
116    
117        List<String> getDependencyTrail();
118    
119        void setDependencyTrail( List<String> dependencyTrail );
120    
121        void setScope( String scope );
122    
123        VersionRange getVersionRange();
124    
125        void setVersionRange( VersionRange newRange );
126    
127        void selectVersion( String version );
128    
129        void setGroupId( String groupId );
130    
131        void setArtifactId( String artifactId );
132    
133        boolean isSnapshot();
134    
135        void setResolved( boolean resolved );
136    
137        boolean isResolved();
138    
139        void setResolvedVersion( String version );
140    
141        void setArtifactHandler( ArtifactHandler handler );
142    
143        boolean isRelease();
144    
145        void setRelease( boolean release );
146    
147        List<ArtifactVersion> getAvailableVersions();
148    
149        void setAvailableVersions( List<ArtifactVersion> versions );
150    
151        boolean isOptional();
152    
153        void setOptional( boolean optional );
154    
155        ArtifactVersion getSelectedVersion()
156            throws OverConstrainedVersionException;
157    
158        boolean isSelectedVersionKnown()
159            throws OverConstrainedVersionException;
160    
161    }