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.

DefaultManagedRepositoriesService.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. package org.apache.archiva.rest.services;
  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.RepositoryAdminException;
  21. import org.apache.archiva.admin.model.RepositoryCommonValidator;
  22. import org.apache.archiva.admin.model.beans.ManagedRepository;
  23. import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
  24. import org.apache.archiva.metadata.repository.MetadataRepository;
  25. import org.apache.archiva.metadata.repository.MetadataRepositoryException;
  26. import org.apache.archiva.metadata.repository.RepositorySession;
  27. import org.apache.archiva.metadata.repository.stats.model.RepositoryStatistics;
  28. import org.apache.archiva.metadata.repository.stats.model.RepositoryStatisticsManager;
  29. import org.apache.archiva.rest.api.model.ActionStatus;
  30. import org.apache.archiva.rest.api.model.ArchivaRepositoryStatistics;
  31. import org.apache.archiva.rest.api.model.FileStatus;
  32. import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
  33. import org.apache.archiva.rest.api.services.ManagedRepositoriesService;
  34. import org.apache.commons.lang3.StringEscapeUtils;
  35. import org.apache.commons.lang3.StringUtils;
  36. import org.springframework.stereotype.Service;
  37. import javax.inject.Inject;
  38. import javax.ws.rs.core.Response;
  39. import java.nio.file.Files;
  40. import java.nio.file.Paths;
  41. import java.text.SimpleDateFormat;
  42. import java.util.Collections;
  43. import java.util.List;
  44. import java.util.Locale;
  45. /**
  46. * @author Olivier Lamy
  47. * @since 1.4-M1
  48. */
  49. @Service( "managedRepositoriesService#rest" )
  50. public class DefaultManagedRepositoriesService
  51. extends AbstractRestService
  52. implements ManagedRepositoriesService
  53. {
  54. @Inject
  55. private RepositoryCommonValidator repositoryCommonValidator;
  56. @Inject
  57. private RepositoryStatisticsManager repositoryStatisticsManager;
  58. @Inject
  59. private ManagedRepositoryAdmin managedRepositoryAdmin;
  60. @Override
  61. public List<ManagedRepository> getManagedRepositories()
  62. throws ArchivaRestServiceException
  63. {
  64. try
  65. {
  66. List<org.apache.archiva.admin.model.beans.ManagedRepository> repos =
  67. managedRepositoryAdmin.getManagedRepositories();
  68. return repos == null ? Collections.<ManagedRepository>emptyList() : repos;
  69. }
  70. catch ( RepositoryAdminException e )
  71. {
  72. throw new ArchivaRestServiceException( e.getMessage(), e );
  73. }
  74. }
  75. @Override
  76. public ManagedRepository getManagedRepository( String repositoryId )
  77. throws ArchivaRestServiceException
  78. {
  79. List<ManagedRepository> repos = getManagedRepositories();
  80. for ( ManagedRepository repo : repos )
  81. {
  82. if ( StringUtils.equals( repo.getId(), repositoryId ) )
  83. {
  84. return repo;
  85. }
  86. }
  87. return null;
  88. }
  89. @Override
  90. public ActionStatus deleteManagedRepository( String repoId, boolean deleteContent )
  91. throws ArchivaRestServiceException
  92. {
  93. try
  94. {
  95. return new ActionStatus( managedRepositoryAdmin.deleteManagedRepository( repoId, getAuditInformation( ), deleteContent ) );
  96. }
  97. catch ( RepositoryAdminException e )
  98. {
  99. log.error( e.getMessage(), e );
  100. throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName(), e );
  101. }
  102. }
  103. @Override
  104. public ManagedRepository addManagedRepository( ManagedRepository managedRepository )
  105. throws ArchivaRestServiceException
  106. {
  107. try
  108. {
  109. boolean res =
  110. managedRepositoryAdmin.addManagedRepository( managedRepository, managedRepository.isStageRepoNeeded(),
  111. getAuditInformation() );
  112. if ( res )
  113. {
  114. return getManagedRepository( managedRepository.getId() );
  115. }
  116. throw new ArchivaRestServiceException( "fail to created managed Repository", null );
  117. }
  118. catch ( RepositoryAdminException e )
  119. {
  120. throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName(), e );
  121. }
  122. }
  123. @Override
  124. public Boolean updateManagedRepository( ManagedRepository managedRepository )
  125. throws ArchivaRestServiceException
  126. {
  127. try
  128. {
  129. managedRepositoryAdmin.updateManagedRepository( managedRepository,
  130. managedRepository.isStageRepoNeeded( ),
  131. getAuditInformation( ),
  132. managedRepository.isResetStats( ) );
  133. return true;
  134. }
  135. catch ( RepositoryAdminException e )
  136. {
  137. throw new ArchivaRestServiceException( e.getMessage(), e.getFieldName(), e );
  138. }
  139. }
  140. @Override
  141. public FileStatus getFileStatus( String fileLocation )
  142. throws ArchivaRestServiceException
  143. {
  144. String location = repositoryCommonValidator.removeExpressions( fileLocation );
  145. return new FileStatus( Files.exists( Paths.get( location ) ) );
  146. }
  147. @Override
  148. public ArchivaRepositoryStatistics getManagedRepositoryStatistics( String repositoryId, String lang )
  149. throws ArchivaRestServiceException
  150. {
  151. RepositorySession repositorySession = null;
  152. try
  153. {
  154. repositorySession = repositorySessionFactory.createSession();
  155. }
  156. catch ( MetadataRepositoryException e )
  157. {
  158. e.printStackTrace( );
  159. }
  160. SimpleDateFormat sdf = new SimpleDateFormat( "EEE, d MMM yyyy HH:mm:ss Z", new Locale( lang ) );
  161. try
  162. {
  163. MetadataRepository metadataRepository = repositorySession.getRepository();
  164. RepositoryStatistics stats = null;
  165. try
  166. {
  167. stats = repositoryStatisticsManager.getLastStatistics( repositoryId );
  168. }
  169. catch ( MetadataRepositoryException e )
  170. {
  171. log.warn( "Error retrieving repository statistics: {}", e.getMessage(), e );
  172. }
  173. if ( stats != null )
  174. {
  175. ArchivaRepositoryStatistics archivaRepositoryStatistics =
  176. getModelMapper().map( stats, ArchivaRepositoryStatistics.class );
  177. archivaRepositoryStatistics.setDuration( archivaRepositoryStatistics.getScanEndTime().getTime()
  178. - archivaRepositoryStatistics.getScanStartTime().getTime() );
  179. archivaRepositoryStatistics.setLastScanDate(
  180. sdf.format( archivaRepositoryStatistics.getScanEndTime() ) );
  181. return archivaRepositoryStatistics;
  182. }
  183. }
  184. finally
  185. {
  186. if ( repositorySession != null )
  187. {
  188. repositorySession.close();
  189. }
  190. }
  191. return null;
  192. }
  193. @Override
  194. public String getPomSnippet( String repositoryId )
  195. throws ArchivaRestServiceException
  196. {
  197. return createSnippet( getManagedRepository( repositoryId ) );
  198. }
  199. private String createSnippet( ManagedRepository repo )
  200. throws ArchivaRestServiceException
  201. {
  202. try
  203. {
  204. StringBuilder snippet = new StringBuilder();
  205. snippet.append( "<project>\n" );
  206. snippet.append( " ...\n" );
  207. snippet.append( " <distributionManagement>\n" );
  208. String distRepoName = "repository";
  209. if ( repo.isSnapshots() )
  210. {
  211. distRepoName = "snapshotRepository";
  212. }
  213. snippet.append( " <" ).append( distRepoName ).append( ">\n" );
  214. snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
  215. snippet.append( " <url>" );
  216. snippet.append( getBaseUrl( ) + "/repository" );
  217. snippet.append( "/" ).append( repo.getId() ).append( "/" ).append( "</url>\n" );
  218. if ( !"default".equals( repo.getLayout() ) )
  219. {
  220. snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>" );
  221. }
  222. snippet.append( " </" ).append( distRepoName ).append( ">\n" );
  223. snippet.append( " </distributionManagement>\n" );
  224. snippet.append( "\n" );
  225. snippet.append( " <repositories>\n" );
  226. snippet.append( " <repository>\n" );
  227. snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
  228. snippet.append( " <name>" ).append( repo.getName() ).append( "</name>\n" );
  229. snippet.append( " <url>" );
  230. snippet.append( getBaseUrl( ) + "/repository" );
  231. snippet.append( "/" ).append( repo.getId() ).append( "/" );
  232. snippet.append( "</url>\n" );
  233. if ( !"default".equals( repo.getLayout() ) )
  234. {
  235. snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>\n" );
  236. }
  237. snippet.append( " <releases>\n" );
  238. snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isReleases() ) ).append(
  239. "</enabled>\n" );
  240. snippet.append( " </releases>\n" );
  241. snippet.append( " <snapshots>\n" );
  242. snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isSnapshots() ) ).append(
  243. "</enabled>\n" );
  244. snippet.append( " </snapshots>\n" );
  245. snippet.append( " </repository>\n" );
  246. snippet.append( " </repositories>\n" );
  247. snippet.append( " <pluginRepositories>\n" );
  248. snippet.append( " <pluginRepository>\n" );
  249. snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
  250. snippet.append( " <name>" ).append( repo.getName() ).append( "</name>\n" );
  251. snippet.append( " <url>" );
  252. snippet.append( getBaseUrl( ) + "/repository" );
  253. snippet.append( "/" ).append( repo.getId() ).append( "/" );
  254. snippet.append( "</url>\n" );
  255. if ( !"default".equals( repo.getLayout() ) )
  256. {
  257. snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>\n" );
  258. }
  259. snippet.append( " <releases>\n" );
  260. snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isReleases() ) ).append(
  261. "</enabled>\n" );
  262. snippet.append( " </releases>\n" );
  263. snippet.append( " <snapshots>\n" );
  264. snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isSnapshots() ) ).append(
  265. "</enabled>\n" );
  266. snippet.append( " </snapshots>\n" );
  267. snippet.append( " </pluginRepository>\n" );
  268. snippet.append( " </pluginRepositories>\n" );
  269. snippet.append( " ...\n" );
  270. snippet.append( "</project>\n" );
  271. return StringEscapeUtils.escapeXml( snippet.toString() );
  272. }
  273. catch ( RepositoryAdminException e )
  274. {
  275. throw new ArchivaRestServiceException( e.getMessage(),
  276. Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
  277. }
  278. }
  279. }