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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  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.audit.AuditEvent;
  30. import org.apache.archiva.configuration.Configuration;
  31. import org.apache.archiva.configuration.UserInterfaceOptions;
  32. import org.apache.archiva.configuration.WebappConfiguration;
  33. import org.apache.commons.lang.StringUtils;
  34. import org.apache.http.impl.conn.PoolingClientConnectionManager;
  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 PoolingClientConnectionManager 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. public List<LegacyArtifactPath> getLegacyArtifactPaths()
  68. throws RepositoryAdminException
  69. {
  70. List<LegacyArtifactPath> legacyArtifactPaths = new ArrayList<>(
  71. getArchivaConfiguration().getConfiguration().getLegacyArtifactPaths().size() );
  72. for ( org.apache.archiva.configuration.LegacyArtifactPath legacyArtifactPath : getArchivaConfiguration().getConfiguration().getLegacyArtifactPaths() )
  73. {
  74. legacyArtifactPaths.add(
  75. getModelMapper().map( legacyArtifactPath, LegacyArtifactPath.class ) );
  76. }
  77. return legacyArtifactPaths;
  78. }
  79. public void addLegacyArtifactPath( LegacyArtifactPath legacyArtifactPath, AuditInformation auditInformation )
  80. throws RepositoryAdminException
  81. {
  82. Configuration configuration = getArchivaConfiguration().getConfiguration();
  83. configuration.addLegacyArtifactPath( getModelMapper().map( legacyArtifactPath,
  84. org.apache.archiva.configuration.LegacyArtifactPath.class ) );
  85. saveConfiguration( configuration );
  86. triggerAuditEvent( "", "", AuditEvent.ADD_LEGACY_PATH, auditInformation );
  87. }
  88. public void deleteLegacyArtifactPath( String path, AuditInformation auditInformation )
  89. throws RepositoryAdminException
  90. {
  91. Configuration configuration = getArchivaConfiguration().getConfiguration();
  92. org.apache.archiva.configuration.LegacyArtifactPath legacyArtifactPath =
  93. new org.apache.archiva.configuration.LegacyArtifactPath();
  94. legacyArtifactPath.setPath( path );
  95. configuration.removeLegacyArtifactPath( legacyArtifactPath );
  96. saveConfiguration( configuration );
  97. triggerAuditEvent( "", "", AuditEvent.REMOVE_LEGACY_PATH, auditInformation );
  98. }
  99. public void addFileTypePattern( String fileTypeId, String pattern, AuditInformation auditInformation )
  100. throws RepositoryAdminException
  101. {
  102. Configuration configuration = getArchivaConfiguration().getConfiguration();
  103. org.apache.archiva.configuration.FileType fileType = getFileTypeById( fileTypeId, configuration );
  104. if ( fileType == null )
  105. {
  106. return;
  107. }
  108. if ( fileType.getPatterns().contains( pattern ) )
  109. {
  110. throw new RepositoryAdminException(
  111. "File type [" + fileTypeId + "] already contains pattern [" + pattern + "]" );
  112. }
  113. fileType.addPattern( pattern );
  114. saveConfiguration( configuration );
  115. triggerAuditEvent( "", "", AuditEvent.ADD_PATTERN, auditInformation );
  116. }
  117. public void removeFileTypePattern( String fileTypeId, String pattern, AuditInformation auditInformation )
  118. throws RepositoryAdminException
  119. {
  120. Configuration configuration = getArchivaConfiguration().getConfiguration();
  121. org.apache.archiva.configuration.FileType fileType = getFileTypeById( fileTypeId, configuration );
  122. if ( fileType == null )
  123. {
  124. return;
  125. }
  126. fileType.removePattern( pattern );
  127. saveConfiguration( configuration );
  128. triggerAuditEvent( "", "", AuditEvent.REMOVE_PATTERN, auditInformation );
  129. }
  130. public FileType getFileType( String fileTypeId )
  131. throws RepositoryAdminException
  132. {
  133. org.apache.archiva.configuration.FileType fileType =
  134. getFileTypeById( fileTypeId, getArchivaConfiguration().getConfiguration() );
  135. if ( fileType == null )
  136. {
  137. return null;
  138. }
  139. return getModelMapper().map( fileType, FileType.class );
  140. }
  141. public void addFileType( FileType fileType, AuditInformation auditInformation )
  142. throws RepositoryAdminException
  143. {
  144. Configuration configuration = getArchivaConfiguration().getConfiguration();
  145. if ( getFileTypeById( fileType.getId(), configuration ) != null )
  146. {
  147. throw new RepositoryAdminException(
  148. "impossible to FileType with id " + fileType.getId() + " already exists" );
  149. }
  150. configuration.getRepositoryScanning().addFileType(
  151. getModelMapper().map( fileType, org.apache.archiva.configuration.FileType.class ) );
  152. saveConfiguration( configuration );
  153. }
  154. public void removeFileType( String fileTypeId, AuditInformation auditInformation )
  155. throws RepositoryAdminException
  156. {
  157. Configuration configuration = getArchivaConfiguration().getConfiguration();
  158. org.apache.archiva.configuration.FileType fileType = new org.apache.archiva.configuration.FileType();
  159. fileType.setId( fileTypeId );
  160. configuration.getRepositoryScanning().removeFileType( fileType );
  161. saveConfiguration( configuration );
  162. }
  163. public void addKnownContentConsumer( String knownContentConsumer, AuditInformation auditInformation )
  164. throws RepositoryAdminException
  165. {
  166. Configuration configuration = getArchivaConfiguration().getConfiguration();
  167. if ( configuration.getRepositoryScanning().getKnownContentConsumers().contains( knownContentConsumer ) )
  168. {
  169. log.warn( "skip adding knownContentConsumer {} as already here", knownContentConsumer );
  170. return;
  171. }
  172. configuration.getRepositoryScanning().addKnownContentConsumer( knownContentConsumer );
  173. saveConfiguration( configuration );
  174. triggerAuditEvent( "", "", AuditEvent.ENABLE_REPO_CONSUMER, auditInformation );
  175. }
  176. public void removeKnownContentConsumer( String knownContentConsumer, AuditInformation auditInformation )
  177. throws RepositoryAdminException
  178. {
  179. Configuration configuration = getArchivaConfiguration().getConfiguration();
  180. configuration.getRepositoryScanning().removeKnownContentConsumer( knownContentConsumer );
  181. saveConfiguration( configuration );
  182. triggerAuditEvent( "", "", AuditEvent.DISABLE_REPO_CONSUMER, auditInformation );
  183. }
  184. public void addInvalidContentConsumer( String invalidContentConsumer, AuditInformation auditInformation )
  185. throws RepositoryAdminException
  186. {
  187. Configuration configuration = getArchivaConfiguration().getConfiguration();
  188. if ( configuration.getRepositoryScanning().getInvalidContentConsumers().contains( invalidContentConsumer ) )
  189. {
  190. log.warn( "skip adding invalidContentConsumer {} as already here", invalidContentConsumer );
  191. return;
  192. }
  193. configuration.getRepositoryScanning().addInvalidContentConsumer( invalidContentConsumer );
  194. saveConfiguration( configuration );
  195. triggerAuditEvent( "", "", AuditEvent.ENABLE_REPO_CONSUMER, auditInformation );
  196. }
  197. public void removeInvalidContentConsumer( String invalidContentConsumer, AuditInformation auditInformation )
  198. throws RepositoryAdminException
  199. {
  200. Configuration configuration = getArchivaConfiguration().getConfiguration();
  201. configuration.getRepositoryScanning().removeInvalidContentConsumer( invalidContentConsumer );
  202. saveConfiguration( configuration );
  203. triggerAuditEvent( "", "", AuditEvent.DISABLE_REPO_CONSUMER, auditInformation );
  204. }
  205. public void setKnownContentConsumers( List<String> knownContentConsumers, AuditInformation auditInformation )
  206. throws RepositoryAdminException
  207. {
  208. if ( knownContentConsumers == null )
  209. {
  210. return;
  211. }
  212. for ( String knowContentConsumer : knownContentConsumers )
  213. {
  214. addKnownContentConsumer( knowContentConsumer, auditInformation );
  215. }
  216. }
  217. public void setInvalidContentConsumers( List<String> invalidContentConsumers, AuditInformation auditInformation )
  218. throws RepositoryAdminException
  219. {
  220. if ( invalidContentConsumers == null )
  221. {
  222. return;
  223. }
  224. for ( String invalidContentConsumer : invalidContentConsumers )
  225. {
  226. addKnownContentConsumer( invalidContentConsumer, auditInformation );
  227. }
  228. }
  229. public List<FileType> getFileTypes()
  230. throws RepositoryAdminException
  231. {
  232. List<org.apache.archiva.configuration.FileType> configFileTypes =
  233. getArchivaConfiguration().getConfiguration().getRepositoryScanning().getFileTypes();
  234. if ( configFileTypes == null || configFileTypes.isEmpty() )
  235. {
  236. return Collections.emptyList();
  237. }
  238. List<FileType> fileTypes = new ArrayList<>( configFileTypes.size() );
  239. for ( org.apache.archiva.configuration.FileType fileType : configFileTypes )
  240. {
  241. fileTypes.add( getModelMapper().map( fileType, FileType.class ) );
  242. }
  243. return fileTypes;
  244. }
  245. public List<String> getKnownContentConsumers()
  246. throws RepositoryAdminException
  247. {
  248. return new ArrayList<>(
  249. getArchivaConfiguration().getConfiguration().getRepositoryScanning().getKnownContentConsumers() );
  250. }
  251. public List<String> getInvalidContentConsumers()
  252. throws RepositoryAdminException
  253. {
  254. return new ArrayList<>(
  255. getArchivaConfiguration().getConfiguration().getRepositoryScanning().getInvalidContentConsumers() );
  256. }
  257. public OrganisationInformation getOrganisationInformation()
  258. throws RepositoryAdminException
  259. {
  260. org.apache.archiva.configuration.OrganisationInformation organisationInformation =
  261. getArchivaConfiguration().getConfiguration().getOrganisationInfo();
  262. if ( organisationInformation == null )
  263. {
  264. return null;
  265. }
  266. return getModelMapper().map( organisationInformation, OrganisationInformation.class );
  267. }
  268. public void setOrganisationInformation( OrganisationInformation organisationInformation )
  269. throws RepositoryAdminException
  270. {
  271. Configuration configuration = getArchivaConfiguration().getConfiguration();
  272. if ( organisationInformation != null )
  273. {
  274. org.apache.archiva.configuration.OrganisationInformation organisationInformationModel =
  275. getModelMapper().map( organisationInformation,
  276. org.apache.archiva.configuration.OrganisationInformation.class );
  277. configuration.setOrganisationInfo( organisationInformationModel );
  278. }
  279. else
  280. {
  281. configuration.setOrganisationInfo( null );
  282. }
  283. saveConfiguration( configuration );
  284. }
  285. public UiConfiguration getUiConfiguration()
  286. throws RepositoryAdminException
  287. {
  288. WebappConfiguration webappConfiguration = getArchivaConfiguration().getConfiguration().getWebapp();
  289. if ( webappConfiguration == null )
  290. {
  291. return null;
  292. }
  293. UserInterfaceOptions userInterfaceOptions = webappConfiguration.getUi();
  294. if ( userInterfaceOptions == null )
  295. {
  296. return null;
  297. }
  298. return getModelMapper().map( userInterfaceOptions, UiConfiguration.class );
  299. }
  300. public void updateUiConfiguration( UiConfiguration uiConfiguration )
  301. throws RepositoryAdminException
  302. {
  303. Configuration configuration = getArchivaConfiguration().getConfiguration();
  304. if ( uiConfiguration != null )
  305. {
  306. UserInterfaceOptions userInterfaceOptions =
  307. getModelMapper().map( uiConfiguration, UserInterfaceOptions.class );
  308. configuration.getWebapp().setUi( userInterfaceOptions );
  309. }
  310. else
  311. {
  312. configuration.getWebapp().setUi( null );
  313. }
  314. saveConfiguration( configuration );
  315. }
  316. public NetworkConfiguration getNetworkConfiguration()
  317. throws RepositoryAdminException
  318. {
  319. org.apache.archiva.configuration.NetworkConfiguration networkConfiguration =
  320. getArchivaConfiguration().getConfiguration().getNetworkConfiguration();
  321. if ( networkConfiguration == null )
  322. {
  323. return null;
  324. }
  325. return getModelMapper().map( networkConfiguration, NetworkConfiguration.class );
  326. }
  327. public void setNetworkConfiguration( NetworkConfiguration networkConfiguration )
  328. throws RepositoryAdminException
  329. {
  330. Configuration configuration = getArchivaConfiguration().getConfiguration();
  331. if ( networkConfiguration == null )
  332. {
  333. configuration.setNetworkConfiguration( null );
  334. }
  335. else
  336. {
  337. configuration.setNetworkConfiguration( getModelMapper().map( networkConfiguration,
  338. org.apache.archiva.configuration.NetworkConfiguration.class ) );
  339. }
  340. setupWagon( networkConfiguration );
  341. saveConfiguration( configuration );
  342. }
  343. protected void setupWagon( NetworkConfiguration networkConfiguration )
  344. {
  345. if ( networkConfiguration == null )
  346. {
  347. // back to default values
  348. HttpWagon.setUseClientManagerPooled( true );
  349. poolingClientConnectionManager = new PoolingClientConnectionManager();
  350. poolingClientConnectionManager.setDefaultMaxPerRoute( 30 );
  351. poolingClientConnectionManager.setMaxTotal( 30 );
  352. HttpWagon.setConnectionManagerPooled( poolingClientConnectionManager );
  353. }
  354. else
  355. {
  356. HttpWagon.setUseClientManagerPooled( networkConfiguration.isUsePooling() );
  357. poolingClientConnectionManager = new PoolingClientConnectionManager();
  358. poolingClientConnectionManager.setDefaultMaxPerRoute( networkConfiguration.getMaxTotalPerHost() );
  359. poolingClientConnectionManager.setMaxTotal( networkConfiguration.getMaxTotal() );
  360. HttpWagon.setConnectionManagerPooled( poolingClientConnectionManager );
  361. }
  362. }
  363. //-------------------------
  364. //
  365. //-------------------------
  366. private org.apache.archiva.configuration.FileType getFileTypeById( String id, Configuration configuration )
  367. {
  368. for ( org.apache.archiva.configuration.FileType fileType : configuration.getRepositoryScanning().getFileTypes() )
  369. {
  370. if ( StringUtils.equals( id, fileType.getId() ) )
  371. {
  372. return fileType;
  373. }
  374. }
  375. return null;
  376. }
  377. }