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.

AbstractMetadataRepositoryTest.java 104KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584
  1. package org.apache.archiva.metadata.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. *
  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.checksum.ChecksumAlgorithm;
  21. import org.apache.archiva.metadata.QueryParameter;
  22. import org.apache.archiva.metadata.generic.GenericMetadataFacet;
  23. import org.apache.archiva.metadata.generic.GenericMetadataFacetFactory;
  24. import org.apache.archiva.metadata.model.ArtifactMetadata;
  25. import org.apache.archiva.metadata.model.CiManagement;
  26. import org.apache.archiva.metadata.model.Dependency;
  27. import org.apache.archiva.metadata.model.IssueManagement;
  28. import org.apache.archiva.metadata.model.License;
  29. import org.apache.archiva.metadata.model.MailingList;
  30. import org.apache.archiva.metadata.model.MetadataFacet;
  31. import org.apache.archiva.metadata.model.MetadataFacetFactory;
  32. import org.apache.archiva.metadata.model.Organization;
  33. import org.apache.archiva.metadata.model.ProjectMetadata;
  34. import org.apache.archiva.metadata.model.ProjectVersionMetadata;
  35. import org.apache.archiva.metadata.model.ProjectVersionReference;
  36. import org.apache.archiva.metadata.model.Scm;
  37. import org.junit.jupiter.api.Test;
  38. import org.junit.jupiter.api.TestInstance;
  39. import org.junit.jupiter.api.extension.ExtendWith;
  40. import org.slf4j.Logger;
  41. import org.slf4j.LoggerFactory;
  42. import org.springframework.test.context.ContextConfiguration;
  43. import org.springframework.test.context.junit.jupiter.SpringExtension;
  44. import java.text.SimpleDateFormat;
  45. import java.time.ZoneId;
  46. import java.time.ZonedDateTime;
  47. import java.util.ArrayList;
  48. import java.util.Arrays;
  49. import java.util.Calendar;
  50. import java.util.Collection;
  51. import java.util.Collections;
  52. import java.util.Comparator;
  53. import java.util.Date;
  54. import java.util.HashMap;
  55. import java.util.List;
  56. import java.util.Map;
  57. import java.util.TimeZone;
  58. import java.util.stream.Collectors;
  59. import java.util.stream.Stream;
  60. import static org.assertj.core.api.Assertions.assertThat;
  61. import static org.junit.jupiter.api.Assertions.*;
  62. @ExtendWith( SpringExtension.class )
  63. @TestInstance( TestInstance.Lifecycle.PER_CLASS )
  64. @ContextConfiguration( locations = {"classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml"} )
  65. public abstract class AbstractMetadataRepositoryTest
  66. {
  67. protected static final String OTHER_REPO_ID = "other-repo";
  68. protected static final String TEST_REPO_ID = "test";
  69. protected static final String TEST_PROJECT = "myproject";
  70. protected static final String TEST_NAMESPACE = "mytest";
  71. protected static final String TEST_PROJECT_VERSION = "1.0";
  72. private static final String TEST_PROJECT_VERSION_2_0 = "2.0";
  73. protected static final String TEST_URL = "http://archiva.apache.org";
  74. private static final Organization TEST_ORGANIZATION = new Organization( "Apache", "http://apache.org" );
  75. private static final String TEST_FACET_ID = "test-facet-id";
  76. private static final String TEST_NAME = "test/name";
  77. private static final String TEST_VALUE = "test-value";
  78. private static final String UNKNOWN = "unknown";
  79. private static final String TEST_SHA256 = "e43857b4e75e04a09d167564ca9a4636e5d233035483ba4ecf1243e34325d565";
  80. private static final String TEST_MD5 = "bd4a9b642562547754086de2dab26b7d";
  81. private static final String TEST_SHA1 = "2e5daf0201ddeb068a62d5e08da18657ab2c6be9";
  82. private static final String TEST_METADATA_KEY = "testkey";
  83. private static final String TEST_METADATA_VALUE = "testmetadata";
  84. protected Logger log = LoggerFactory.getLogger( getClass( ) );
  85. protected int assertMaxTries =10;
  86. protected int assertRetrySleepMs=500;
  87. protected void setUp() throws Exception {
  88. }
  89. protected void tearDown() throws Exception {
  90. }
  91. /*
  92. * Used by tryAssert to allow to throw exceptions in the lambda expression.
  93. */
  94. @FunctionalInterface
  95. protected interface AssertFunction
  96. {
  97. void accept( ) throws Exception;
  98. }
  99. protected void tryAssert( AssertFunction func ) throws Exception
  100. {
  101. tryAssert( func, assertMaxTries, assertRetrySleepMs );
  102. }
  103. protected abstract RepositorySessionFactory getSessionFactory( );
  104. protected abstract MetadataRepository getRepository( );
  105. /*
  106. * Runs the assert method until the assert is successful or the number of retries
  107. * is reached. This is needed because the JCR Oak index update is asynchronous, so updates
  108. * may not be visible immediately after the modification.
  109. */
  110. private void tryAssert( AssertFunction func, int retries, int sleepMillis ) throws Exception
  111. {
  112. Throwable t = null;
  113. int retry = retries;
  114. while ( retry-- > 0 )
  115. {
  116. try
  117. {
  118. func.accept( );
  119. return;
  120. }
  121. catch ( Exception | AssertionError e )
  122. {
  123. t = e;
  124. Thread.currentThread( ).sleep( sleepMillis );
  125. log.warn( "Retrying assert {}: {}", retry, e.getMessage( ) );
  126. }
  127. }
  128. log.warn( "Retries: {}, Exception: {}", retry, t.getMessage( ) );
  129. if ( retry <= 0 && t != null )
  130. {
  131. if ( t instanceof RuntimeException )
  132. {
  133. throw (RuntimeException) t;
  134. }
  135. else if ( t instanceof Exception )
  136. {
  137. throw (Exception) t;
  138. }
  139. else if ( t instanceof Error )
  140. {
  141. throw (Error) t;
  142. }
  143. }
  144. }
  145. public static List<MetadataFacetFactory> createTestMetadataFacetFactories( )
  146. {
  147. List<MetadataFacetFactory> factories = new ArrayList<>( );
  148. factories.add( new MetadataFacetFactory<TestMetadataFacet>( )
  149. {
  150. @Override
  151. public TestMetadataFacet createMetadataFacet( )
  152. {
  153. return new TestMetadataFacet( TEST_METADATA_VALUE );
  154. }
  155. @Override
  156. public TestMetadataFacet createMetadataFacet( String repositoryId, String name )
  157. {
  158. return new TestMetadataFacet( TEST_FACET_ID, TEST_METADATA_VALUE, name );
  159. }
  160. @Override
  161. public Class<TestMetadataFacet> getFacetClass( )
  162. {
  163. return TestMetadataFacet.class;
  164. }
  165. @Override
  166. public String getFacetId( )
  167. {
  168. return TEST_FACET_ID;
  169. }
  170. } );
  171. // for the getArtifactsByProjectVersionFacet tests
  172. factories.add( new GenericMetadataFacetFactory( ) );
  173. return factories;
  174. }
  175. @Test
  176. public void testRootNamespaceWithNoMetadataRepository( )
  177. throws Exception
  178. {
  179. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  180. {
  181. tryAssert( ( ) -> {
  182. Collection<String> namespaces = getRepository( ).getRootNamespaces( session, TEST_REPO_ID );
  183. assertThat( namespaces ).isNotNull( ).isEmpty( );
  184. } );
  185. }
  186. }
  187. @Test
  188. public void testGetNamespaceOnly( )
  189. throws Exception
  190. {
  191. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  192. {
  193. tryAssert( ( ) -> assertThat( getRepository( ).getRootNamespaces( session, TEST_REPO_ID ) ).isNotNull( ).isEmpty( ));
  194. getRepository( ).updateNamespace( session, TEST_REPO_ID, TEST_NAMESPACE );
  195. tryAssert( ( ) -> assertThat( getRepository( ).getRootNamespaces( session, TEST_REPO_ID ) ).isNotNull( ).isNotEmpty( )
  196. .contains( TEST_NAMESPACE ).hasSize( 1 ));
  197. getRepository( ).removeNamespace( session, TEST_REPO_ID, TEST_NAMESPACE );
  198. tryAssert( ( ) -> assertThat( getRepository( ).getRootNamespaces( session, TEST_REPO_ID ) ).isNotNull( ).isEmpty( ));
  199. }
  200. }
  201. @Test
  202. public void testGetProjectOnly( )
  203. throws Exception
  204. {
  205. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  206. {
  207. tryAssert( ( ) -> {
  208. assertNull( getRepository( ).getProject( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) );
  209. assertThat( getRepository( ).getRootNamespaces( session, TEST_REPO_ID ) ).isNotNull( ).isEmpty( );
  210. } );
  211. ProjectMetadata project = new ProjectMetadata( );
  212. project.setId( TEST_PROJECT );
  213. project.setNamespace( TEST_NAMESPACE );
  214. getRepository( ).updateProject( session, TEST_REPO_ID, project );
  215. tryAssert( ( ) -> {
  216. ProjectMetadata proj = getRepository( ).getProject( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  217. assertEquals( TEST_PROJECT, proj.getId( ) );
  218. assertEquals( TEST_NAMESPACE, proj.getNamespace( ) );
  219. } );
  220. // test that namespace is also constructed
  221. tryAssert( ( ) -> {
  222. Collection<String> namespaces = getRepository( ).getRootNamespaces( session, TEST_REPO_ID );
  223. assertThat( namespaces ).isNotNull( ).isNotEmpty( ).contains( TEST_NAMESPACE ).hasSize( 1 );
  224. } );
  225. }
  226. }
  227. @Test
  228. public void testGetProjectVersionOnly( )
  229. throws Exception
  230. {
  231. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  232. {
  233. tryAssert( ( ) -> {
  234. assertNull( getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION ) );
  235. assertNull( getRepository( ).getProject( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) );
  236. assertThat( getRepository( ).getRootNamespaces( session, TEST_REPO_ID ) ).isNotNull( ).isEmpty( );
  237. } );
  238. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  239. metadata.setId( TEST_PROJECT_VERSION );
  240. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  241. metadata = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  242. assertEquals( TEST_PROJECT_VERSION, metadata.getId( ) );
  243. tryAssert( ( ) -> {
  244. // test that namespace and project is also constructed
  245. Collection<String> namespaces = getRepository( ).getRootNamespaces( session, TEST_REPO_ID );
  246. assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( TEST_NAMESPACE );
  247. } );
  248. tryAssert( ( ) -> {
  249. ProjectMetadata projectMetadata = getRepository( ).getProject( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  250. assertNotNull( projectMetadata );
  251. assertEquals( TEST_PROJECT, projectMetadata.getId( ) );
  252. assertEquals( TEST_NAMESPACE, projectMetadata.getNamespace( ) );
  253. } );
  254. }
  255. }
  256. @Test
  257. public void testGetArtifactOnly( )
  258. throws Exception
  259. {
  260. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  261. {
  262. tryAssert( ( ) -> {
  263. assertThat( new ArrayList<>(
  264. getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  265. TEST_PROJECT, TEST_PROJECT_VERSION ) ) ).isNotNull( ).isEmpty( );
  266. assertThat(
  267. getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION ) ).isNull( );
  268. assertThat( getRepository( ).getProject( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) ).isNull( );
  269. assertThat( getRepository( ).getRootNamespaces( session, TEST_REPO_ID ) ).isNotNull( ).isEmpty( );
  270. } );
  271. ArtifactMetadata metadata = createArtifact( );
  272. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
  273. tryAssert( ( ) -> {
  274. Collection<ArtifactMetadata> artifacts =
  275. getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  276. //assertEquals( Collections.singletonList( metadata ), new ArrayList<ArtifactMetadata>( artifacts ) );
  277. assertThat( artifacts ).containsExactly( metadata );
  278. // test that namespace, project and project version is also constructed
  279. assertThat( getRepository( ).getRootNamespaces( session, TEST_REPO_ID ) ).isNotNull( ).isNotEmpty( ).contains(
  280. TEST_NAMESPACE ).hasSize( 1 );
  281. ProjectMetadata projectMetadata = getRepository( ).getProject( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  282. assertEquals( TEST_PROJECT, projectMetadata.getId( ) );
  283. assertEquals( TEST_NAMESPACE, projectMetadata.getNamespace( ) );
  284. ProjectVersionMetadata projectVersionMetadata =
  285. getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  286. assertEquals( TEST_PROJECT_VERSION, projectVersionMetadata.getId( ) );
  287. } );
  288. }
  289. }
  290. @Test
  291. public void testUpdateProjectVersionMetadataWithNoOtherArchives( )
  292. throws Exception
  293. {
  294. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  295. {
  296. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  297. metadata.setId( TEST_PROJECT_VERSION );
  298. MailingList mailingList = new MailingList( );
  299. mailingList.setName( "Foo List" );
  300. mailingList.setOtherArchives( Collections.<String>emptyList( ) );
  301. metadata.setMailingLists( Arrays.asList( mailingList ) );
  302. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  303. metadata = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  304. assertEquals( TEST_PROJECT_VERSION, metadata.getId( ) );
  305. List<MailingList> mailingLists = metadata.getMailingLists( );
  306. assertThat( mailingLists ).isNotNull( ).isNotEmpty( ).hasSize( 1 );
  307. mailingList = metadata.getMailingLists( ).get( 0 );
  308. assertEquals( "Foo List", mailingList.getName( ) );
  309. List<String> others = mailingList.getOtherArchives( );
  310. assertThat( others ).isNotNull( ).isEmpty( );
  311. }
  312. }
  313. @Test
  314. public void testUpdateProjectVersionMetadataWithAllElements( )
  315. throws Exception
  316. {
  317. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  318. {
  319. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  320. metadata.setId( TEST_PROJECT_VERSION );
  321. metadata.setName( "project name" );
  322. metadata.setDescription( "project description" );
  323. metadata.setUrl( "the url" );
  324. MailingList mailingList = new MailingList( );
  325. mailingList.setName( "Foo List" );
  326. mailingList.setUnsubscribeAddress( "UnsubscribeAddress" );
  327. mailingList.setSubscribeAddress( "SubscribeAddress" );
  328. mailingList.setPostAddress( "PostAddress" );
  329. mailingList.setMainArchiveUrl( "MainArchiveUrl" );
  330. mailingList.setOtherArchives( Arrays.asList( "other archive" ) );
  331. metadata.setMailingLists( Arrays.asList( mailingList ) );
  332. Scm scm = new Scm( );
  333. scm.setConnection( "connection" );
  334. scm.setDeveloperConnection( "dev conn" );
  335. scm.setUrl( "url" );
  336. metadata.setScm( scm );
  337. CiManagement ci = new CiManagement( );
  338. ci.setSystem( "system" );
  339. ci.setUrl( "ci url" );
  340. metadata.setCiManagement( ci );
  341. IssueManagement tracker = new IssueManagement( );
  342. tracker.setSystem( "system" );
  343. tracker.setUrl( "issue tracker url" );
  344. metadata.setIssueManagement( tracker );
  345. metadata.setOrganization( TEST_ORGANIZATION );
  346. License l = new License( );
  347. l.setName( "license name" );
  348. l.setUrl( "license url" );
  349. metadata.addLicense( l );
  350. Dependency d = new Dependency( );
  351. d.setArtifactId( "artifactId" );
  352. d.setClassifier( "classifier" );
  353. d.setNamespace( "groupId" );
  354. d.setScope( "scope" );
  355. d.setSystemPath( "system path" );
  356. d.setType( "type" );
  357. d.setVersion( "version" );
  358. d.setOptional( true );
  359. metadata.addDependency( d );
  360. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  361. metadata = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  362. assertNotNull( metadata );
  363. assertEquals( TEST_PROJECT_VERSION, metadata.getId( ) );
  364. assertEquals( TEST_PROJECT_VERSION, metadata.getVersion( ) );
  365. assertEquals( "project name", metadata.getName( ) );
  366. assertEquals( "project description", metadata.getDescription( ) );
  367. assertEquals( "the url", metadata.getUrl( ) );
  368. assertNotNull( metadata.getScm( ) );
  369. assertEquals( "connection", metadata.getScm( ).getConnection( ) );
  370. assertEquals( "dev conn", metadata.getScm( ).getDeveloperConnection( ) );
  371. assertEquals( "url", metadata.getScm( ).getUrl( ) );
  372. assertNotNull( metadata.getCiManagement( ) );
  373. assertEquals( "system", metadata.getCiManagement( ).getSystem( ) );
  374. assertEquals( "ci url", metadata.getCiManagement( ).getUrl( ) );
  375. assertNotNull( metadata.getIssueManagement( ) );
  376. assertEquals( "system", metadata.getIssueManagement( ).getSystem( ) );
  377. assertEquals( "issue tracker url", metadata.getIssueManagement( ).getUrl( ) );
  378. assertEquals( TEST_ORGANIZATION.getName( ), metadata.getOrganization( ).getName( ) );
  379. assertEquals( TEST_ORGANIZATION.getUrl( ), metadata.getOrganization( ).getUrl( ) );
  380. assertEquals( 1, metadata.getMailingLists( ).size( ) );
  381. MailingList retrievedMailingList = metadata.getMailingLists( ).get( 0 );
  382. assertEquals( mailingList.getName( ), retrievedMailingList.getName( ) );
  383. assertEquals( mailingList.getMainArchiveUrl( ), retrievedMailingList.getMainArchiveUrl( ) );
  384. assertEquals( mailingList.getPostAddress( ), retrievedMailingList.getPostAddress( ) );
  385. assertEquals( mailingList.getSubscribeAddress( ), retrievedMailingList.getSubscribeAddress( ) );
  386. assertEquals( mailingList.getUnsubscribeAddress( ), retrievedMailingList.getUnsubscribeAddress( ) );
  387. assertThat( retrievedMailingList.getOtherArchives( ) ) //
  388. .isNotNull( ) //
  389. .isNotEmpty( ) //
  390. .hasSize( 1 ) //
  391. .contains( "other archive" );
  392. assertEquals( 1, metadata.getLicenses( ).size( ) );
  393. l = metadata.getLicenses( ).get( 0 );
  394. assertEquals( "license name", l.getName( ) );
  395. assertEquals( "license url", l.getUrl( ) );
  396. assertEquals( 1, metadata.getDependencies( ).size( ) );
  397. d = metadata.getDependencies( ).get( 0 );
  398. assertEquals( "artifactId", d.getArtifactId( ) );
  399. assertEquals( "classifier", d.getClassifier( ) );
  400. assertEquals( "groupId", d.getNamespace( ) );
  401. assertEquals( "scope", d.getScope( ) );
  402. assertEquals( "system path", d.getSystemPath( ) );
  403. assertEquals( "type", d.getType( ) );
  404. assertEquals( "version", d.getVersion( ) );
  405. assertTrue( d.isOptional( ) );
  406. }
  407. }
  408. @Test
  409. public void testUpdateProjectVersionMetadataIncomplete( )
  410. throws Exception
  411. {
  412. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  413. {
  414. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  415. metadata.setId( TEST_PROJECT_VERSION );
  416. metadata.setIncomplete( true );
  417. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  418. tryAssert( ( ) -> {
  419. ProjectVersionMetadata metadata1 = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  420. assertEquals( true, metadata1.isIncomplete( ) );
  421. assertNull( metadata1.getCiManagement( ) );
  422. assertNull( metadata1.getScm( ) );
  423. assertNull( metadata1.getIssueManagement( ) );
  424. assertNull( metadata1.getOrganization( ) );
  425. assertTrue( metadata1.getDescription( )==null || "".equals(metadata1.getDescription()) );
  426. assertTrue( metadata1.getName( )==null || "".equals(metadata1.getName()) );
  427. assertEquals( TEST_PROJECT_VERSION, metadata1.getId( ) );
  428. assertEquals( TEST_PROJECT_VERSION, metadata1.getVersion( ) );
  429. assertTrue( metadata1.getMailingLists( ).isEmpty( ) );
  430. assertTrue( metadata1.getLicenses( ).isEmpty( ) );
  431. assertTrue( metadata1.getDependencies( ).isEmpty( ) );
  432. } );
  433. }
  434. }
  435. @Test
  436. public void testUpdateProjectVersionMetadataWithExistingFacets( )
  437. throws Exception
  438. {
  439. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  440. {
  441. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  442. metadata.setId( TEST_PROJECT_VERSION );
  443. MetadataFacet facet = new TestMetadataFacet( "baz" );
  444. metadata.addFacet( facet );
  445. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  446. tryAssert( ( ) -> {
  447. ProjectVersionMetadata metadata1 = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  448. assertEquals( Collections.singleton( TEST_FACET_ID ), metadata1.getFacetIds( ) );
  449. } );
  450. metadata = new ProjectVersionMetadata( );
  451. metadata.setId( TEST_PROJECT_VERSION );
  452. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  453. tryAssert( ( ) -> {
  454. ProjectVersionMetadata metadata2 = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  455. assertEquals( Collections.singleton( TEST_FACET_ID ), metadata2.getFacetIds( ) );
  456. TestMetadataFacet testFacet = (TestMetadataFacet) metadata2.getFacet( TEST_FACET_ID );
  457. assertEquals( "baz", testFacet.getValue( ) );
  458. } );
  459. }
  460. }
  461. @Test
  462. public void testUpdateProjectVersionMetadataWithNoExistingFacets( )
  463. throws Exception
  464. {
  465. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  466. {
  467. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  468. metadata.setId( TEST_PROJECT_VERSION );
  469. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  470. tryAssert( ( ) -> {
  471. ProjectVersionMetadata metadata1 = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  472. assertThat( metadata1.getFacetIds( ) ).isNotNull( ).isEmpty( );
  473. } );
  474. ProjectVersionMetadata metadata1 = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  475. metadata = new ProjectVersionMetadata( );
  476. metadata.setId( TEST_PROJECT_VERSION );
  477. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  478. tryAssert( ( ) -> {
  479. ProjectVersionMetadata metadata2 = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  480. assertThat( metadata2.getFacetIds( ) ).isNotNull( ).isEmpty( );
  481. } );
  482. }
  483. }
  484. @Test
  485. public void testUpdateProjectVersionMetadataWithExistingFacetsFacetPropertyWasRemoved( )
  486. throws Exception
  487. {
  488. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  489. {
  490. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  491. metadata.setId( TEST_PROJECT_VERSION );
  492. Map<String, String> additionalProps = new HashMap<>( );
  493. additionalProps.put( "deleteKey", "deleteValue" );
  494. MetadataFacet facet = new TestMetadataFacet( TEST_FACET_ID, "baz", additionalProps );
  495. metadata.addFacet( facet );
  496. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  497. tryAssert( ( ) -> {
  498. ProjectVersionMetadata metad = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  499. assertThat( metad.getFacetIds( ) ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( TEST_FACET_ID );
  500. } );
  501. ProjectVersionMetadata metad = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  502. TestMetadataFacet testFacet = (TestMetadataFacet) metad.getFacet( TEST_FACET_ID );
  503. Map<String, String> facetProperties = testFacet.toProperties( );
  504. assertEquals( "deleteValue", facetProperties.get( "deleteKey" ) );
  505. facetProperties.remove( "deleteKey" );
  506. TestMetadataFacet newTestFacet = new TestMetadataFacet( TEST_FACET_ID, testFacet.getValue( ), facetProperties );
  507. metadata.addFacet( newTestFacet );
  508. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  509. tryAssert( ( ) -> {
  510. ProjectVersionMetadata metad2 = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  511. assertThat( metad2.getFacetIds( ) ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( TEST_FACET_ID );
  512. TestMetadataFacet testFacet2 = (TestMetadataFacet) metad2.getFacet( TEST_FACET_ID );
  513. assertFalse( testFacet2.toProperties( ).containsKey( "deleteKey" ) );
  514. } );
  515. }
  516. }
  517. @Test
  518. public void testGetArtifactsDoesntReturnProjectVersionMetadataFacets( )
  519. throws Exception
  520. {
  521. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  522. {
  523. ProjectVersionMetadata versionMetadata = new ProjectVersionMetadata( );
  524. versionMetadata.setId( TEST_PROJECT_VERSION );
  525. MetadataFacet facet = new TestMetadataFacet( TEST_FACET_ID, "baz" );
  526. versionMetadata.addFacet( facet );
  527. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, versionMetadata );
  528. ArtifactMetadata artifactMetadata = createArtifact( );
  529. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifactMetadata );
  530. session.save( );
  531. tryAssert( ( ) -> {
  532. Collection<ArtifactMetadata> artifacts =
  533. getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  534. assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
  535. artifacts = getRepository( ).getArtifacts( session, TEST_REPO_ID );
  536. assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
  537. artifacts = getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_SHA1 );
  538. assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
  539. artifacts = getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_MD5 );
  540. assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
  541. artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, null, null );
  542. assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
  543. } );
  544. }
  545. }
  546. @Test
  547. public void testUpdateArtifactMetadataWithExistingFacetsFacetPropertyWasRemoved( )
  548. throws Exception
  549. {
  550. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  551. {
  552. ArtifactMetadata metadata = createArtifact( );
  553. Map<String, String> additionalProps = new HashMap<>( );
  554. additionalProps.put( "deleteKey", "deleteValue" );
  555. MetadataFacet facet = new TestMetadataFacet( TEST_FACET_ID, "baz", additionalProps );
  556. metadata.addFacet( facet );
  557. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
  558. tryAssert( ( ) -> {
  559. Collection<ArtifactMetadata> artifacts =
  560. getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  561. assertThat( artifacts ).isNotNull( ).isNotEmpty( ).hasSize( 1 );
  562. } );
  563. Collection<ArtifactMetadata> artifacts =
  564. getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  565. metadata = artifacts.iterator( ).next( );
  566. Collection<String> ids = metadata.getFacetIds( );
  567. assertThat( ids ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( TEST_FACET_ID );
  568. TestMetadataFacet testFacet = (TestMetadataFacet) metadata.getFacet( TEST_FACET_ID );
  569. Map<String, String> facetProperties = testFacet.toProperties( );
  570. assertEquals( "deleteValue", facetProperties.get( "deleteKey" ) );
  571. facetProperties.remove( "deleteKey" );
  572. TestMetadataFacet newTestFacet = new TestMetadataFacet( TEST_FACET_ID, testFacet.getValue( ), facetProperties );
  573. metadata.addFacet( newTestFacet );
  574. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
  575. session.save( );
  576. tryAssert( ( ) -> {
  577. Collection<ArtifactMetadata> artifacts1 = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  578. assertThat( artifacts1 ).isNotNull( ).isNotEmpty( ).hasSize( 1 );
  579. } );
  580. Collection<ArtifactMetadata> artifacts1 = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  581. metadata = artifacts.iterator( ).next( );
  582. ids = metadata.getFacetIds( );
  583. assertThat( ids ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( TEST_FACET_ID );
  584. testFacet = (TestMetadataFacet) metadata.getFacet( TEST_FACET_ID );
  585. Map<String, String> props = testFacet.toProperties( );
  586. assertThat( props ).isNotNull( ).doesNotContainKey( "deleteKey" );
  587. }
  588. }
  589. @Test
  590. public void testUpdateArtifactMetadataWithExistingFacets( )
  591. throws Exception
  592. {
  593. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  594. {
  595. ArtifactMetadata metadata = createArtifact( );
  596. MetadataFacet facet = new TestMetadataFacet( "baz" );
  597. metadata.addFacet( facet );
  598. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
  599. metadata = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  600. TEST_PROJECT, TEST_PROJECT_VERSION ).iterator( ).next( );
  601. assertEquals( Collections.singleton( TEST_FACET_ID ), metadata.getFacetIds( ) );
  602. metadata = createArtifact( );
  603. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
  604. metadata = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  605. TEST_PROJECT, TEST_PROJECT_VERSION ).iterator( ).next( );
  606. assertEquals( Collections.singleton( TEST_FACET_ID ), metadata.getFacetIds( ) );
  607. TestMetadataFacet testFacet = (TestMetadataFacet) metadata.getFacet( TEST_FACET_ID );
  608. assertEquals( "baz", testFacet.getValue( ) );
  609. }
  610. }
  611. @Test
  612. public void testUpdateArtifactMetadataWithNoExistingFacets( )
  613. throws Exception
  614. {
  615. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  616. {
  617. ArtifactMetadata metadata = createArtifact( );
  618. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
  619. tryAssert( ( ) -> {
  620. ArtifactMetadata metadata2 = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  621. TEST_PROJECT, TEST_PROJECT_VERSION ).iterator( ).next( );
  622. assertEquals( Collections.<String>emptyList( ), new ArrayList<String>( metadata2.getFacetIds( ) ) );
  623. } );
  624. metadata = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  625. TEST_PROJECT, TEST_PROJECT_VERSION ).iterator( ).next( );
  626. metadata = createArtifact( );
  627. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
  628. tryAssert( ( ) -> {
  629. ArtifactMetadata metadata3 = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  630. TEST_PROJECT, TEST_PROJECT_VERSION ).iterator( ).next( );
  631. assertEquals( Collections.<String>emptyList( ), new ArrayList<String>( metadata3.getFacetIds( ) ) );
  632. } );
  633. }
  634. }
  635. @Test
  636. public void testGetMetadataFacet( )
  637. throws Exception
  638. {
  639. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  640. {
  641. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
  642. TestMetadataFacet test =
  643. (TestMetadataFacet) getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
  644. assertEquals( new TestMetadataFacet( TEST_VALUE ), test );
  645. }
  646. }
  647. @Test
  648. public void testGetMetadataFacetByClass( )
  649. throws Exception
  650. {
  651. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  652. {
  653. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
  654. TestMetadataFacet test =
  655. (TestMetadataFacet) getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TestMetadataFacet.class, TEST_NAME );
  656. assertEquals( new TestMetadataFacet( TEST_VALUE ), test );
  657. }
  658. }
  659. @Test
  660. public void testGetMetadataFacetWhenEmpty( )
  661. throws Exception
  662. {
  663. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  664. {
  665. tryAssert( ( ) -> assertNull( getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) ) );
  666. }
  667. }
  668. @Test
  669. public void testGetMetadataFacetWhenUnknownName( )
  670. throws Exception
  671. {
  672. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  673. {
  674. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
  675. tryAssert( ( ) -> assertNull( getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, UNKNOWN ) ) );
  676. }
  677. }
  678. @Test
  679. public void testGetMetadataFacetWhenDefaultValue( )
  680. throws Exception
  681. {
  682. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  683. {
  684. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( null ) );
  685. tryAssert( ( ) -> {
  686. MetadataFacet metadataFacet = getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
  687. assertEquals( new TestMetadataFacet( TEST_METADATA_VALUE ), metadataFacet );
  688. } );
  689. }
  690. }
  691. @Test
  692. public void testGetMetadataFacetWhenUnknownFacetId( )
  693. throws Exception
  694. {
  695. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  696. {
  697. assertNull( getRepository( ).getMetadataFacet( session, TEST_REPO_ID, UNKNOWN, TEST_NAME ) );
  698. }
  699. }
  700. @Test
  701. public void testGetMetadataFacets( )
  702. throws Exception
  703. {
  704. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  705. {
  706. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
  707. assertEquals( Collections.singletonList( TEST_NAME ),
  708. getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID ) );
  709. }
  710. }
  711. @Test
  712. public void testGetMetadataFacetsStream( )
  713. throws Exception
  714. {
  715. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  716. {
  717. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
  718. }
  719. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  720. {
  721. tryAssert( ( ) -> {
  722. Stream<TestMetadataFacet> str = getRepository( ).getMetadataFacetStream( session, TEST_REPO_ID, TestMetadataFacet.class );
  723. assertNotNull( str );
  724. List<TestMetadataFacet> result = str.collect( Collectors.toList( ) );
  725. assertEquals( 1, result.size( ) );
  726. assertNotNull( result.get( 0 ) );
  727. assertEquals( TEST_NAME, result.get( 0 ).getName( ) );
  728. } );
  729. }
  730. }
  731. @Test
  732. public void testGetMetadataFacetsStreamWithLimit( )
  733. throws Exception
  734. {
  735. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  736. {
  737. for (int i = 0; i<500; i++)
  738. {
  739. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( TEST_FACET_ID, TEST_VALUE, TEST_NAME+"/"+String.format("%03d",i) ) );
  740. }
  741. }
  742. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  743. {
  744. session.refreshAndDiscard();
  745. tryAssert( ( ) -> {
  746. Stream<TestMetadataFacet> str = getRepository( ).getMetadataFacetStream( session, TEST_REPO_ID, TestMetadataFacet.class, new QueryParameter(0, 100));
  747. assertNotNull( str );
  748. List<TestMetadataFacet> result = str.collect( Collectors.toList( ) );
  749. assertEquals( 100, result.size( ) );
  750. assertNotNull( result.get( 0 ) );
  751. for (int i=0; i<10; i++) {
  752. assertEquals(TEST_NAME + "/" + String.format("%03d",i), result.get(i).getName());
  753. }
  754. }, 5, 500 );
  755. }
  756. }
  757. @Test
  758. public void testGetMetadataFacetsStreamWithOffset( )
  759. throws Exception
  760. {
  761. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  762. {
  763. for (int i = 0; i<100; i++)
  764. {
  765. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( TEST_FACET_ID, TEST_VALUE, TEST_NAME+"/"+String.format("%03d", i) ) );
  766. }
  767. }
  768. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  769. {
  770. session.refreshAndDiscard();
  771. tryAssert( ( ) -> {
  772. Stream<TestMetadataFacet> str = getRepository( ).getMetadataFacetStream( session, TEST_REPO_ID, TestMetadataFacet.class, new QueryParameter(5, 10));
  773. assertNotNull( str );
  774. List<TestMetadataFacet> result = str.collect( Collectors.toList( ) );
  775. assertEquals( 10, result.size( ) );
  776. assertNotNull( result.get( 0 ) );
  777. for (int i=0; i<10; i++) {
  778. assertEquals(TEST_NAME + "/" + String.format("%03d",i+5), result.get(i).getName());
  779. }
  780. }, 5, 500 );
  781. }
  782. }
  783. @Test
  784. public void testGetArtifactsByDateRangeStreamLowerAndUpperBound( )
  785. throws Exception
  786. {
  787. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  788. {
  789. final ArtifactMetadata artifact1 = createArtifact( );
  790. artifact1.setWhenGathered(ZonedDateTime.now().minusDays(1));
  791. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
  792. ZonedDateTime gatheredNow = ZonedDateTime.now();
  793. final ArtifactMetadata artifact2 = createArtifact( );
  794. String artifact2Id = artifact2.getId() + "-2";
  795. artifact2.setId(artifact2Id);
  796. artifact2.setVersion(TEST_PROJECT_VERSION+"-2");
  797. artifact2.setWhenGathered(gatheredNow);
  798. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
  799. final ArtifactMetadata artifact3 = createArtifact();
  800. String artifact3Id = artifact3.getId() + "-3";
  801. artifact3.setId(artifact3Id);
  802. artifact3.setVersion(TEST_PROJECT_VERSION+"-3");
  803. artifact3.setWhenGathered(gatheredNow.minusSeconds(5));
  804. final ArtifactMetadata artifact4 = createArtifact();
  805. artifact4.setId(artifact4.getId()+"-4");
  806. artifact4.setVersion(TEST_PROJECT_VERSION+"-4");
  807. artifact4.setWhenGathered(gatheredNow.plusDays(1));
  808. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact3 );
  809. session.save( );
  810. ZonedDateTime lower = artifact2.getWhenGathered().minusSeconds(10);
  811. ZonedDateTime upper = artifact2.getWhenGathered().plusSeconds(10);
  812. tryAssert( ( ) -> {
  813. Stream<ArtifactMetadata> stream = getRepository().getArtifactByDateRangeStream(session, TEST_REPO_ID, lower, upper, new QueryParameter());
  814. assertNotNull(stream);
  815. List<ArtifactMetadata> artifacts = stream.collect(Collectors.toList());
  816. assertEquals(2, artifacts.size());
  817. assertEquals(artifact3Id, artifacts.get(0).getId());
  818. assertEquals(artifact2Id, artifacts.get(1).getId());
  819. } );
  820. }
  821. }
  822. @Test
  823. public void testGetMetadataFacetsWhenEmpty( )
  824. throws Exception
  825. {
  826. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  827. {
  828. tryAssert( ( ) -> {
  829. List<String> facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  830. assertTrue( facets.isEmpty( ) );
  831. } );
  832. }
  833. }
  834. @Test
  835. public void testRemoveFacets( )
  836. throws Exception
  837. {
  838. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  839. {
  840. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
  841. List<String> facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  842. assertFalse( facets.isEmpty( ) );
  843. getRepository( ).removeMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  844. facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  845. assertTrue( facets.isEmpty( ) );
  846. }
  847. }
  848. @Test
  849. public void testRemoveFacetsWhenEmpty( )
  850. throws Exception
  851. {
  852. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  853. {
  854. List<String> facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  855. assertTrue( facets.isEmpty( ) );
  856. getRepository( ).removeMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  857. tryAssert( ( ) -> {
  858. List<String> facets1 = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  859. assertTrue( facets1.isEmpty( ) );
  860. } );
  861. }
  862. }
  863. @Test
  864. public void testRemoveFacetsWhenUnknown( )
  865. throws Exception
  866. {
  867. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  868. {
  869. // testing no exception
  870. getRepository( ).removeMetadataFacets( session, TEST_REPO_ID, UNKNOWN );
  871. }
  872. }
  873. @Test
  874. public void testRemoveFacetWhenUnknown( )
  875. throws Exception
  876. {
  877. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  878. {
  879. // testing no exception
  880. getRepository( ).removeMetadataFacet( session, TEST_REPO_ID, UNKNOWN, TEST_NAME );
  881. }
  882. }
  883. @Test
  884. public void testRemoveFacet( )
  885. throws Exception
  886. {
  887. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  888. {
  889. TestMetadataFacet metadataFacet = new TestMetadataFacet( TEST_VALUE );
  890. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, metadataFacet );
  891. assertEquals( metadataFacet, getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
  892. List<String> facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  893. assertFalse( facets.isEmpty( ) );
  894. getRepository( ).removeMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
  895. assertNull( getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
  896. facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  897. assertTrue( facets.isEmpty( ) );
  898. }
  899. }
  900. @Test
  901. public void testRemoveFacetWhenEmpty( )
  902. throws Exception
  903. {
  904. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  905. {
  906. tryAssert( ( ) -> {
  907. List<String> facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  908. assertThat( facets ).isNotNull( ).isEmpty( );
  909. assertThat( getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) ).isNull( );
  910. } );
  911. getRepository( ).removeMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
  912. tryAssert( ( ) -> {
  913. List<String> facets2 = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, TEST_FACET_ID );
  914. assertThat( facets2 ).isNotNull( ).isEmpty( );
  915. assertThat( getRepository( ).getMetadataFacet( session, TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) ).isNull( );
  916. } );
  917. }
  918. }
  919. @Test
  920. public void hasMetadataFacetStart( )
  921. throws Exception
  922. {
  923. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  924. {
  925. assertFalse( getRepository( ).hasMetadataFacet( session, TEST_REPO_ID, KindOfRepositoryStatistics.class.getName( ) ) );
  926. }
  927. }
  928. @Test
  929. public void hasMetadataFacet( )
  930. throws Exception
  931. {
  932. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  933. {
  934. assertFalse( getRepository( ).hasMetadataFacet( session, TEST_REPO_ID, KindOfRepositoryStatistics.class.getName( ) ) );
  935. Calendar cal = Calendar.getInstance( );
  936. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new KindOfRepositoryStatistics( "first", cal.getTime( ) ) );
  937. assertTrue( getRepository( ).hasMetadataFacet( session, TEST_REPO_ID, KindOfRepositoryStatistics.class.getName( ) ) );
  938. cal.add( Calendar.MINUTE, 2 );
  939. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new KindOfRepositoryStatistics( "second", cal.getTime( ) ) );
  940. cal.add( Calendar.MINUTE, 2 );
  941. getRepository( ).addMetadataFacet( session, TEST_REPO_ID, new KindOfRepositoryStatistics( "third", cal.getTime( ) ) );
  942. List<String> facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, KindOfRepositoryStatistics.class.getName( ) );
  943. assertThat( facets ).isNotNull( ).isNotEmpty( ).hasSize( 3 );
  944. assertTrue( getRepository( ).hasMetadataFacet( session, TEST_REPO_ID, KindOfRepositoryStatistics.class.getName( ) ) );
  945. getRepository( ).removeMetadataFacets( session, TEST_REPO_ID, KindOfRepositoryStatistics.class.getName( ) );
  946. assertFalse( getRepository( ).hasMetadataFacet( session, TEST_REPO_ID, KindOfRepositoryStatistics.class.getName( ) ) );
  947. facets = getRepository( ).getMetadataFacets( session, TEST_REPO_ID, KindOfRepositoryStatistics.class.getName( ) );
  948. assertThat( facets ).isNotNull( ).isEmpty( );
  949. }
  950. }
  951. @Test
  952. public void testGetArtifacts( )
  953. throws Exception
  954. {
  955. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  956. {
  957. ArtifactMetadata artifact1 = createArtifact( );
  958. ArtifactMetadata artifact2 = createArtifact( "pom" );
  959. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
  960. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
  961. tryAssert( ( ) -> {
  962. Collection<ArtifactMetadata> artifacts =
  963. getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  964. ArrayList<ArtifactMetadata> actual = new ArrayList<>( artifacts );
  965. Collections.sort( actual, ( o1, o2 ) -> o1.getId( ).compareTo( o2.getId( ) ) );
  966. assertEquals( Arrays.asList( artifact1, artifact2 ), actual );
  967. } );
  968. }
  969. }
  970. @Test
  971. public void testGetArtifactStream( )
  972. throws Exception
  973. {
  974. ArtifactMetadata artifact1 = createArtifact( );
  975. ArtifactMetadata artifact2 = createArtifact( "pom" );
  976. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  977. {
  978. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
  979. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
  980. }
  981. try ( RepositorySession session = getSessionFactory( ).createSession( ) ) {
  982. tryAssert( ( ) -> {
  983. Stream<ArtifactMetadata> artifacts =
  984. getRepository( ).getArtifactStream( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  985. assertNotNull( artifacts );
  986. List<ArtifactMetadata> actual = artifacts
  987. .sorted( ( o1, o2 ) -> o1.getId( ).compareTo( o2.getId( ) ) ).collect( Collectors.toList( ) );
  988. assertEquals( 2, actual.size( ) );
  989. assertEquals( Arrays.asList( artifact1, artifact2 ), actual );
  990. } );
  991. }
  992. }
  993. @Test
  994. public void testGetArtifactVersions( )
  995. throws Exception
  996. {
  997. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  998. {
  999. ArtifactMetadata artifact1 = createArtifact( );
  1000. String version1 = "1.0-20091212.012345-1";
  1001. artifact1.setId( artifact1.getProject( ) + "-" + version1 + ".jar" );
  1002. artifact1.setVersion( version1 );
  1003. ArtifactMetadata artifact2 = createArtifact( );
  1004. String version2 = "1.0-20091212.123456-2";
  1005. artifact2.setId( artifact2.getProject( ) + "-" + version2 + ".jar" );
  1006. artifact2.setVersion( version2 );
  1007. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
  1008. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
  1009. tryAssert( ( ) -> {
  1010. Collection<String> versions =
  1011. getRepository( ).getArtifactVersions( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  1012. assertThat( versions ).isNotNull( ).isNotEmpty( ).contains( version1, version2 );
  1013. } );
  1014. }
  1015. }
  1016. @Test
  1017. public void testGetArtifactVersionsMultipleArtifactsSingleVersion( )
  1018. throws Exception
  1019. {
  1020. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1021. {
  1022. ArtifactMetadata artifact1 = createArtifact( );
  1023. artifact1.setId( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + ".jar" );
  1024. ArtifactMetadata artifact2 = createArtifact( );
  1025. artifact2.setId( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + "-sources.jar" );
  1026. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
  1027. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
  1028. tryAssert( ( ) -> {
  1029. Collection<String> versions =
  1030. getRepository( ).getArtifactVersions( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  1031. assertThat( versions ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).containsExactly( TEST_PROJECT_VERSION );
  1032. } );
  1033. }
  1034. }
  1035. @Test
  1036. public void testGetArtifactsByDateRangeOpen( )
  1037. throws Exception
  1038. {
  1039. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1040. {
  1041. ArtifactMetadata artifact = createArtifact( );
  1042. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1043. session.save( );
  1044. tryAssert( ( ) -> {
  1045. List<ArtifactMetadata> artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, null, null );
  1046. assertEquals( Collections.singletonList( artifact ), artifacts );
  1047. } );
  1048. }
  1049. }
  1050. @Test
  1051. public void testGetArtifactsByDateRangeSparseNamespace( )
  1052. throws Exception
  1053. {
  1054. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1055. {
  1056. String namespace = "org.apache.archiva";
  1057. ArtifactMetadata artifact = createArtifact( );
  1058. artifact.setNamespace( namespace );
  1059. getRepository( ).updateArtifact( session, TEST_REPO_ID, namespace, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1060. session.save( );
  1061. tryAssert( ( ) -> {
  1062. List<ArtifactMetadata> artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, null, null );
  1063. tryAssert( ( ) -> assertEquals( Collections.singletonList( artifact ), artifacts ) );
  1064. } );
  1065. }
  1066. }
  1067. @Test
  1068. public void testGetArtifactsByDateRangeLowerBound( )
  1069. throws Exception
  1070. {
  1071. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1072. {
  1073. ArtifactMetadata artifact = createArtifact( );
  1074. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1075. session.save( );
  1076. ZonedDateTime date = ZonedDateTime.from(artifact.getWhenGathered().toInstant().atZone(ZoneId.systemDefault())).minusSeconds(10);
  1077. tryAssert( ( ) -> {
  1078. List<ArtifactMetadata> artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, date, null );
  1079. assertEquals( Collections.singletonList( artifact ), artifacts );
  1080. } );
  1081. }
  1082. }
  1083. @Test
  1084. public void testGetArtifactsByDateRangeLowerBoundOutOfRange( )
  1085. throws Exception
  1086. {
  1087. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1088. {
  1089. ArtifactMetadata artifact = createArtifact( );
  1090. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1091. ZonedDateTime date = ZonedDateTime.from(artifact.getWhenGathered().toInstant().atZone(ZoneId.systemDefault())).plusSeconds(10);
  1092. tryAssert( ( ) -> {
  1093. List<ArtifactMetadata> artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, date, null );
  1094. assertThat( artifacts ).isNotNull( ).isEmpty( );
  1095. } );
  1096. }
  1097. }
  1098. @Test
  1099. public void testGetArtifactsByDateRangeLowerAndUpperBound( )
  1100. throws Exception
  1101. {
  1102. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1103. {
  1104. ArtifactMetadata artifact = createArtifact( );
  1105. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1106. session.save( );
  1107. ZonedDateTime lower = ZonedDateTime.from(artifact.getWhenGathered().toInstant().atZone(ZoneId.systemDefault())).minusSeconds(10);
  1108. ZonedDateTime upper = ZonedDateTime.from(artifact.getWhenGathered().toInstant().atZone(ZoneId.systemDefault())).plusSeconds(10);
  1109. tryAssert( ( ) -> {
  1110. List<ArtifactMetadata> artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, lower, upper );
  1111. assertEquals( Collections.singletonList( artifact ), artifacts );
  1112. } );
  1113. }
  1114. }
  1115. @Test
  1116. public void testGetArtifactsByDateRangeUpperBound( )
  1117. throws Exception
  1118. {
  1119. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1120. {
  1121. ArtifactMetadata artifact = createArtifact( );
  1122. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1123. session.save( );
  1124. ZonedDateTime upper = ZonedDateTime.from(artifact.getWhenGathered().toInstant().atZone(ZoneId.systemDefault())).plusSeconds(10);
  1125. tryAssert( ( ) -> {
  1126. List<ArtifactMetadata> artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, null, upper );
  1127. assertEquals( Collections.singletonList( artifact ), artifacts );
  1128. } );
  1129. }
  1130. }
  1131. @Test
  1132. public void testGetArtifactsByDateRangeUpperBoundOutOfRange( )
  1133. throws Exception
  1134. {
  1135. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1136. {
  1137. ArtifactMetadata artifact = createArtifact( );
  1138. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1139. session.save( );
  1140. ZonedDateTime upper = ZonedDateTime.from(artifact.getWhenGathered().toInstant().atZone(ZoneId.systemDefault())).minusSeconds(10);
  1141. tryAssert( ( ) -> {
  1142. List<ArtifactMetadata> artifacts = getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, null, upper );
  1143. assertThat( artifacts ).isNotNull( ).isEmpty( );
  1144. } );
  1145. }
  1146. }
  1147. @Test
  1148. public void testGetArtifactsByRepoId( )
  1149. throws Exception
  1150. {
  1151. ArtifactMetadata artifact;
  1152. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1153. {
  1154. artifact = createArtifact( );
  1155. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1156. session.save( );
  1157. }
  1158. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1159. {
  1160. tryAssert( ( ) -> {
  1161. session.refreshAndDiscard( );
  1162. List<ArtifactMetadata> artifacts = getRepository( ).getArtifacts( session, TEST_REPO_ID );
  1163. assertEquals( Collections.singletonList( artifact ), artifacts );
  1164. }
  1165. );
  1166. }
  1167. }
  1168. @Test
  1169. public void testGetArtifactsByRepoIdMultipleCopies( )
  1170. throws Exception
  1171. {
  1172. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1173. {
  1174. ArtifactMetadata artifact = createArtifact( );
  1175. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1176. ArtifactMetadata secondArtifact = createArtifact( );
  1177. secondArtifact.setRepositoryId( OTHER_REPO_ID );
  1178. getRepository( ).updateArtifact( session, OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
  1179. session.save( );
  1180. // test it restricts to the appropriate repository
  1181. tryAssert( ( ) -> {
  1182. List<ArtifactMetadata> artifact1 = getRepository( ).getArtifacts( session, TEST_REPO_ID );
  1183. assertEquals( Collections.singletonList( artifact ), artifact1 );
  1184. assertEquals( Collections.singletonList( secondArtifact ), getRepository( ).getArtifacts( session, OTHER_REPO_ID ) );
  1185. });
  1186. }
  1187. }
  1188. @Test
  1189. public void testGetArtifactsByDateRangeMultipleCopies( )
  1190. throws Exception
  1191. {
  1192. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1193. {
  1194. ArtifactMetadata artifact = createArtifact( );
  1195. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1196. ArtifactMetadata secondArtifact = createArtifact( );
  1197. secondArtifact.setRepositoryId( OTHER_REPO_ID );
  1198. getRepository( ).updateArtifact( session, OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
  1199. session.save( );
  1200. tryAssert( ( ) -> {
  1201. // test it restricts to the appropriate repository
  1202. assertEquals( Collections.singletonList( artifact ),
  1203. getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, null, null ) );
  1204. } );
  1205. tryAssert( ( ) -> {
  1206. assertEquals( Collections.singletonList( secondArtifact ),
  1207. getRepository( ).getArtifactsByDateRange( session, OTHER_REPO_ID, null, null ) );
  1208. } );
  1209. }
  1210. }
  1211. @Test
  1212. public void testGetArtifactsByChecksumMultipleCopies( )
  1213. throws Exception
  1214. {
  1215. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1216. {
  1217. ArtifactMetadata artifact = createArtifact( );
  1218. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1219. ArtifactMetadata secondArtifact = createArtifact( );
  1220. secondArtifact.setRepositoryId( OTHER_REPO_ID );
  1221. getRepository( ).updateArtifact( session, OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
  1222. session.save( );
  1223. tryAssert( ( ) -> {
  1224. // test it restricts to the appropriate repository
  1225. assertEquals( Collections.singletonList( artifact ),
  1226. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_SHA1 ) ) );
  1227. } );
  1228. tryAssert( ( ) -> {
  1229. assertEquals( Collections.singletonList( secondArtifact ), new ArrayList<>(
  1230. getRepository( ).getArtifactsByChecksum( session, OTHER_REPO_ID, TEST_SHA1 ) ) );
  1231. } );
  1232. tryAssert( ( ) -> {
  1233. assertEquals( Collections.singletonList( artifact ),
  1234. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_MD5 ) ) );
  1235. } );
  1236. tryAssert( ( ) -> {
  1237. assertEquals( Collections.singletonList( secondArtifact ),
  1238. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, OTHER_REPO_ID, TEST_MD5 ) ) );
  1239. } );
  1240. }
  1241. }
  1242. @Test
  1243. public void testGetNamespacesWithSparseDepth( )
  1244. throws Exception
  1245. {
  1246. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1247. {
  1248. getRepository( ).updateNamespace( session, TEST_REPO_ID, "org.apache.maven.shared" );
  1249. tryAssert( ( ) -> {
  1250. Collection<String> namespaces = getRepository( ).getRootNamespaces( session, TEST_REPO_ID );
  1251. assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "org" );
  1252. namespaces = getRepository( ).getChildNamespaces( session, TEST_REPO_ID, "org" );
  1253. assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "apache" );
  1254. namespaces = getRepository( ).getChildNamespaces( session, TEST_REPO_ID, "org.apache" );
  1255. assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "maven" );
  1256. namespaces = getRepository( ).getChildNamespaces( session, TEST_REPO_ID, "org.apache.maven" );
  1257. assertThat( namespaces ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "shared" );
  1258. } );
  1259. }
  1260. }
  1261. @Test
  1262. public void testGetNamespacesWithProjectsPresent( )
  1263. throws Exception
  1264. {
  1265. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1266. {
  1267. String namespace = "org.apache.maven.shared";
  1268. getRepository( ).updateNamespace( session, TEST_REPO_ID, namespace );
  1269. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  1270. metadata.setId( TEST_PROJECT_VERSION );
  1271. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, namespace, TEST_PROJECT, metadata );
  1272. Collection<String> namespaces = getRepository( ).getChildNamespaces( session, TEST_REPO_ID, namespace );
  1273. assertThat( namespaces ).isNotNull( ).isEmpty( );
  1274. }
  1275. }
  1276. @Test
  1277. public void testGetProjectsWithOtherNamespacesPresent( )
  1278. throws Exception
  1279. {
  1280. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1281. {
  1282. ProjectMetadata projectMetadata = new ProjectMetadata( );
  1283. projectMetadata.setId( TEST_PROJECT );
  1284. projectMetadata.setNamespace( "org.apache.maven" );
  1285. getRepository( ).updateProject( session, TEST_REPO_ID, projectMetadata );
  1286. getRepository( ).updateNamespace( session, TEST_REPO_ID, "org.apache.maven.shared" );
  1287. Collection<String> projects = getRepository( ).getProjects( session, TEST_REPO_ID, "org.apache.maven" );
  1288. assertThat( projects ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( TEST_PROJECT );
  1289. }
  1290. }
  1291. @Test
  1292. public void testGetProjectVersionsWithOtherNamespacesPresent( )
  1293. throws Exception
  1294. {
  1295. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1296. {
  1297. // an unusual case but technically possible where a project namespace matches another project's name
  1298. ProjectVersionMetadata versionMetadata = new ProjectVersionMetadata( );
  1299. versionMetadata.setId( TEST_PROJECT_VERSION );
  1300. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, "org.apache.maven", TEST_PROJECT, versionMetadata );
  1301. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, "org.apache.maven." + TEST_PROJECT,
  1302. "other-project", versionMetadata );
  1303. Collection<String> versions =
  1304. getRepository( ).getProjectVersions( session, TEST_REPO_ID, "org.apache.maven." + TEST_PROJECT, "other-project" );
  1305. assertThat( versions ).isNotNull( ).isNotEmpty( ).contains( TEST_PROJECT_VERSION );
  1306. versions = getRepository( ).getProjectVersions( session, TEST_REPO_ID, "org.apache.maven", TEST_PROJECT );
  1307. assertThat( versions ).isNotNull( ).isNotEmpty( ).contains( TEST_PROJECT_VERSION );
  1308. }
  1309. }
  1310. @Test
  1311. public void testGetArtifactsByChecksumSingleResultSha256( )
  1312. throws Exception
  1313. {
  1314. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1315. {
  1316. ArtifactMetadata artifact = createArtifact( );
  1317. artifact.setChecksum( ChecksumAlgorithm.SHA256, TEST_SHA256);
  1318. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1319. session.save( );
  1320. tryAssert( () ->
  1321. assertEquals( Collections.singletonList( artifact ),
  1322. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_SHA256 ) ))
  1323. );
  1324. }
  1325. }
  1326. @Test
  1327. public void testGetArtifactsByChecksumSingleResultMd5( )
  1328. throws Exception
  1329. {
  1330. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1331. {
  1332. ArtifactMetadata artifact = createArtifact( );
  1333. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1334. session.save( );
  1335. assertEquals( Collections.singletonList( artifact ),
  1336. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_MD5 ) ) );
  1337. }
  1338. }
  1339. @Test
  1340. public void testGetArtifactsByChecksumSingleResultSha1( )
  1341. throws Exception
  1342. {
  1343. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1344. {
  1345. ArtifactMetadata artifact = createArtifact( );
  1346. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1347. session.save( );
  1348. assertEquals( Collections.singletonList( artifact ),
  1349. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_SHA1 ) ) );
  1350. }
  1351. }
  1352. @Test
  1353. public void testGetArtifactsByChecksumDeepNamespace( )
  1354. throws Exception
  1355. {
  1356. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1357. {
  1358. ArtifactMetadata artifact = createArtifact( );
  1359. String namespace = "multi.level.ns";
  1360. artifact.setNamespace( namespace );
  1361. getRepository( ).updateArtifact( session, TEST_REPO_ID, namespace, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1362. session.save( );
  1363. tryAssert( ( ) ->
  1364. {
  1365. assertEquals( Collections.singletonList( artifact ),
  1366. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_SHA1 ) ) );
  1367. assertEquals( Collections.singletonList( artifact ),
  1368. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_MD5 ) ) );
  1369. });
  1370. }
  1371. }
  1372. @Test
  1373. public void testGetArtifactsByChecksumMultipleResult( )
  1374. throws Exception
  1375. {
  1376. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1377. {
  1378. ArtifactMetadata artifact1 = createArtifact( );
  1379. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
  1380. String newProjectId = "another-project";
  1381. ArtifactMetadata artifact2 = createArtifact( );
  1382. artifact2.setProject( newProjectId );
  1383. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, newProjectId, TEST_PROJECT_VERSION, artifact2 );
  1384. session.save( );
  1385. tryAssert( ( ) -> {
  1386. List<ArtifactMetadata> artifacts =
  1387. new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_SHA1 ) );
  1388. Collections.sort( artifacts, new ArtifactMetadataComparator( ) );
  1389. assertEquals( Arrays.asList( artifact2, artifact1 ), artifacts );
  1390. } );
  1391. tryAssert( ( ) -> {
  1392. ArrayList<ArtifactMetadata> artifacts = new ArrayList<>( getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, TEST_MD5 ) );
  1393. Collections.sort( artifacts, new ArtifactMetadataComparator( ) );
  1394. assertEquals( Arrays.asList( artifact2, artifact1 ), artifacts );
  1395. } );
  1396. }
  1397. }
  1398. @Test
  1399. public void testGetArtifactsByChecksumNoResult( )
  1400. throws Exception
  1401. {
  1402. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1403. {
  1404. ArtifactMetadata artifact = createArtifact( );
  1405. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1406. tryAssert( ( ) -> {
  1407. Collection<ArtifactMetadata> artifactsByChecksum =
  1408. getRepository( ).getArtifactsByChecksum( session, TEST_REPO_ID, "not checksum" );
  1409. assertThat( artifactsByChecksum ).isNotNull( ).isEmpty( );
  1410. } );
  1411. }
  1412. }
  1413. @Test
  1414. public void testGetArtifactsByProjectVersionMetadata( )
  1415. throws Exception
  1416. {
  1417. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1418. {
  1419. createArtifactWithGenericMetadataFacet( session, 10 );
  1420. tryAssert( ( ) -> {
  1421. Collection<ArtifactMetadata> artifactsByMetadata =
  1422. getRepository( ).getArtifactsByProjectVersionFacet( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, TEST_REPO_ID );
  1423. assertThat( artifactsByMetadata ).hasSize( 1 );
  1424. ArtifactMetadata artifactMetadata = artifactsByMetadata.iterator( ).next( );
  1425. assertThat( artifactMetadata.getId( ) ).isEqualTo( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + ".jar" );
  1426. assertThat( artifactMetadata.getSha1( ) ).isEqualTo( TEST_SHA1 );
  1427. assertThat( artifactMetadata.getRepositoryId( ) ).isEqualTo( TEST_REPO_ID );
  1428. } );
  1429. }
  1430. }
  1431. @Test
  1432. public void testGetArtifactsByProjectVersionMetadataNoRepository( )
  1433. throws Exception
  1434. {
  1435. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1436. {
  1437. createArtifactWithGenericMetadataFacet( session );
  1438. tryAssert( ( ) -> {
  1439. Collection<ArtifactMetadata> artifactsByMetadata =
  1440. getRepository( ).getArtifactsByProjectVersionFacet( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
  1441. assertThat( artifactsByMetadata ).hasSize( 1 );
  1442. assertThat( artifactsByMetadata.iterator( ).next( ).getRepositoryId( ) ).isNotNull( ).isNotEmpty( );
  1443. } );
  1444. }
  1445. }
  1446. @Test
  1447. public void testGetArtifactsByProjectVersionMetadataAllRepositories( )
  1448. throws Exception
  1449. {
  1450. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1451. {
  1452. createArtifactWithGenericMetadataFacet( session );
  1453. tryAssert( ( ) -> {
  1454. Collection<ArtifactMetadata> artifactsByMetadata =
  1455. getRepository( ).getArtifactsByProjectVersionFacet( session, TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
  1456. assertThat( artifactsByMetadata ).hasSize( 1 );
  1457. } );
  1458. }
  1459. }
  1460. @Test
  1461. public void testGetArtifactsByMetadataAllRepositories( )
  1462. throws Exception
  1463. {
  1464. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1465. {
  1466. createArtifactWithMavenArtifactFacet( session );
  1467. tryAssert( ( ) -> {
  1468. Collection<ArtifactMetadata> artifactsByMetadata =
  1469. getRepository( ).getArtifactsByAttribute( session, "foo", TEST_METADATA_VALUE, null );
  1470. assertThat( artifactsByMetadata ).hasSize( 1 );
  1471. ArtifactMetadata artifactMetadata = artifactsByMetadata.iterator( ).next( );
  1472. assertThat( artifactMetadata.getId( ) ).isEqualTo( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + ".jar" );
  1473. assertThat( artifactMetadata.getSha1( ) ).isEqualTo( TEST_SHA1 );
  1474. assertThat( artifactMetadata.getRepositoryId( ) ).isEqualTo( TEST_REPO_ID );
  1475. MetadataFacet facet = artifactMetadata.getFacet( TEST_FACET_ID );
  1476. assertThat( facet ).isNotNull( );
  1477. assertThat( facet.toProperties( ).get("foo").equals(TEST_METADATA_VALUE) );
  1478. } );
  1479. }
  1480. }
  1481. @Test
  1482. public void testGetArtifactsByPropertySingleResult( )
  1483. throws Exception
  1484. {
  1485. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1486. {
  1487. createArtifactWithData( session );
  1488. // only works on JCR implementation
  1489. // Collection<ArtifactMetadata> artifactsByProperty = getRepository().getArtifactsByProjectVersionAttribute( "org.name", TEST_ORGANIZATION.getName(), TEST_REPO_ID );
  1490. tryAssert( ( ) -> {
  1491. Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).getArtifactsByProjectVersionAttribute( session, "url", TEST_URL, TEST_REPO_ID );
  1492. assertThat( artifactsByProperty ).hasSize( 1 );
  1493. ArtifactMetadata artifactMetadata = artifactsByProperty.iterator( ).next( );
  1494. assertThat( artifactMetadata.getId( ) ).isEqualTo( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + ".jar" );
  1495. assertThat( artifactMetadata.getSha1( ) ).isEqualTo( TEST_SHA1 );
  1496. assertThat( artifactMetadata.getRepositoryId( ) ).isEqualTo( TEST_REPO_ID );
  1497. } );
  1498. }
  1499. }
  1500. @Test
  1501. public void testDeleteRepository( )
  1502. throws Exception
  1503. {
  1504. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1505. {
  1506. getRepository( ).updateNamespace( session, TEST_REPO_ID, TEST_NAMESPACE );
  1507. ProjectMetadata project1 = new ProjectMetadata( );
  1508. project1.setNamespace( TEST_NAMESPACE );
  1509. project1.setId( "project1" );
  1510. getRepository( ).updateProject( session, TEST_REPO_ID, project1 );
  1511. ProjectMetadata project2 = new ProjectMetadata( );
  1512. project2.setNamespace( TEST_NAMESPACE );
  1513. project2.setId( "project2" );
  1514. getRepository( ).updateProject( session, TEST_REPO_ID, project2 );
  1515. ArtifactMetadata artifact1 = createArtifact( );
  1516. artifact1.setProject( "project1" );
  1517. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, "project1", TEST_PROJECT_VERSION, artifact1 );
  1518. ArtifactMetadata artifact2 = createArtifact( );
  1519. artifact2.setProject( "project2" );
  1520. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, "project2", TEST_PROJECT_VERSION, artifact2 );
  1521. session.save( );
  1522. List<ArtifactMetadata> expected = Arrays.asList( artifact1, artifact2 );
  1523. Collections.sort( expected, new ArtifactMetadataComparator( ) );
  1524. tryAssert( ( ) -> {
  1525. List<ArtifactMetadata> actual =
  1526. new ArrayList<>( getRepository( ).getArtifactsByDateRange( session, TEST_REPO_ID, null, null ) );
  1527. Collections.sort( actual, new ArtifactMetadataComparator( ) );
  1528. assertEquals( expected, actual );
  1529. } );
  1530. getRepository( ).removeRepository( session, TEST_REPO_ID );
  1531. tryAssert( ( ) -> {
  1532. assertTrue( getRepository( ).getArtifacts( session, TEST_REPO_ID ).isEmpty( ) );
  1533. assertTrue( getRepository( ).getRootNamespaces( session, TEST_REPO_ID ).isEmpty( ) );
  1534. } );
  1535. }
  1536. }
  1537. @Test
  1538. public void testDeleteArtifact( )
  1539. throws Exception
  1540. {
  1541. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1542. {
  1543. ArtifactMetadata artifact = createArtifact( );
  1544. artifact.addFacet( new TestMetadataFacet( "value" ) );
  1545. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1546. assertThat( getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  1547. TEST_PROJECT, TEST_PROJECT_VERSION ) ).containsExactly( artifact );
  1548. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION_2_0, artifact );
  1549. Collection<String> versions = getRepository( ).getProjectVersions( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  1550. log.info( "versions {}", versions );
  1551. assertThat( versions ).isNotNull( ).isNotEmpty( ).hasSize( 2 ).contains( "1.0", "2.0" );
  1552. getRepository( ).removeArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact.getId( ) );
  1553. versions = getRepository( ).getProjectVersions( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  1554. log.info( "versions {}", versions );
  1555. assertThat( versions ).isNotNull( ).isNotEmpty( ).hasSize( 1 ).contains( "2.0" );
  1556. assertThat( getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  1557. TEST_PROJECT, TEST_PROJECT_VERSION ) ).isNotNull( ).isEmpty( );
  1558. assertThat( getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE,
  1559. TEST_PROJECT, TEST_PROJECT_VERSION_2_0 ) ).isNotEmpty( ).hasSize( 1 );
  1560. }
  1561. }
  1562. @Test
  1563. public void deleteArtifact( )
  1564. throws Exception
  1565. {
  1566. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1567. {
  1568. ArtifactMetadata artifact = createArtifact( );
  1569. artifact.addFacet( new TestMetadataFacet( "value" ) );
  1570. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1571. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1572. tryAssert( ( ) -> {
  1573. Collection<ArtifactMetadata> artifacts =
  1574. getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  1575. assertEquals( Collections.singletonList( artifact ), new ArrayList<>( artifacts ) );
  1576. } );
  1577. getRepository( ).removeArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact.getId( ) );
  1578. tryAssert( ( ) -> {
  1579. Collection<ArtifactMetadata> artifacts = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  1580. assertThat( artifacts ).isNotNull( ).isEmpty( );
  1581. } );
  1582. }
  1583. }
  1584. @Test
  1585. public void deleteVersion( )
  1586. throws Exception
  1587. {
  1588. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1589. {
  1590. ArtifactMetadata artifact = createArtifact( );
  1591. artifact.addFacet( new TestMetadataFacet( "value" ) );
  1592. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1593. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1594. tryAssert( ( ) -> {
  1595. Collection<String> versions = getRepository( ).getProjectVersions( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  1596. assertThat( versions ).isNotNull( ).isNotEmpty( ).hasSize( 1 );
  1597. } );
  1598. getRepository( ).removeProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  1599. tryAssert( ( ) -> {
  1600. Collection<String> versions1 = getRepository( ).getProjectVersions( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  1601. assertThat( versions1 ).isNotNull( ).isEmpty( );
  1602. } );
  1603. }
  1604. }
  1605. @Test
  1606. public void deleteProject( )
  1607. throws Exception
  1608. {
  1609. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1610. {
  1611. ArtifactMetadata artifact = createArtifact( );
  1612. artifact.addFacet( new TestMetadataFacet( "value" ) );
  1613. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1614. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1615. assertEquals( 1, getRepository( ).getProjectVersions( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ).size( ) );
  1616. getRepository( ).removeProject( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  1617. Collection<String> versions = getRepository( ).getProjectVersions( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
  1618. assertThat( versions ).isNotNull( ).isEmpty( );
  1619. }
  1620. }
  1621. @Test
  1622. public void deleteSnapshotVersion( )
  1623. throws Exception
  1624. {
  1625. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1626. {
  1627. ArtifactMetadata artifactOne = createArtifact( );
  1628. artifactOne.setVersion( "2.0-20120618.214127-1" );
  1629. artifactOne.setProjectVersion( "2.0-SNAPSHOT" );
  1630. artifactOne.addFacet( new TestMetadataFacet( "value" ) );
  1631. artifactOne.setId( TEST_PROJECT + "-" + "2.0-20120618.214127-1" + "." + "jar" );
  1632. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT", artifactOne );
  1633. ArtifactMetadata artifactTwo = createArtifact( );
  1634. artifactTwo.setVersion( "2.0-20120618.214135-2" );
  1635. artifactTwo.setProjectVersion( "2.0-SNAPSHOT" );
  1636. artifactTwo.addFacet( new TestMetadataFacet( "value" ) );
  1637. artifactTwo.setId( TEST_PROJECT + "-" + "2.0-20120618.214135-2" + "." + "jar" );
  1638. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT", artifactTwo );
  1639. Collection<ArtifactMetadata> artifactMetadatas =
  1640. getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
  1641. assertThat( artifactMetadatas ).isNotNull( ).isNotEmpty( ).hasSize( 2 );
  1642. log.info( "artifactMetadatas: {}", artifactMetadatas );
  1643. getRepository( ).removeTimestampedArtifact( session, artifactOne, "2.0-SNAPSHOT" );
  1644. artifactMetadatas = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
  1645. assertThat( artifactMetadatas ).isNotNull( ).isNotEmpty( ).hasSize( 1 );
  1646. getRepository( ).removeTimestampedArtifact( session, artifactTwo, "2.0-SNAPSHOT" );
  1647. artifactMetadatas = getRepository( ).getArtifacts( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
  1648. assertThat( artifactMetadatas ).isNotNull( ).isEmpty( );
  1649. }
  1650. }
  1651. @Test
  1652. public void testgetProjectReferences( )
  1653. throws Exception
  1654. {
  1655. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1656. {
  1657. ProjectVersionMetadata metadata = new ProjectVersionMetadata( );
  1658. metadata.setId( TEST_PROJECT_VERSION );
  1659. metadata.setName( "project name" );
  1660. metadata.setDescription( "project description" );
  1661. metadata.setUrl( "the url" );
  1662. Dependency d = new Dependency( );
  1663. d.setArtifactId( "artifactId" );
  1664. d.setClassifier( "classifier" );
  1665. d.setNamespace( "groupId" );
  1666. d.setScope( "scope" );
  1667. d.setSystemPath( "system path" );
  1668. d.setType( "type" );
  1669. d.setVersion( "version" );
  1670. d.setOptional( true );
  1671. metadata.addDependency( d );
  1672. d = new Dependency( );
  1673. d.setArtifactId( "artifactId1" );
  1674. d.setClassifier( "classifier" );
  1675. d.setNamespace( "groupId" );
  1676. d.setScope( "scope" );
  1677. d.setSystemPath( "system path" );
  1678. d.setType( "type" );
  1679. d.setVersion( "version1" );
  1680. d.setOptional( true );
  1681. metadata.addDependency( d );
  1682. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  1683. session.save( );
  1684. metadata = getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  1685. final Dependency dd = d;
  1686. tryAssert( ( ) -> {
  1687. Collection<ProjectVersionReference> references =
  1688. getRepository( ).getProjectReferences( session, TEST_REPO_ID, dd.getNamespace( ), dd.getArtifactId( ), dd.getVersion( ) );
  1689. log.info( "references: {}", references );
  1690. assertThat( references ).isNotNull( ).hasSize( 1 ).contains(
  1691. new ProjectVersionReference( ProjectVersionReference.ReferenceType.DEPENDENCY, TEST_PROJECT, TEST_NAMESPACE,
  1692. TEST_PROJECT_VERSION ));
  1693. }
  1694. );
  1695. }
  1696. }
  1697. @Test
  1698. public void testSearchArtifactsByKey( )
  1699. throws Exception
  1700. {
  1701. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1702. {
  1703. createArtifactWithData( session );
  1704. }
  1705. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1706. {
  1707. session.refreshAndDiscard( );
  1708. tryAssert( ( ) -> {
  1709. Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).searchArtifacts( session, TEST_REPO_ID, "url", TEST_URL, false );
  1710. assertThat( artifactsByProperty ).isNotNull( ).isNotEmpty( );
  1711. } );
  1712. }
  1713. }
  1714. @Test
  1715. public void testSearchArtifactsByKeyExact( )
  1716. throws Exception
  1717. {
  1718. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1719. {
  1720. createArtifactWithData( session );
  1721. }
  1722. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1723. {
  1724. session.refreshAndDiscard( );
  1725. tryAssert( ( ) -> {
  1726. Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).searchArtifacts( session, TEST_REPO_ID, "url", TEST_URL, true );
  1727. assertThat( artifactsByProperty ).describedAs( "Artifact search by url=%s must give a result.", TEST_URL ).isNotNull( ).isNotEmpty( );
  1728. artifactsByProperty = getRepository( ).searchArtifacts( session, TEST_REPO_ID, "org.name", "pache", true );
  1729. assertThat( artifactsByProperty ).describedAs( "Artifact search by text org.name='pache' must be empty" ).isNotNull( ).isEmpty( );
  1730. } );
  1731. }
  1732. }
  1733. @Test
  1734. public void testSearchArtifactsByFacetKey( )
  1735. throws Exception
  1736. {
  1737. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1738. {
  1739. createArtifactWithGenericMetadataFacet( session );
  1740. tryAssert( ( ) -> {
  1741. Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).searchArtifacts( session, TEST_REPO_ID, TEST_METADATA_KEY, TEST_METADATA_VALUE, false );
  1742. assertThat( artifactsByProperty ).isNotNull( ).isNotEmpty( );
  1743. } );
  1744. }
  1745. }
  1746. @Test
  1747. public void testSearchArtifactsByFacetKeyAllRepos( )
  1748. throws Exception
  1749. {
  1750. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1751. {
  1752. createArtifactWithGenericMetadataFacet( session );
  1753. tryAssert( ( ) -> {
  1754. Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).searchArtifacts( session, null, TEST_METADATA_KEY, TEST_METADATA_VALUE, false );
  1755. assertThat( artifactsByProperty ).isNotNull( ).isNotEmpty( );
  1756. } );
  1757. }
  1758. }
  1759. @Test
  1760. public void testSearchArtifactsFullText( )
  1761. throws Exception
  1762. {
  1763. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1764. {
  1765. createArtifactWithGenericMetadataFacet( session );
  1766. // only works in JCR
  1767. // Collection<ArtifactMetadata> artifactsByProperty = getRepository().searchArtifacts( TEST_URL, TEST_REPO_ID, false );
  1768. tryAssert( ( ) -> {
  1769. Collection<ArtifactMetadata> artifactsByProperty =
  1770. getRepository( ).searchArtifacts( session, TEST_REPO_ID, TEST_METADATA_VALUE, false );
  1771. assertThat( artifactsByProperty ).isNotNull( ).isNotEmpty( );
  1772. } );
  1773. }
  1774. }
  1775. @Test
  1776. public void testSearchArtifactsFullTextExact( )
  1777. throws Exception
  1778. {
  1779. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1780. {
  1781. createArtifactWithGenericMetadataFacet( session );
  1782. // only works in JCR
  1783. // Collection<ArtifactMetadata> artifactsByProperty = getRepository().searchArtifacts( TEST_URL, TEST_REPO_ID, true );
  1784. tryAssert( ( ) -> {
  1785. Collection<ArtifactMetadata> artifactsByProperty =
  1786. getRepository( ).searchArtifacts( session, TEST_REPO_ID, TEST_METADATA_VALUE, true );
  1787. assertThat( artifactsByProperty ).isNotNull( ).isNotEmpty( );
  1788. } );
  1789. tryAssert( ( ) -> {
  1790. Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).searchArtifacts( session, TEST_REPO_ID, TEST_METADATA_VALUE.substring( 2 ), true );
  1791. assertThat( artifactsByProperty ).isNotNull( ).isEmpty( );
  1792. } );
  1793. }
  1794. }
  1795. @Test
  1796. public void testSearchArtifactsFullTextByFacet( )
  1797. throws Exception
  1798. {
  1799. try ( RepositorySession session = getSessionFactory( ).createSession( ) )
  1800. {
  1801. createArtifactWithGenericMetadataFacet( session );
  1802. tryAssert( ( ) -> {
  1803. Collection<ArtifactMetadata> artifactsByProperty = getRepository( ).searchArtifacts( session, TEST_REPO_ID, TEST_METADATA_VALUE, false );
  1804. assertThat( artifactsByProperty ).isNotNull( ).isNotEmpty( );
  1805. } );
  1806. }
  1807. }
  1808. private static ProjectMetadata createProject( )
  1809. {
  1810. return createProject( TEST_NAMESPACE );
  1811. }
  1812. private static ProjectMetadata createProject( String ns )
  1813. {
  1814. ProjectMetadata project = new ProjectMetadata( );
  1815. project.setId( TEST_PROJECT );
  1816. project.setNamespace( ns );
  1817. return project;
  1818. }
  1819. private void createArtifactWithGenericMetadataFacet( RepositorySession session )
  1820. throws MetadataRepositoryException, MetadataResolutionException, MetadataSessionException
  1821. {
  1822. createArtifactWithGenericMetadataFacet( session, 1 );
  1823. }
  1824. private void createArtifactWithGenericMetadataFacet( RepositorySession session, int artifacts )
  1825. throws MetadataRepositoryException, MetadataResolutionException, MetadataSessionException
  1826. {
  1827. MetadataFacet metadataFacet = new GenericMetadataFacet( );
  1828. Map<String, String> properties = new HashMap<>( );
  1829. properties.put( TEST_METADATA_KEY, TEST_METADATA_VALUE );
  1830. metadataFacet.fromProperties( properties );
  1831. createArtifactWithFacet( session, artifacts, null, metadataFacet );
  1832. }
  1833. private void createArtifactWithMavenArtifactFacet( RepositorySession session )
  1834. throws MetadataRepositoryException, MetadataResolutionException, MetadataSessionException
  1835. {
  1836. createArtifactWithMavenArtifactFacet( session, 1 );
  1837. }
  1838. private void createArtifactWithMavenArtifactFacet( RepositorySession session, int artifacts )
  1839. throws MetadataRepositoryException, MetadataResolutionException, MetadataSessionException
  1840. {
  1841. TestMetadataFacet facet = new TestMetadataFacet( TEST_METADATA_VALUE );
  1842. createArtifactWithFacet( session, artifacts, facet, null );
  1843. }
  1844. private void createArtifactWithFacet( RepositorySession session, int artifacts, MetadataFacet artifactFacet,
  1845. MetadataFacet projectVersionMetadataFacet )
  1846. throws MetadataRepositoryException, MetadataResolutionException, MetadataSessionException
  1847. {
  1848. for ( int i = 0; i < artifacts; i++ )
  1849. {
  1850. ArtifactMetadata artifact = createArtifact( );
  1851. if ( artifactFacet != null )
  1852. {
  1853. artifact.addFacet( artifactFacet );
  1854. }
  1855. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1856. }
  1857. if ( projectVersionMetadataFacet != null )
  1858. {
  1859. ProjectVersionMetadata metadata =
  1860. getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  1861. metadata.addFacet( projectVersionMetadataFacet );
  1862. metadata.setOrganization( TEST_ORGANIZATION );
  1863. metadata.setUrl( TEST_URL );
  1864. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  1865. }
  1866. session.save( );
  1867. }
  1868. protected void createArtifactWithData( RepositorySession session )
  1869. throws MetadataRepositoryException, MetadataResolutionException, MetadataSessionException
  1870. {
  1871. ArtifactMetadata artifact = createArtifact( );
  1872. getRepository( ).updateArtifact( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
  1873. ProjectVersionMetadata metadata =
  1874. getRepository( ).getProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
  1875. metadata.setOrganization( TEST_ORGANIZATION );
  1876. metadata.setUrl( TEST_URL );
  1877. getRepository( ).updateProjectVersion( session, TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
  1878. session.save( );
  1879. }
  1880. private static ArtifactMetadata createArtifact( )
  1881. {
  1882. return createArtifact( "jar" );
  1883. }
  1884. private static ArtifactMetadata createArtifact( String type )
  1885. {
  1886. ArtifactMetadata artifact = new ArtifactMetadata( );
  1887. artifact.setId( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + "." + type );
  1888. artifact.setWhenGathered( ZonedDateTime.now() );
  1889. artifact.setNamespace( TEST_NAMESPACE );
  1890. artifact.setProject( TEST_PROJECT );
  1891. artifact.setRepositoryId( TEST_REPO_ID );
  1892. artifact.setFileLastModified( System.currentTimeMillis( ) );
  1893. artifact.setVersion( TEST_PROJECT_VERSION );
  1894. artifact.setProjectVersion( TEST_PROJECT_VERSION );
  1895. artifact.setMd5( TEST_MD5 );
  1896. artifact.setSha1( TEST_SHA1 );
  1897. return artifact;
  1898. }
  1899. private static class ArtifactMetadataComparator
  1900. implements Comparator<ArtifactMetadata>
  1901. {
  1902. @Override
  1903. public final int compare( ArtifactMetadata a, ArtifactMetadata b )
  1904. {
  1905. return a.getProject( ).compareTo( b.getProject( ) );
  1906. }
  1907. }
  1908. private static class KindOfRepositoryStatistics
  1909. implements MetadataFacet
  1910. {
  1911. private String value;
  1912. private Date date;
  1913. static final String SCAN_TIMESTAMP_FORMAT = "yyyy/MM/dd/HHmmss.SSS";
  1914. private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
  1915. private KindOfRepositoryStatistics( String value, Date date )
  1916. {
  1917. this.value = value;
  1918. this.date = date;
  1919. }
  1920. @Override
  1921. public String getName( )
  1922. {
  1923. return createNameFormat( ).format( date );
  1924. }
  1925. private static SimpleDateFormat createNameFormat( )
  1926. {
  1927. SimpleDateFormat fmt = new SimpleDateFormat( SCAN_TIMESTAMP_FORMAT );
  1928. fmt.setTimeZone( UTC_TIME_ZONE );
  1929. return fmt;
  1930. }
  1931. @Override
  1932. public String getFacetId( )
  1933. {
  1934. return KindOfRepositoryStatistics.class.getName( );
  1935. }
  1936. @Override
  1937. public Map<String, String> toProperties( )
  1938. {
  1939. return Collections.emptyMap( );
  1940. }
  1941. @Override
  1942. public void fromProperties( Map<String, String> properties )
  1943. {
  1944. // no op
  1945. }
  1946. }
  1947. private static class TestMetadataFacet
  1948. implements MetadataFacet
  1949. {
  1950. private String testFacetId;
  1951. private Map<String, String> additionalProps;
  1952. private String value;
  1953. private String name = TEST_NAME;
  1954. private TestMetadataFacet( String value )
  1955. {
  1956. this.value = value;
  1957. testFacetId = TEST_FACET_ID;
  1958. }
  1959. private TestMetadataFacet( String facetId, String value )
  1960. {
  1961. this.value = value;
  1962. testFacetId = facetId;
  1963. }
  1964. private TestMetadataFacet( String facetId, String value, String name)
  1965. {
  1966. this.value = value;
  1967. testFacetId = facetId;
  1968. this.name = name;
  1969. }
  1970. private TestMetadataFacet( String facetId, String value, String name, Map<String, String> additionalProps )
  1971. {
  1972. this( facetId, value, name );
  1973. this.additionalProps = additionalProps;
  1974. }
  1975. private TestMetadataFacet( String facetId, String value, Map<String, String> additionalProps )
  1976. {
  1977. this( facetId, value );
  1978. this.additionalProps = additionalProps;
  1979. }
  1980. @Override
  1981. public String getFacetId( )
  1982. {
  1983. return testFacetId;
  1984. }
  1985. @Override
  1986. public String getName( )
  1987. {
  1988. return name;
  1989. }
  1990. @Override
  1991. public Map<String, String> toProperties( )
  1992. {
  1993. if ( value != null )
  1994. {
  1995. if ( additionalProps == null )
  1996. {
  1997. return Collections.singletonMap( "foo", value );
  1998. }
  1999. else
  2000. {
  2001. Map<String, String> props = new HashMap<>( );
  2002. props.put( "foo", value );
  2003. for ( String key : additionalProps.keySet( ) )
  2004. {
  2005. props.put( key, additionalProps.get( key ) );
  2006. }
  2007. return props;
  2008. }
  2009. }
  2010. else
  2011. {
  2012. return Collections.emptyMap( );
  2013. }
  2014. }
  2015. @Override
  2016. public void fromProperties( Map<String, String> properties )
  2017. {
  2018. String value = properties.get( "foo" );
  2019. if ( value != null )
  2020. {
  2021. this.value = value;
  2022. }
  2023. properties.remove( "foo" );
  2024. if ( additionalProps == null )
  2025. {
  2026. additionalProps = new HashMap<>( );
  2027. }
  2028. for ( String key : properties.keySet( ) )
  2029. {
  2030. additionalProps.put( key, properties.get( key ) );
  2031. }
  2032. }
  2033. public String getValue( )
  2034. {
  2035. return value;
  2036. }
  2037. @Override
  2038. public String toString( )
  2039. {
  2040. return "TestMetadataFacet{ name='"+ name+ "' value='" + value + '\'' + '}';
  2041. }
  2042. @Override
  2043. public boolean equals( Object o )
  2044. {
  2045. if ( this == o )
  2046. {
  2047. return true;
  2048. }
  2049. if ( o == null || getClass( ) != o.getClass( ) )
  2050. {
  2051. return false;
  2052. }
  2053. TestMetadataFacet that = (TestMetadataFacet) o;
  2054. if ( value != null ? !value.equals( that.value ) : that.value != null )
  2055. {
  2056. return false;
  2057. }
  2058. return true;
  2059. }
  2060. @Override
  2061. public int hashCode( )
  2062. {
  2063. return value != null ? value.hashCode( ) : 0;
  2064. }
  2065. }
  2066. }