You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RepositoryProviderMock.java 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package org.apache.archiva.maven.proxy.mock.repository;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  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. import org.apache.archiva.configuration.model.ManagedRepositoryConfiguration;
  20. import org.apache.archiva.configuration.model.RemoteRepositoryConfiguration;
  21. import org.apache.archiva.configuration.model.RepositoryGroupConfiguration;
  22. import org.apache.archiva.event.EventHandler;
  23. import org.apache.archiva.repository.base.managed.BasicManagedRepository;
  24. import org.apache.archiva.repository.base.remote.BasicRemoteRepository;
  25. import org.apache.archiva.repository.EditableManagedRepository;
  26. import org.apache.archiva.repository.EditableRemoteRepository;
  27. import org.apache.archiva.repository.EditableRepositoryGroup;
  28. import org.apache.archiva.repository.ManagedRepository;
  29. import org.apache.archiva.repository.base.PasswordCredentials;
  30. import org.apache.archiva.repository.ReleaseScheme;
  31. import org.apache.archiva.repository.RemoteRepository;
  32. import org.apache.archiva.repository.RepositoryCredentials;
  33. import org.apache.archiva.event.Event;
  34. import org.apache.archiva.repository.RepositoryException;
  35. import org.apache.archiva.repository.RepositoryGroup;
  36. import org.apache.archiva.repository.RepositoryProvider;
  37. import org.apache.archiva.repository.RepositoryType;
  38. import org.apache.archiva.repository.event.RepositoryEvent;
  39. import org.apache.archiva.repository.features.ArtifactCleanupFeature;
  40. import org.apache.archiva.repository.features.IndexCreationFeature;
  41. import org.apache.archiva.repository.features.RemoteIndexFeature;
  42. import org.apache.archiva.repository.features.StagingRepositoryFeature;
  43. import org.springframework.stereotype.Service;
  44. import java.io.IOException;
  45. import java.net.URI;
  46. import java.nio.file.Paths;
  47. import java.time.Duration;
  48. import java.time.Period;
  49. import java.util.HashSet;
  50. import java.util.Set;
  51. /**
  52. * Just a simple mock class for the repository provider
  53. */
  54. @Service("mockRepositoryProvider")
  55. public class RepositoryProviderMock implements RepositoryProvider
  56. {
  57. private static final Set<RepositoryType> TYPES = new HashSet<>( );
  58. static
  59. {
  60. TYPES.add( RepositoryType.MAVEN );
  61. TYPES.add( RepositoryType.NPM );
  62. }
  63. @Override
  64. public Set<RepositoryType> provides( )
  65. {
  66. return TYPES;
  67. }
  68. @Override
  69. public EditableManagedRepository createManagedInstance( String id, String name ) throws IOException {
  70. return BasicManagedRepository.newFilesystemInstance(id, name, Paths.get("target/repositories").resolve(id));
  71. }
  72. @Override
  73. public EditableRemoteRepository createRemoteInstance( String id, String name )
  74. {
  75. try {
  76. return BasicRemoteRepository.newFilesystemInstance( id, name, Paths.get("target/remotes") );
  77. } catch (IOException e) {
  78. throw new RuntimeException(e);
  79. }
  80. }
  81. @Override
  82. public EditableRepositoryGroup createRepositoryGroup( String id, String name )
  83. {
  84. return null;
  85. }
  86. @Override
  87. public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
  88. {
  89. BasicManagedRepository managedRepository = null;
  90. try {
  91. managedRepository = BasicManagedRepository.newFilesystemInstance( configuration.getId( ), configuration.getName( ) , Paths.get("target/repositories").resolve(configuration.getId()));
  92. } catch (IOException e) {
  93. throw new RepositoryException(e);
  94. }
  95. updateManagedInstance( managedRepository, configuration );
  96. return managedRepository;
  97. }
  98. @Override
  99. public void updateManagedInstance( EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration ) throws RepositoryException
  100. {
  101. try
  102. {
  103. managedRepository.setName( managedRepository.getPrimaryLocale(), configuration.getName( ) );
  104. managedRepository.setLocation( new URI( configuration.getLocation( )==null ?"" : configuration.getLocation() ) );
  105. managedRepository.setBaseUri( new URI( "" ) );
  106. managedRepository.setBlocksRedeployment( configuration.isBlockRedeployments( ) );
  107. managedRepository.setDescription( managedRepository.getPrimaryLocale(), configuration.getDescription( ) );
  108. managedRepository.setLayout( configuration.getLayout( ) );
  109. managedRepository.setScanned( configuration.isScanned( ) );
  110. managedRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
  111. if (configuration.isReleases()) {
  112. managedRepository.addActiveReleaseScheme( ReleaseScheme.RELEASE );
  113. }
  114. if (configuration.isSnapshots()) {
  115. managedRepository.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
  116. }
  117. ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class );
  118. acf.setRetentionPeriod( Period.ofDays( configuration.getRetentionPeriod( ) ) );
  119. acf.setDeleteReleasedSnapshots( configuration.isDeleteReleasedSnapshots( ) );
  120. acf.setRetentionCount( configuration.getRetentionCount( ) );
  121. IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class );
  122. icf.setIndexPath( new URI( configuration.getIndexDir( ) ) );
  123. icf.setSkipPackedIndexCreation( configuration.isSkipPackedIndexCreation( ) );
  124. StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class );
  125. srf.setStageRepoNeeded( configuration.isStageRepoNeeded( ) );
  126. }
  127. catch ( Exception e )
  128. {
  129. throw new RepositoryException( "Error", e );
  130. }
  131. }
  132. @Override
  133. public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
  134. {
  135. String id = configuration.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX;
  136. BasicManagedRepository managedRepository = null;
  137. try {
  138. managedRepository = BasicManagedRepository.newFilesystemInstance(id, configuration.getName(), Paths.get("target/repositories").resolve(id));
  139. } catch (IOException e) {
  140. throw new RepositoryException(e);
  141. }
  142. updateManagedInstance( managedRepository, configuration );
  143. return managedRepository;
  144. }
  145. @Override
  146. public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration ) throws RepositoryException
  147. {
  148. BasicRemoteRepository remoteRepository = null;
  149. try {
  150. remoteRepository = BasicRemoteRepository.newFilesystemInstance( configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
  151. } catch (IOException e) {
  152. throw new RepositoryException(e);
  153. }
  154. updateRemoteInstance( remoteRepository, configuration );
  155. return remoteRepository;
  156. }
  157. @SuppressWarnings("unchecked")
  158. @Override
  159. public void updateRemoteInstance( EditableRemoteRepository remoteRepository, RemoteRepositoryConfiguration configuration ) throws RepositoryException
  160. {
  161. try
  162. {
  163. remoteRepository.setName( remoteRepository.getPrimaryLocale(), configuration.getName( ) );
  164. remoteRepository.setBaseUri( new URI( "" ) );
  165. remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), configuration.getDescription( ) );
  166. remoteRepository.setLayout( configuration.getLayout( ) );
  167. remoteRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
  168. remoteRepository.setCheckPath( configuration.getCheckPath( ) );
  169. remoteRepository.setExtraHeaders( configuration.getExtraHeaders( ) );
  170. remoteRepository.setExtraParameters( configuration.getExtraParameters( ) );
  171. remoteRepository.setTimeout( Duration.ofSeconds( configuration.getTimeout( ) ) );
  172. char[] pwd = configuration.getPassword()==null ? "".toCharArray() : configuration.getPassword().toCharArray();
  173. remoteRepository.setCredentials( new PasswordCredentials( configuration.getUsername( ), pwd ) );
  174. remoteRepository.setLocation( new URI( configuration.getUrl( )==null ? "" : configuration.getUrl() ) );
  175. RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class );
  176. rif.setDownloadRemoteIndexOnStartup( configuration.isDownloadRemoteIndexOnStartup( ) );
  177. rif.setDownloadRemoteIndex( configuration.isDownloadRemoteIndex( ) );
  178. rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
  179. rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
  180. rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
  181. IndexCreationFeature icf = remoteRepository.getFeature( IndexCreationFeature.class );
  182. icf.setIndexPath(new URI(".index" ));
  183. }
  184. catch ( Exception e )
  185. {
  186. throw new RepositoryException( "Error while updating remote instance: "+e.getMessage(), e );
  187. }
  188. }
  189. @Override
  190. public RepositoryGroup createRepositoryGroup( RepositoryGroupConfiguration configuration ) throws RepositoryException
  191. {
  192. return null;
  193. }
  194. @Override
  195. public void updateRepositoryGroupInstance( EditableRepositoryGroup repositoryGroup, RepositoryGroupConfiguration configuration ) throws RepositoryException
  196. {
  197. }
  198. @Override
  199. public ManagedRepositoryConfiguration getManagedConfiguration( ManagedRepository managedRepository ) throws RepositoryException
  200. {
  201. ManagedRepositoryConfiguration configuration = new ManagedRepositoryConfiguration( );
  202. configuration.setId( managedRepository.getId( ) );
  203. configuration.setName(managedRepository.getName());
  204. configuration.setLocation( managedRepository.getLocation( ) == null ? "" : managedRepository.getLocation().toString( ) );
  205. configuration.setBlockRedeployments( managedRepository.blocksRedeployments( ) );
  206. configuration.setDescription( managedRepository.getDescription( ) );
  207. configuration.setLayout( managedRepository.getLayout( ) );
  208. configuration.setScanned( managedRepository.isScanned( ) );
  209. configuration.setRefreshCronExpression( managedRepository.getSchedulingDefinition( ) );
  210. configuration.setReleases( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) );
  211. configuration.setSnapshots( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
  212. ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class );
  213. configuration.setRetentionPeriod( acf.getRetentionPeriod( ).getDays( ) );
  214. configuration.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots( ) );
  215. configuration.setRetentionCount( acf.getRetentionCount( ) );
  216. IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class );
  217. configuration.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation( ) );
  218. configuration.setIndexDir( icf.getIndexPath( ) == null ? "" : icf.getIndexPath().toString( ) );
  219. StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class );
  220. configuration.setStageRepoNeeded( srf.isStageRepoNeeded( ) );
  221. return configuration;
  222. }
  223. @Override
  224. public RepositoryGroupConfiguration getRepositoryGroupConfiguration( RepositoryGroup repositoryGroup ) throws RepositoryException
  225. {
  226. return null;
  227. }
  228. @Override
  229. public void addRepositoryEventHandler( EventHandler<? super RepositoryEvent> eventHandler )
  230. {
  231. // do nothing
  232. }
  233. @Override
  234. public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
  235. {
  236. RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration( );
  237. configuration.setId( remoteRepository.getId( ) );
  238. configuration.setName( remoteRepository.getName( ) );
  239. configuration.setDescription( remoteRepository.getDescription( ) );
  240. configuration.setLayout( remoteRepository.getLayout( ) );
  241. configuration.setRefreshCronExpression( remoteRepository.getSchedulingDefinition( ) );
  242. configuration.setCheckPath( remoteRepository.getCheckPath( ) );
  243. configuration.setExtraHeaders( remoteRepository.getExtraHeaders( ) );
  244. configuration.setExtraParameters( remoteRepository.getExtraParameters( ) );
  245. configuration.setTimeout( (int) remoteRepository.getTimeout( ).getSeconds( ) );
  246. RepositoryCredentials creds = remoteRepository.getLoginCredentials( );
  247. if (creds!=null)
  248. {
  249. PasswordCredentials pwdCreds = (PasswordCredentials) creds;
  250. configuration.setUsername( pwdCreds.getUsername( ) );
  251. configuration.setPassword( new String( pwdCreds.getPassword( ) ) );
  252. }
  253. configuration.setUrl( remoteRepository.getLocation( ) == null ? "" : remoteRepository.getLocation().toString( ) );
  254. RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class );
  255. configuration.setDownloadRemoteIndex( rif.isDownloadRemoteIndex( ) );
  256. configuration.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup( ) );
  257. configuration.setIndexDir( rif.getIndexUri( )==null ? "" : rif.getIndexUri().toString( ) );
  258. configuration.setRemoteDownloadNetworkProxyId( rif.getProxyId( ) );
  259. return configuration;
  260. }
  261. @Override
  262. public void handle(Event event) {
  263. }
  264. }