View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.eclipse.aether.internal.impl;
20  
21  import javax.inject.Inject;
22  import javax.inject.Named;
23  import javax.inject.Singleton;
24  
25  import org.eclipse.aether.RepositorySystemSession;
26  import org.eclipse.aether.repository.LocalRepository;
27  import org.eclipse.aether.repository.LocalRepositoryManager;
28  import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
29  import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
30  import org.eclipse.aether.spi.remoterepo.RepositoryKeyFunctionFactory;
31  import org.eclipse.aether.util.repository.RepositoryIdHelper;
32  
33  import static java.util.Objects.requireNonNull;
34  
35  /**
36   * Creates local repository managers for repository type {@code "simple"}.
37   */
38  @Singleton
39  @Named(SimpleLocalRepositoryManagerFactory.NAME)
40  public class SimpleLocalRepositoryManagerFactory implements LocalRepositoryManagerFactory {
41      public static final String NAME = "simple";
42      private float priority;
43  
44      private final LocalPathComposer localPathComposer;
45      private final RepositoryKeyFunctionFactory repositoryKeyFunctionFactory;
46  
47      /**
48       * No-arg constructor, as "simple" local repository is meant mainly for use in tests.
49       */
50      public SimpleLocalRepositoryManagerFactory() {
51          this.localPathComposer = new DefaultLocalPathComposer();
52          this.repositoryKeyFunctionFactory = new DefaultRepositoryKeyFunctionFactory();
53      }
54  
55      @Inject
56      public SimpleLocalRepositoryManagerFactory(
57              final LocalPathComposer localPathComposer,
58              final RepositoryKeyFunctionFactory repositoryKeyFunctionFactory) {
59          this.localPathComposer = requireNonNull(localPathComposer);
60          this.repositoryKeyFunctionFactory = requireNonNull(repositoryKeyFunctionFactory);
61      }
62  
63      @Override
64      public LocalRepositoryManager newInstance(RepositorySystemSession session, LocalRepository repository)
65              throws NoLocalRepositoryManagerException {
66          requireNonNull(session, "session cannot be null");
67          requireNonNull(repository, "repository cannot be null");
68  
69          if ("".equals(repository.getContentType()) || "simple".equals(repository.getContentType())) {
70              return new SimpleLocalRepositoryManager(
71                      repository.getBasePath(),
72                      "simple",
73                      localPathComposer,
74                      repositoryKeyFunctionFactory.repositoryKeyFunction(
75                              SimpleLocalRepositoryManagerFactory.class,
76                              session,
77                              RepositoryIdHelper.RepositoryKeyType.SIMPLE.name(),
78                              null));
79          } else {
80              throw new NoLocalRepositoryManagerException(repository);
81          }
82      }
83  
84      @Override
85      public float getPriority() {
86          return priority;
87      }
88  
89      /**
90       * Sets the priority of this component.
91       *
92       * @param priority The priority.
93       * @return This component for chaining, never {@code null}.
94       */
95      public SimpleLocalRepositoryManagerFactory setPriority(float priority) {
96          this.priority = priority;
97          return this;
98      }
99  }