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.

DefaultArchivaAdministration.java 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. package org.apache.archiva.admin.repository.admin;
  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. *
  13. * Unless required by applicable law or agreed to in writing,
  14. * software distributed under the License is distributed on an
  15. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16. * KIND, either express or implied. See the License for the
  17. * specific language governing permissions and limitations
  18. * under the License.
  19. */
  20. import org.apache.archiva.admin.model.AuditInformation;
  21. import org.apache.archiva.admin.model.RepositoryAdminException;
  22. import org.apache.archiva.admin.model.admin.ArchivaAdministration;
  23. import org.apache.archiva.admin.model.beans.FileType;
  24. import org.apache.archiva.admin.model.beans.LegacyArtifactPath;
  25. import org.apache.archiva.admin.model.beans.NetworkConfiguration;
  26. import org.apache.archiva.admin.model.beans.OrganisationInformation;
  27. import org.apache.archiva.admin.model.beans.UiConfiguration;
  28. import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
  29. import org.apache.archiva.configuration.Configuration;
  30. import org.apache.archiva.configuration.UserInterfaceOptions;
  31. import org.apache.archiva.configuration.WebappConfiguration;
  32. import org.apache.archiva.metadata.model.facets.AuditEvent;
  33. import org.apache.commons.lang.StringUtils;
  34. import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
  35. import org.apache.maven.wagon.providers.http.HttpWagon;
  36. import org.springframework.stereotype.Service;
  37. import javax.annotation.PostConstruct;
  38. import javax.annotation.PreDestroy;
  39. import java.util.ArrayList;
  40. import java.util.Collections;
  41. import java.util.List;
  42. /**
  43. * @author Olivier Lamy
  44. */
  45. @Service( "archivaAdministration#default" )
  46. public class DefaultArchivaAdministration
  47. extends AbstractRepositoryAdmin
  48. implements ArchivaAdministration
  49. {
  50. private PoolingHttpClientConnectionManager poolingClientConnectionManager;
  51. @PostConstruct
  52. public void initialize()
  53. throws RepositoryAdminException
  54. {
  55. // setup wagon on start with initial values
  56. NetworkConfiguration networkConfiguration = getNetworkConfiguration();
  57. setupWagon( networkConfiguration );
  58. }
  59. @PreDestroy
  60. public void shutdown()
  61. {
  62. if ( this.poolingClientConnectionManager != null )
  63. {
  64. this.poolingClientConnectionManager.shutdown();
  65. }
  66. }
  67. @Override
  68. public List<LegacyArtifactPath> getLegacyArtifactPaths()
  69. throws RepositoryAdminException
  70. {
  71. List<LegacyArtifactPath> legacyArtifactPaths = new ArrayList<>(
  72. getArchivaConfiguration().getConfiguration().getLegacyArtifactPaths().size() );
  73. for ( org.apache.archiva.configuration.LegacyArtifactPath legacyArtifactPath : getArchivaConfiguration().getConfiguration().getLegacyArtifactPaths() )
  74. {
  75. legacyArtifactPaths.add(
  76. getModelMapper().map( legacyArtifactPath, LegacyArtifactPath.class ) );
  77. }
  78. return legacyArtifactPaths;
  79. }
  80. @Override
  81. public void addLegacyArtifactPath( LegacyArtifactPath legacyArtifactPath, AuditInformation auditInformation )
  82. throws RepositoryAdminException
  83. {
  84. Configuration configuration = getArchivaConfiguration().getConfiguration();
  85. configuration.addLegacyArtifactPath( getModelMapper().map( legacyArtifactPath,
  86. org.apache.archiva.configuration.LegacyArtifactPath.class ) );
  87. saveConfiguration( configuration );
  88. triggerAuditEvent( "", "", AuditEvent.ADD_LEGACY_PATH, auditInformation );
  89. }
  90. @Override
  91. public void deleteLegacyArtifactPath( String path, AuditInformation auditInformation )
  92. throws RepositoryAdminException
  93. {
  94. Configuration configuration = getArchivaConfiguration().getConfiguration();
  95. org.apache.archiva.configuration.LegacyArtifactPath legacyArtifactPath =
  96. new org.apache.archiva.configuration.LegacyArtifactPath();
  97. legacyArtifactPath.setPath( path );
  98. configuration.removeLegacyArtifactPath( legacyArtifactPath );
  99. saveConfiguration( configuration );
  100. triggerAuditEvent( "", "", AuditEvent.REMOVE_LEGACY_PATH, auditInformation );
  101. }
  102. @Override
  103. public void addFileTypePattern( String fileTypeId, String pattern, AuditInformation auditInformation )
  104. throws RepositoryAdminException
  105. {
  106. Configuration configuration = getArchivaConfiguration().getConfiguration();
  107. org.apache.archiva.configuration.FileType fileType = getFileTypeById( fileTypeId, configuration );
  108. if ( fileType == null )
  109. {
  110. return;
  111. }
  112. if ( fileType.getPatterns().contains( pattern ) )
  113. {
  114. throw new RepositoryAdminException(
  115. "File type [" + fileTypeId + "] already contains pattern [" + pattern + "]" );
  116. }
  117. fileType.addPattern( pattern );
  118. saveConfiguration( configuration );
  119. triggerAuditEvent( "", "", AuditEvent.ADD_PATTERN, auditInformation );
  120. }
  121. @Override
  122. public void removeFileTypePattern( String fileTypeId, String pattern, AuditInformation auditInformation )
  123. throws RepositoryAdminException
  124. {
  125. Configuration configuration = getArchivaConfiguration().getConfiguration();
  126. org.apache.archiva.configuration.FileType fileType = getFileTypeById( fileTypeId, configuration );
  127. if ( fileType == null )
  128. {
  129. return;
  130. }
  131. fileType.removePattern( pattern );
  132. saveConfiguration( configuration );
  133. triggerAuditEvent( "", "", AuditEvent.REMOVE_PATTERN, auditInformation );
  134. }
  135. @Override
  136. public FileType getFileType( String fileTypeId )
  137. throws RepositoryAdminException
  138. {
  139. org.apache.archiva.configuration.FileType fileType =
  140. getFileTypeById( fileTypeId, getArchivaConfiguration().getConfiguration() );
  141. if ( fileType == null )
  142. {
  143. return null;
  144. }
  145. return getModelMapper().map( fileType, FileType.class );
  146. }
  147. @Override
  148. public void addFileType( FileType fileType, AuditInformation auditInformation )
  149. throws RepositoryAdminException
  150. {
  151. Configuration configuration = getArchivaConfiguration().getConfiguration();
  152. if ( getFileTypeById( fileType.getId(), configuration ) != null )
  153. {
  154. throw new RepositoryAdminException(
  155. "impossible to FileType with id " + fileType.getId() + " already exists" );
  156. }
  157. configuration.getRepositoryScanning().addFileType(
  158. getModelMapper().map( fileType, org.apache.archiva.configuration.FileType.class ) );
  159. saveConfiguration( configuration );
  160. }
  161. @Override
  162. public void removeFileType( String fileTypeId, AuditInformation auditInformation )
  163. throws RepositoryAdminException
  164. {
  165. Configuration configuration = getArchivaConfiguration().getConfiguration();
  166. org.apache.archiva.configuration.FileType fileType = new org.apache.archiva.configuration.FileType();
  167. fileType.setId( fileTypeId );
  168. configuration.getRepositoryScanning().removeFileType( fileType );
  169. saveConfiguration( configuration );
  170. }
  171. @Override
  172. public void addKnownContentConsumer( String knownContentConsumer, AuditInformation auditInformation )
  173. throws RepositoryAdminException
  174. {
  175. Configuration configuration = getArchivaConfiguration().getConfiguration();
  176. if ( configuration.getRepositoryScanning().getKnownContentConsumers().contains( knownContentConsumer ) )
  177. {
  178. log.warn( "skip adding knownContentConsumer {} as already here", knownContentConsumer );
  179. return;
  180. }
  181. configuration.getRepositoryScanning().addKnownContentConsumer( knownContentConsumer );
  182. saveConfiguration( configuration );
  183. triggerAuditEvent( "", "", AuditEvent.ENABLE_REPO_CONSUMER, auditInformation );
  184. }
  185. @Override
  186. public void removeKnownContentConsumer( String knownContentConsumer, AuditInformation auditInformation )
  187. throws RepositoryAdminException
  188. {
  189. Configuration configuration = getArchivaConfiguration().getConfiguration();
  190. configuration.getRepositoryScanning().removeKnownContentConsumer( knownContentConsumer );
  191. saveConfiguration( configuration );
  192. triggerAuditEvent( "", "", AuditEvent.DISABLE_REPO_CONSUMER, auditInformation );
  193. }
  194. @Override
  195. public void addInvalidContentConsumer( String invalidContentConsumer, AuditInformation auditInformation )
  196. throws RepositoryAdminException
  197. {
  198. Configuration configuration = getArchivaConfiguration().getConfiguration();
  199. if ( configuration.getRepositoryScanning().getInvalidContentConsumers().contains( invalidContentConsumer ) )
  200. {
  201. log.warn( "skip adding invalidContentConsumer {} as already here", invalidContentConsumer );
  202. return;
  203. }
  204. configuration.getRepositoryScanning().addInvalidContentConsumer( invalidContentConsumer );
  205. saveConfiguration( configuration );
  206. triggerAuditEvent( "", "", AuditEvent.ENABLE_REPO_CONSUMER, auditInformation );
  207. }
  208. @Override
  209. public void removeInvalidContentConsumer( String invalidContentConsumer, AuditInformation auditInformation )
  210. throws RepositoryAdminException
  211. {
  212. Configuration configuration = getArchivaConfiguration().getConfiguration();
  213. configuration.getRepositoryScanning().removeInvalidContentConsumer( invalidContentConsumer );
  214. saveConfiguration( configuration );
  215. triggerAuditEvent( "", "", AuditEvent.DISABLE_REPO_CONSUMER, auditInformation );
  216. }
  217. @Override
  218. public void setKnownContentConsumers( List<String> knownContentConsumers, AuditInformation auditInformation )
  219. throws RepositoryAdminException
  220. {
  221. if ( knownContentConsumers == null )
  222. {
  223. return;
  224. }
  225. for ( String knowContentConsumer : knownContentConsumers )
  226. {
  227. addKnownContentConsumer( knowContentConsumer, auditInformation );
  228. }
  229. }
  230. @Override
  231. public void setInvalidContentConsumers( List<String> invalidContentConsumers, AuditInformation auditInformation )
  232. throws RepositoryAdminException
  233. {
  234. if ( invalidContentConsumers == null )
  235. {
  236. return;
  237. }
  238. for ( String invalidContentConsumer : invalidContentConsumers )
  239. {
  240. addKnownContentConsumer( invalidContentConsumer, auditInformation );
  241. }
  242. }
  243. @Override
  244. public List<FileType> getFileTypes()
  245. throws RepositoryAdminException
  246. {
  247. List<org.apache.archiva.configuration.FileType> configFileTypes =
  248. getArchivaConfiguration().getConfiguration().getRepositoryScanning().getFileTypes();
  249. if ( configFileTypes == null || configFileTypes.isEmpty() )
  250. {
  251. return Collections.emptyList();
  252. }
  253. List<FileType> fileTypes = new ArrayList<>( configFileTypes.size() );
  254. for ( org.apache.archiva.configuration.FileType fileType : configFileTypes )
  255. {
  256. fileTypes.add( getModelMapper().map( fileType, FileType.class ) );
  257. }
  258. return fileTypes;
  259. }
  260. @Override
  261. public List<String> getKnownContentConsumers()
  262. throws RepositoryAdminException
  263. {
  264. return new ArrayList<>(
  265. getArchivaConfiguration().getConfiguration().getRepositoryScanning().getKnownContentConsumers() );
  266. }
  267. @Override
  268. public List<String> getInvalidContentConsumers()
  269. throws RepositoryAdminException
  270. {
  271. return new ArrayList<>(
  272. getArchivaConfiguration().getConfiguration().getRepositoryScanning().getInvalidContentConsumers() );
  273. }
  274. @Override
  275. public OrganisationInformation getOrganisationInformation()
  276. throws RepositoryAdminException
  277. {
  278. org.apache.archiva.configuration.OrganisationInformation organisationInformation =
  279. getArchivaConfiguration().getConfiguration().getOrganisationInfo();
  280. if ( organisationInformation == null )
  281. {
  282. return null;
  283. }
  284. return getModelMapper().map( organisationInformation, OrganisationInformation.class );
  285. }
  286. @Override
  287. public void setOrganisationInformation( OrganisationInformation organisationInformation )
  288. throws RepositoryAdminException
  289. {
  290. Configuration configuration = getArchivaConfiguration().getConfiguration();
  291. if ( organisationInformation != null )
  292. {
  293. org.apache.archiva.configuration.OrganisationInformation organisationInformationModel =
  294. getModelMapper().map( organisationInformation,
  295. org.apache.archiva.configuration.OrganisationInformation.class );
  296. configuration.setOrganisationInfo( organisationInformationModel );
  297. }
  298. else
  299. {
  300. configuration.setOrganisationInfo( null );
  301. }
  302. saveConfiguration( configuration );
  303. }
  304. @Override
  305. public UiConfiguration getUiConfiguration()
  306. throws RepositoryAdminException
  307. {
  308. WebappConfiguration webappConfiguration = getArchivaConfiguration().getConfiguration().getWebapp();
  309. if ( webappConfiguration == null )
  310. {
  311. return null;
  312. }
  313. UserInterfaceOptions userInterfaceOptions = webappConfiguration.getUi();
  314. if ( userInterfaceOptions == null )
  315. {
  316. return null;
  317. }
  318. return getModelMapper().map( userInterfaceOptions, UiConfiguration.class );
  319. }
  320. @Override
  321. public void updateUiConfiguration( UiConfiguration uiConfiguration )
  322. throws RepositoryAdminException
  323. {
  324. Configuration configuration = getArchivaConfiguration().getConfiguration();
  325. if ( uiConfiguration != null )
  326. {
  327. UserInterfaceOptions userInterfaceOptions =
  328. getModelMapper().map( uiConfiguration, UserInterfaceOptions.class );
  329. configuration.getWebapp().setUi( userInterfaceOptions );
  330. }
  331. else
  332. {
  333. configuration.getWebapp().setUi( null );
  334. }
  335. saveConfiguration( configuration );
  336. }
  337. @Override
  338. public NetworkConfiguration getNetworkConfiguration()
  339. throws RepositoryAdminException
  340. {
  341. org.apache.archiva.configuration.NetworkConfiguration networkConfiguration =
  342. getArchivaConfiguration().getConfiguration().getNetworkConfiguration();
  343. if ( networkConfiguration == null )
  344. {
  345. return null;
  346. }
  347. return getModelMapper().map( networkConfiguration, NetworkConfiguration.class );
  348. }
  349. @Override
  350. public void setNetworkConfiguration( NetworkConfiguration networkConfiguration )
  351. throws RepositoryAdminException
  352. {
  353. Configuration configuration = getArchivaConfiguration().getConfiguration();
  354. if ( networkConfiguration == null )
  355. {
  356. configuration.setNetworkConfiguration( null );
  357. }
  358. else
  359. {
  360. configuration.setNetworkConfiguration( getModelMapper().map( networkConfiguration,
  361. org.apache.archiva.configuration.NetworkConfiguration.class ) );
  362. }
  363. setupWagon( networkConfiguration );
  364. saveConfiguration( configuration );
  365. }
  366. protected void setupWagon( NetworkConfiguration networkConfiguration )
  367. {
  368. if ( networkConfiguration == null )
  369. {
  370. // back to default values
  371. HttpWagon.setPersistentPool( true );
  372. poolingClientConnectionManager = new PoolingHttpClientConnectionManager();
  373. poolingClientConnectionManager.setDefaultMaxPerRoute( 30 );
  374. poolingClientConnectionManager.setMaxTotal( 30 );
  375. HttpWagon.setPoolingHttpClientConnectionManager( poolingClientConnectionManager );
  376. }
  377. else
  378. {
  379. HttpWagon.setPersistentPool( networkConfiguration.isUsePooling() );
  380. poolingClientConnectionManager = new PoolingHttpClientConnectionManager();
  381. poolingClientConnectionManager.setDefaultMaxPerRoute( networkConfiguration.getMaxTotalPerHost() );
  382. poolingClientConnectionManager.setMaxTotal( networkConfiguration.getMaxTotal() );
  383. HttpWagon.setPoolingHttpClientConnectionManager( poolingClientConnectionManager );
  384. }
  385. }
  386. //-------------------------
  387. //
  388. //-------------------------
  389. private org.apache.archiva.configuration.FileType getFileTypeById( String id, Configuration configuration )
  390. {
  391. for ( org.apache.archiva.configuration.FileType fileType : configuration.getRepositoryScanning().getFileTypes() )
  392. {
  393. if ( StringUtils.equals( id, fileType.getId() ) )
  394. {
  395. return fileType;
  396. }
  397. }
  398. return null;
  399. }
  400. }