View Javadoc
1   /*******************************************************************************
2    * Copyright (c) 2010, 2012 Sonatype, Inc.
3    * All rights reserved. This program and the accompanying materials
4    * are made available under the terms of the Eclipse Public License v1.0
5    * which accompanies this distribution, and is available at
6    * http://www.eclipse.org/legal/epl-v10.html
7    *
8    * Contributors:
9    *    Sonatype, Inc. - initial API and implementation
10   *******************************************************************************/
11  package org.eclipse.aether.resolution;
12  
13  import org.eclipse.aether.RepositorySystem;
14  import org.eclipse.aether.RepositorySystemSession;
15  import org.eclipse.aether.RequestTrace;
16  import org.eclipse.aether.metadata.Metadata;
17  import org.eclipse.aether.repository.RemoteRepository;
18  
19  /**
20   * A request to resolve metadata from either a remote repository or the local repository.
21   * 
22   * @see RepositorySystem#resolveMetadata(RepositorySystemSession, java.util.Collection)
23   * @see Metadata#getFile()
24   */
25  public final class MetadataRequest
26  {
27  
28      private Metadata metadata;
29  
30      private RemoteRepository repository;
31  
32      private String context = "";
33  
34      private boolean deleteLocalCopyIfMissing;
35  
36      private boolean favorLocalRepository;
37  
38      private RequestTrace trace;
39  
40      /**
41       * Creates an uninitialized request.
42       */
43      public MetadataRequest()
44      {
45          // enables default constructor
46      }
47  
48      /**
49       * Creates a request to resolve the specified metadata from the local repository.
50       * 
51       * @param metadata The metadata to resolve, may be {@code null}.
52       */
53      public MetadataRequest( Metadata metadata )
54      {
55          setMetadata( metadata );
56      }
57  
58      /**
59       * Creates a request with the specified properties.
60       * 
61       * @param metadata The metadata to resolve, may be {@code null}.
62       * @param repository The repository to resolve the metadata from, may be {@code null} to resolve from the local
63       *            repository.
64       * @param context The context in which this request is made, may be {@code null}.
65       */
66      public MetadataRequest( Metadata metadata, RemoteRepository repository, String context )
67      {
68          setMetadata( metadata );
69          setRepository( repository );
70          setRequestContext( context );
71      }
72  
73      /**
74       * Gets the metadata to resolve.
75       * 
76       * @return The metadata or {@code null} if not set.
77       */
78      public Metadata getMetadata()
79      {
80          return metadata;
81      }
82  
83      /**
84       * Sets the metadata to resolve.
85       * 
86       * @param metadata The metadata, may be {@code null}.
87       * @return This request for chaining, never {@code null}.
88       */
89      public MetadataRequest setMetadata( Metadata metadata )
90      {
91          this.metadata = metadata;
92          return this;
93      }
94  
95      /**
96       * Gets the repository from which the metadata should be resolved.
97       * 
98       * @return The repository or {@code null} to resolve from the local repository.
99       */
100     public RemoteRepository getRepository()
101     {
102         return repository;
103     }
104 
105     /**
106      * Sets the repository from which the metadata should be resolved.
107      * 
108      * @param repository The repository, may be {@code null} to resolve from the local repository.
109      * @return This request for chaining, never {@code null}.
110      */
111     public MetadataRequest setRepository( RemoteRepository repository )
112     {
113         this.repository = repository;
114         return this;
115     }
116 
117     /**
118      * Gets the context in which this request is made.
119      * 
120      * @return The context, never {@code null}.
121      */
122     public String getRequestContext()
123     {
124         return context;
125     }
126 
127     /**
128      * Sets the context in which this request is made.
129      * 
130      * @param context The context, may be {@code null}.
131      * @return This request for chaining, never {@code null}.
132      */
133     public MetadataRequest setRequestContext( String context )
134     {
135         this.context = ( context != null ) ? context : "";
136         return this;
137     }
138 
139     /**
140      * Indicates whether the locally cached copy of the metadata should be removed if the corresponding file does not
141      * exist (any more) in the remote repository.
142      * 
143      * @return {@code true} if locally cached metadata should be deleted if no corresponding remote file exists,
144      *         {@code false} to keep the local copy.
145      */
146     public boolean isDeleteLocalCopyIfMissing()
147     {
148         return deleteLocalCopyIfMissing;
149     }
150 
151     /**
152      * Controls whether the locally cached copy of the metadata should be removed if the corresponding file does not
153      * exist (any more) in the remote repository.
154      * 
155      * @param deleteLocalCopyIfMissing {@code true} if locally cached metadata should be deleted if no corresponding
156      *            remote file exists, {@code false} to keep the local copy.
157      * @return This request for chaining, never {@code null}.
158      */
159     public MetadataRequest setDeleteLocalCopyIfMissing( boolean deleteLocalCopyIfMissing )
160     {
161         this.deleteLocalCopyIfMissing = deleteLocalCopyIfMissing;
162         return this;
163     }
164 
165     /**
166      * Indicates whether the metadata resolution should be suppressed if the corresponding metadata of the local
167      * repository is up-to-date according to the update policy of the remote repository. In this case, the metadata
168      * resolution will even be suppressed if no local copy of the remote metadata exists yet.
169      * 
170      * @return {@code true} to suppress resolution of remote metadata if the corresponding metadata of the local
171      *         repository is up-to-date, {@code false} to resolve the remote metadata normally according to the update
172      *         policy.
173      */
174     public boolean isFavorLocalRepository()
175     {
176         return favorLocalRepository;
177     }
178 
179     /**
180      * Controls resolution of remote metadata when already corresponding metadata of the local repository exists. In
181      * cases where the local repository's metadata is sufficient and going to be preferred, resolution of the remote
182      * metadata can be suppressed to avoid unnecessary network access.
183      * 
184      * @param favorLocalRepository {@code true} to suppress resolution of remote metadata if the corresponding metadata
185      *            of the local repository is up-to-date, {@code false} to resolve the remote metadata normally according
186      *            to the update policy.
187      * @return This request for chaining, never {@code null}.
188      */
189     public MetadataRequest setFavorLocalRepository( boolean favorLocalRepository )
190     {
191         this.favorLocalRepository = favorLocalRepository;
192         return this;
193     }
194 
195     /**
196      * Gets the trace information that describes the higher level request/operation in which this request is issued.
197      * 
198      * @return The trace information about the higher level operation or {@code null} if none.
199      */
200     public RequestTrace getTrace()
201     {
202         return trace;
203     }
204 
205     /**
206      * Sets the trace information that describes the higher level request/operation in which this request is issued.
207      * 
208      * @param trace The trace information about the higher level operation, may be {@code null}.
209      * @return This request for chaining, never {@code null}.
210      */
211     public MetadataRequest setTrace( RequestTrace trace )
212     {
213         this.trace = trace;
214         return this;
215     }
216 
217     @Override
218     public String toString()
219     {
220         return getMetadata() + " < " + getRepository();
221     }
222 
223 }