1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  package org.eclipse.aether.internal.impl;
20  
21  import org.eclipse.aether.RepositorySystemSession;
22  import org.eclipse.aether.artifact.Artifact;
23  import org.eclipse.aether.metadata.Metadata;
24  import org.eclipse.aether.repository.RemoteRepository;
25  import org.eclipse.aether.util.ConfigUtils;
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  public abstract class LocalPathPrefixComposerFactorySupport implements LocalPathPrefixComposerFactory {
39  
40      
41  
42  
43  
44  
45  
46  
47      public static final String CONFIG_PROP_SPLIT = EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "split";
48  
49      public static final boolean DEFAULT_SPLIT = false;
50  
51      
52  
53  
54  
55  
56  
57  
58      public static final String CONFIG_PROP_LOCAL_PREFIX =
59              EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "localPrefix";
60  
61      public static final String DEFAULT_LOCAL_PREFIX = "installed";
62  
63      
64  
65  
66  
67  
68  
69  
70      public static final String CONFIG_PROP_SPLIT_LOCAL =
71              EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "splitLocal";
72  
73      public static final boolean DEFAULT_SPLIT_LOCAL = false;
74  
75      
76  
77  
78  
79  
80  
81  
82      public static final String CONFIG_PROP_REMOTE_PREFIX =
83              EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "remotePrefix";
84  
85      public static final String DEFAULT_REMOTE_PREFIX = "cached";
86  
87      
88  
89  
90  
91  
92  
93  
94      public static final String CONFIG_PROP_SPLIT_REMOTE =
95              EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "splitRemote";
96  
97      public static final boolean DEFAULT_SPLIT_REMOTE = false;
98  
99      
100 
101 
102 
103 
104 
105 
106     public static final String CONFIG_PROP_SPLIT_REMOTE_REPOSITORY =
107             EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "splitRemoteRepository";
108 
109     public static final boolean DEFAULT_SPLIT_REMOTE_REPOSITORY = false;
110 
111     
112 
113 
114 
115 
116 
117 
118 
119     public static final String CONFIG_PROP_SPLIT_REMOTE_REPOSITORY_LAST =
120             EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "splitRemoteRepositoryLast";
121 
122     public static final boolean DEFAULT_SPLIT_REMOTE_REPOSITORY_LAST = false;
123 
124     
125 
126 
127 
128 
129 
130 
131     public static final String CONFIG_PROP_RELEASES_PREFIX =
132             EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "releasesPrefix";
133 
134     public static final String DEFAULT_RELEASES_PREFIX = "releases";
135 
136     
137 
138 
139 
140 
141 
142 
143     public static final String CONFIG_PROP_SNAPSHOTS_PREFIX =
144             EnhancedLocalRepositoryManagerFactory.CONFIG_PROPS_PREFIX + "snapshotsPrefix";
145 
146     public static final String DEFAULT_SNAPSHOTS_PREFIX = "snapshots";
147 
148     protected boolean isSplit(RepositorySystemSession session) {
149         return ConfigUtils.getBoolean(session, DEFAULT_SPLIT, CONFIG_PROP_SPLIT);
150     }
151 
152     protected String getLocalPrefix(RepositorySystemSession session) {
153         return ConfigUtils.getString(session, DEFAULT_LOCAL_PREFIX, CONFIG_PROP_LOCAL_PREFIX);
154     }
155 
156     protected boolean isSplitLocal(RepositorySystemSession session) {
157         return ConfigUtils.getBoolean(session, DEFAULT_SPLIT_LOCAL, CONFIG_PROP_SPLIT_LOCAL);
158     }
159 
160     protected String getRemotePrefix(RepositorySystemSession session) {
161         return ConfigUtils.getString(session, DEFAULT_REMOTE_PREFIX, CONFIG_PROP_REMOTE_PREFIX);
162     }
163 
164     protected boolean isSplitRemote(RepositorySystemSession session) {
165         return ConfigUtils.getBoolean(session, DEFAULT_SPLIT_REMOTE, CONFIG_PROP_SPLIT_REMOTE);
166     }
167 
168     protected boolean isSplitRemoteRepository(RepositorySystemSession session) {
169         return ConfigUtils.getBoolean(session, DEFAULT_SPLIT_REMOTE_REPOSITORY, CONFIG_PROP_SPLIT_REMOTE_REPOSITORY);
170     }
171 
172     protected boolean isSplitRemoteRepositoryLast(RepositorySystemSession session) {
173         return ConfigUtils.getBoolean(
174                 session, DEFAULT_SPLIT_REMOTE_REPOSITORY_LAST, CONFIG_PROP_SPLIT_REMOTE_REPOSITORY_LAST);
175     }
176 
177     protected String getReleasesPrefix(RepositorySystemSession session) {
178         return ConfigUtils.getString(session, DEFAULT_RELEASES_PREFIX, CONFIG_PROP_RELEASES_PREFIX);
179     }
180 
181     protected String getSnapshotsPrefix(RepositorySystemSession session) {
182         return ConfigUtils.getString(session, DEFAULT_SNAPSHOTS_PREFIX, CONFIG_PROP_SNAPSHOTS_PREFIX);
183     }
184 
185     
186 
187 
188 
189     @SuppressWarnings("checkstyle:parameternumber")
190     protected abstract static class LocalPathPrefixComposerSupport implements LocalPathPrefixComposer {
191         protected final boolean split;
192 
193         protected final String localPrefix;
194 
195         protected final boolean splitLocal;
196 
197         protected final String remotePrefix;
198 
199         protected final boolean splitRemote;
200 
201         protected final boolean splitRemoteRepository;
202 
203         protected final boolean splitRemoteRepositoryLast;
204 
205         protected final String releasesPrefix;
206 
207         protected final String snapshotsPrefix;
208 
209         protected LocalPathPrefixComposerSupport(
210                 boolean split,
211                 String localPrefix,
212                 boolean splitLocal,
213                 String remotePrefix,
214                 boolean splitRemote,
215                 boolean splitRemoteRepository,
216                 boolean splitRemoteRepositoryLast,
217                 String releasesPrefix,
218                 String snapshotsPrefix) {
219             this.split = split;
220             this.localPrefix = localPrefix;
221             this.splitLocal = splitLocal;
222             this.remotePrefix = remotePrefix;
223             this.splitRemote = splitRemote;
224             this.splitRemoteRepository = splitRemoteRepository;
225             this.splitRemoteRepositoryLast = splitRemoteRepositoryLast;
226             this.releasesPrefix = releasesPrefix;
227             this.snapshotsPrefix = snapshotsPrefix;
228         }
229 
230         @Override
231         public String getPathPrefixForLocalArtifact(Artifact artifact) {
232             if (!split) {
233                 return null;
234             }
235             String result = localPrefix;
236             if (splitLocal) {
237                 result += "/" + (artifact.isSnapshot() ? snapshotsPrefix : releasesPrefix);
238             }
239             return result;
240         }
241 
242         @Override
243         public String getPathPrefixForRemoteArtifact(Artifact artifact, RemoteRepository repository) {
244             if (!split) {
245                 return null;
246             }
247             String result = remotePrefix;
248             if (!splitRemoteRepositoryLast && splitRemoteRepository) {
249                 result += "/" + repository.getId();
250             }
251             if (splitRemote) {
252                 result += "/" + (artifact.isSnapshot() ? snapshotsPrefix : releasesPrefix);
253             }
254             if (splitRemoteRepositoryLast && splitRemoteRepository) {
255                 result += "/" + repository.getId();
256             }
257             return result;
258         }
259 
260         @Override
261         public String getPathPrefixForLocalMetadata(Metadata metadata) {
262             if (!split) {
263                 return null;
264             }
265             String result = localPrefix;
266             if (splitLocal) {
267                 result += "/" + (isSnapshot(metadata) ? snapshotsPrefix : releasesPrefix);
268             }
269             return result;
270         }
271 
272         @Override
273         public String getPathPrefixForRemoteMetadata(Metadata metadata, RemoteRepository repository) {
274             if (!split) {
275                 return null;
276             }
277             String result = remotePrefix;
278             if (!splitRemoteRepositoryLast && splitRemoteRepository) {
279                 result += "/" + repository.getId();
280             }
281             if (splitRemote) {
282                 result += "/" + (isSnapshot(metadata) ? snapshotsPrefix : releasesPrefix);
283             }
284             if (splitRemoteRepositoryLast && splitRemoteRepository) {
285                 result += "/" + repository.getId();
286             }
287             return result;
288         }
289 
290         protected boolean isSnapshot(Metadata metadata) {
291             return !metadata.getVersion().isEmpty() && metadata.getVersion().endsWith("-SNAPSHOT");
292         }
293     }
294 }