From 73b37cfbdf5c3345167948efa31180372f46b0b3 Mon Sep 17 00:00:00 2001 From: Jueun Park <jueun-park98> Date: Fri, 13 Aug 2021 02:50:09 +0900 Subject: [PATCH] edit --- .../6.8/executionHistory/executionHistory.bin | Bin 722809 -> 789512 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/6.8/fileHashes/fileHashes.bin | Bin 77065 -> 77065 bytes .gradle/6.8/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../6.8/fileHashes/resourceHashesCache.bin | Bin 35429 -> 35565 bytes .gradle/6.8/javaCompile/classAnalysis.bin | Bin 1024870 -> 1030992 bytes .gradle/6.8/javaCompile/jarAnalysis.bin | Bin 194086 -> 224345 bytes .gradle/6.8/javaCompile/javaCompile.lock | Bin 17 -> 17 bytes .gradle/6.8/javaCompile/taskHistory.bin | Bin 26101 -> 29049 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .idea/jarRepositories.xml | 10 +- .idea/runConfigurations.xml | 10 + .../inf/st/openapi/ast/ComponentsObject.class | Bin 37693 -> 39911 bytes .../inf/st/openapi/ast/OpenAPIObject.class | Bin 24441 -> 24441 bytes .../inf/st/openapi/ast/OperationObject.class | Bin 30050 -> 30050 bytes .../ast/SecurityRequirementObject.class | Bin 9040 -> 9040 bytes .../java/test/openapi/OpenAPIMain_test.class | Bin 4239 -> 4381 bytes .../classes/openapi.OpenAPIMain_test.html | 789 +++++++++++------- build/reports/tests/test/index.html | 8 +- .../reports/tests/test/packages/openapi.html | 6 +- .../test/TEST-openapi.OpenAPIMain_test.xml | 787 ++++++++++------- build/test-results/test/binary/output.bin | 8 +- build/test-results/test/binary/output.bin.idx | Bin 36 -> 36 bytes build/test-results/test/binary/results.bin | Bin 47491 -> 45107 bytes .../inf/st/openapi/ast/CallbackObject.java | 2 +- .../inf/st/openapi/ast/ComponentsObject.java | 128 ++- .../st/openapi/ast/DiscriminatorObject.java | 2 +- .../inf/st/openapi/ast/EncodingObject.java | 2 +- .../inf/st/openapi/ast/ExampleObject.java | 2 +- .../ast/ExternalDocumentationObject.java | 2 +- .../inf/st/openapi/ast/HeaderObject.java | 2 +- .../inf/st/openapi/ast/LinkObject.java | 2 +- .../inf/st/openapi/ast/MediaTypeObject.java | 2 +- .../inf/st/openapi/ast/OAuthFlowObject.java | 2 +- .../inf/st/openapi/ast/OAuthFlowsObject.java | 2 +- .../inf/st/openapi/ast/OpenAPIObject.java | 2 +- .../inf/st/openapi/ast/OperationObject.java | 4 +- .../inf/st/openapi/ast/ParameterObject.java | 2 +- .../inf/st/openapi/ast/PathItemObject.java | 2 +- .../inf/st/openapi/ast/PathsObject.java | 2 +- .../inf/st/openapi/ast/RequestBodyObject.java | 2 +- .../inf/st/openapi/ast/ResponseObject.java | 2 +- .../inf/st/openapi/ast/SchemaObject.java | 2 +- .../ast/SecurityRequirementObject.java | 4 +- .../st/openapi/ast/SecuritySchemeObject.java | 2 +- .../inf/st/openapi/ast/TagObject.java | 2 +- .../inf/st/openapi/ast/XmlObject.java | 2 +- src/main/jastadd/Composer.jadd | 4 +- src/test/java/openapi/OpenAPIMain_test.java | 71 +- 49 files changed, 1176 insertions(+), 693 deletions(-) create mode 100644 .idea/runConfigurations.xml diff --git a/.gradle/6.8/executionHistory/executionHistory.bin b/.gradle/6.8/executionHistory/executionHistory.bin index 578eed2b6fdac147d9bb45b5cb33fed0d7cd69c4..28161c506bbac8060af90b4fcba16b85aa53ca6b 100644 GIT binary patch delta 13234 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 delta 6593 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 J{Ngg?1pqUnwx9q2 diff --git a/.gradle/6.8/executionHistory/executionHistory.lock b/.gradle/6.8/executionHistory/executionHistory.lock index 9bee3b29920b079f9b289e6c793065ad3fb5cd0a..a2bc912533e2328ece478f35a818485edc0b0a4c 100644 GIT binary patch literal 17 VcmZQp+O{L7ZHdZl1~6cm2mmvp1ik<O literal 17 VcmZQp+O{L7ZHdZl1~6c$2LLmW1gro6 diff --git a/.gradle/6.8/fileHashes/fileHashes.bin b/.gradle/6.8/fileHashes/fileHashes.bin index 977f9a8f0862b9dd489c0a0b802fd99629602aed..9c5388a790971d71e5f2b99fa048737f453af634 100644 GIT binary patch delta 6102 zcmeCY#nO3;Wdm~|i*;#jz-0D9Jr?WI4&}*~5QfC$YzTvA@?0>ZeahtXg;Em9il4t( zi`BC&iZ!$Ur^-Hsfq}8wy0qobWX2+p0gd&OjUkL_lT#s#^vP@Mr6zAI5@E3}ZO;H1 zqA+EZQ0&j09Vg=?uj(4@?%xkFq)v$e46a_D%v`L-VqIFdV6tv8$kgUXlj9+bUy~<7 z7^f$%E|;2ow^)S7y0l3UtdBvYb$Xx#qwr*b5@9pz(&iwj=o$tF20dd21_n(A1_nhC z7EoAmT_bd=u&B8~RHe^S?VAt>wA4(FECJcq;yAe*!ibo>7sAk*{2t7x=a{TmDkb5! zCt}Ot`SyY>p`|YCr+B=E7|^OSIk*&LKm-5e)>1tl>(T~Qh$F<6rY{s`6rOykRG7uO zwEoBR{i2LglbOpvfzm2ES-MP0;)|!%&Q(`DKI>%Moo`dOp$lSUUE*ZlGLVsNUnbXs z8I7kWZ!80u-DD3jTO@IEVu`T$;nxf{dQRO-tS255Iv3jq(caoMS+pFay<z2KcL?L) z<Vpx*;^fs}M$6jCcOi_slldz^irY;lJ63?KsH=roVdgP?q8y{}<h}}!^J}M0UJ8-k z0g;x{oqVuXSUfk<>&v-Mg_|w%?v~uT<OX$t`((~akfDtxldZvw*7(V}U`AuW<oOVW z?Bt7;QVRXEy#kJRTevP%w0O7jp<4~afEHnhCGHC*E4B*<>U>D_(+f)ZWBT{gl)SqW zAZpq{am>KLVCaS!*KcxGU5!0!D(bsfspY{5-bknpQHZH_#gh+u3wx&TKb&^ey1<}r z2k$ex3w97SwPzq|YQJEb%5m!cdyl!wnzB3}YL_*+D?oHKU7viq3gp?^wUhsX8BOYw z^{ag(&R6eC%s;;-s9uKc=UEMF5vcOrlP6b$l-Hk}d=$)Rnm_qFm{I>=vStlfY9l!R zl-7WfO1s}=#|o**%fXzc@X7mYq$C{qdVDQErv@zfa5MDY1GN~4(T$rYf2@&``10@1 z!e18Ehg=FO6#wstjD|?oKAo&w3o^X%*W^$L<I&`eWm1zD)`Dzlu$jCQEZWRI`E{+7 zMA;Dz4MVrv_oTP&3`}3{-v}|JS$?u?9mtS|sLB3dMziJQ#yU{4X{dk%oOt8phv~xN z0&kN<Bm4LDeqVBAwa0ySi1wCalb?ch)i+NTuLqe^KYOw#n9(wIay6JypEh|dn9-a! z`F_2Wgj3*iU#)cte|Fwd`nfB+`z^$z=1r3Y8$j09TR^S-JpH3OqwwUo22g5k?wDNK z05;!m@^T160bF=|ZUA|<{qSV&Mk$HkUo1|{Zv7VbdS%r<A^v~|5TomCC)+lH^tOMQ zoZl!VaoUQ@_SMI%-vJr3*1ej2`2|E(+ug|v!KxbGPreLhG_p-*Z35|QxIWn&%&23S zoC#rkoID%CxIXzTn9=lp^8Y3&iL@ylZC5yFPu-kx^H)a~^LdEbt&1lcHiJxR$_K^v z<l1Ht9_zyMvmriJ?3$eKp*Hz&a|(-f;rWG=wOe#qtE~&qFP$6<XZ6Eb2cfKGlRraQ z%O|V0LUb&j91dlzoZJazt(v?W%33}7Eu1Ca2GOx*av+qoc5*YEwH3-*H`%^ZYBFQH zFxWloCrh?NbZwmM4QJItS(_%Whq5+Leh6m?cR+M(nd}N>ZJk^WV@-DyWR#kGxC3JR zw#m1l65A*9c0#o6o@@_g?U`KIsmlurmOYSAV?H^#ai#F&eVsyJ$L*bb6{>RIWcDtI z?){T3;jC;Z>)_<MaMpP!>+od8ZitQ}lZ~OQqmxsitYed>!&xWctlv=9@yWV95WOcR z$3s~sCr^a44);J@eG=kojyIDRRtZlQ=!LlY^kns3i0;#qBcZG_le?j;vy=D2S?{5& zbCVVOAUe)Z4u-NWOm2m<wnJGLC%=TUE=`v1hv>L8S>ID?a(X``yf06#hl*dGyb;Q} zGWju-wR5uQ1c<I(lii`L>ys;?tXq>;!&!HstUHtWCqi`Go$NRf;_JH*UyJ8Y{<vIt za^FNDa17pqh_Y;+EVx>D@&TymeTXP$>}0`7!jnHugoM!j$()lQraqi(4QDAXmzvx@ z3F423ljlRlpG>|8XE9HP=z2QY6wXSAvYt(z31vN>d>YDnG5If)^>VWQ6o}rJlM|t= z*OMnhS#KsEg|gmG{tjimo2)q%qT}7<XejIb<X$N2!{q&N)<-Do<7DM&5FJ-1heBD` zCbz>`JEwt4i%H#+Uqcu(Cd*C-i!7b&4`xj9o7@OtNKUSgm708ZI;a?&QaJf3L^Nvh z_85=_rBhTUd(Hr9onkP#8p24OycWW6ntUI^D4r}h6IAw2VT8m1v&ZC#!NQZ{W`c^| z$*(4tf@LRvg~&3_0@dM@4}oQ;@Jzlr6KsCzWbRpDM$=?l2;<P?d@y6$<jD&mj0KY~ zLl_#9U#Cb-mY)rB^|ZB<ZD&a-RQFGPAj5Q(Z=tGm^B>`72O&l0v?CBpXFs1@I2+WS zoNhXK_H2+n)14-tg)sUj|A#RACL7KHNli7GoD616bC^68%$PoJ@^J`b_2i!r#`ekD zb3uxymrsrbGp3%K+&@>3*}8Q4<O6f{d8|vPUxC;y$~RdsL3lFXJWy~<e=u2f9!TG` zZ<GHfN=+`D2lB&|%ac37qLcL|?*=obzn%OR%$V|Pviy9IhN%IQ1Hp_Lrjwf?4Cl!k zS4d4hKObbojDX3{!J^aoCtpmEnryrPBs#5aviAaz?isO@YatBr$?GAE?8y(ojLE{2 zg%^V2Z$>@T!K~8-wHbvcCoBZHct+pk@`Yd{woG0LVa%C)8^Sm;nRgLLYP#lRdk7<T zav_*8Wx?ddi$I1>{|zxz=h)<hlZ8Fa!kid#)|=1#dFt7P%Kx#DSekJaq9(o)vypXy zx$xmqfrmD-u}%5YDsEUnbWD9T*>W++=1DImXM-72eJ9UdoWNpTI+JHI;}Ve6OzFwS zOF&MTsR1!w*kF320Hg5ah9w|>%`}}{yFhC4#wFlzdIe5VkHMT7DwEeQkeV#I6eKe> zY4XL@Qj^`moGEW6$1eq$J>%`<iD1T5;mLvXr6%76OHXB=EI(grGXFA=#_3Fx)t7<P zPGg-M31-Z6ncNLw1cAChldpr-%}kj59wM4MS#dc?!_4~0!4O8@<b|`OCeL3E>fy|s z1NB7^xZJz69OQ{<Qj=eTl}@`iS$YLX^Q5PfeIbk+lk35ZnX4yngfMnae!K!4ASa+k zxlLva5}s_Z5^U5ZaJorc39@X;T8Ijv!pR>?g~eC;zLYB1tIz7gEPCjZwE!dzrUgx2 zy%J>Qw93hM!Hk*LCiAZXiOhU5*%89{IJtNg$ja%m5Chr!rYEW~3Qs<;3S{Th`pMV9 z>ZTr?%()t*bLxu8))2<e$+=+0jNg;zgBeo`CSL?Ix>rtSUIS9xlQ7v7%;<i-Iekq8 zDE7NgO+U=T2$pP|{uRpVovzNy2+Ep0(<68p^;xV-dzMV^=7lJGHhnLYb#?lCDC_ui zMLvk^*Xh9!Rxi`^Rwzqt`gSPGVERia%YC{uKUhbv<aA#sD{gu{l$AeyBR?Z37<!>u zjOEGXjSGdR|Kn!_1w-$o>7oJ<-HWEXLs@I5S3+3bH>a<LuzK95--WVNr}GPfb@WJp z+Cg9s^G+{@irGwG3T1^%zb*)|`8gy47=BG&=pj5^MF?W^+3D6oU~_uUOwWa~Zcd*M zW&N9eQ3$NNPZ^?{TWGqWD5LOnIbpE&KCbDe!eH%v;?vWiEUW1=p{#)Er=hI)>3<=t ze%9&wB48c;yQe2YS)Zm)7J*o^6=DtB;mH>xg{MCdf!OkD`ge%RzUt|kqF~*92d76v zS>LAjLRb?RKwWB3P)y*R{!tWcV*dh&i6VxR4^9)FZYKsYF>iXP7}%WtC)3YLGfGWg zD8>lNwEfqn?}SK9kemJ*!s^$WE-MaEY%$#*!kS<*y-^%uff&RB1?}kzbr^-GpA!e$ z&|f(HDMV?1({ynOu=c*?(>)=q{)yA8p{$eB*Fsrt)9*uBA=3pV!G=#zhZxR&aB^Xj z@boxIu-Sd*rk6tH-68T^&nGvQ3r{};k)IGY{iY<?#tE&{xuqbi^V4mitmo77p{&o- z7fONcnFuk4fp0n3oOe=SdnQbp&MFPoJ&||1Ig}+eJrl}OpFSJPG6sbqDBLGHP5%!S z3!QE#1J*ksf3jhq)bv^zZ~#wCnm!dGJ~4m#aVV>4`cEip(sXTEu&#+)rpH2AN2m8g zS(m0CgtG2W{|sflovtbe@xy<JCoBpk8zu`+FOmcMVG{53PC2lNlccBbhO)G$zlE~Q zr_0MjWSyr6LRb^#PH%>=Cizd_Di1b$!fA-v?2M4)&!oU8%xqmcVY-9@xHy@xYPz=q z$ehCSa?@)S7(s2P!t<Y|uZJ-|Pk)GD+ABenex6<kWqqAqt_aoiZTd<@u=Kf~aP8-Q z!L^_JJsqn3+;5onbAJ%p8Kz$an_1e_KAl||WKikU?&+2gR{O2#*$~#Woau9w8GY)T ztq<IIaM#)?O-QuY_{EJ$;F7(dWh2D9leb{j$J-+V5={QAo_;mgl5?F%p9EM(m6IMs z2VVrHj*<n36s}60+Ncv?aiMy_-5n4eE)5I}44~3b5L7dujm@RD-3+cfk{&(d(7vye zXUTX#w0NXLEMZ)NY00Ut|H8E!8hdiPmrs<l?_-7PD1zu<P{Gvk&qKdnCP*u0iTZiF zFSAs{7DBZYL$qu#1{E0cE%!c5j|(i2vobK?xX3IDR#SKm+LYyH2X!_)*9NToqIvfA zliTS(8z*wwLe+eOn8R`y(`xZu$Cs>CzLyfMn)btaw)Hcxjw+7}(<iDjO4aj7zlvYi z|3jVki0q_l9=n%d*}`+*A?As?Vw(5Mak<^emOPK27R^WdzbbwN>!|X$1kuqC>O7(a zaG?obMdF?E#3OQ=zx?)<Izx3_WME)0XJBC9^vAU1@ZA-gIA+baV{-CNkIy-J3#w%w z#FAgzwkN7F+A&J_u&X{_tb2I<gL@(guRIoC0V^x5xHWydIwPopZi|_|QG-!xx~T@Z zJZLKhb0t=-OtjeM@ynm_e0_aZzuh&6wziqm>ovfMxb-(k9jJ_H+c5nxM669@x~L{t zwyhf^D>Xe)6Jn_L^h&6N+w|3%j8YOa?=i8SI2+5`cxpXgzW1(TsPTKJ--W1~JQdW+ zo35z^)<1dibVn_4#-Gdz@t$(RWWyTa>3v$@LS?c)SoMCW>U-0#Yk{3HITqCZo35-4 zF=aPcRVb8~Jv~<&qN-y0d?@R}^o!bHds?BvDC#zOW4`coIUTS)lk%sV>VWmMKAxTq fVNF(;J`>C;Jok6{X&pvA0qer^(DdjDs-^V+XK7{` delta 6192 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 diff --git a/.gradle/6.8/fileHashes/fileHashes.lock b/.gradle/6.8/fileHashes/fileHashes.lock index 12703db1a21433004859d86380296af021db54c8..b57969720434e7ce82c07409867525c8cd05733f 100644 GIT binary patch literal 17 VcmZP;t>XHyYn^sA0~lPK0st-F1poj5 literal 17 VcmZP;t>XHyYn^sA0~nkQ1pqCW1ib(N diff --git a/.gradle/6.8/fileHashes/resourceHashesCache.bin b/.gradle/6.8/fileHashes/resourceHashesCache.bin index 16c44a6fd91e32ce5545224b118c4c5e53fcecb9..fd3ea33b8171bd5a5c4f44071656a2f9aec627a9 100644 GIT binary patch delta 145 zcmaDlh3V~7rVS<%jNdk!N_4XF_gbl|oLF4M00v#{o43jea0y&Kq^|9JaK<;VAVb&b z&3n~1@C#@k-0|k`fv4A@qN$rx%>()Qk9b80>NWa71y@d9>*mCyuQ*Zh!)8Yh6{pGi kQGAnSGnFQL=edZ~i3+^m?(^pJKgI(S?L3R485kJk0Cn>+ZU6uP delta 47 zcmaDmmFejerVS<%jGs1}N_4Vrz9!4gwfU?13jWPo%{}=ii@94e=^fmt7{IvM(L==v E0L!cqkN^Mx diff --git a/.gradle/6.8/javaCompile/classAnalysis.bin b/.gradle/6.8/javaCompile/classAnalysis.bin index f41e7078d3b8d782741f69b48835bdbb720224da..961ff2cf4facbcc056d561330af1253f96669b5e 100644 GIT binary patch delta 526 zcmaEM%<jTByM`9V7N!>F7M2#)7Pc1lEga|D7}>U8XycGz6FB*bK}kIGU@8L$@Nb;C z{Xq}MK@R@2XIzwYH#`9eGVm`>+dg9|$6`*#h3z@>IofmPbGGNq=W5TH&)uFgpJ#i{ zeBPT;jH27!e(_FZ=8v@I<aRqK1JSwW`}T8xc{xS-_deh)=apOs5#6q}{hSb=7bBAt z=SD>ivFQnoye!+pwD^ACU}W4L#LRz^i@$kZoXo|CM<D8Vs%>Afl4B>=_R|vllb9Ga zH!8jmhiFPN=4UD3HD+Mo>|kKvYyjcuiF-K>r+;|G%fhHUedB)~gX#MVxpbx%)p03K zf6&4yGQDsouiEqt4xH@MFKpxGo-X}{S84hNJ5JW=f2MKrO>dgbsW|;WIw!~UpLKkE z)2BV;v4V&_5aHyQ?jz30H$AnUUvc^a5l-Rh4vf48(-OE8rpv$N)S7;96|e2|rHs7# z(+dvqmQ5FY$fGg+gFG+WboO#CrRfvS^KwtW^OpC-^lwW+R^)REO`pGuQ)jwE4L{rT zm9_ke(*^7}*{1iX@bXRnTF<XKeSZ)q+w_{(yhhVMzUEP$u2{vTIK3f?i)DJHHy_{h ziEnt~r+<CQV+wIz!cJbX>9ucpjkeFM=U>Uh#M!&O(3;nbYrFCy-am}nUH<Z^GXVfK CnYnZT delta 160 zcmccc&F<MTyM`9V7N!>F7M2#)7Pc1lEga|D7+JPoXycGz+t$mmlVkhEsT{L784I^B zW9BdA+HTCpzk#bgaSKO#;ug;K#4R8;cYER%p6!WSc%Qg33U7DIC@;&47?P>pb zJ4Lp$3-dWLGD+UtsAwTJJ)x18WqX(w-|riY4BLa4`A>pPbmC<c+^G0Ne4+sdL`9M@ HKT81s6tOvA diff --git a/.gradle/6.8/javaCompile/jarAnalysis.bin b/.gradle/6.8/javaCompile/jarAnalysis.bin index b31271d7572229ccf5ba276ee78bf66e92513fdc..7d2315b661df6d6c38b82d3e04178f6350a23381 100644 GIT binary patch delta 420 zcmZ4XhWq9X-VG)ajGU8AB~}Qq*;ZWNv|Dj90|+pEQ=5EMLYwjBM#UfE8x0J^n;kvc z9X%MgJ9;oZU8`iwz)+^ez)+?H!UCCJ)>K|t`hMyE8+#UOD@>1NU|@JS{a^r-*z^ZG zn3T7db1`id-tIPqiHAiXWTo#*se--wtUk=5hdx;gOf6(o+n%Sy#Kp3G(j2B176B8p zFeiqb_2x5wo_cnn@_+2)iw_j1A2`UwvfX<j(-by=3(SQNmkK<zk&SK2pH^|hVsc=e z;&y=*Obv_z)%{Z+$S_^yTc|4C{73lN!O4jy6sK>v#3ZzRr!i9z({|T2Oez+PFQ*6O zF}X7_E!n>D3DaywX2vCq(|w;Y=`*u0VccH(jLDY~BzNjLQ#%tg^Ag7C)+J1>V8+1` zCJ~U-n^#On!D=?XVNzfgC}Cn;!pKm@#3;wW1!7L$UCDHZwT+R9amn=cAD9lZ^@Es< z)AK(vT@kVXsbH{VV%o&Gh>^h-q(;An$(?l#NX_)VPfRr|VN8rmw!f=kl3`{l(+2<v C+LYJ; delta 42 zcmcb4gLl~*?hPgqj2x3qC00!SDxu7Haiii7@r?!^;?0g8?T#Ld+Z{cao~{J|aN7`& diff --git a/.gradle/6.8/javaCompile/javaCompile.lock b/.gradle/6.8/javaCompile/javaCompile.lock index 1bba057008af179ce830711b58ed7fb4948a2c0a..8b44fc3ceecb34ca671771eb52178222328016f0 100644 GIT binary patch literal 17 VcmZS9_jn)L_pnKx0Svev0{}2Y1iSzM literal 17 VcmZS9_jn)L_pnKx0Sve<001yC1gQW3 diff --git a/.gradle/6.8/javaCompile/taskHistory.bin b/.gradle/6.8/javaCompile/taskHistory.bin index a6564b9ffc4f7bcceeb1b65326caf3d3960aed7a..99307cdee3f6555b42b38071fa8ffe44b56fab9a 100644 GIT binary patch delta 869 zcmex*n(^l&#t9;t%nV@Q;mE+ioCRhwc&}z)V0j5)NA)r=aAz<uFj#IhydyqYQbJ2A z_3M8qU`lxWX=XbMD@19)l+Cdcb{1?bPZ$_jo=j#8^qI`!BO>vG$=NC<v^ce>IL0w0 zH#0A@xTGktB)@3#24Abm30~5ZWny9_Ug1+@;F~3Jj2WjX2P8h>(|y3NNa8wf1uBzs z{BtGF;ZqQsoHDsQK!)+-<crCAlMBMwHt!9!5a2atVBoH1VBjtW;mHdF;wS%%@)OAX zvZnIF()UaM-`KNQTVZ<a<hVdD4Ij@?F`elf*co{y3Ob!yluA^XJjU%N&B;4rN(Ma8 zUgCD3%H;TjdVKK$QouFYB3xo}eInarhr|SlFZfLZDQ=K>k6)3(<b6r01S3-dPsplF d_K&QTxPi}_bt!ogZ}2Jbk7S!1lRAU30RT?)O-%p* delta 160 zcmezQi1F)b#t9;_OblS);mE+ioCRhw1WaLI;QYzJz@WR)@rL-s0D;Mp5?WGGz5k(r zDdF*_ne8mB5Y^tRH^)lYS+H@wU|`^UF?nHt$7HWGaYnw$3j=%v1(f`m7bzYzxiaJX zjicGedNxenpXMcSc-FSr_ul!nhSc?@M}OXVZt}+H6Pq9S{AAj!n(&=vb3s%qHvkYP BKREyZ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a76284bd4d4ee23b805a84c64b901e2d6a71edaf..35921eb3e9cb942ecd2192520720ec3d50fae849 100644 GIT binary patch literal 17 UcmZRMRkTpz>bjrL00!(l03YfC(EtDd literal 17 UcmZRMRkTpz>bjrL00wNI03gl-wg3PC diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 1389d519..0d2a28b0 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -11,6 +11,11 @@ <option name="name" value="MavenRepo" /> <option name="url" value="https://repo.maven.apache.org/maven2/" /> </remote-repository> + <remote-repository> + <option name="id" value="MavenLocal" /> + <option name="name" value="MavenLocal" /> + <option name="url" value="file:/$MAVEN_REPOSITORY$/" /> + </remote-repository> <remote-repository> <option name="id" value="central" /> <option name="name" value="Maven Central repository" /> @@ -21,10 +26,5 @@ <option name="name" value="JBoss Community repository" /> <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> </remote-repository> - <remote-repository> - <option name="id" value="MavenLocal" /> - <option name="name" value="MavenLocal" /> - <option name="url" value="file:/$MAVEN_REPOSITORY$/" /> - </remote-repository> </component> </project> \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 00000000..797acea5 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="RunConfigurationProducerService"> + <option name="ignoredProducers"> + <set> + <option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" /> + </set> + </option> + </component> +</project> \ No newline at end of file diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ComponentsObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ComponentsObject.class index f0fd01158db0d9b78c0a7858551166bb9ca2db0f..e3bbe940cd9c2ac51301c412c9b717414b0df463 100644 GIT binary patch literal 39911 zcmX^0Z`VEs1_l%6L+nhxTnvm%eq0QJO#bXl0bC3$5KbT$LkLq4H=_nqFo+0YX9{I! z3gcqnW(o%p5nN1>Oi|p7>P*of{V^c@u^=LjohhE3DS?YY1f)=eDUpjQi76SRCIuv& z3L?_jnbO&rGPoFIKx$-|GP#(tn6g1?azN6#AR>>QDW9FGfQvx|q(+6Qkc+8^sTicD z1SDMwBFfmA%GsGJxEORmYIK+?xtOY$szGXMK+?4!qK=)Zo}H<Ii@^k>#)PSni>ZmJ z8KkBKB;5)k+Sr-e*_k@H7;HdlY?wN^n7Wv{L27zH(!C&}kDaNXooNCWg9}KF3)4g{ zrb$ebL29Oeq^E+2Y3xkX*_mc=G5CPg_%O}nVw%M?8>D6qJJVc{3O^8M9y`-~Q0V%B zf^Pvg(?X^ocBVxjnZ;a8OPH3jGcDs{hz3PNG}CgB$O;g5B}mIEP}uu{h~=ONSPf#W z0U5j&q<tNTSkJ|@0c6HTE{05y8JQq6HZZLKaaV$(#ScU*2Sv*!5Nk6?`xcPStsr6> z7t?l-_8nXdWgzWkAnn^h+RK<$f?~`ML@Woz*iH~@7fAbVkj_1zxbg!L%R$_|pa|Os z;_e42IRFwn2qF$~F&zfkaD<DY3uHqV$cDop8@fO?=zzp@Kw?!)M?q1045a-yNaqO< zagvMa6iEANE{5qKrPD!5Pl2>g2Wd9}iJ5@JnwZXjV*M;g`#F%#^C02^7t=+M_Dft0 zOF&AOfRtVYX<q`;ZUYjt0f}`nT?QqHD<JJxK{~I2i0fQTH$d8NaxrWKDcuNCdIO|= zBS^aoNX!K!Hi_vLD6QNEX}<%~c^5?7<6^oG(*A&pVIN58KBna$)=E&4@dFXdK}qHz zi1i4h^D!602_`>wrYD>XflN<9BF{h~&q2fs5b+Wu_6j8Xnv3ZT(_40?ckE2>*_l4D zGkxS@xWeSe!So44f97KP!t|Ak=^H3zUSayq#c-MF2T1Qv5b+CS)Nc^$4~X>_MEnDB z|8p^fFf(v51Tr&%SWKWa_y@#d2C<%jBv?RP77&XSM6iJfb`Ze<A~-<=7l_~n5j-G* z7ew%Z2!0SD03rlIgb;`j1`#4$3@4aHK`b#4A<oV$!N?$(oS$2eU!3X;qViJnN{Sg7 z;xv3xQuRwpQ;JfHQ&RKvGxO5)i%azL3sUnE3o`W+i%awo%KekFQj<%pHGT4n(qT$W zvh)iQi;7c=^mFr5QgignjFB{0GcvF^=clAHGVuFk=B4_T<|d^Ug(N2Bq%txH`Q#@j z=7c2{WrFxnLB<kB20el<3Qo>Q%}p#0DJ{rJwPs{sFNW|zwqzxiCF+-!WajAmCKgyT zG8hmvEGV_OAV04-6>c175ln;_?E#5JiMgpIsYNi?a23EriWwR730m)3k(gVMgRq?= z6)M2UU_wxHP-<amYH^8Eeo7|71l}TKQDVZ=BQ-H4wFn*n>=_U~BZC=17X+s!mlkD~ zRDz=f;RgO<RB=WI9fC&rWaeeV-N2dy;t>-8&WSlWNr}k_t(?g)5k>|9aFPe7bx7i6 zWH2J=5R3%R$iRg#hmk>xl=Lr#n#?N;QlUxR(+4H3+CaEDiFxVz!6ikRdFj>!tN{mk zqP3khBZD_YGc4VcZWb&PfKBtE)HHaW02}8;sd3OO0yfN#Qo|5grV?x*#nAxCJYcf| zDRmrbZUUR>PN|uoYy~!n;zR<=X<*ZMgG&;Vvwaf_z{#1NS(2SuijjdITo)iR5V(RN zy0*|HCu_1nN`ImXD{ws#l$w@Wl$w{E3M;XV30e!uYLF5Hri(c{wGvc|fpal(wq<1C zg*XXPm=!ZJ=n}NRE3vr5F(t((v$({Xk%0qN12HmK5Y!6Gx)|OvC0Z-0$M|8k!`;sb zuhJM9ED4$l&;1xKB3zxo^`bcm?f`J;7c(*lL90n5b;MMd(4quMmo*~;AJi<kf4LDg zXeA?qH9;REl_?m0CME)5m3SqpyMz(WfK~6sj0|j$+L@U24k?;2oJ2UiLo}kgh8JQl zJdpTMt9V8RJA&baTD)Pni*P`r8i49PQB?Q9-N^!KNf47ZKm{d+n+yqh3ZxCyCEOqz z;r4UDnj^$yW>^u6;SR!?8KxE0E&MRs;qHkg=p&@U$cCU|NYMx}9b7TQ6VyVI`LN=R zb~eDv9B|nJ_Cp+X{Qxa>ki3vgT?-He5Uij8dxOeR4Jj3ne343BU!dl0BzvN%YY!;L zBAHI*1PjZDNH(z9Waed-*fBCNYiNcsGO(0nWEL|r@PY(YoHH_WQi@XZ7#U{}?usMj z9Kwa=sAA+%46;K56k|*U28;|$1%@EP2t*iz2on%t3L?xvggJ<?U}WG7&P>lsEGaEY zWn_*fDNac)ZK<0tFp6608jn%VQrCF&LYBIwV=ZB+YXw^IN?pTol&#dY1f^i5uF)8! zDkxh@29@TOWag%ZWfo^9<)k|1<>i+omSpDV6|*zTFfwpE=jRod6qP2I<QFkA@Ob9s zr4~8oBo-H^7Be!~6Lg<raEM=i3X-WRNale?HuDm5QyCd}kXt~E41B1$h>?L0HQh5Z z@S>ztMg}3ww8hB4gPa-|8APzfA0q=7BE%UP_)x<LRL@ivq%tx{A{Bi$$d0vRWROOd zLv=a2EUGu`7#XCH^`iL6j*&qgSrXHOc4*E*_N^TwgCeqSY+koxWDrMIg9rz7XQKv+ z9U}uvc4l4*BLfSlug%E7omZL*uYy7KvnL}1Uv6ThM`BrOP-=NmW=Sfz+Kysm;7iLX zEzWQ(DJgPJOwLGUWDo%hIOpf&q$Yz>9aNY#IVV3am65?jgRJokmOSu)IhSiia%us{ z*kVQomgM|`N=638R7M6h$aoNVz`+@0kzamEaA`q7eo;wk3S19p5FxEJC&wAAkIN;s zpeQvtu_QHxkwFZ}0ED<TBZF{BQEDnkgI|6~QDR<kT7FS3BLizPsDZ-BK-e$P{9?_> zz?jL%z~~7|fJLdPj0_wwgBck(GK*DQ3riDo7#Va3SB)?eHKQ0Ago{&4kP|N?`V0sg zf|N|GL4^iOPG)flBSQj7I!UgXK{g4cr<VAY<|4bAkwF$y5GB0%(^37&$Y7}9NjUJ4 zEwN@~;Lk`bMiydZ;7?3RK@~A190JH1z=0=)W(um)(V~cv!H7gFJVC)Gj1~frnARsE zHz7wgBSSoCI!KOUc4k>d22POczy$~+gDn|V3S7H2BZC|kkD~;z6q*7QNdYv;VnzmO zbRiTCqQ$8ts6{@=F^mjJgd+_ppa};XsvXvL;DjUs$p)x$j12PFgi%~An2zphMh0VI zatNwb){G2-8HvTHf{YA;i76@QV#b8S162#ygEAN<p?U)&@Ie&@!32b65jekyVuT1J z9uujZ{?RN4O*|=JwHw8!G8jrwq(Oxws=>vOLK007MH49LqP9mMUZ!@^MYRJp>7vTP zlP;<-imO3M7gd_bq>HKvnsiYGAxRfqjEJO*ss)~OQH4>xQJh+WDos?<Mb%;rPr9h$ zka(ne(nYldJU9kQx~Re+yHR`!O1h{@P^3Xg7gZXXbkPJ+G>H_amY_72LAEk7BoZ!U zNGfzutbit5P{rz3nu{U@sddmrQCtkFSkUws5mVrz=&@#G5XeX@MiFCV5J*f(K@%dP z$$+8*oMNTX%|Z15dXR&%9l@d&)fRAa1yx!o!jQO2pmsrvVh1>}g6c&SQIO3jo&?qP zC@N57K}8RWY%wDPD0QQXp=gl=*HEyjDcHC&$X-T<G%BZ7%nl+n$x6W51L*ExWKhN> zh2jfH<%p@<oR}1h#aWCDqTpr&rir593LjJ4oN!oSu?N%;R={c^s`s!)5+j2JS(btm zxg@y0M)wCK-czZa(y{m))T~g!=>`<vgNkrW6Ht_hVKu3kkwFo=1d3)*pA&gx0ul(+ z?l~gc08RFwn#Hd)7g+|<C_)oNaV@Clh^m9Ao+GjrXwMN@2-0&z6(OSMh^zrzM1y*c z$bzU&FHS8%mL#g@h^zt9oB&mD$fA(=qIy3N*$Qy!4C=Tc3xe!L@gJz;hO7WZ5>&q; zOF}ztC_*S2q(S{`)b(}XsY{Txj0_osvpz{J32eh}&}0ho7HEJ2i(42OR3YUvHti_B z5eIcrv6^5>Oc{;Md}~GqanJw=R#U}6Ll{_PED47kR@*>jwGs|fQN4;I;usmM$g~<< zVuPxFYz~8@hjeO}+1RWCX9G1HF$r=9N;oLtP>7-kRP|%Csu)uBW0gWNK(IKq1TiiQ zas+ra8lmORBxMeS`Oqu@%FKSHxd?H{C=7}aiYs~3kzL8ipifMqM;LF-$iSPCSd0*0 zWZ+E%EhK}jr3INtu&s;G4lb)DP)tB|E=r&>G7vEUi)1)Bxq{lF2r)>!#8NwvA}jzW zO;B4GAq27$#aE!ThLA>);zNm_Vnzl~`v{@77)3E?Tmp5%0b~{RhtyE*fF?aq@5HY( z7gY{EE`chH;%ZQYph|-}NJI=eqiTYVOP~ru#wF0jh!~eZ)dEhIpdmF>VN`Dvr<R~f z6E!Y@ss+-J0QDMB#Ub%X^>GPQOTbAL)Tl)j2HB0`Q&4I~Re~Z7YCWP#L&qi11W`0` z7C~maLh>0Iw28=#u(=t~+W5pg_*9vQh9=Vd5@ao!H6ueN!6FE19^v6+s6uNyYb1-n zGhv{8B-V@!T*3LJMaijdnV?-JqKLJ~5Xb0&*6T7dXb`(7nTIioF`9>Q5n~%8gCIyR zWOs>2VsVCVVgV217RI$a%yP`~Jj@D=9X!m6OrDGkI)v&N<arfF21DYML);H;>G3ct zF)Q;ht1zpwGpq41t21lxFl#bv@i1#M>+mq{U~J=IJjS?|kwK4;$*6;@j10!aYCv&} zF0&pxvpx^A0ka_wvk}M%r$A1)L6j3v2g?{4Ob9svt^vgj#>^({%%(idX3XY1%oZRw z+yS}a703;`gp5QP24Q3{B2qny11y=X*qN<)m~EJCd6?}$4tNK0z#otU2pWjli)Cam zBjgH%Cgg>~Jk0jY4(!a1Jj_na&OFR6%sM<w42*3&One}h5KNlL-3}s>CPX<(K)5oy zu`|2#Fnch2@-TaWtQP`VuK=>1VB}(J)-f_z5()}bZ79z1X7*uc_T^#rWA^7^4gfhv z1>_tfkaM&MnTx3C85#76QH)}BAaf8qb1)Bc2y-Y8a~Q~KGmzCTAgc*xP1M4gh^z_I zfZ~L3<_LD?NFL@W=4c+~7-k(t1_MIgKrb<Qm}8ma7#Xw)=|gHb^DxIVC$KXoGBOB& zi%jrp1<0-@9_A$GWOn8h9_CcW4kB_pq^Lw)56#1z#+=T>oB=8WGeN8@=4>A39Ohge z<~-(n9>#f$^LdyHnB#bu3z>`9nTv_aOORcF=oXbQm+~-|F_-f&ZUY%w0W!3bxr&{+ znvubrP>8@wDs)q8m}_~M>zM0#7*BvqZ2+0t$lS!k+|1m<!`#Z;#>03EB+(9%=wR+- zXYL{*6Cjlb=oWS}_wX?HGWYQ?z5$ur4>ETG^F(&$Nkl{eB#)yTIhlD15A#&!X*`Vo zKt@gn899S_COh*iMg|)~A%mJ<(T$$XJcoyQF7rGdCIOJq^Fc;0U|z`1yoiXh8I)zw z4P4B;gok-4^D-VLC6Iy3K?bg1Udhh9iio5E%U9@zu4Z1t!@QPx9S@TU<9tR2bwYlI zHe7g^*E7B2Vcx*Jk%zGp)U@aV5#3DgJdE9pJv_{t7^kx{z2jl*2DK!#2rqqx8f(qS zpn}M2;Pw#Kl|hUQ{0L>PMMa>capDM(VDQ#Mr_#)vl++?d26?awD+Tb9CWXBG5`|*e zS|f$D{2~P&=FQAo*qOKTFmGet&d$7phj}NnG7n=Eb2<;>RK^}2#(oenmC2olc^C6; z9>&=qZ_Z(y%fq+^)Na}Xsv$RlSbG`Uc$oJw@8@AY08)2|aV-zy5fE_&L|g+A&p^Zr z5b*;<{9;_o!^8z5ctC^<h>!yjdLY68L^yy5ClKKVvUfJfEt42~7#V~S9tMXLsO8AW zzzY_IZK7mk5JK=hOHzvxOY)1@nGZ5D*b*7ji1mobD+d`FtV!1o>H<JlnQ&x6-NMKq z25W4C-3)UhXh(ELVzFOpMF}GVOCFeF2Mxx7mn)(+&>_(c8ukSZ$$+=VL8=c>&z{&- zM-Uy>M7Mh(>KPe$!JBG}Qz1n>BSRPwgJ4KbB)AV9Vy-nK19L%X33yHf9HHRK2;v6h zE(BBrYxji<G;jyDx|or{S_9JY00%l~mpMuM;X$2kSgRXiC1|jla8RS_u_mEy53_|I z8r(3G7#X4n2RKYI#1Mi(4pVN;$iM@hnu64-pbdNJNUH`Qrh!Ho2zwk}i9$446VVVu z(*oNDUYrV-U}T6P?02|osLh1p8Ll2QD2KdAqL`5ZG%g73Wk5^=t?MJ~c@!<yj10u~ zWMFpiLE{{14kJSZVQ)j#LX037<51Psj11gJ)9j24pwTF#1_{J8Mg~(Nh88fiSrgF_ z!O+CWAO!V1k`z(vK9STzoJ}wgkaU0+I)GC?(hMpi17dCtVj^+HE2QBC(Lqe{imV<{ zyh22YDqbN<p%xNK?hwVG0T;yV9U}wgbPmKgQ29$Zy`#1ZAv&#zXrf}%$H*WGO#rB} zL@i%H)dF=0p%6jUWX;GR1gbYs=b9K9U?ctzLm3(Lh{zJ4MlD3WH6sI2y;g{7Mh0$Z z7=TP*WC$Xh{Xq&Lnh7R*kW$b}bJ&~!BLk>*gSD3-h7eb~q3R)~c0<*{$N;O|VB$p8 zZZO3VrxNrpOgXf6gK>))8Mxrhr(#A1L6l}0sD;4Dz?Pj_8Jt>zE*YE(+V79l@C2*j zgqsGQ8AP;Npv^Uc=@8sh0rd#*k8(m9NQ?}unZ-e=X`q92QcL{6twd318wcE0g4r6z z$iN0(HIc^1zy>bk(ij<-6H`)%s#akA6vBl7(m(>JS^*y^0ds1Y263mN5Vi$kA~fb1 z8Tdh26&!95AyEBHaL^jX4A3+%4>)|_jUH|!E+c~twm>D|9i#@88ve+Hsbpl}1&0`d zA4Mq4U`nkChZ;;NB#=N;KH!7^@i9aY)T|>Ia%kp&!VXj}!kbXVj0~W#g!360Y{>{c zxOQts26g<w2Up6-zy}ULB!L)00SH%1L<qvwLP85#OQ4AoHFJfg2RugxN^#I88MIh} z@(}$Nlsru!`9U><3OsP2K>6Sdk3T%2Dv1aXs7iQn2q4;#5HU~{LNGz0ngU8spe8q> zVU`Kn^aq;EMF>?gGT4)msE`b>W@OOB9}Gx}85sn?VTdA>KqzS;sU{*UkyJy%&YF<{ zwBi^;oRPtda8m$77dVN5>N-f<ub7bmR8>JZ<W*G=y@abOh&o0FZg3F7cm!($h(aO) z4x$hqW}w;tS%|3G09gY#q(Bp~sBJ<}>i|@_qqGSb8Jx&ShNuREx(E1EBC2{u24QeW zqKl>xN{^@-hzMC!4e$^a2i3PI!2pqBWFUDN7DOXB#5rKAH5eH{LtdZ;DyZWD8L%Ox z-~;KjW@J#pAEqExj0~XTk&06x>>xtn2U12vsDYG0{RKKt3bIBBB0%(t9*A;qxPa<X zq~<E9mVj}|YnQ-uTQf2cXqUiL!rCPWKEZYgOeqoJ1yc(3Gb00N^%trjQSA~`E#R=@ z0PlbW9nrzS0a{`L*$=BrxcG#%c)_cl*a{MhQu9g}8Q2mF3Q|Ekkae+U`Yg}^mPjcT zIus8YRzOHWe96cFO77qt?Tie<uucb9FIW&Xtc%bC76NU?&4;w-p}HZy(IIBl8O%S7 z450J_T51H*3|eCi<Dsl6;YdtLfsR^}vfDR|kpZ-l7pxP-Jc0`)pe{rVyfY{=1Tvgp zU}X5mz`)SMz{&8Rk%57ck&%IcHHLwift7)Q>BMdZ#>njqOg>uM7?@`=c<p9jiQLY> z>Z`Slfo&TDyPxh(1`bAsnGD*xI~h0`84fUTS+VFyvK(OG-p0TKrFnNS@a<&aXJ!ar z{{ND;&Nc>taII|&f~ckmVKq${YMRJ422qe{BHI|mb})#em?i--O%l~KDXgYRLrs&} z#vltaO=cT|+ztkL6w?$yrYWMDri9frWvFQ?+Za?qrm1XWP}{+vj$)by$TUq<)3mUf zrVTYsXB&eq$TXd840<~l^ifPR0GVcpYMK#N(~O~}nQUV)1({~DjlpaOgE@+679i6s zQBAYLYMM3FG@ES<wjk4NwlUc4V6aCq%>iVZBdTdmSWR<=n&z^N!4+hh%QgnL9SrU$ zrg?x&^F%ex3#)0~P}6+2G5CT^^V!DWw}ZhS#k7EM?F|eJ3@nUH3=9nW81xw!7(^L3 z7{nR)86+6Q86+8u8Kf8j7^E4(7-Sh@8RQsJ8RQun859`iF(@)DVNhmR&7i`tnL(A| zJcAm;8wPcTPYjw2KN++b85y)0Wf^oBtr&C}9T@Z(-5CrR{TU1yvl)ySI~a@^`xs0a zr!tr^&SfxX+{s|Uc#Xl5@eYGE<6{OJ#@7tCOzaGHOezfaOj-<%Ooj|jOqLAJOrZ=e zOhpW?Ocf07O!W*NOzjMwOp6)3m<}*_GaX~_V`OGvU^vAf0&+7W3nME73xha=JtG?< zI|CC#BZCwp3nK>u3qvY{JtHSr>^xYEi-Cn<GlM-NH%N?87A(fYz{1GLV9&@47Rv^U z@iDM4`ZL%w@`J^8g2e<FSQzIr*fR=(#F*H@VnPfojISB&8HK@Op<po)1{Nku275+P zu-Ia-m>2^KQ#*q_qc}(mRGu(OFiJ8oFmNy(V3cB%W?*ELVPIg0Vc>-NLY9FE>UKE> zCa8<$8JM8%RA69&x=xXS3F;;#1}3OWlo^<y_Ny>3L2XrKU}97Qmu}Mk806U*7}*)s z*%>u{F&O+}VExM=HXvLEPDV{eEl5erd7XiofsKKIm2o#iVB~g&AW%sge2k%gH$zC| zc7{+;NgKSAA&ik>Cqp<R1H8b^f)%(CRxDbQEZZ0&w=qP`WYFHt5FNRlA;yYTk`*Kx zE6ECzjoZc$uOrF2jUgd?IfKS-2JXo142dvxNicOg7?QU!q`=hupA0ImQ?<4+q@g+~ zjTk4TZ)3;+J1H}AJ3|)Cs%)rL>Dw4`wlU<wtO7YnByu}L9!y<6Ox+HKf^7_iFm(_o z6=`i_C`NTsF)>am*~U-`c2Zg7c7}48RTWUHO13dnZeyr|Sp{;EOyqWkYM8njn7SPd zwc8l#VCo=Fs@K}a&~S_)8Y$u$usF#KDdKiBs6=jOXoMNx1U0^S2Sdv?hE}-o$3c<M zrnQZs9o5I}Sd7O=7aiLeI>A2firmi74YR5TYE{QJhTd%qeK4y)KGuoc&d?82Hvy(@ z2gAf|43l8$AU>X~wT)p4s*|P=<D{wE7^Z=pG(B=V!wi^JGoe;Z-NrC$8^dgvRUjvs zL~du815-B_rfvtrylo8gVd@}GTA;O!VIiuM782v6McWt_gPpV_ay!FPm{rT5RxR4b zuzVZC3Yb+OC)q@9XIKeSw+g0i2gB-Z3~ONOAWmAVwT)pNs*~0c<D~W57&d^Nv@vo! z!zP$jo1s>%-^Q?I8^czZRUjw1L~du;22-~krfvtrj%^G(Vd@}G+NHIPVK=Iib`#^I zJ=+-ef}ON4ay!F*m{kX0R)L*#5M~v~Nj{O=84khJ9fqpgvxDKtHin}xbr2^VLsZdB zd<@MD3=E+R91P(M{0tEc;tY`tRt!-LZVb^3{tPh;VGOYhDGYH8*$nXvc?^jR<qSy- zbqvW2Jq#%flNr(&rZJ>5%x1`BSj3RUu!<p@;VeTA!%c=<hDQu}3@;h-8NM?VF#KaE zWMpJ0X5?ZhVH9L2Wt3+qV^m|PVAN!&WYlA*W;A7}VYFqaWlUhGW6WWwXDnrCV60(i zWb9&SVw}j(%s7Rim2oaZ8{-m&cE(K%9gI5}x)}E`bTb}g=w&>?(8qXzp`Y<H!vw}Z z3=^4{8746aGE8QYV3@)r%`lZofnhq6I>QVmeTJD#K@78);uvN#r8CT7%43+zRKqZj zshMFuQyarVrhbM+Ow$+^Gc93Q!nB%U8Pht3<xHCyRx<5kSjBXRVKviJhBZtd8P+oW zVpzw_$grN7pJ4;D7{f+pNruhLN(@_=H5s-tn=@=<wqw}A?8vZ_*^Oa0voFIQ=1_*c z%oPm#m|Gb3GxstaV4lKoka-cqA?B3~hnd$f9A)0haEy5m!*S+Q3@4Z`GMr+*!f=}T zCc|0g2Mp(!Uof0!;byqNBF=D;MS<ZGi#o$)7E^{REH(^RS?n3Evv@GvVDV?T$r8(O zizS8O4of=2U6ve%`z*x_4_K-h9<t11c*L@b;W5i*h9@k$7@o46V0gxIp5ZymC5D$Q zw;5isJYsmw@`2$E%Xfx%EWa4uv;1fH1ZwgymN2L?_%p~bYBTCEuric`S-K3Y3|0)0 zjCzdv;AT(@qXDBK0~5m|1{p>pMq>t6MlLYRgn^aeEL`0xh89LskUGXv1{p>(Mso&M z#<^gY1p_N%0!$sFEkg^VC0N}b1{p>xMr#IE#?K6@5Zf3pFa$8#fMl7{8Dto38SNNY znfk#jdj?jfAebpk`V1|M4q$b^7-Se78J!qdnU%mSX9iZLr*L(L7+M%zK<b!#8Dtn; z8QmCInYV&j?hLHV6)<(op$sjI9w2or3Jfxgo{U}$tSla2mNx?{3pZTd3x*a(AF#U3 z3^I(qjD8HPEVscde+E{Tc`$V>)eJ3+0U&jtCJ4Am#=yYA@)O)lLvEab!ZwhBi2)LN zK@3dL@CjyMf`&y10~6G@p$tq+5dVZRFhN}$&cMVBaZ>~X6V%p7Xyfb(gZ4iLHFkzT zc7_mkMvXrV?(7T^zZg`0F);mNVEM}+OP=^I25U;RQ|Jr^M$p~}NF$HIn1PXjk%57M zRckxL@r?`&3`~rmz6cisi2T98!tfK6$QgJbiWp<SZDdBqSjK3m0jC+5!E%*a0-Spp zPHbg3sReCkFmGcx1!J=yv00JWY)EW&BsK>UTL4*+0J16pkTQg$^%%Gr7#NutI2oB4 zL>XBa6d73=bQ#$gEE(AuTp2kS0vS0O;uyIYvKhG<Dj0c?JXQ(!SQKL%12br#fiZ{y zbOQ_ng9|8Rw6wv#(E<BI7wiK`7O=Y{S-~!nWCOWHOOhSpT1gIwLnS%kZe#`rEX0kX z3@nUd3|x%j3<8W23}TFu46=+;3@VJ$4BCt`491MI4AzWt49<-5U^k{Qa4|42xIo<q zV#PBWf&<-!F#(c87+e?=84VdgT`(8MBt}C97O;+FMneWxFe`=85Y(7waA8bkG-O~0 zi={CdGH`%d>5PU9obV10#D+k)4ME_<0J0$%ZbJy%hETW-VQ?G5;Wk9TZHQ#xWXu33 zuuR4*1_p*S21dp_24=?mXa>$=#)4wT!eYjvV#eZP#*$*j(qhK4V#e}f#tOztuzXc9 zV|6iOO)+C_F=JgZV|_7WLos7xF=G>BGg!W*m=QZ-U}0=!Y=b6NU1(}&7T{b1b_yt! zvw=Lyr~(dZNIGYR1~nsNJ7Wh_s}58v6EnI_Z6uvcaGjm-9D<z1P9st)IE#T|iqQzk z09LpGU04k`gKmI10}G=CRs*^jd%*ou1_mbvMsO5zX>DgXdw?O(2i&AV%IS=@3>=Jh zU{k~(DxuEcU|?eGWt3!KWb6ZtQ!p?xTw-7Ztqz8U${q$5uzF{$Z4Bppv>CTDoY&gI zaPk;~pf-r!#&F>P!^N!(C$%^D>}I$extrli<aUOuLf5u2T-VyhaAO<8&20?Vw=vw> z&TxA_C>j_P7!(;UF+lQ)94Hkrx-zgbx-oDux-$qedN9Z{dNC+6dNU|7`hcCQ03HsM zfjE*ui9wNZ0^>xmNzM>2fIHcu3`~DOo$SE>pjc#Q2xMSn2m53aV-F;|Gw6e4zy;wp zhC84^8A$Lz5=SK1E=b~l#t`FV1_lNOa7t!lU}T&E;(*ppLjz_512Z^>m}+ffxa$K7 zi(?F0%(gNh*1kmy@*rBq$WQke1E20ThI@Y6x-#1sPPH&GF8_ZI96OL8P-Ea^U|>vU zU}a2U;9*Q<5NAwdkYh||P-4trP-o0!&}B?zFlNjJJ5P&&g+Y#ipK%)FbOvSyJ_c3B z8H_W*v11Ae3I<jN1IAh4*aVF{@G>y}W#D6H2xOG|#lXtI$T*v^2kQFuP}iFvxn2|D zdO0nbZ4CEej(>pc`1=@+uV7$htYqL}tYQ#ntY(m9tYJ`OtYuJRtYgq&tYR=?Y=S#p z7Rm7{aL1d#9j}ko@v<PtvoOwKoC|fl6$2C4*KAta+Zi6B=hhCeb&yof1~r<2fsL`3 zaXKgkfHt8(b4?%vGuRw<NZ}94c#uee<lG4iY>X3;3}c5I#?H6^R6c{tQ%ITti3Bn* zLd(B}42+D6;AN5#$Xd|Alh!tdN81=4qdRy8*bay}98fzL85d*K|707(Q*`|cvFcyK zxD*;(4$$D@0ogCTjp5k=1}^mUzY1&yB+z)EZeU>G0ml&|10&-ycrob;^^E|?v~3KJ zXELy}EN5T=7n+dJgXE}9U=ty}5`dTp&Z(>nOneR?BbPI-fI6^_feBpgNNR0iIDedh zOKTg$ljRKTAPanTw6`%l2gM9z2$c_{kZ~7-Fyn3p3C2BOJ3u7_1A`>Q4h9gbmywl$ zkwKV&4IEEQ@OXlV1VY<>><mnN&g={!42+B`;ciKWx`i9$2!!nrpFwOtz`)9Qkb#Tw z5R&cOaND^VA-1z(*bWf^wPYC?S23=JdOi=D6Tz|Lr>iZqjo}5zzsNS8Vqj%F&A`og z25cj!7y!i$q^SmCL2LxEAO!*|11LQjGBCq^4iNz*ct+3;4``7X3QZZ@TFl!R?jK+X zfz%rit09@-3IiwORj{>?!~ydtCj%2Wa3KwKP&7kC5Sd^dxaj0&U}W6Lz{r?i%viv{ z$he7dEj05PGcbWmaZZrkFAp$;peM<DU|T^ZGca&Mf)|>-)-f<LZpNCtpGa?Gc!ec- zKLwiw@d38vy#?+p<XYkpx|805je$4`R!cxyJRm1+#cIeCbVI)3HDnv(d}siHA`8@d zVb{_IHA)d_0unL*7}yy9gN=fCi%{tl1TUSoGcba-B16+3a_RIMvvgu&1KR=dGop0b ziM4ckgIPK;@nhA$i*Yy9e&o{WHKcSBMhh|~39uOue`1TiJy=U8kZ*95PD~156Cu9B zS~~4z+y`|ameT1Bq;z_XC?AkYCngOBVJ1xm2_`MD9oR}I4m_n3sDBHpypc+${cyJ+ zmridGwnH*3xO8IDV_;>{XW(KoK(ZZ{X&D$mr4z_@NLggafG8UwBA}iCBjW+agHX>S zmrk#-mrhI;46IC+4BSjsjG*2Lw$ce?BjM5s)E{GHJjA#bqjX}yQ93a>F>o?DgRO-m z4wy$FWsxBRdg+A71c%W}r$Pos(8e}s=0lWDEZZ2cluk^L#wjELp_WdE85kLlVoly} zAf*#V@(xDw0k-6Q3~Ryi8a<apgN=bW3AJ<rIq5i7L*Aepl7iQe6WB^8P-hvfbYjY3 zU}J(bS|JfbsB{X3mrf@c7#UAtEnVJXDV<7?oQo)(PGi;o4om4&i&g&_#<S4$k6b#v zg_KUx=t0&7HUr{MY|(cPYv}~?4X)Cu4{RbNCb5=I=NT_R9f+lLdIu?;-Xh8e<kD#x zgD}%{1_>res}o!4#D%AH0*$$$l};DoZb2@c-XUy9E}iBuurkeM;9{Bw_94V}Sf+)P zP9WPMWf5lS6bx!JFkWK34D~#6>GT#y>9mZ2m1#KxH`5BRjo3;jkd1^(C(y_UBjXh; zr4uWz(rE(&C(}l-wUERC^C+&;36Tk|qL)rZ42+D|;5iskI<aCeopyn3g(M)<(&;J# zBja_f$@?9obizp92f=1Re1I)^-+(&{x$X28J(rvW8v}6?YUu=W(oL*}yhAtS5?(`Y zVJn?LV|eJL(=7%zrrThnAl@QWI)S<fkapf}21dp^SWB1pSW2fyU^^gwMwCu>vFiVT zrF43YRsTK4`_S}{TspmnlupX%LG}e~2E?D(qVECL(h1}nT&2?=u!#^~VJ)2=GCqPj z5KHOw0a7}>N0bjpr4us?gD^8Ig9J0A)d?vdP<wVDdm;Te<njR`5`x*Ydkl9Aa_RH| zVLMXk#LUIO%FNBc#S9rahS(0vw2;yXWIL|XDFj?PJz;zb^*nOv^d5WZ#4N(V$}Gyj z%`65EQ*5OZ$VS4YQwV5~p79x$(uoa6>BKC@z{w05eug9tm`8DyPKZqK9KCcZW?*D| z0nfpR(uoag>BOu7_AJC>sHM|$21dr0Sd;e$Na=*0yqWdEW<h*_EqT9!I}5pVdXJV% zn9ae)K%9hHI)R+@8ml26&<%0GYsedHr4wjs0j+dm_F!OR_5>RR@fM-dDHPszddtAb z_zr97@)5IiVh#Y?0r4}Ubb60f|0m4Si5Yp!6rukE<40)vM=qT{LP{s_*dfxmD{~Uq z4G@1~i@r}-ODB+TaFkBWSzr?(zQS5MeP;Xubs(0~=@X=M`iLkWkV~f`24Uu61_@?J zs}oW_pq5U2c-l^(n5ENKxLc4*r%wpmkxQov23F=u1}^3*un!@&!!j+TbOPCqt8@a5 z^)NDiWBd;FJaXyu5l89N#K6kj%)rgu0=5xb=>)QoaOo5ZE}ed0DV^AHl}<ejoXovo zYaxjP=22Xw6CxA*L@%967#JCU!E-R8bYjO|I!y!H3Q0hyrPEIaM#kS*llLb`>4cHI z=Yq|G_yAk-{sVUwa_RIDy<k}iHU{D()Y1v$q`z1V`GjuBI=qJb!&W+hW<1eLr)>;u z%-g|6LA*t%bP9u)PX9quw^&P;&sa*QePBBveukGWOpI9df5B2Z9mlGliHRAS{*g<k z&ydo|7(K`?fX#sT6HD|lv0yEoK)%6MI^6)92=NuR(us+c2{hRRny|-GI(>nZPM;Cw z19Iu~fI*n~A%g@nq}2&2A5cpt0X(Hs7)I&D#13~0a_RI1VLNi^^o)U(`8fj@^9!&K zA-2OZEu?e;*^aAp3InyBm^hd?p|OKpI(^1bI(=YZW&X&(%?w_p!+@=H0@+BobP5BN zPM{NuFvguYaFtHK7&w`KgFOmK959dKDxKh&fQcKubSh<FWa5G6U_|M}fwgpEVFB9; zNkAy26B9QBBNH#y<oyLwI-w_T7H+Uv5FcPm-h6OpA(u{{(Q*lkFxVJ~lTb=0u#@<) z8uA6*5E;CN2*67x&>$gbRGdRg8@vz$t$1QlVPI!b1)Bx&7p&-DVBkQTuYibz!-^*+ zK?X)9A*{vASIpvxMF(sL#M3Z47@35z>i>pWJh7N!)i1&%3e5n>#nV?v@nnr2X2|pT z*y2wNYw-l~4UXc8#SO_-Sc@ldCJCqmu@q0=AjQ*HL;-<RJhAvO2($PzNU%Vfosa?o zwRjT3Q#^%Z7Eh9Jw;&f!-w?JV6;CW746H1n3|uT>U>`zkhviyG@dUCRSMd}ME}o>A zK)VJ&WixW|^c8#Y#1hBA$`a4O&5{7N5nJ&DvXOA{6b>$)WZ;b_P*DlW0X$lu41jgk zjwOSEizO3mFC-VhQU@2ttQ|xIkqcze%cn91MkYCU9yS351Oo#D7ua$v1LG`3U~3^6 zg9~}uj!Bk*kx3qF0{;dnpfD16CD<%fFTetfk%5s(0q!p30_rPzK4}CS191{+0R?iB zB347bp&QbL*AOMF1r(Ov9m^yJc9zLtvmpM06&{e{2zkl^A`$^Fpp+RHnN+YAFyFBh zP_w{xKs*hzgON!UtNtHY3aG_c^{X+dL-Rj!0reeHKslp_*&47J5P!mwAaeX^U@f3P zzQI*MZ2_AI@fFqrN|On?yM+Nu0rdk?Kz&CP5y%D99tL5Sy$lj8kd`N;h(Il%MDP?) z5ts#(Hry@91=J6O?Z^exAqG~K!wg(3N5DRW*p6C2fo#WBKt+J^C6f-5E;M$K3#jin z3aB#-tSo04xLMADZNyeUfoz1u7ZU?y4FTq=f(UQ{rH8G6!qvTFxyHc7avf|hYU+R# zN65JVB7(>T`sf8zIRhh;0Xz>Q6;RmwcPtOU)<TjHY5}Fsz{q5XHG%(t6i^rm{5jYx zR4>2+3{*fF!QF*iKz&EgC-1?=K%9hHK!KcOjMb1I=!X2jYlsQf0t!n9kClOeos|)6 z7Q|n$!UIwqAx8~FBobagnKCdknPDwpeqt6-tQ=rFAfATV!N_EeRsS!{0*X}-t9}b6 zOK28AE}(uw3Mg;1Fk_Vhn*s4BwgSouYXJrF4UPheRS9e+4gC~GDgr~|PSP`@Ar z)K5eafmA@TYB312YBNZ%LfW2?A_BF562ntK!Ir!u78Wqs!rg*gK>b44j#NOg8ZfZ3 z8ZvOPLKd?^Y)37iK(^y5pd!HqlpT{j)bq#%)KBaM6sr{jE2}jFH>(XeOtBSEARA%% z4R-+*2`-=<uoY0adU&iZ3|y?PV0%$h2c$Sc&IJ$=L@sbdFQ6(I7@3^lc^IjH!rsMW zg>1BiBq7uS%8`MQ$r)<`{{<<aFcNqu7B9d83{*h5z}<yhK>b9|C$V5-AWlLppg>M? z#cIeebVJhc8sf&}4ow;emuzSFjcy3?@GjIP42(=3@O+AM6*p@hlJ(G4+yaiEgO4$+ z-Nx_-%~}TJRZLK81soZtVsSI(;$j?{Co#E07n>kFyp7>65jKMp7-*Pi3Il_HBV#{S zSKKASAOT0lZmh02M}%g?f^o1ho>)9XnlTK_koA2`UQFJgwfjsyjJXU93_=V{jM>c6 Rj5%tYjO&@D88@hL0stzIo?rj~ literal 37693 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 diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class index a390b6e8f684e182024b8bdc6f740b86029f6b5e..60f683849850efe2080cb1ed809e0ec9cf2ab753 100644 GIT binary patch delta 25 hcmeylkMZX|#tp27Y^ixAj0^>n56aqXb~iNA0|1H92~7Y1 delta 25 hcmeylkMZX|#tp27Y<a0Aj0^>n56aqXb~iNA0|1HI2~7Y1 diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class index bee6b00a7fbcb24224de0896065465999e5cc1c1..0bbd8da78e8e73243a3cec3809999e10864ca61a 100644 GIT binary patch delta 17 YcmaF#it*7a#tpjGOsRRB^{tJq08C^D5&!@I delta 17 YcmaF#it*7a#tpjGOnIrB^{tJq08DKM5&!@I diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.class index 0c652bfd67c91cff87fdde6a9e80eadc0d44e6d8..4cd345b3d65b9c0b247223eeb26a2fd2f0ed8242 100644 GIT binary patch delta 16 XcmccMcEN2!JmX}2X4cIqjBgYHI#>oQ delta 15 WcmccMcEN2!JR?(H>gGho_lf{DuLd^& diff --git a/build/classes/java/test/openapi/OpenAPIMain_test.class b/build/classes/java/test/openapi/OpenAPIMain_test.class index bf83408b1c106687ff6afc0f214d339be1daf312..b75eda80f274e24ffc35036c0c64c7f36a853f3b 100644 GIT binary patch delta 1957 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 delta 1708 zcmbQM)UQ~7>ff$?3=9k=4ClBQj2YtD84|b{m>A+Y7!uhTlGquNxfs|$yc7_f3L?_D z7+4w7*%>mp7%~~MxEQh-a@ZMixfpyH^0*lIK{ELq3<X>aLLg=#7lSCs&>}7dafWyh zr<jwWgrSs!p^Sr}oQt7iVy(0%6GJ1&;3f`+W-f*nhE{flHZF#Ch7K+U9)?aXh8Tt} zkd@saqKAv2m!S_N*3ZE(0i<gp2g4*ThRF<5*cqlyyplC}8>92&k6fCQzcV^;a-?PE zr1~Z1rcR#EC~m=4UX)pqTExg8;**tFmZ+bZukV(blNt^dwPs{sORXpfEy`hJ;DgBL zrIzT22KiV|wqcYKVNNW_WMtqCE=f$z_Dw7ZNleN~-Mp14gOS;U!E~|@w}}E*X>mbG zzFt;wejX!(5T*^2Kd{Is@apNOr{?J<7G&zCR_OCE%wd?z!!VCwJ`aNl!vaPIiODjI z5((@K3wan8F)U_hSi-}wlwlbo0}rxsJPgYj<})(LB8&Oum$>DZ=B2n+B&QaXWP+R^ z>6~AhlcJE9U!stcpO~WH73}Y)016O=$$MGUCM&Rr@$xXNU|7k{u!@IaHN%?8T&xP} zj0{Zbdh85qc^K9)EMR9?&%>~RVIvR2CWg)I3|n{@wlZwvVc5>FV{$aBA{P(CPKI3| zFYKP&$*PvWhlgP=!#+j^0kFGr67$magG-7s^U~QF_VX|tU^vLb5W*13!*B@X+rtbC zco>c_n6fh*<zYC+aGZzX1j9*21}=~zixtxHixfZxpJHSXP)ICFRY=K9OG_<E%`36u zVrMwb!*GV->|{nZQC>*6KqG3h58I8&e>hxpMKm-aF^J>{Yeoi94NOtZu*t94dpOwB zQ%gW;VR9))`(_7DJ|<!I%;K=boXiwP24)S-C`JYuji||vyfTwla_^GoE6EQiN-Zg= zg!qq<ffbyx7#UcTbMlK*Cnxgko~+9|Uzmr%m;nTs85kK%7)%)$8O$c%=M}3rXJBAp zV_;-pV31|7U|?Y20kc^dEE%jA7#J8CtQkxhm>J9%7?|W3SQ$7O7#Ov8GcZMNXJGad zVzFY`&A=MDn}IEII|I8A$2JB|NtSI4oZA?<wli>Bu?q2QW8eje@L91jTCq#A9b*vL z&A=Zi$+nF_U^|1L75nmf20pL|3z#d(ew;ymH-iw|NMRHsMfUGz5RKf<ASTJSn?XEs zJA(wvHU>#6j!g_wFgHlUGziH+9I}l;R+3`}gPf1{4hDJO9SjPR9NQQa{a{+^8Q6uC zwlQ$(Zevj1#-Or|fomIs><$J69b`oe>_V#OYP58=F{pveQj=t1-pioAgF#~(gQg@a zNO&8A);0!hN!D!)IvW`n7?>GAfgHsk#=yX!%)r5*!ob6z%Am=h&S1(=ufbr!pvhp% zpvB<Fpu-T!pvMr$pwCdnV9YRq!GvKwgE_-i1}lbL47Lo18SEJDGuSgcXK-L-W^iVd zWN>3tWpHQIV(<XRTnr?3pfR_Vp^U+X!IpuMVHZOogB^oC0}}%WqcVd7gCheo0}rD- zgA;=@14})FCL<Gr3xg{ID}yP+HwHHbcLp{F3x>}O9t@rg><kkaW;1v(*fVf2cr!3C z$TKkiXYga-U}xZAU|?rpVrNiiXJBP#@L^}*XJFt`VDM#NVBlh4Ven({X9!>jWC(($ zu3!cR1{P43V_*WMC5Gh;EDWp+3=G!w+B!QJbgfuGsYGukgPzVd1}*Jv3|g@G)Q5z- zfsi3IVznUAx`V+85wt=KEDQ_`-VE#v{tWyK0Ss0QLEsQEf!F~J5e5cphA@V3aQe1p zh+qh3U;<S&)(nvhQ4Gus><lIh(G1}XEMT8<FfjgMuwrM30egvsfsw(FfsrAWfq{XE GAr1f>I&Av@ diff --git a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html index d1a377b1..d09c33d3 100644 --- a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html +++ b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html @@ -41,7 +41,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">0.371s</div> +<div class="counter">0.342s</div> <p>duration</p> </div> </td> @@ -76,73 +76,153 @@ <a name="test()"></a> <h3 class="failures">test()</h3> <span class="code"> -<pre>org.opentest4j.AssertionFailedError: JSONs for uspto.json are different: +<pre>org.opentest4j.AssertionFailedError: JSONs for link-example.json are different: [ { - "op" : "replace", - "path" : "/paths/~1{dataset}~1{version}~1records/post/responses/200/content/application~1json/schema/items/additionalProperties", + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}/get/responses/200/content/application~1json/schema/items/$ref", + "value" : "#/components/schemas/repository" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}/get/responses/200/links", + "value" : { + "userRepository" : { + "$ref" : "#/components/links/UserRepository" + } + } +}, { + "op" : "add", + "path" : "/paths/~12.0~1users~1{username}/get/responses/200/content/application~1json/schema/$ref", + "value" : "#/components/schemas/user" +}, { + "op" : "add", + "path" : "/paths/~12.0~1users~1{username}/get/responses/200/links", + "value" : { + "userRepositories" : { + "$ref" : "#/components/links/UserRepositories" + } + } +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests~1{pid}/get/responses/200/content/application~1json/schema/$ref", + "value" : "#/components/schemas/pullrequest" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests~1{pid}/get/responses/200/links", + "value" : { + "pullRequestMerge" : { + "$ref" : "#/components/links/PullRequestMerge" + } + } +}, { + "op" : "remove", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/parameters/2/required" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/parameters/2/schema/enum", + "value" : [ "open", "merged", "declined" ] +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/responses/200/content/application~1json/schema/items/$ref", + "value" : "#/components/schemas/pullrequest" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}/get/responses/200/content/application~1json/schema/$ref", + "value" : "#/components/schemas/repository" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}/get/responses/200/links", "value" : { - "type" : "object" + "repositoryPullRequests" : { + "$ref" : "#/components/links/RepositoryPullRequests" + } } +}, { + "op" : "remove", + "path" : "/components/links/UserRepositories/operationRef" +}, { + "op" : "remove", + "path" : "/components/links/UserRepository/operationRef" +}, { + "op" : "remove", + "path" : "/components/links/PullRequestMerge/operationRef" +}, { + "op" : "remove", + "path" : "/components/links/RepositoryPullRequests/operationRef" +}, { + "op" : "add", + "path" : "/components/schemas/pullrequest/properties/author/$ref", + "value" : "#/components/schemas/user" +}, { + "op" : "add", + "path" : "/components/schemas/pullrequest/properties/repository/$ref", + "value" : "#/components/schemas/repository" }, { "op" : "add", - "path" : "/paths/~1/get/responses/200/content/application~1json/schema/$ref", - "value" : "#/components/schemas/dataSetList" + "path" : "/components/schemas/repository/properties/owner/$ref", + "value" : "#/components/schemas/user" } ] ==> expected: <{ - "openapi" : "3.0.1", + "openapi" : "3.0.0", "info" : { - "contact" : { - "email" : "developer@uspto.gov", - "name" : "Open Data Portal", - "url" : "https://developer.uspto.gov" - }, - "description" : "The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters.", - "title" : "USPTO Data Set API", + "title" : "Link Example", "version" : "1.0.0" }, - "servers" : [ { - "url" : "{scheme}://developer.uspto.gov/ds-api", - "variables" : { - "scheme" : { - "description" : "The Data Set API is accessible via https and http", - "default" : "https", - "enum" : [ "https", "http" ] - } - } - } ], - "tags" : [ { - "name" : "metadata", - "description" : "Find out about the data sets" - }, { - "name" : "search", - "description" : "Search a data set" - } ], "paths" : { - "/" : { + "/2.0/users/{username}" : { + "get" : { + "operationId" : "getUserByName", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + } ], + "responses" : { + "200" : { + "description" : "The User", + "links" : { + "userRepositories" : { + "$ref" : "#/components/links/UserRepositories" + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/user" + } + } + } + } + } + } + }, + "/2.0/repositories/{username}" : { "get" : { - "tags" : [ "metadata" ], - "summary" : "List available data sets", - "operationId" : "list-data-sets", + "operationId" : "getRepositoriesByOwner", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + } ], "responses" : { "200" : { - "description" : "Returns a list of data sets", + "description" : "repositories owned by the supplied user", + "links" : { + "userRepository" : { + "$ref" : "#/components/links/UserRepository" + } + }, "content" : { "application/json" : { - "example" : { - "total" : 2, - "apis" : [ { - "apiKey" : "oa_citations", - "apiVersionNumber" : "v1", - "apiUrl" : "https://developer.uspto.gov/ds-api/oa_citations/v1/fields", - "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/oa_citations.json" - }, { - "apiKey" : "cancer_moonshot", - "apiVersionNumber" : "v1", - "apiUrl" : "https://developer.uspto.gov/ds-api/cancer_moonshot/v1/fields", - "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/cancer_moonshot.json" - } ] - }, "schema" : { - "$ref" : "#/components/schemas/dataSetList" + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/repository" + } } } } @@ -150,48 +230,78 @@ } } }, - "/{dataset}/{version}/fields" : { + "/2.0/repositories/{username}/{slug}" : { "get" : { - "tags" : [ "metadata" ], - "summary" : "Provides the general information about the API and the list of fields that can be used to query the dataset.", - "description" : "This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below.", - "operationId" : "list-searchable-fields", + "operationId" : "getRepository", "parameters" : [ { - "description" : "Name of the dataset.", - "example" : "oa_citations", "required" : true, "schema" : { "type" : "string" }, "in" : "path", - "name" : "dataset" + "name" : "username" }, { - "description" : "Version of the dataset.", - "example" : "v1", "required" : true, "schema" : { "type" : "string" }, "in" : "path", - "name" : "version" + "name" : "slug" } ], "responses" : { "200" : { - "description" : "The dataset API for the given version is found and it is accessible to consume.", + "description" : "The repository", + "links" : { + "repositoryPullRequests" : { + "$ref" : "#/components/links/RepositoryPullRequests" + } + }, "content" : { "application/json" : { "schema" : { - "type" : "string" + "$ref" : "#/components/schemas/repository" } } } + } + } + } + }, + "/2.0/repositories/{username}/{slug}/pullrequests" : { + "get" : { + "operationId" : "getPullRequestsByRepository", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" }, - "404" : { - "description" : "The combination of dataset name and version is not found in the system or it is not published yet to be consumed by public.", + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + }, { + "schema" : { + "type" : "string", + "enum" : [ "open", "merged", "declined" ] + }, + "in" : "query", + "name" : "state" + } ], + "responses" : { + "200" : { + "description" : "an array of pull request objects", "content" : { "application/json" : { "schema" : { - "type" : "string" + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/pullrequest" + } } } } @@ -199,114 +309,150 @@ } } }, - "/{dataset}/{version}/records" : { - "post" : { - "tags" : [ "search" ], - "summary" : "Provides search capability for the data set with the given search criteria.", - "description" : "This API is based on Solr/Lucene Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api.", - "operationId" : "perform-search", + "/2.0/repositories/{username}/{slug}/pullrequests/{pid}" : { + "get" : { + "operationId" : "getPullRequestsById", "parameters" : [ { - "description" : "Version of the dataset.", "required" : true, "schema" : { - "type" : "string", - "default" : "v1" + "type" : "string" }, "in" : "path", - "name" : "version" + "name" : "username" }, { - "description" : "Name of the dataset. In this case, the default value is oa_citations", "required" : true, "schema" : { - "type" : "string", - "default" : "oa_citations" + "type" : "string" }, "in" : "path", - "name" : "dataset" + "name" : "slug" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "pid" } ], - "requestBody" : { - "content" : { - "application/x-www-form-urlencoded" : { - "schema" : { - "properties" : { - "criteria" : { - "description" : "Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values.", - "type" : "string", - "default" : "*:*" - }, - "start" : { - "description" : "Starting record number. Default value is 0.", - "type" : "integer", - "default" : 0 - }, - "rows" : { - "description" : "Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset.", - "type" : "integer", - "default" : 100 - } - }, - "type" : "object", - "required" : [ "criteria" ] - } - } - } - }, "responses" : { "200" : { - "description" : "successful operation", + "description" : "a pull request object", + "links" : { + "pullRequestMerge" : { + "$ref" : "#/components/links/PullRequestMerge" + } + }, "content" : { "application/json" : { "schema" : { - "type" : "array", - "items" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - } + "$ref" : "#/components/schemas/pullrequest" } } } + } + } + } + }, + "/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge" : { + "post" : { + "operationId" : "mergePullRequest", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + }, { + "required" : true, + "schema" : { + "type" : "string" }, - "404" : { - "description" : "No matching record found for the given criteria." + "in" : "path", + "name" : "pid" + } ], + "responses" : { + "204" : { + "description" : "the PR was successfully merged" } } } } }, "components" : { + "links" : { + "UserRepositories" : { + "operationId" : "getRepositoriesByOwner", + "parameters" : { + "username" : "$response.body#/username" + } + }, + "UserRepository" : { + "operationId" : "getRepository", + "parameters" : { + "username" : "$response.body#/owner/username", + "slug" : "$response.body#/slug" + } + }, + "RepositoryPullRequests" : { + "operationId" : "getPullRequestsByRepository", + "parameters" : { + "username" : "$response.body#/owner/username", + "slug" : "$response.body#/slug" + } + }, + "PullRequestMerge" : { + "operationId" : "mergePullRequest", + "parameters" : { + "username" : "$response.body#/author/username", + "slug" : "$response.body#/repository/slug", + "pid" : "$response.body#/id" + } + } + }, "schemas" : { - "dataSetList" : { + "user" : { "properties" : { - "total" : { + "username" : { + "type" : "string" + }, + "uuid" : { + "type" : "string" + } + }, + "type" : "object" + }, + "repository" : { + "properties" : { + "slug" : { + "type" : "string" + }, + "owner" : { + "$ref" : "#/components/schemas/user" + } + }, + "type" : "object" + }, + "pullrequest" : { + "properties" : { + "id" : { "type" : "integer" }, - "apis" : { - "type" : "array", - "items" : { - "properties" : { - "apiKey" : { - "description" : "To be used as a dataset parameter value", - "type" : "string" - }, - "apiVersionNumber" : { - "description" : "To be used as a version parameter value", - "type" : "string" - }, - "apiUrl" : { - "description" : "The URL describing the dataset's fields", - "format" : "uriref", - "type" : "string" - }, - "apiDocumentationUrl" : { - "description" : "A URL to the API console for each API", - "format" : "uriref", - "type" : "string" - } - }, - "type" : "object" - } + "title" : { + "type" : "string" + }, + "repository" : { + "$ref" : "#/components/schemas/repository" + }, + "author" : { + "$ref" : "#/components/schemas/user" } }, "type" : "object" @@ -314,150 +460,163 @@ } } }> but was: <{ - "openapi" : "3.0.1", + "openapi" : "3.0.0", "info" : { - "contact" : { - "email" : "developer@uspto.gov", - "name" : "Open Data Portal", - "url" : "https://developer.uspto.gov" - }, - "description" : "The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters.", - "title" : "USPTO Data Set API", + "title" : "Link Example", "version" : "1.0.0" }, - "servers" : [ { - "url" : "{scheme}://developer.uspto.gov/ds-api", - "variables" : { - "scheme" : { - "description" : "The Data Set API is accessible via https and http", - "default" : "https", - "enum" : [ "https", "http" ] - } - } - } ], - "tags" : [ { - "name" : "metadata", - "description" : "Find out about the data sets" - }, { - "name" : "search", - "description" : "Search a data set" - } ], "paths" : { - "/{dataset}/{version}/records" : { - "post" : { - "tags" : [ "search" ], - "summary" : "Provides search capability for the data set with the given search criteria.", - "description" : "This API is based on Solr/Lucene Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api.", - "operationId" : "perform-search", + "/2.0/repositories/{username}" : { + "get" : { + "operationId" : "getRepositoriesByOwner", "parameters" : [ { - "description" : "Version of the dataset.", - "required" : true, - "schema" : { - "type" : "string", - "default" : "v1" - }, - "in" : "path", - "name" : "version" - }, { - "description" : "Name of the dataset. In this case, the default value is oa_citations", "required" : true, "schema" : { - "type" : "string", - "default" : "oa_citations" + "type" : "string" }, "in" : "path", - "name" : "dataset" + "name" : "username" } ], - "requestBody" : { - "content" : { - "application/x-www-form-urlencoded" : { - "schema" : { - "properties" : { - "criteria" : { - "description" : "Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values.", - "type" : "string", - "default" : "*:*" - }, - "start" : { - "description" : "Starting record number. Default value is 0.", - "type" : "integer", - "default" : 0 - }, - "rows" : { - "description" : "Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset.", - "type" : "integer", - "default" : 100 - } - }, - "type" : "object", - "required" : [ "criteria" ] - } - } - } - }, "responses" : { "200" : { - "description" : "successful operation", + "description" : "repositories owned by the supplied user", "content" : { "application/json" : { "schema" : { "type" : "array", - "items" : { - "type" : "object", - "additionalProperties" : false - } + "items" : { } } } } + } + } + } + }, + "/2.0/users/{username}" : { + "get" : { + "operationId" : "getUserByName", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" }, - "404" : { - "description" : "No matching record found for the given criteria." + "in" : "path", + "name" : "username" + } ], + "responses" : { + "200" : { + "description" : "The User", + "content" : { + "application/json" : { + "schema" : { } + } + } } } } }, - "/{dataset}/{version}/fields" : { + "/2.0/repositories/{username}/{slug}/pullrequests/{pid}" : { "get" : { - "tags" : [ "metadata" ], - "summary" : "Provides the general information about the API and the list of fields that can be used to query the dataset.", - "description" : "This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below.", - "operationId" : "list-searchable-fields", + "operationId" : "getPullRequestsById", "parameters" : [ { - "description" : "Name of the dataset.", - "example" : "oa_citations", "required" : true, "schema" : { "type" : "string" }, "in" : "path", - "name" : "dataset" + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" }, { - "description" : "Version of the dataset.", - "example" : "v1", "required" : true, "schema" : { "type" : "string" }, "in" : "path", - "name" : "version" + "name" : "pid" } ], "responses" : { "200" : { - "description" : "The dataset API for the given version is found and it is accessible to consume.", + "description" : "a pull request object", "content" : { "application/json" : { - "schema" : { - "type" : "string" - } + "schema" : { } } } + } + } + } + }, + "/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge" : { + "post" : { + "operationId" : "mergePullRequest", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" }, - "404" : { - "description" : "The combination of dataset name and version is not found in the system or it is not published yet to be consumed by public.", + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "pid" + } ], + "responses" : { + "204" : { + "description" : "the PR was successfully merged" + } + } + } + }, + "/2.0/repositories/{username}/{slug}/pullrequests" : { + "get" : { + "operationId" : "getPullRequestsByRepository", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + }, { + "required" : false, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "state" + } ], + "responses" : { + "200" : { + "description" : "an array of pull request objects", "content" : { "application/json" : { "schema" : { - "type" : "string" + "type" : "array", + "items" : { } } } } @@ -465,30 +624,29 @@ } } }, - "/" : { + "/2.0/repositories/{username}/{slug}" : { "get" : { - "tags" : [ "metadata" ], - "summary" : "List available data sets", - "operationId" : "list-data-sets", + "operationId" : "getRepository", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + } ], "responses" : { "200" : { - "description" : "Returns a list of data sets", + "description" : "The repository", "content" : { "application/json" : { - "example" : { - "total" : 2, - "apis" : [ { - "apiKey" : "oa_citations", - "apiVersionNumber" : "v1", - "apiUrl" : "https://developer.uspto.gov/ds-api/oa_citations/v1/fields", - "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/oa_citations.json" - }, { - "apiKey" : "cancer_moonshot", - "apiVersionNumber" : "v1", - "apiUrl" : "https://developer.uspto.gov/ds-api/cancer_moonshot/v1/fields", - "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/cancer_moonshot.json" - } ] - }, "schema" : { } } } @@ -498,37 +656,70 @@ } }, "components" : { + "links" : { + "UserRepositories" : { + "operationId" : "getRepositoriesByOwner", + "operationRef" : "", + "parameters" : { + "username" : "$response.body#/username" + } + }, + "UserRepository" : { + "operationId" : "getRepository", + "operationRef" : "", + "parameters" : { + "slug" : "$response.body#/slug", + "username" : "$response.body#/owner/username" + } + }, + "PullRequestMerge" : { + "operationId" : "mergePullRequest", + "operationRef" : "", + "parameters" : { + "pid" : "$response.body#/id", + "slug" : "$response.body#/repository/slug", + "username" : "$response.body#/author/username" + } + }, + "RepositoryPullRequests" : { + "operationId" : "getPullRequestsByRepository", + "operationRef" : "", + "parameters" : { + "slug" : "$response.body#/slug", + "username" : "$response.body#/owner/username" + } + } + }, "schemas" : { - "dataSetList" : { + "pullrequest" : { "properties" : { - "total" : { + "author" : { }, + "id" : { "type" : "integer" }, - "apis" : { - "type" : "array", - "items" : { - "properties" : { - "apiKey" : { - "description" : "To be used as a dataset parameter value", - "type" : "string" - }, - "apiUrl" : { - "description" : "The URL describing the dataset's fields", - "format" : "uriref", - "type" : "string" - }, - "apiDocumentationUrl" : { - "description" : "A URL to the API console for each API", - "format" : "uriref", - "type" : "string" - }, - "apiVersionNumber" : { - "description" : "To be used as a version parameter value", - "type" : "string" - } - }, - "type" : "object" - } + "title" : { + "type" : "string" + }, + "repository" : { } + }, + "type" : "object" + }, + "repository" : { + "properties" : { + "owner" : { }, + "slug" : { + "type" : "string" + } + }, + "type" : "object" + }, + "user" : { + "properties" : { + "uuid" : { + "type" : "string" + }, + "username" : { + "type" : "string" } }, "type" : "object" @@ -540,8 +731,8 @@ at org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1135) - at openapi.OpenAPIMain_test.compareJson(OpenAPIMain_test.java:80) - at openapi.OpenAPIMain_test.test(OpenAPIMain_test.java:67) + at openapi.OpenAPIMain_test.compareJson(OpenAPIMain_test.java:89) + at openapi.OpenAPIMain_test.test(OpenAPIMain_test.java:75) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) @@ -573,7 +764,7 @@ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) @@ -583,7 +774,7 @@ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) @@ -631,7 +822,7 @@ at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) - at java.base/java.lang.Thread.run(Thread.java:834) + at java.base/java.lang.Thread.run(Thread.java:829) </pre> </span> </div> @@ -648,7 +839,7 @@ </thead> <tr> <td class="failures">test()</td> -<td class="failures">0.371s</td> +<td class="failures">0.342s</td> <td class="failures">failed</td> </tr> </table> @@ -656,7 +847,13 @@ <div id="tab2" class="tab"> <h2>Standard output</h2> <span class="code"> -<pre>Loading expression DSL file 'uspto.json'. +<pre>Loading expression DSL file 'api-with-examples.json'. +Is the source object valid? : true +Is the generated object valid? : true +Loading expression DSL file 'callback-example.json'. +Is the source object valid? : true +Is the generated object valid? : true +Loading expression DSL file 'link-example.json'. Is the source object valid? : true Is the generated object valid? : true </pre> @@ -670,7 +867,7 @@ Is the generated object valid? : true <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 10. 오후 2:11:46</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 13. ì˜¤ì „ 2:47:54</p> </div> </div> </body> diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html index 03f9286f..58d49c46 100644 --- a/build/reports/tests/test/index.html +++ b/build/reports/tests/test/index.html @@ -38,7 +38,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">0.371s</div> +<div class="counter">0.342s</div> <p>duration</p> </div> </td> @@ -97,7 +97,7 @@ <td>1</td> <td>1</td> <td>0</td> -<td>0.371s</td> +<td>0.342s</td> <td class="failures">0%</td> </tr> </tbody> @@ -124,7 +124,7 @@ <td>1</td> <td>1</td> <td>0</td> -<td>0.371s</td> +<td>0.342s</td> <td class="failures">0%</td> </tr> </tbody> @@ -138,7 +138,7 @@ <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 10. 오후 2:11:46</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 13. ì˜¤ì „ 2:47:54</p> </div> </div> </body> diff --git a/build/reports/tests/test/packages/openapi.html b/build/reports/tests/test/packages/openapi.html index fa355808..df5098e8 100644 --- a/build/reports/tests/test/packages/openapi.html +++ b/build/reports/tests/test/packages/openapi.html @@ -40,7 +40,7 @@ </td> <td> <div class="infoBox" id="duration"> -<div class="counter">0.371s</div> +<div class="counter">0.342s</div> <p>duration</p> </div> </td> @@ -95,7 +95,7 @@ <td>1</td> <td>1</td> <td>0</td> -<td>0.371s</td> +<td>0.342s</td> <td class="failures">0%</td> </tr> </table> @@ -108,7 +108,7 @@ <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/> </label> </div>Generated by -<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 10. 오후 2:11:46</p> +<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 8. 13. ì˜¤ì „ 2:47:54</p> </div> </div> </body> diff --git a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml index 5ae4ef9a..8febe0ad 100644 --- a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml +++ b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml @@ -1,74 +1,154 @@ <?xml version="1.0" encoding="UTF-8"?> -<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="1" errors="0" timestamp="2021-08-10T05:11:45" hostname="DESKTOP-5DL2OO8" time="0.371"> +<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="1" errors="0" timestamp="2021-08-12T17:47:54" hostname="DESKTOP-RAH69DT" time="0.342"> <properties/> - <testcase name="test()" classname="openapi.OpenAPIMain_test" time="0.371"> - <failure message="org.opentest4j.AssertionFailedError: JSONs for uspto.json are different: [ { "op" : "replace", "path" : "/paths/~1{dataset}~1{version}~1records/post/responses/200/content/application~1json/schema/items/additionalProperties", "value" : { "type" : "object" } }, { "op" : "add", "path" : "/paths/~1/get/responses/200/content/application~1json/schema/$ref", "value" : "#/components/schemas/dataSetList" } ] ==> expected: <{ "openapi" : "3.0.1", "info" : { "contact" : { "email" : "developer@uspto.gov", "name" : "Open Data Portal", "url" : "https://developer.uspto.gov" }, "description" : "The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters.", "title" : "USPTO Data Set API", "version" : "1.0.0" }, "servers" : [ { "url" : "{scheme}://developer.uspto.gov/ds-api", "variables" : { "scheme" : { "description" : "The Data Set API is accessible via https and http", "default" : "https", "enum" : [ "https", "http" ] } } } ], "tags" : [ { "name" : "metadata", "description" : "Find out about the data sets" }, { "name" : "search", "description" : "Search a data set" } ], "paths" : { "/" : { "get" : { "tags" : [ "metadata" ], "summary" : "List available data sets", "operationId" : "list-data-sets", "responses" : { "200" : { "description" : "Returns a list of data sets", "content" : { "application/json" : { "example" : { "total" : 2, "apis" : [ { "apiKey" : "oa_citations", "apiVersionNumber" : "v1", "apiUrl" : "https://developer.uspto.gov/ds-api/oa_citations/v1/fields", "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/oa_citations.json" }, { "apiKey" : "cancer_moonshot", "apiVersionNumber" : "v1", "apiUrl" : "https://developer.uspto.gov/ds-api/cancer_moonshot/v1/fields", "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/cancer_moonshot.json" } ] }, "schema" : { "$ref" : "#/components/schemas/dataSetList" } } } } } } }, "/{dataset}/{version}/fields" : { "get" : { "tags" : [ "metadata" ], "summary" : "Provides the general information about the API and the list of fields that can be used to query the dataset.", "description" : "This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below.", "operationId" : "list-searchable-fields", "parameters" : [ { "description" : "Name of the dataset.", "example" : "oa_citations", "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "dataset" }, { "description" : "Version of the dataset.", "example" : "v1", "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "version" } ], "responses" : { "200" : { "description" : "The dataset API for the given version is found and it is accessible to consume.", "content" : { "application/json" : { "schema" : { "type" : "string" } } } }, "404" : { "description" : "The combination of dataset name and version is not found in the system or it is not published yet to be consumed by public.", "content" : { "application/json" : { "schema" : { "type" : "string" } } } } } } }, "/{dataset}/{version}/records" : { "post" : { "tags" : [ "search" ], "summary" : "Provides search capability for the data set with the given search criteria.", "description" : "This API is based on Solr/Lucene Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api.", "operationId" : "perform-search", "parameters" : [ { "description" : "Version of the dataset.", "required" : true, "schema" : { "type" : "string", "default" : "v1" }, "in" : "path", "name" : "version" }, { "description" : "Name of the dataset. In this case, the default value is oa_citations", "required" : true, "schema" : { "type" : "string", "default" : "oa_citations" }, "in" : "path", "name" : "dataset" } ], "requestBody" : { "content" : { "application/x-www-form-urlencoded" : { "schema" : { "properties" : { "criteria" : { "description" : "Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values.", "type" : "string", "default" : "*:*" }, "start" : { "description" : "Starting record number. Default value is 0.", "type" : "integer", "default" : 0 }, "rows" : { "description" : "Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset.", "type" : "integer", "default" : 100 } }, "type" : "object", "required" : [ "criteria" ] } } } }, "responses" : { "200" : { "description" : "successful operation", "content" : { "application/json" : { "schema" : { "type" : "array", "items" : { "type" : "object", "additionalProperties" : { "type" : "object" } } } } } }, "404" : { "description" : "No matching record found for the given criteria." } } } } }, "components" : { "schemas" : { "dataSetList" : { "properties" : { "total" : { "type" : "integer" }, "apis" : { "type" : "array", "items" : { "properties" : { "apiKey" : { "description" : "To be used as a dataset parameter value", "type" : "string" }, "apiVersionNumber" : { "description" : "To be used as a version parameter value", "type" : "string" }, "apiUrl" : { "description" : "The URL describing the dataset's fields", "format" : "uriref", "type" : "string" }, "apiDocumentationUrl" : { "description" : "A URL to the API console for each API", "format" : "uriref", "type" : "string" } }, "type" : "object" } } }, "type" : "object" } } } }> but was: <{ "openapi" : "3.0.1", "info" : { "contact" : { "email" : "developer@uspto.gov", "name" : "Open Data Portal", "url" : "https://developer.uspto.gov" }, "description" : "The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters.", "title" : "USPTO Data Set API", "version" : "1.0.0" }, "servers" : [ { "url" : "{scheme}://developer.uspto.gov/ds-api", "variables" : { "scheme" : { "description" : "The Data Set API is accessible via https and http", "default" : "https", "enum" : [ "https", "http" ] } } } ], "tags" : [ { "name" : "metadata", "description" : "Find out about the data sets" }, { "name" : "search", "description" : "Search a data set" } ], "paths" : { "/{dataset}/{version}/records" : { "post" : { "tags" : [ "search" ], "summary" : "Provides search capability for the data set with the given search criteria.", "description" : "This API is based on Solr/Lucene Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api.", "operationId" : "perform-search", "parameters" : [ { "description" : "Version of the dataset.", "required" : true, "schema" : { "type" : "string", "default" : "v1" }, "in" : "path", "name" : "version" }, { "description" : "Name of the dataset. In this case, the default value is oa_citations", "required" : true, "schema" : { "type" : "string", "default" : "oa_citations" }, "in" : "path", "name" : "dataset" } ], "requestBody" : { "content" : { "application/x-www-form-urlencoded" : { "schema" : { "properties" : { "criteria" : { "description" : "Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values.", "type" : "string", "default" : "*:*" }, "start" : { "description" : "Starting record number. Default value is 0.", "type" : "integer", "default" : 0 }, "rows" : { "description" : "Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset.", "type" : "integer", "default" : 100 } }, "type" : "object", "required" : [ "criteria" ] } } } }, "responses" : { "200" : { "description" : "successful operation", "content" : { "application/json" : { "schema" : { "type" : "array", "items" : { "type" : "object", "additionalProperties" : false } } } } }, "404" : { "description" : "No matching record found for the given criteria." } } } }, "/{dataset}/{version}/fields" : { "get" : { "tags" : [ "metadata" ], "summary" : "Provides the general information about the API and the list of fields that can be used to query the dataset.", "description" : "This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below.", "operationId" : "list-searchable-fields", "parameters" : [ { "description" : "Name of the dataset.", "example" : "oa_citations", "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "dataset" }, { "description" : "Version of the dataset.", "example" : "v1", "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "version" } ], "responses" : { "200" : { "description" : "The dataset API for the given version is found and it is accessible to consume.", "content" : { "application/json" : { "schema" : { "type" : "string" } } } }, "404" : { "description" : "The combination of dataset name and version is not found in the system or it is not published yet to be consumed by public.", "content" : { "application/json" : { "schema" : { "type" : "string" } } } } } } }, "/" : { "get" : { "tags" : [ "metadata" ], "summary" : "List available data sets", "operationId" : "list-data-sets", "responses" : { "200" : { "description" : "Returns a list of data sets", "content" : { "application/json" : { "example" : { "total" : 2, "apis" : [ { "apiKey" : "oa_citations", "apiVersionNumber" : "v1", "apiUrl" : "https://developer.uspto.gov/ds-api/oa_citations/v1/fields", "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/oa_citations.json" }, { "apiKey" : "cancer_moonshot", "apiVersionNumber" : "v1", "apiUrl" : "https://developer.uspto.gov/ds-api/cancer_moonshot/v1/fields", "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/cancer_moonshot.json" } ] }, "schema" : { } } } } } } } }, "components" : { "schemas" : { "dataSetList" : { "properties" : { "total" : { "type" : "integer" }, "apis" : { "type" : "array", "items" : { "properties" : { "apiKey" : { "description" : "To be used as a dataset parameter value", "type" : "string" }, "apiUrl" : { "description" : "The URL describing the dataset's fields", "format" : "uriref", "type" : "string" }, "apiDocumentationUrl" : { "description" : "A URL to the API console for each API", "format" : "uriref", "type" : "string" }, "apiVersionNumber" : { "description" : "To be used as a version parameter value", "type" : "string" } }, "type" : "object" } } }, "type" : "object" } } } }>" type="org.opentest4j.AssertionFailedError">org.opentest4j.AssertionFailedError: JSONs for uspto.json are different: + <testcase name="test()" classname="openapi.OpenAPIMain_test" time="0.342"> + <failure message="org.opentest4j.AssertionFailedError: JSONs for link-example.json are different: [ { "op" : "add", "path" : "/paths/~12.0~1repositories~1{username}/get/responses/200/content/application~1json/schema/items/$ref", "value" : "#/components/schemas/repository" }, { "op" : "add", "path" : "/paths/~12.0~1repositories~1{username}/get/responses/200/links", "value" : { "userRepository" : { "$ref" : "#/components/links/UserRepository" } } }, { "op" : "add", "path" : "/paths/~12.0~1users~1{username}/get/responses/200/content/application~1json/schema/$ref", "value" : "#/components/schemas/user" }, { "op" : "add", "path" : "/paths/~12.0~1users~1{username}/get/responses/200/links", "value" : { "userRepositories" : { "$ref" : "#/components/links/UserRepositories" } } }, { "op" : "add", "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests~1{pid}/get/responses/200/content/application~1json/schema/$ref", "value" : "#/components/schemas/pullrequest" }, { "op" : "add", "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests~1{pid}/get/responses/200/links", "value" : { "pullRequestMerge" : { "$ref" : "#/components/links/PullRequestMerge" } } }, { "op" : "remove", "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/parameters/2/required" }, { "op" : "add", "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/parameters/2/schema/enum", "value" : [ "open", "merged", "declined" ] }, { "op" : "add", "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/responses/200/content/application~1json/schema/items/$ref", "value" : "#/components/schemas/pullrequest" }, { "op" : "add", "path" : "/paths/~12.0~1repositories~1{username}~1{slug}/get/responses/200/content/application~1json/schema/$ref", "value" : "#/components/schemas/repository" }, { "op" : "add", "path" : "/paths/~12.0~1repositories~1{username}~1{slug}/get/responses/200/links", "value" : { "repositoryPullRequests" : { "$ref" : "#/components/links/RepositoryPullRequests" } } }, { "op" : "remove", "path" : "/components/links/UserRepositories/operationRef" }, { "op" : "remove", "path" : "/components/links/UserRepository/operationRef" }, { "op" : "remove", "path" : "/components/links/PullRequestMerge/operationRef" }, { "op" : "remove", "path" : "/components/links/RepositoryPullRequests/operationRef" }, { "op" : "add", "path" : "/components/schemas/pullrequest/properties/author/$ref", "value" : "#/components/schemas/user" }, { "op" : "add", "path" : "/components/schemas/pullrequest/properties/repository/$ref", "value" : "#/components/schemas/repository" }, { "op" : "add", "path" : "/components/schemas/repository/properties/owner/$ref", "value" : "#/components/schemas/user" } ] ==> expected: <{ "openapi" : "3.0.0", "info" : { "title" : "Link Example", "version" : "1.0.0" }, "paths" : { "/2.0/users/{username}" : { "get" : { "operationId" : "getUserByName", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" } ], "responses" : { "200" : { "description" : "The User", "links" : { "userRepositories" : { "$ref" : "#/components/links/UserRepositories" } }, "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/user" } } } } } } }, "/2.0/repositories/{username}" : { "get" : { "operationId" : "getRepositoriesByOwner", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" } ], "responses" : { "200" : { "description" : "repositories owned by the supplied user", "links" : { "userRepository" : { "$ref" : "#/components/links/UserRepository" } }, "content" : { "application/json" : { "schema" : { "type" : "array", "items" : { "$ref" : "#/components/schemas/repository" } } } } } } } }, "/2.0/repositories/{username}/{slug}" : { "get" : { "operationId" : "getRepository", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "slug" } ], "responses" : { "200" : { "description" : "The repository", "links" : { "repositoryPullRequests" : { "$ref" : "#/components/links/RepositoryPullRequests" } }, "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/repository" } } } } } } }, "/2.0/repositories/{username}/{slug}/pullrequests" : { "get" : { "operationId" : "getPullRequestsByRepository", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "slug" }, { "schema" : { "type" : "string", "enum" : [ "open", "merged", "declined" ] }, "in" : "query", "name" : "state" } ], "responses" : { "200" : { "description" : "an array of pull request objects", "content" : { "application/json" : { "schema" : { "type" : "array", "items" : { "$ref" : "#/components/schemas/pullrequest" } } } } } } } }, "/2.0/repositories/{username}/{slug}/pullrequests/{pid}" : { "get" : { "operationId" : "getPullRequestsById", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "slug" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "pid" } ], "responses" : { "200" : { "description" : "a pull request object", "links" : { "pullRequestMerge" : { "$ref" : "#/components/links/PullRequestMerge" } }, "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/pullrequest" } } } } } } }, "/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge" : { "post" : { "operationId" : "mergePullRequest", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "slug" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "pid" } ], "responses" : { "204" : { "description" : "the PR was successfully merged" } } } } }, "components" : { "links" : { "UserRepositories" : { "operationId" : "getRepositoriesByOwner", "parameters" : { "username" : "$response.body#/username" } }, "UserRepository" : { "operationId" : "getRepository", "parameters" : { "username" : "$response.body#/owner/username", "slug" : "$response.body#/slug" } }, "RepositoryPullRequests" : { "operationId" : "getPullRequestsByRepository", "parameters" : { "username" : "$response.body#/owner/username", "slug" : "$response.body#/slug" } }, "PullRequestMerge" : { "operationId" : "mergePullRequest", "parameters" : { "username" : "$response.body#/author/username", "slug" : "$response.body#/repository/slug", "pid" : "$response.body#/id" } } }, "schemas" : { "user" : { "properties" : { "username" : { "type" : "string" }, "uuid" : { "type" : "string" } }, "type" : "object" }, "repository" : { "properties" : { "slug" : { "type" : "string" }, "owner" : { "$ref" : "#/components/schemas/user" } }, "type" : "object" }, "pullrequest" : { "properties" : { "id" : { "type" : "integer" }, "title" : { "type" : "string" }, "repository" : { "$ref" : "#/components/schemas/repository" }, "author" : { "$ref" : "#/components/schemas/user" } }, "type" : "object" } } } }> but was: <{ "openapi" : "3.0.0", "info" : { "title" : "Link Example", "version" : "1.0.0" }, "paths" : { "/2.0/repositories/{username}" : { "get" : { "operationId" : "getRepositoriesByOwner", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" } ], "responses" : { "200" : { "description" : "repositories owned by the supplied user", "content" : { "application/json" : { "schema" : { "type" : "array", "items" : { } } } } } } } }, "/2.0/users/{username}" : { "get" : { "operationId" : "getUserByName", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" } ], "responses" : { "200" : { "description" : "The User", "content" : { "application/json" : { "schema" : { } } } } } } }, "/2.0/repositories/{username}/{slug}/pullrequests/{pid}" : { "get" : { "operationId" : "getPullRequestsById", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "slug" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "pid" } ], "responses" : { "200" : { "description" : "a pull request object", "content" : { "application/json" : { "schema" : { } } } } } } }, "/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge" : { "post" : { "operationId" : "mergePullRequest", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "slug" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "pid" } ], "responses" : { "204" : { "description" : "the PR was successfully merged" } } } }, "/2.0/repositories/{username}/{slug}/pullrequests" : { "get" : { "operationId" : "getPullRequestsByRepository", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "slug" }, { "required" : false, "schema" : { "type" : "string" }, "in" : "query", "name" : "state" } ], "responses" : { "200" : { "description" : "an array of pull request objects", "content" : { "application/json" : { "schema" : { "type" : "array", "items" : { } } } } } } } }, "/2.0/repositories/{username}/{slug}" : { "get" : { "operationId" : "getRepository", "parameters" : [ { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "username" }, { "required" : true, "schema" : { "type" : "string" }, "in" : "path", "name" : "slug" } ], "responses" : { "200" : { "description" : "The repository", "content" : { "application/json" : { "schema" : { } } } } } } } }, "components" : { "links" : { "UserRepositories" : { "operationId" : "getRepositoriesByOwner", "operationRef" : "", "parameters" : { "username" : "$response.body#/username" } }, "UserRepository" : { "operationId" : "getRepository", "operationRef" : "", "parameters" : { "slug" : "$response.body#/slug", "username" : "$response.body#/owner/username" } }, "PullRequestMerge" : { "operationId" : "mergePullRequest", "operationRef" : "", "parameters" : { "pid" : "$response.body#/id", "slug" : "$response.body#/repository/slug", "username" : "$response.body#/author/username" } }, "RepositoryPullRequests" : { "operationId" : "getPullRequestsByRepository", "operationRef" : "", "parameters" : { "slug" : "$response.body#/slug", "username" : "$response.body#/owner/username" } } }, "schemas" : { "pullrequest" : { "properties" : { "author" : { }, "id" : { "type" : "integer" }, "title" : { "type" : "string" }, "repository" : { } }, "type" : "object" }, "repository" : { "properties" : { "owner" : { }, "slug" : { "type" : "string" } }, "type" : "object" }, "user" : { "properties" : { "uuid" : { "type" : "string" }, "username" : { "type" : "string" } }, "type" : "object" } } } }>" type="org.opentest4j.AssertionFailedError">org.opentest4j.AssertionFailedError: JSONs for link-example.json are different: [ { - "op" : "replace", - "path" : "/paths/~1{dataset}~1{version}~1records/post/responses/200/content/application~1json/schema/items/additionalProperties", + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}/get/responses/200/content/application~1json/schema/items/$ref", + "value" : "#/components/schemas/repository" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}/get/responses/200/links", + "value" : { + "userRepository" : { + "$ref" : "#/components/links/UserRepository" + } + } +}, { + "op" : "add", + "path" : "/paths/~12.0~1users~1{username}/get/responses/200/content/application~1json/schema/$ref", + "value" : "#/components/schemas/user" +}, { + "op" : "add", + "path" : "/paths/~12.0~1users~1{username}/get/responses/200/links", + "value" : { + "userRepositories" : { + "$ref" : "#/components/links/UserRepositories" + } + } +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests~1{pid}/get/responses/200/content/application~1json/schema/$ref", + "value" : "#/components/schemas/pullrequest" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests~1{pid}/get/responses/200/links", + "value" : { + "pullRequestMerge" : { + "$ref" : "#/components/links/PullRequestMerge" + } + } +}, { + "op" : "remove", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/parameters/2/required" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/parameters/2/schema/enum", + "value" : [ "open", "merged", "declined" ] +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}~1pullrequests/get/responses/200/content/application~1json/schema/items/$ref", + "value" : "#/components/schemas/pullrequest" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}/get/responses/200/content/application~1json/schema/$ref", + "value" : "#/components/schemas/repository" +}, { + "op" : "add", + "path" : "/paths/~12.0~1repositories~1{username}~1{slug}/get/responses/200/links", "value" : { - "type" : "object" + "repositoryPullRequests" : { + "$ref" : "#/components/links/RepositoryPullRequests" + } } +}, { + "op" : "remove", + "path" : "/components/links/UserRepositories/operationRef" +}, { + "op" : "remove", + "path" : "/components/links/UserRepository/operationRef" +}, { + "op" : "remove", + "path" : "/components/links/PullRequestMerge/operationRef" +}, { + "op" : "remove", + "path" : "/components/links/RepositoryPullRequests/operationRef" +}, { + "op" : "add", + "path" : "/components/schemas/pullrequest/properties/author/$ref", + "value" : "#/components/schemas/user" +}, { + "op" : "add", + "path" : "/components/schemas/pullrequest/properties/repository/$ref", + "value" : "#/components/schemas/repository" }, { "op" : "add", - "path" : "/paths/~1/get/responses/200/content/application~1json/schema/$ref", - "value" : "#/components/schemas/dataSetList" + "path" : "/components/schemas/repository/properties/owner/$ref", + "value" : "#/components/schemas/user" } ] ==> expected: <{ - "openapi" : "3.0.1", + "openapi" : "3.0.0", "info" : { - "contact" : { - "email" : "developer@uspto.gov", - "name" : "Open Data Portal", - "url" : "https://developer.uspto.gov" - }, - "description" : "The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters.", - "title" : "USPTO Data Set API", + "title" : "Link Example", "version" : "1.0.0" }, - "servers" : [ { - "url" : "{scheme}://developer.uspto.gov/ds-api", - "variables" : { - "scheme" : { - "description" : "The Data Set API is accessible via https and http", - "default" : "https", - "enum" : [ "https", "http" ] - } - } - } ], - "tags" : [ { - "name" : "metadata", - "description" : "Find out about the data sets" - }, { - "name" : "search", - "description" : "Search a data set" - } ], "paths" : { - "/" : { + "/2.0/users/{username}" : { + "get" : { + "operationId" : "getUserByName", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + } ], + "responses" : { + "200" : { + "description" : "The User", + "links" : { + "userRepositories" : { + "$ref" : "#/components/links/UserRepositories" + } + }, + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/user" + } + } + } + } + } + } + }, + "/2.0/repositories/{username}" : { "get" : { - "tags" : [ "metadata" ], - "summary" : "List available data sets", - "operationId" : "list-data-sets", + "operationId" : "getRepositoriesByOwner", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + } ], "responses" : { "200" : { - "description" : "Returns a list of data sets", + "description" : "repositories owned by the supplied user", + "links" : { + "userRepository" : { + "$ref" : "#/components/links/UserRepository" + } + }, "content" : { "application/json" : { - "example" : { - "total" : 2, - "apis" : [ { - "apiKey" : "oa_citations", - "apiVersionNumber" : "v1", - "apiUrl" : "https://developer.uspto.gov/ds-api/oa_citations/v1/fields", - "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/oa_citations.json" - }, { - "apiKey" : "cancer_moonshot", - "apiVersionNumber" : "v1", - "apiUrl" : "https://developer.uspto.gov/ds-api/cancer_moonshot/v1/fields", - "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/cancer_moonshot.json" - } ] - }, "schema" : { - "$ref" : "#/components/schemas/dataSetList" + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/repository" + } } } } @@ -76,48 +156,78 @@ } } }, - "/{dataset}/{version}/fields" : { + "/2.0/repositories/{username}/{slug}" : { "get" : { - "tags" : [ "metadata" ], - "summary" : "Provides the general information about the API and the list of fields that can be used to query the dataset.", - "description" : "This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below.", - "operationId" : "list-searchable-fields", + "operationId" : "getRepository", "parameters" : [ { - "description" : "Name of the dataset.", - "example" : "oa_citations", "required" : true, "schema" : { "type" : "string" }, "in" : "path", - "name" : "dataset" + "name" : "username" }, { - "description" : "Version of the dataset.", - "example" : "v1", "required" : true, "schema" : { "type" : "string" }, "in" : "path", - "name" : "version" + "name" : "slug" } ], "responses" : { "200" : { - "description" : "The dataset API for the given version is found and it is accessible to consume.", + "description" : "The repository", + "links" : { + "repositoryPullRequests" : { + "$ref" : "#/components/links/RepositoryPullRequests" + } + }, "content" : { "application/json" : { "schema" : { - "type" : "string" + "$ref" : "#/components/schemas/repository" } } } + } + } + } + }, + "/2.0/repositories/{username}/{slug}/pullrequests" : { + "get" : { + "operationId" : "getPullRequestsByRepository", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" }, - "404" : { - "description" : "The combination of dataset name and version is not found in the system or it is not published yet to be consumed by public.", + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + }, { + "schema" : { + "type" : "string", + "enum" : [ "open", "merged", "declined" ] + }, + "in" : "query", + "name" : "state" + } ], + "responses" : { + "200" : { + "description" : "an array of pull request objects", "content" : { "application/json" : { "schema" : { - "type" : "string" + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/pullrequest" + } } } } @@ -125,114 +235,150 @@ } } }, - "/{dataset}/{version}/records" : { - "post" : { - "tags" : [ "search" ], - "summary" : "Provides search capability for the data set with the given search criteria.", - "description" : "This API is based on Solr/Lucene Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api.", - "operationId" : "perform-search", + "/2.0/repositories/{username}/{slug}/pullrequests/{pid}" : { + "get" : { + "operationId" : "getPullRequestsById", "parameters" : [ { - "description" : "Version of the dataset.", "required" : true, "schema" : { - "type" : "string", - "default" : "v1" + "type" : "string" }, "in" : "path", - "name" : "version" + "name" : "username" }, { - "description" : "Name of the dataset. In this case, the default value is oa_citations", "required" : true, "schema" : { - "type" : "string", - "default" : "oa_citations" + "type" : "string" }, "in" : "path", - "name" : "dataset" + "name" : "slug" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "pid" } ], - "requestBody" : { - "content" : { - "application/x-www-form-urlencoded" : { - "schema" : { - "properties" : { - "criteria" : { - "description" : "Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values.", - "type" : "string", - "default" : "*:*" - }, - "start" : { - "description" : "Starting record number. Default value is 0.", - "type" : "integer", - "default" : 0 - }, - "rows" : { - "description" : "Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset.", - "type" : "integer", - "default" : 100 - } - }, - "type" : "object", - "required" : [ "criteria" ] - } - } - } - }, "responses" : { "200" : { - "description" : "successful operation", + "description" : "a pull request object", + "links" : { + "pullRequestMerge" : { + "$ref" : "#/components/links/PullRequestMerge" + } + }, "content" : { "application/json" : { "schema" : { - "type" : "array", - "items" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - } + "$ref" : "#/components/schemas/pullrequest" } } } + } + } + } + }, + "/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge" : { + "post" : { + "operationId" : "mergePullRequest", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + }, { + "required" : true, + "schema" : { + "type" : "string" }, - "404" : { - "description" : "No matching record found for the given criteria." + "in" : "path", + "name" : "pid" + } ], + "responses" : { + "204" : { + "description" : "the PR was successfully merged" } } } } }, "components" : { + "links" : { + "UserRepositories" : { + "operationId" : "getRepositoriesByOwner", + "parameters" : { + "username" : "$response.body#/username" + } + }, + "UserRepository" : { + "operationId" : "getRepository", + "parameters" : { + "username" : "$response.body#/owner/username", + "slug" : "$response.body#/slug" + } + }, + "RepositoryPullRequests" : { + "operationId" : "getPullRequestsByRepository", + "parameters" : { + "username" : "$response.body#/owner/username", + "slug" : "$response.body#/slug" + } + }, + "PullRequestMerge" : { + "operationId" : "mergePullRequest", + "parameters" : { + "username" : "$response.body#/author/username", + "slug" : "$response.body#/repository/slug", + "pid" : "$response.body#/id" + } + } + }, "schemas" : { - "dataSetList" : { + "user" : { "properties" : { - "total" : { + "username" : { + "type" : "string" + }, + "uuid" : { + "type" : "string" + } + }, + "type" : "object" + }, + "repository" : { + "properties" : { + "slug" : { + "type" : "string" + }, + "owner" : { + "$ref" : "#/components/schemas/user" + } + }, + "type" : "object" + }, + "pullrequest" : { + "properties" : { + "id" : { "type" : "integer" }, - "apis" : { - "type" : "array", - "items" : { - "properties" : { - "apiKey" : { - "description" : "To be used as a dataset parameter value", - "type" : "string" - }, - "apiVersionNumber" : { - "description" : "To be used as a version parameter value", - "type" : "string" - }, - "apiUrl" : { - "description" : "The URL describing the dataset's fields", - "format" : "uriref", - "type" : "string" - }, - "apiDocumentationUrl" : { - "description" : "A URL to the API console for each API", - "format" : "uriref", - "type" : "string" - } - }, - "type" : "object" - } + "title" : { + "type" : "string" + }, + "repository" : { + "$ref" : "#/components/schemas/repository" + }, + "author" : { + "$ref" : "#/components/schemas/user" } }, "type" : "object" @@ -240,150 +386,163 @@ } } }> but was: <{ - "openapi" : "3.0.1", + "openapi" : "3.0.0", "info" : { - "contact" : { - "email" : "developer@uspto.gov", - "name" : "Open Data Portal", - "url" : "https://developer.uspto.gov" - }, - "description" : "The Data Set API (DSAPI) allows the public users to discover and search USPTO exported data sets. This is a generic API that allows USPTO users to make any CSV based data files searchable through API. With the help of GET call, it returns the list of data fields that are searchable. With the help of POST call, data can be fetched based on the filters on the field names. Please note that POST call is used to search the actual data. The reason for the POST call is that it allows users to specify any complex search criteria without worry about the GET size limitations as well as encoding of the input parameters.", - "title" : "USPTO Data Set API", + "title" : "Link Example", "version" : "1.0.0" }, - "servers" : [ { - "url" : "{scheme}://developer.uspto.gov/ds-api", - "variables" : { - "scheme" : { - "description" : "The Data Set API is accessible via https and http", - "default" : "https", - "enum" : [ "https", "http" ] - } - } - } ], - "tags" : [ { - "name" : "metadata", - "description" : "Find out about the data sets" - }, { - "name" : "search", - "description" : "Search a data set" - } ], "paths" : { - "/{dataset}/{version}/records" : { - "post" : { - "tags" : [ "search" ], - "summary" : "Provides search capability for the data set with the given search criteria.", - "description" : "This API is based on Solr/Lucene Search. The data is indexed using SOLR. This GET API returns the list of all the searchable field names that are in the Solr Index. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the Solr/Lucene Syntax. Please refer https://lucene.apache.org/core/3_6_2/queryparsersyntax.html#Overview for the query syntax. List of field names that are searchable can be determined using above GET api.", - "operationId" : "perform-search", + "/2.0/repositories/{username}" : { + "get" : { + "operationId" : "getRepositoriesByOwner", "parameters" : [ { - "description" : "Version of the dataset.", - "required" : true, - "schema" : { - "type" : "string", - "default" : "v1" - }, - "in" : "path", - "name" : "version" - }, { - "description" : "Name of the dataset. In this case, the default value is oa_citations", "required" : true, "schema" : { - "type" : "string", - "default" : "oa_citations" + "type" : "string" }, "in" : "path", - "name" : "dataset" + "name" : "username" } ], - "requestBody" : { - "content" : { - "application/x-www-form-urlencoded" : { - "schema" : { - "properties" : { - "criteria" : { - "description" : "Uses Lucene Query Syntax in the format of propertyName:value, propertyName:[num1 TO num2] and date range format: propertyName:[yyyyMMdd TO yyyyMMdd]. In the response please see the 'docs' element which has the list of record objects. Each record structure would consist of all the fields and their corresponding values.", - "type" : "string", - "default" : "*:*" - }, - "start" : { - "description" : "Starting record number. Default value is 0.", - "type" : "integer", - "default" : 0 - }, - "rows" : { - "description" : "Specify number of rows to be returned. If you run the search with default values, in the response you will see 'numFound' attribute which will tell the number of records available in the dataset.", - "type" : "integer", - "default" : 100 - } - }, - "type" : "object", - "required" : [ "criteria" ] - } - } - } - }, "responses" : { "200" : { - "description" : "successful operation", + "description" : "repositories owned by the supplied user", "content" : { "application/json" : { "schema" : { "type" : "array", - "items" : { - "type" : "object", - "additionalProperties" : false - } + "items" : { } } } } + } + } + } + }, + "/2.0/users/{username}" : { + "get" : { + "operationId" : "getUserByName", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" }, - "404" : { - "description" : "No matching record found for the given criteria." + "in" : "path", + "name" : "username" + } ], + "responses" : { + "200" : { + "description" : "The User", + "content" : { + "application/json" : { + "schema" : { } + } + } } } } }, - "/{dataset}/{version}/fields" : { + "/2.0/repositories/{username}/{slug}/pullrequests/{pid}" : { "get" : { - "tags" : [ "metadata" ], - "summary" : "Provides the general information about the API and the list of fields that can be used to query the dataset.", - "description" : "This GET API returns the list of all the searchable field names that are in the oa_citations. Please see the 'fields' attribute which returns an array of field names. Each field or a combination of fields can be searched using the syntax options shown below.", - "operationId" : "list-searchable-fields", + "operationId" : "getPullRequestsById", "parameters" : [ { - "description" : "Name of the dataset.", - "example" : "oa_citations", "required" : true, "schema" : { "type" : "string" }, "in" : "path", - "name" : "dataset" + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" }, { - "description" : "Version of the dataset.", - "example" : "v1", "required" : true, "schema" : { "type" : "string" }, "in" : "path", - "name" : "version" + "name" : "pid" } ], "responses" : { "200" : { - "description" : "The dataset API for the given version is found and it is accessible to consume.", + "description" : "a pull request object", "content" : { "application/json" : { - "schema" : { - "type" : "string" - } + "schema" : { } } } + } + } + } + }, + "/2.0/repositories/{username}/{slug}/pullrequests/{pid}/merge" : { + "post" : { + "operationId" : "mergePullRequest", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" }, - "404" : { - "description" : "The combination of dataset name and version is not found in the system or it is not published yet to be consumed by public.", + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "pid" + } ], + "responses" : { + "204" : { + "description" : "the PR was successfully merged" + } + } + } + }, + "/2.0/repositories/{username}/{slug}/pullrequests" : { + "get" : { + "operationId" : "getPullRequestsByRepository", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + }, { + "required" : false, + "schema" : { + "type" : "string" + }, + "in" : "query", + "name" : "state" + } ], + "responses" : { + "200" : { + "description" : "an array of pull request objects", "content" : { "application/json" : { "schema" : { - "type" : "string" + "type" : "array", + "items" : { } } } } @@ -391,30 +550,29 @@ } } }, - "/" : { + "/2.0/repositories/{username}/{slug}" : { "get" : { - "tags" : [ "metadata" ], - "summary" : "List available data sets", - "operationId" : "list-data-sets", + "operationId" : "getRepository", + "parameters" : [ { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "username" + }, { + "required" : true, + "schema" : { + "type" : "string" + }, + "in" : "path", + "name" : "slug" + } ], "responses" : { "200" : { - "description" : "Returns a list of data sets", + "description" : "The repository", "content" : { "application/json" : { - "example" : { - "total" : 2, - "apis" : [ { - "apiKey" : "oa_citations", - "apiVersionNumber" : "v1", - "apiUrl" : "https://developer.uspto.gov/ds-api/oa_citations/v1/fields", - "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/oa_citations.json" - }, { - "apiKey" : "cancer_moonshot", - "apiVersionNumber" : "v1", - "apiUrl" : "https://developer.uspto.gov/ds-api/cancer_moonshot/v1/fields", - "apiDocumentationUrl" : "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/cancer_moonshot.json" - } ] - }, "schema" : { } } } @@ -424,37 +582,70 @@ } }, "components" : { + "links" : { + "UserRepositories" : { + "operationId" : "getRepositoriesByOwner", + "operationRef" : "", + "parameters" : { + "username" : "$response.body#/username" + } + }, + "UserRepository" : { + "operationId" : "getRepository", + "operationRef" : "", + "parameters" : { + "slug" : "$response.body#/slug", + "username" : "$response.body#/owner/username" + } + }, + "PullRequestMerge" : { + "operationId" : "mergePullRequest", + "operationRef" : "", + "parameters" : { + "pid" : "$response.body#/id", + "slug" : "$response.body#/repository/slug", + "username" : "$response.body#/author/username" + } + }, + "RepositoryPullRequests" : { + "operationId" : "getPullRequestsByRepository", + "operationRef" : "", + "parameters" : { + "slug" : "$response.body#/slug", + "username" : "$response.body#/owner/username" + } + } + }, "schemas" : { - "dataSetList" : { + "pullrequest" : { "properties" : { - "total" : { + "author" : { }, + "id" : { "type" : "integer" }, - "apis" : { - "type" : "array", - "items" : { - "properties" : { - "apiKey" : { - "description" : "To be used as a dataset parameter value", - "type" : "string" - }, - "apiUrl" : { - "description" : "The URL describing the dataset's fields", - "format" : "uriref", - "type" : "string" - }, - "apiDocumentationUrl" : { - "description" : "A URL to the API console for each API", - "format" : "uriref", - "type" : "string" - }, - "apiVersionNumber" : { - "description" : "To be used as a version parameter value", - "type" : "string" - } - }, - "type" : "object" - } + "title" : { + "type" : "string" + }, + "repository" : { } + }, + "type" : "object" + }, + "repository" : { + "properties" : { + "owner" : { }, + "slug" : { + "type" : "string" + } + }, + "type" : "object" + }, + "user" : { + "properties" : { + "uuid" : { + "type" : "string" + }, + "username" : { + "type" : "string" } }, "type" : "object" @@ -466,8 +657,8 @@ at org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1135) - at openapi.OpenAPIMain_test.compareJson(OpenAPIMain_test.java:80) - at openapi.OpenAPIMain_test.test(OpenAPIMain_test.java:67) + at openapi.OpenAPIMain_test.compareJson(OpenAPIMain_test.java:89) + at openapi.OpenAPIMain_test.test(OpenAPIMain_test.java:75) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) @@ -499,7 +690,7 @@ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) @@ -509,7 +700,7 @@ at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) @@ -557,10 +748,16 @@ at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) - at java.base/java.lang.Thread.run(Thread.java:834) + at java.base/java.lang.Thread.run(Thread.java:829) </failure> </testcase> - <system-out><![CDATA[Loading expression DSL file 'uspto.json'. + <system-out><![CDATA[Loading expression DSL file 'api-with-examples.json'. +Is the source object valid? : true +Is the generated object valid? : true +Loading expression DSL file 'callback-example.json'. +Is the source object valid? : true +Is the generated object valid? : true +Loading expression DSL file 'link-example.json'. Is the source object valid? : true Is the generated object valid? : true ]]></system-out> diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin index 79960daf..0365021c 100644 --- a/build/test-results/test/binary/output.bin +++ b/build/test-results/test/binary/output.bin @@ -1,3 +1,9 @@ -+Loading expression DSL file 'uspto.json'. +7Loading expression DSL file 'api-with-examples.json'. +$Is the source object valid? : true +'Is the generated object valid? : true +6Loading expression DSL file 'callback-example.json'. +$Is the source object valid? : true +'Is the generated object valid? : true +2Loading expression DSL file 'link-example.json'. $Is the source object valid? : true 'Is the generated object valid? : true diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx index 1ea36ce12fcdab3f36bc26c99688c3f03dec79dc..58ba046e6bca8a95c0f12c61be96602a7f2d7b6b 100644 GIT binary patch literal 36 ScmZQ%Vq|1M0gRRZ(EtFDWDsxw literal 36 RcmZQ%Vq|1M1>yhE0052<5KRC8 diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin index 0ee2879098ca6986fe4716d993e7d832fa6b5ddf..edc20fbccd949f0289a3c76d87dc22222cd4e5ae 100644 GIT binary patch literal 45107 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 literal 47491 zcmZQ(WSW^@keZiRkg4ZikecTh;OU!~nHOJ@T3j*_U4Vgsv0AUvOPrCh9VD-z38ff6 zGeM-hyBL?`7p3cgOa!Sg$<lKyE>0~f$;{7lOU%qkO>r$M$}hUHgoy}MRtjFh{(i*@ zY57G8rNsp$`FdH!`FRS7MX3rYnQ3XMMX7luR$S2v)x2B^3QG9}N(xpAN=2y!If==s zN;+V{g2a*xu&_ReRjglUSe=qsl31KtQd?(OU6xu@oSC0jTW465nw(#hQmkK)UtFSJ zlv-SnpI4k(tZ!sspr4$dSCX1nqMuk$kdv952=YmtA;=;6#mO0|xrzFjC8@c^`iUti znIO5uoPeVI0+5eWi=mDvOUx-v1-Sz3Pz430lF9-wUnxH+D>b=93FOpTUandlRIena zq(DsoIUZzy65Jd5>8T_;RHZ024Qe3VNlME4$@#ej`FW{%CB;x573+h-C^)smC$kvj zxLSo+1zTG?h180I)Z~)X6e|TAuuqggv7A_t33i#Wo`Ier)bz}}w0w{tSe1f;5-120 zlS`0<6cm(Fa}zUjKtf6>sb#4-pfGcQ#BzFm8N?t31qB7Ayu@5cV1W{&f=gmaqC!A^ zQAuJBlA6*Yh)EeGB?ZM+`ucDa^$;e40$D+!7Mv~=6qHg@i<65o3qVl@c0@=<D#Y;M z)Di{908a%Cmte;LPfdlyoSgjfVug~7RE2`lq@2uTh0@~GqGE-Te1(+E;^h3Y)FOq% zycC7v)Wo9X4296(fDnIBP~{huq^2l<LQ<hPwWL^2AtWQSSRu1mAyFYcH7~U&GZ}16 zNk(D`%npcNxbeA(*{KSNd6f#z!C?wXiN!GE(lT>Wi=p-<Cgr3mlw=g;m!@Zc%+pf{ z&n(FRyEY>=r$8Y;O~KtYL?JmbCr3vivqYgNwWPEt58|Di%;FM|0<as?GE;L>K;j_h z6r~~=kHyFU|6rJzV9m*ic?wCX3Tde&$r-6BP`Bpift`_-nNtD^FE}?fCq)4isl|E< z0XeCO#i<H;`6VDvB$g<^4F&~NDagkq`B0~T4NFWeDNW1)hbkyQQx%F*6G3GHsE7c? z5Q=_q&}PCz7ap#~1*yrIX_erh1ttER)C!m#$wiqZsYRKI3gww48Tq9p3g!7lMU@JP zNgy`J0#INUXI7;u<YeY%mVirxVui$Fh4R##91xwFmz<xHnU@X<SCIP5yn@mag@VMQ z#N1R+FzCTjtx`#5Ne(1oL!up=vZ09&t_WH}fm5iVo`IeLq^tlZVx{8LB9J^t5?Tl< zC@8_QLN&N_O0C778}w6(bwN27Y><M2QdweACMYQtgA9XaTLlFrh#4qi#AF>%B2P|E zEiTRkrOvX<L<Mlh1ZNWv3+6p={!U3vODxR+7Y<4wNoc7Fk^_|zd8N4^`=b?Lk`RWH zLM$XhD=5@L7+|VaAr|Z<rIN&SuwM`X14?orlaz8(OA<k;7Ul|!qQEUPFGT?q;fQDl zsRw6cX!t`4YUI)hlKpX-84M{M62VCqWD>+6m~%k|JlMU^uvgLtITgxLP*6%w1qTpZ z091*<eTeW8)HrC^6_@7bCKgqKOi}_B<qC;qiJ3W|XokB2HLyWtFgQtjrhqkp3J6`0 z*L6W97|d@V)0N<LBuF8WvlJARj0_Ag1hJ%=AZSUHr~tAClwUwLfr19bQDECZ6-a6x zdJur56cm(@DrS99y^O_jkV>W0ip1OkNR~r!Fh~-Fl}hqKwTgn3f)O|kfy9upQer_S zIF8_H3RxD!2C48)g#>thVtg{JfItp8kUAI!sSks+LHtT{lTwR7PFE^}R--Ug2pXh5 zlyFrC&D{FPPS7ti)Q1%D_#ESspIn-ong=P@h_^{MB|o`XKQk{SwL&kWBsa&tv?#|G zoR{&IKKjMwiRtO7Mfzav$gTx9^uRd;;duxP)<%NxkV#PBzyd!xF)ul_C_XnoKd(3= zzXYF`X&C-!t{D7LfaYL4v4ALj5m5kZS|LPWHAo^TU1QI4;5I3!-A+V16xm=98(iXp z7%+?`fWk%Mz?o16%;8G<@Xmogyl()@H40X+GM^g7aX?XiS!PNqsJ)d6X$~glD1e&H zMY-St7^%epYKwx}m!Q@JtfYkGWCd^o2io?6HI@oXQ;RCWZ6#1~TAW$}Z*hP^38St9 zH%dW`8jv+b&>|Vxs>GZeuxXI`4P1GEZHF}BAWi`F$TA_VJ(OGwYu^>8f|_@!3hH2; z#p())B_&0fNu?#J3gsD@$r<ogX(Fh1SCm)@stv$uA-3o#xF#lNC_qH=ixd(SlJj$u zGV>rom7fNYDOP|61;nYTDGH^<pq3cOH^r5CC5aUZ`QY|`u|jc1emSVcnv-9S8a!BQ zK!|xDuj_)HfKopxA=-AJRE}0RV1&0{Vs0wPcOXY$iy%;w2T@NcAqOXFDW+7ET3DJ{ zlnSn?ONvTUQR*y6%MDw;Lv%iiONuh{(osrTSWW;X6$J&Q%sh~nlt7IWG|S<QDX1Ti zOhGT9F@gYE;*t;w=r!UX@jIyTotdA9?03`#80C#5P_Gmk#Gu|CcqjyvbkZ}+Qu7p` z4gmF)((+65Qos%D%n}ek5z+oG$yZ3u&nqs?O+`uTpg0Ei%qebIfqMzq(i+GLP)ijy z+<_&<L6krXVh9IBq6wgI(GsbNfe9#;qE#;#sSXs9Xr%@$U_pr)9CS$GnU`Op00~oQ z!B$*ZT#}lrkY5DqMQ0X+`mB)gfMQUOw=%T^G$4?a3JdBKg``S|eDW{}bx1D@C32wA z0*esr^(S;_4JD40K;vvEBA{e~=+Hn)TqV@pgxsBh*PjrT3dxBDiAk9`nI)C*ECPyM zP;Ua<l?PX0kW2&90qyCd#158JlUWSTc$vkBQH|jIoFaXn(&W^<R0T-CPEP@pyudbs z#&|#tVR-cu?C%o<lFuv#kHk=^o&~u<!4qT=d=zEiYgv$^-~j`!ap8_DN=-{Gf(!## z>Fei!15YopATc>3RWH9NT|YU$C{^D$-YnioAKZc|NGt-4vOx?1^(mD7%TkNVGE>Xp z5e!zR0IAva6u=!^SW^JfY(O+lAaM?=!C`HL6wqi)Ze|`lni7-p%TmEH1R4oPuI@m? zoJHWK2DDpTkXn?MUzDp0F%?BAX^jEmYC>vN^e7DkaEBZ*@KR=oREr@-NkO@txOM=v z=tMGwU^@U?Q%J!R)QrpoHRXy^b-=k6IzFTT9<l~iZFFc8;R`Ah>k)+_Ie`W$Fp5(_ zL+p@%R#1SAUqSfbc1~(>iBo<Gcu)bQj>A)TqYQ~u=$4n4>w*((X;BV%d=k=VL@^Cy zA?`*aShfH$uYued0?EO!5^Vewt!#(MgJ_I0HncdkSOHp`27-Gp!QgDK0IhjJPEQ06 zR6|`*2}(Iu;PjxQfFc&1SDI_65aO?pSDI@S3$D{s5=&AQiW2kEQ$YnsZeocQnwHAS z%1U3~loXIQ7&}%Ek`PlBU`;rM0?1G`ypRQrS*R<d=A?qgOQ7ADj6_I>4%SVBRDBAN zS)O8OF9s@DTvAk;TvA$;s!*O^nv()<H$cbZVO=grX9Mhul8n^MB8BAqB8YpyBh26c zC`PHjK;a9+7!7^2L=9I5&0wG?Q_`~1LdwE0CFp4zCazRml30X&R1Ts9Bd&u%8bF;g zXei`?hrRR^Tp)wMh)ixkgugQLN>bBPi;xRoh_w(>3CUvy$QczPjnh*_`Q_kYK8*YU z(TC|L=yU?aFQ9G>$OLF}un63xPEFBM@Jv&v%r8|aDg~8ru=y28;{@tZi0_MaU<n@* z*Ttz|edU=sISQcEr=C}u>jrA=V|Js#YDz#e5uiQ-l6xStn@Hoo(5wY5fT$bRh6dO} z8#4-E4M#}8LP$iig=8CSu?sF2VSV3d1*B33J}Ce(3_dx4l?!dYg5;20LWQyI;!<$; zE3Gs~0Y0LD?h!oYHwlB<MEAWCi;5B}(cJ*@I;egJ&0vG_KdvN?K4FckD8V`jj;pc& zS&k9gn27|W3@N5STnNS@h#`a~fWk$Na|Hz@BKwhk`3kv-CCM2`g&3rt2%Cb0^fF)- zp&m+ciex{W31xsOh?A5+lai1bd89~z*3PI!lM*Ng!)EGH16m1MGiIiuY5@fvVyXiz z#u4!WD_oHy1mZl90U!(-aK|(n)RBYr_pzoqCGdI)B#(j2f?#}3hN?&`$b=5^qq!U^ zk1?&E51N<;4~`~+rrtr}Rh)`6BMT{Xabyg5y2m|ofh8+|0tVW&M@;LG=UiyB8Zm)P zBj-ZrdWdvnMyf(+kdFc+tdl@F0aV{WgI2v5Ivk55Od-uVQ2Z;E7G=Vhq(I^iK_XHj z$zhLe7K=EaIfDIFk`L~9fO_hnfwTM^aMMvC6*LCz7~n~Je<9~NP>7)BJCFz>bfC2) zsuplz0#XOUNE~E?a2f$s52iq?lI#?cKno!fi$~Y}fYz~$uKNM6B?9Gk*kH=&x*r8_ zzZz5$=BI%RkI{8M3Zv_OtQ3?W<HHKXulvC^1r6yeqqen1htM(BF~Y`8Amg&&(O&Qn z3i@a;wDSuZtsWghFRC0JLI<zo2DM1hT8W4z60{A9*4RfLVFE4NLT-d1H?=@rY{FCN z(6&BOhjDZW9TX{~u0KGXH3ZF`j1HmagVq&+h9;qd0;5CdqeJMRRd=va9<+iD)NKS| z<N^-+pe|O8N}vI7P}W5&PeDe4@aPaaC=}2za#)WJp(~9Jp(E`hQ?OD<OUx-wMQ&ig zk`H*C2F8KV7(!?QC|tCL%0Lf;Lkkq_Yl*<kd9;2I#akobYl%REnBc8hqib>ViWNrJ z;*PGxg%l^qJ7+-M9B3AWN`e~Lu({ZQTZfFL^Mu|HfNtu=XqOPXVF|Xx4>WxQnj1i! z@Pj%4v_J_m9|&5rKe`qdlt?g|d!UdUU5g6}8aPI&l0l+q0w`Q04x9;Pz-sf+4TPXT zgkkEewHVz%2;L)(ef|@?W+fBb)GK7;F5aDhqZ<edQi~906~H!dqV2~U=^F@PJH27K zn)uaSuznM)kOc7|CFST^8!XF%AOQ?o#xf+<+Ket<0kvtB2Fc<Tl->a%B@NaEQJ|s# z;z|e!DHb4X2#J^lqQhF7Py3liPe!s*7(E#YoTcIC7>%Bc1Ugj-euB^F$w;XwpbZ9) zl@8zqN24brfl6{n={<Tf5~SurY3@RY!$wa=0-Z`SdNL9ug@8%q@m;JlwutQlqbDPQ z4h)2LI7SCHz{v+hfclEWhl>8_zy|beJv^sojGl}%dNR`J$w;6^9jJf-VdQ#h^kgJ( z2XXXdq|w<}P}YE8Nbd*2CVofj=xi((EXZIqwBrQhl0VS^9Sp_3nrU=f$LPsOsS2Yf zBZ1E%LOqQgI$Ho*u?||52ik0iew3vG=&XP09DxYUrLgRdyb>3*-U+!4f>y*5aY7<= zVbJKd4tVeq5opi|M-DXT_!Yzy@ChKJ+d4+Kb%4gcM^8qAW(xRm6{Fia&<+?LJsD~A zWF$x?fsu$=eXOU{K$PJ*s|Kn7p5>rx1JIfh5LKYHaoDa0LOrktrWQgY+y^xoxfKFY z0wOVbDmVl&)S(HWaM2n$1HB~#<a3CVMptVM{nc8~rv2#2NT8gGjFm=DMuJ|82HkBB z%J;|tgfR?*?FdH#<tA!5hp+)szCdilX#`X=m>NA93Dhwky%7z1$r}9PF&)U=O3<q) zMo&f>JsAnKS8Vh~G>lDPqbDPQ@7{r?4#@S6`FRSUQ;Fbb=z}kf16>}F3Mo}aFBbq` z9H0O>Abj+40i=m5jQj;{XO9k{gR>53_5gCG`{?BY&{i&J<M!wf`sfh)=ny(2Lx4y` z*Kc$PeRK%jN@4VJfm}RGRN;f)13H90dNNX8?dUC~qqmfTJBy%GZ%1z_1y$w9m$PG8 zPNIXj&KIPb%<dD?kszRzLMXF;;590vCnJsCQmQbz78ln{H=?~w!kiCc)&`Vw!Lu<S z1_&c@;7lk3Hp4S|G7>1DV0iRoBuGe*xPcA%63D@SEDy44^|FdluB?W5A4H;`HVzVl zU{K&dPl8cG+q#GEFevB<Bx0r?ql$zW4<bQUjBX%Q0N((LTE2lo2Ud20*f0#e4-B*o zsCx8dBrDYBoPq+PX2IGy#j~<&7~Mh!%~9AlbwjT2DgbS01|=dT&_1BiYrSCE3rf>r zQ4U5iNn~`P-E0TlXF$EH;?RpB%t8o}$FQzZgf_e&A&JC6HVCH?Q1xI6yw--7ixYGU za8bHmR%u>liC$J|L1sy6ksj!}ZpY%{)FMzq4lT*dDb`C%%*@e16U$00OSCdI)g;jv zzx)!{!qP<S#+exrVH{X{v0ftBi4YFdZ4izg*ky(m#F&+tpNG{XusFmVLu0rf3sUny zf#YA0n&%kc>6@6D7hjTET%rfMUNW&L)vGu^PXj{|Y>I^e%wxFB02zcsvza+mGsq}C z(8RWWR!X)WXh6LvFEK~2C^ao7HMvC3FR>)EEY&x)BqKk?5qw{2evxNxL5^N#URi#2 zs(}VXfdWJYRm_AM2{94HPLNxz;PDCK;c>Z3YEEi;Vo7FRIu?^4uGhe;24udKi7}?1 z63Y_xauV~>;eiCP02(A3P###jshJs6Kj^?PNS-LjNh|@aA_PToE-0;(mSpDW1wjHl zGd~ZKJs>WGn5BU(2{zlz!UDr=Sbj^*OV7+p)l02NO)dpxIX#F$o_S^Y$%$Zrf};H7 z)YKHHYmp=%X2a7KMpni!8ll%SuOzi7Ikli9zsNZwF*8pkEHNiD1sn$mMS3us5klzt zpt;T1kg)$sQuB&4^YipVGILY&OG{iUU;^Nj404MGh7{O`h9;KOFg+x-xCAtu2MJ%C zb`cSrFo$C}7w!{~U3l%WFd^(ESb}f`Ck>F(LGh5CTBHI?WM!$y@sXI5qnDGIo0O8M zlAjiqpP2%2fr^0!h6&JUGlZ9IgwqbD8Bn_*$sdm`1|--5@*yPIBl`@TLg50bDF{`> zCs6~;?2R)EBFu+d3e6`(+h;~X1mm$T8RT`xJg|?mQ#J6Y1ZNc!ssuHxcqC+-F|1}n zl$bb!6f^li(hbhEX+S~%l4`gm!QvR!n9ncLL*!);%Ow@Evo^m7me(Nu0Lek~o0$fJ z17aa*0Y{RNA!Zo^uW6uVc5!JzL4Hw*UPfkWQDRYYMrLwij$TMcQGPk79B|Ih0af|= zMbK&^RRfC@*e-KerHC_%i18`97YTWga9$(ER!EhYO29Hh!gUYzEHlH*Uqr>6Uw%p| zC@F*_7H7lK4b*!<smY~9#hGQPIh87=8Yl|EF=%LvS^E)XCzd1uwUU(7LX=e~u7*|% zP`i-5XO7K#Mr3*qWT#$YQGRJ&3fNd^m4>BEqNW!tz;?l-5)wm3nB^c*b`DewVMYyB zUtw05MEMF7G4KF_T7|`Ycnb&=hS1IdsJRYqVmlTUC06=m7MJLy<rldoCTD0ML_q4T z3{6eQEJTA7b5lbyic%9(Jdny(kb@z$NPbapYEfBcaw@bIbj-=oAYKpHamJX{3+W+; zI~!pwCE&duL_trKodcByaeHsHl%PeePgG*SmUWQ|a4fml&}g)j0FADUmJ+FmMk%-u z#M1I4Jq?bQ5}74>L<QSGmE+I~evp(BBvyXJ*XzZlNx7LNBsT;w2ce0IOk6D!cy|w{ z0&vzdC9^$>VJh;_WU2-ZX^54W1AuU!<|LNpC1<1-=_ThErRuqY4TZF|GV}BNi;^=^ zi%W_UOOSfA_|$-{Gc>@{#G-+HSjKP3@E&Su1{yKL6Bb~9nqm%ukYR6mW=RHoAS*Q` zxTGjGF}GNQU?{_99<XF98U(T_p4@_Jol9z3Vrfo^4=iCp3n2}3ac~$~;%T8!V5~Xv zP(XT7VoFXbc<u~51`L{)DM>8OF4hB0>}2LaC)wa}=M|clSrP!9T>$kxoO2S3ivvId z{l&%kMJmv`)G;RqE}2>k$us#ykTJ;OVpLfT0%k(`$Ck*wZTh-85j-cQVqjoEoKwwd z=v2MplKcW9ok3bW2bX4+fQNceV-#W`E=h1YHG>tQARe?sJUY*ZIjaco=^}*_XyAaX zc|K?sfM?p2%;JK?lH?4eNj?{t5KInfjt?#ea*LHQa!Er~lZ}w;0h}f~=jWBAR+NBK zo=<*aN@@|@eQ>wqQ3LS<@_;c;n*xgRD=J}zJEkNSl%y7^!1$SY>4=#FkHox`oYW%d zV2TDdjnI+_=EdavT)pDbJWwfDQK_c_)?oz6KcRWqdHLm_P2HtM$*D*)Xi$fOrsv^N ziCX@a=NDzCLI(50Axv-)04iRge6aTojbZ)=aYu6@wi$U)$WV8-9U6V`sDq`}p_B`Y zQgic5K!b)Qso-T98Kp^jzNy8<iRq~xrAbbS$=RtX{z+M>$tBMDd3mYHps9U$mI*IP zEC5|u3G=uHA)SysgSyHEJroDTMJV&0q`621R#p_1<{<?D#H%KTu<`-a7)3WYIX^GC zw5TXGuS5^lN(#u&$xN<PaR!y<j(I6Tsmb|8DQ=0GIi*FZ#d`U95Ot~0`N#Ysh<b=+ zcs+q+mv3TTVtQ%{#3;yW8x=!6u=6oxAV!<OIxe7G1T9}cwHJ8U8_8(M5OqL)eh$oZ zkhzee3N(L{nwWwj2{O*g(9no%<5eJLgKWWRz8Tzj0+9f5y<1{(Nq$i!Xc3YMG^ijF oL8W<lpm|Ir%aGJU0?HItnSy+V6j0!59%2lVc8DGeV^AUi05)rX@Bjb+ diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackObject.java index 26246023..701d5736 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/CallbackObject.java @@ -31,7 +31,7 @@ public class CallbackObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:450 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:514 */ public static CallbackObject parseCallback(Callback callback){ CallbackObject callbackObject = new CallbackObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ComponentsObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ComponentsObject.java index 172c19d3..8025c0e6 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ComponentsObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ComponentsObject.java @@ -87,30 +87,54 @@ public class ComponentsObject extends ASTNode<ASTNode> implements Cloneable { if( components.getSchemas() != null ){ JastAddList<SchemasTuple> schemasTuples = new JastAddList<>(); for( String key : components.getSchemas().keySet() ){ - SchemaObjectTuple schemaObjectTuple = new SchemaObjectTuple(); - schemaObjectTuple.setName( key ); - schemaObjectTuple.setSchemaObject( SchemaObject.parseSchema(components.getSchema(key)) ); - schemasTuples.add(schemaObjectTuple); + if( components.getSchema(key).isRef() ){ + SchemaReferenceTuple schema = new SchemaReferenceTuple(); + schema.setName(key); + schema.setRef(components.getSchema(key).getRef()); + schemasTuples.add(schema); + } + else { + SchemaObjectTuple schema = new SchemaObjectTuple(); + schema.setName(key); + schema.setSchemaObject(SchemaObject.parseSchema(components.getSchema(key))); + schemasTuples.add(schema); + } } componentsObject.setSchemasTupleList(schemasTuples); } if( components.getResponses() != null ){ JastAddList<ResponsesTuple> responsesTuples = new JastAddList<>(); for( String key : components.getResponses().keySet() ){ - ResponseObjectTuple responseObjectTuple = new ResponseObjectTuple(); - responseObjectTuple.setName( key ); - responseObjectTuple.setResponseObject( ResponseObject.parseResponse(components.getResponse(key)) ); - responsesTuples.add(responseObjectTuple); + if( components.getResponse(key).isRef() ){ + ResponseReferenceTuple response = new ResponseReferenceTuple(); + response.setName(key); + response.setRef(components.getResponse(key).getRef()); + responsesTuples.add(response); + } + else { + ResponseObjectTuple response = new ResponseObjectTuple(); + response.setName(key); + response.setResponseObject(ResponseObject.parseResponse(components.getResponse(key))); + responsesTuples.add(response); + } } componentsObject.setResponsesTupleList(responsesTuples); } if( components.getParameters() != null ){ JastAddList<ParameterTuple> parameterTuples = new JastAddList<>(); for( String key : components.getParameters().keySet() ){ - ParameterObjectTuple parameterObjectTuple = new ParameterObjectTuple(); - parameterObjectTuple.setName( key ); - parameterObjectTuple.setParameterObject( ParameterObject.parseParameter(components.getParameter(key)) ); - parameterTuples.add(parameterObjectTuple); + if( components.getParameter(key).isRef() ){ + ParameterReferenceTuple parameter = new ParameterReferenceTuple(); + parameter.setName(key); + parameter.setRef(components.getParameter(key).getRef()); + parameterTuples.add(parameter); + } + else { + ParameterObjectTuple parameter = new ParameterObjectTuple(); + parameter.setName(key); + parameter.setParameterObject(ParameterObject.parseParameter(components.getParameter(key))); + parameterTuples.add(parameter); + } } componentsObject.setParameterTupleList(parameterTuples); } @@ -127,50 +151,90 @@ public class ComponentsObject extends ASTNode<ASTNode> implements Cloneable { if( components.getRequestBodies() != null ){ JastAddList<RequestBodiesTuple> requestBodiesTuples = new JastAddList<>(); for( String key : components.getRequestBodies().keySet() ){ - RequestBodyObjectTuple requestBodyObjectTuple = new RequestBodyObjectTuple(); - requestBodyObjectTuple.setName( key ); - requestBodyObjectTuple.setRequestBodyObject( RequestBodyObject.parseRequestBody(components.getRequestBody(key)) ); - requestBodiesTuples.add(requestBodyObjectTuple); + if( components.getRequestBody(key).isRef() ){ + RequestBodyReferenceTuple requestBody = new RequestBodyReferenceTuple(); + requestBody.setName(key); + requestBody.setRef(components.getRequestBody(key).getRef()); + requestBodiesTuples.add(requestBody); + } + else { + RequestBodyObjectTuple requestBody = new RequestBodyObjectTuple(); + requestBody.setName(key); + requestBody.setRequestBodyObject(RequestBodyObject.parseRequestBody(components.getRequestBody(key))); + requestBodiesTuples.add(requestBody); + } } componentsObject.setRequestBodiesTupleList(requestBodiesTuples); } if( components.getHeaders() != null ){ JastAddList<HeadersTuple> headersTuples = new JastAddList<>(); for( String key : components.getHeaders().keySet() ){ - HeaderObjectTuple headerObjectTuple = new HeaderObjectTuple(); - headerObjectTuple.setName( key ); - headerObjectTuple.setHeaderObject( HeaderObject.parseHeader(components.getHeader(key)) ); - headersTuples.add(headerObjectTuple); + if( components.getHeader(key).isRef() ){ + HeaderReferenceTuple header = new HeaderReferenceTuple(); + header.setName(key); + header.setRef(components.getHeader(key).getRef()); + headersTuples.add(header); + } + else { + HeaderObjectTuple header = new HeaderObjectTuple(); + header.setName(key); + header.setHeaderObject(HeaderObject.parseHeader(components.getHeader(key))); + headersTuples.add(header); + } } componentsObject.setHeadersTupleList(headersTuples); } if( components.getSecuritySchemes() != null ){ JastAddList<SecuritySchemesTuple> securitySchemesTuples = new JastAddList<>(); for( String key : components.getSecuritySchemes().keySet() ){ - SecuritySchemeObjectTuple securitySchemeObjectTuple = new SecuritySchemeObjectTuple(); - securitySchemeObjectTuple.setName( key ); - securitySchemeObjectTuple.setSecuritySchemeObject( SecuritySchemeObject.parseSecurityScheme(components.getSecurityScheme(key)) ); - securitySchemesTuples.add(securitySchemeObjectTuple); + if( components.getSecurityScheme(key).isRef() ){ + SecuritySchemeReferenceTuple securityScheme = new SecuritySchemeReferenceTuple(); + securityScheme.setName(key); + securityScheme.setRef(components.getSecurityScheme(key).getRef()); + securitySchemesTuples.add(securityScheme); + } + else { + SecuritySchemeObjectTuple securityScheme = new SecuritySchemeObjectTuple(); + securityScheme.setName(key); + securityScheme.setSecuritySchemeObject(SecuritySchemeObject.parseSecurityScheme(components.getSecurityScheme(key))); + securitySchemesTuples.add(securityScheme); + } } componentsObject.setSecuritySchemesTupleList(securitySchemesTuples); } if( components.getLinks() != null ){ JastAddList<LinksTuple> linksTuples = new JastAddList<>(); for( String key : components.getLinks().keySet() ){ - LinkObjectTuple linkObjectTuple = new LinkObjectTuple(); - linkObjectTuple.setName( key ); - linkObjectTuple.setLinkObject( LinkObject.parseLink(components.getLink(key)) ); - linksTuples.add(linkObjectTuple); + if( components.getLink(key).isRef() ){ + LinkReferenceTuple link = new LinkReferenceTuple(); + link.setName(key); + link.setRef(components.getLink(key).getRef()); + linksTuples.add(link); + } + else { + LinkObjectTuple link = new LinkObjectTuple(); + link.setName(key); + link.setLinkObject(LinkObject.parseLink(components.getLink(key))); + linksTuples.add(link); + } } componentsObject.setLinksTupleList(linksTuples); } if( components.getCallbacks() != null ){ JastAddList<CallbacksTuple> callbacksTuples = new JastAddList<>(); for( String key : components.getCallbacks().keySet() ){ - CallbackObjectTuple callbackObjectTuple = new CallbackObjectTuple(); - callbackObjectTuple.setName( key ); - callbackObjectTuple.setCallbackObject( CallbackObject.parseCallback(components.getCallback(key)) ); - callbacksTuples.add(callbackObjectTuple); + if( components.getCallback(key).isRef() ){ + CallbackReferenceTuple callback = new CallbackReferenceTuple(); + callback.setName(key); + callback.setRef(components.getLink(key).getRef()); + callbacksTuples.add(callback); + } + else { + CallbackObjectTuple callback = new CallbackObjectTuple(); + callback.setName(key); + callback.setCallbackObject(CallbackObject.parseCallback(components.getCallback(key))); + callbacksTuples.add(callback); + } } componentsObject.setCallbacksTupleList(callbacksTuples); } diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.java index e06ee032..6867aae5 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/DiscriminatorObject.java @@ -33,7 +33,7 @@ public class DiscriminatorObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:653 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:717 */ public static DiscriminatorObject parseDiscriminator (Discriminator discriminator) { DiscriminatorObject discriminatorObject = new DiscriminatorObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingObject.java index e38ce2f4..9398b46d 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/EncodingObject.java @@ -37,7 +37,7 @@ public class EncodingObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:411 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:475 */ public static EncodingObject parseEncoding(EncodingProperty encodingProperty){ EncodingObject encodingObject = new EncodingObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleObject.java index 3a8615bb..862d11bd 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExampleObject.java @@ -33,7 +33,7 @@ public class ExampleObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:461 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:525 */ public static ExampleObject parseExample(Example example){ ExampleObject exampleObject = new ExampleObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExternalDocumentationObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExternalDocumentationObject.java index 811bc27d..466b4f51 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ExternalDocumentationObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ExternalDocumentationObject.java @@ -28,7 +28,7 @@ public class ExternalDocumentationObject extends ASTNode<ASTNode> implements Clo } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:331 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:395 */ public static ExternalDocumentationObject parseExternalDocs(ExternalDocs externalDocs){ ExternalDocumentationObject externalDocumentationObject = new ExternalDocumentationObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderObject.java index f6191a9f..88fcbf8f 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/HeaderObject.java @@ -49,7 +49,7 @@ public class HeaderObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:495 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:559 */ public static HeaderObject parseHeader(Header header){ HeaderObject headerObject = new HeaderObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkObject.java index efd18cfc..714f5cdd 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/LinkObject.java @@ -39,7 +39,7 @@ public class LinkObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:476 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:540 */ public static LinkObject parseLink(Link link){ LinkObject linkObject = new LinkObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/MediaTypeObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/MediaTypeObject.java index db454b4a..31449486 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/MediaTypeObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/MediaTypeObject.java @@ -41,7 +41,7 @@ public class MediaTypeObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:392 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:456 */ public static MediaTypeObject parseMediaType(MediaType mediaType){ MediaTypeObject mediaTypeObject = new MediaTypeObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.java index ec98aff4..599f6a61 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowObject.java @@ -34,7 +34,7 @@ public class OAuthFlowObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:731 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:795 */ public static OAuthFlowObject parseOAuthFlow(OAuthFlow oAuthFlow){ OAuthFlowObject oAuthFlowObject = new OAuthFlowObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.java index 01b96bdd..d16afb3d 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OAuthFlowsObject.java @@ -33,7 +33,7 @@ public class OAuthFlowsObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:707 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:771 */ public static OAuthFlowsObject parseOAuthFlows(OAuthFlows oAuthFlows){ OAuthFlowsObject oAuthFlowsObject = new OAuthFlowsObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java index a71bc424..13e13134 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java @@ -40,7 +40,7 @@ public class OpenAPIObject extends ASTNode<ASTNode> implements Cloneable { if( openAPIObject.getNumSecurityRequirementObject() != 0 ){ List<SecurityRequirement> securityRequirements = new ArrayList<>(); for( SecurityRequirementObject s : openAPIObject.getSecurityRequirementObjects() ) - securityRequirements.add( SecurityRequirementObject.composeSecurityRequiremnet( s ) ); + securityRequirements.add( SecurityRequirementObject.composeSecurityRequirement( s ) ); api3.setSecurityRequirements(securityRequirements); } if( openAPIObject.getNumTagObject() != 0 ){ diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java index 2c98ffaa..d6247991 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java @@ -54,7 +54,7 @@ public class OperationObject extends ASTNode<ASTNode> implements Cloneable { // operation.setDeprecated( (boolean) operationObject.getDeprecatedBoolean().getDeprecatedBoolean() ); if( operationObject.getNumSecurityRequirementObject() != 0 ){ for( SecurityRequirementObject s : operationObject.getSecurityRequirementObjects() ) - operation.addSecurityRequirement( SecurityRequirementObject.composeSecurityRequiremnet(s) ); + operation.addSecurityRequirement( SecurityRequirementObject.composeSecurityRequirement(s) ); } if( operationObject.getNumServerObject() != 0 ){ for( ServerObject s : operationObject.getServerObjects() ) @@ -65,7 +65,7 @@ public class OperationObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:272 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:336 */ public static OperationObject parseOperation(Operation operation){ OperationObject operationObject = new OperationObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java index 95fdda9a..b697fa64 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java @@ -57,7 +57,7 @@ public class ParameterObject extends Param implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:341 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:405 */ public static ParameterObject parseParameter(Parameter parameter){ ParameterObject parameterObject = new ParameterObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemObject.java index 0e66a431..41c0325d 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathItemObject.java @@ -51,7 +51,7 @@ public class PathItemObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:211 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:275 */ public static PathItemObject parsePath(Path path){ PathItemObject pathItemObject = new PathItemObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java index 3d95b06b..19d32136 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java @@ -15,7 +15,7 @@ import java.util.*; public class PathsObject extends ASTNode<ASTNode> implements Cloneable { /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:200 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:264 */ public static PathsObject parsePaths(OpenApi3 api3){ PathsObject pathsObject = new PathsObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyObject.java index 1c94dfa1..f354390d 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/RequestBodyObject.java @@ -33,7 +33,7 @@ public class RequestBodyObject extends RequestBody implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:377 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:441 */ public static RequestBodyObject parseRequestBody(org.openapi4j.parser.model.v3.RequestBody requestBody){ RequestBodyObject requestBodyObject = new RequestBodyObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseObject.java index 2866be59..1dd9e16e 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ResponseObject.java @@ -44,7 +44,7 @@ public class ResponseObject extends HTTPStatusCode implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:429 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:493 */ public static ResponseObject parseResponse(Response response){ ResponseObject responseObject = new ResponseObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaObject.java index c0769034..edf5a834 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaObject.java @@ -107,7 +107,7 @@ public class SchemaObject extends Schema implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:537 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:601 */ public static SchemaObject parseSchema (org.openapi4j.parser.model.v3.Schema schema) { SchemaObject schemaObject = new SchemaObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.java index 92ae5d03..14251c8c 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecurityRequirementObject.java @@ -17,7 +17,7 @@ public class SecurityRequirementObject extends ASTNode<ASTNode> implements Clone * @aspect Composer * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Composer.jadd:660 */ - public static SecurityRequirement composeSecurityRequiremnet (SecurityRequirementObject securityRequirementObject){ + public static SecurityRequirement composeSecurityRequirement (SecurityRequirementObject securityRequirementObject){ SecurityRequirement securityRequirement = new SecurityRequirement(); if( securityRequirementObject.getNumSecurityRequirementTuple() != 0 ){ @@ -35,7 +35,7 @@ public class SecurityRequirementObject extends ASTNode<ASTNode> implements Clone } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:745 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:809 */ public static SecurityRequirementObject parseSecurityRequirement(SecurityRequirement securityRequirement){ SecurityRequirementObject securityRequirementObject = new SecurityRequirementObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.java index f5eebfa2..c4749a9e 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SecuritySchemeObject.java @@ -36,7 +36,7 @@ public class SecuritySchemeObject extends ASTNode<ASTNode> implements Cloneable } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:687 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:751 */ public static SecuritySchemeObject parseSecurityScheme(SecurityScheme securityScheme){ SecuritySchemeObject securitySchemeObject = new SecuritySchemeObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/TagObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/TagObject.java index c65a67c4..eab434db 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/TagObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/TagObject.java @@ -31,7 +31,7 @@ public class TagObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:524 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:588 */ public static TagObject parseTag(org.openapi4j.parser.model.v3.Tag tag){ TagObject tagObject = new TagObject(); diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/XmlObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/XmlObject.java index c182ff43..4aa1d8cf 100644 --- a/src/gen/java/de/tudresden/inf/st/openapi/ast/XmlObject.java +++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/XmlObject.java @@ -35,7 +35,7 @@ public class XmlObject extends ASTNode<ASTNode> implements Cloneable { } /** * @aspect Parser - * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:670 + * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\Parser.jrag:734 */ public static XmlObject parseXml (Xml xml) { XmlObject xmlObject = new XmlObject(); diff --git a/src/main/jastadd/Composer.jadd b/src/main/jastadd/Composer.jadd index b0b9f232..295ebdd1 100644 --- a/src/main/jastadd/Composer.jadd +++ b/src/main/jastadd/Composer.jadd @@ -30,7 +30,7 @@ aspect Composer { if( openAPIObject.getNumSecurityRequirementObject() != 0 ){ List<SecurityRequirement> securityRequirements = new ArrayList<>(); for( SecurityRequirementObject s : openAPIObject.getSecurityRequirementObjects() ) - securityRequirements.add( SecurityRequirementObject.composeSecurityRequiremnet( s ) ); + securityRequirements.add( SecurityRequirementObject.composeSecurityRequirement( s ) ); api3.setSecurityRequirements(securityRequirements); } if( openAPIObject.getNumTagObject() != 0 ){ @@ -252,7 +252,7 @@ public static Operation OperationObject.composeOperation (OperationObject operat // operation.setDeprecated( (boolean) operationObject.getDeprecatedBoolean().getDeprecatedBoolean() ); if( operationObject.getNumSecurityRequirementObject() != 0 ){ for( SecurityRequirementObject s : operationObject.getSecurityRequirementObjects() ) - operation.addSecurityRequirement( SecurityRequirementObject.composeSecurityRequiremnet(s) ); + operation.addSecurityRequirement( SecurityRequirementObject.composeSecurityRequirement(s) ); } if( operationObject.getNumServerObject() != 0 ){ for( ServerObject s : operationObject.getServerObjects() ) diff --git a/src/test/java/openapi/OpenAPIMain_test.java b/src/test/java/openapi/OpenAPIMain_test.java index 18662146..2e7b4a59 100644 --- a/src/test/java/openapi/OpenAPIMain_test.java +++ b/src/test/java/openapi/OpenAPIMain_test.java @@ -20,6 +20,7 @@ import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.List; import org.junit.jupiter.api.Test; import org.opentest4j.TestAbortedException; @@ -32,43 +33,51 @@ public class OpenAPIMain_test { public void test() throws IOException, ResolutionException, ValidationException, EncodeException { OpenAPIObject openApi; OpenApi3 api3; - ValidationResults results = new ValidationResults(); - String fileName = "uspto.json"; - FileWriter writer = new FileWriter("./gen-api-ex/" + fileName); - - URL expUrl = OpenAPIMain_test.class.getClassLoader().getResource(fileName); - File file = null; - if (expUrl != null) { - file = new File(expUrl.getFile()); - } else { - file = new File(fileName); - } - if (file == null) { - throw new FileNotFoundException("Could not load JSON file " + fileName); - } + ValidationResults results; + List<String> filenames = new ArrayList<>(); + + File resource = new File("./src/main/resources"); + + for( File file : resource.listFiles() ) + filenames.add(file.getName()); - // parsed openAPI object with openapi4j - OpenApi3 api = new OpenApi3Parser().parse(expUrl, new ArrayList<>(), true); - System.out.println("Loading expression DSL file '" + fileName + "'."); + for( String file : filenames ){ + URL expUrl = OpenAPIMain_test.class.getClassLoader().getResource(file); - // openAPI object is integrated in JastAdd grammar - openApi = OpenAPIObject.parseOpenAPI(api); + /* + File file = null; + if (expUrl != null) { + file = new File(expUrl.getFile()); + } else { + file = new File(fileName); + } + if (file == null) { + throw new FileNotFoundException("Could not load JSON file " + fileName); + }*/ - // composed openAPI object, it is expected to be equivalent to parsed source object - api3 = OpenAPIObject.composeOpenAPI(openApi); + // parsed openAPI object with openapi4j + OpenApi3 api = new OpenApi3Parser().parse(expUrl, new ArrayList<>(), true); + System.out.println("Loading expression DSL file '" + file + "'."); - // check, if the composed openAPI object is valid - results = OpenApi3Validator.instance().validate(api); - System.out.println("Is the source object valid? : " + results.isValid()); - results = OpenApi3Validator.instance().validate(api3); - System.out.println("Is the generated object valid? : " + results.isValid()); + // openAPI object is integrated in JastAdd grammar + openApi = OpenAPIObject.parseOpenAPI(api); - // compare if api (source object) is equivalent to api3 (generated object) - compareJson(api3.toNode(), api.toNode(), Paths.get(fileName)); + // composed openAPI object, it is expected to be equivalent to parsed source object + api3 = OpenAPIObject.composeOpenAPI(openApi); - // save the generated object - writer.write(api3.toNode().toPrettyString()); - writer.close(); + // check, if the composed openAPI object is valid + results = OpenApi3Validator.instance().validate(api); + System.out.println("Is the source object valid? : " + results.isValid()); + results = OpenApi3Validator.instance().validate(api3); + System.out.println("Is the generated object valid? : " + results.isValid()); + + // compare if api (source object) is equivalent to api3 (generated object) + compareJson(api3.toNode(), api.toNode(), Paths.get(file)); + + // save the generated object + //writer.write(api3.toNode().toPrettyString()); + //writer.close(); + } } protected void compareJson(JsonNode expectedNode, JsonNode actualNode, Path path) throws IOException { -- GitLab