From 0dbe5d73f52b731fbd9618ef6a62a40c41f12def Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Mon, 4 Nov 2013 17:20:22 +0000 Subject: [PATCH] Base tree structure and first draft for the AKB App. See https://www.argeo.org/bugzilla/show_bug.cgi?id=190 and https://www.argeo.org/wiki/SLC_Active_Knowledge_Base git-svn-id: https://svn.argeo.org/slc/trunk@6585 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- modules/org.argeo.slc.akb.services/.project | 22 +++ .../META-INF/spring/jackrabbit.xml | 16 ++ .../META-INF/spring/services-osgi.xml | 25 +++ .../META-INF/spring/services.xml | 16 ++ modules/org.argeo.slc.akb.services/init.ldif | 89 +++++++++ modules/org.argeo.slc.akb.services/pom.xml | 36 ++++ plugins/org.argeo.slc.akb.ui/.classpath | 10 + plugins/org.argeo.slc.akb.ui/.project | 28 +++ .../.settings/org.eclipse.jdt.core.prefs | 7 + .../META-INF/spring/commands.xml | 7 + .../META-INF/spring/editors.xml | 7 + .../META-INF/spring/osgi.xml | 15 ++ .../META-INF/spring/views.xml | 13 ++ plugins/org.argeo.slc.akb.ui/build.properties | 8 + plugins/org.argeo.slc.akb.ui/icons/akb.png | Bin 0 -> 306 bytes .../icons/smallerOrnamentLogo.png | Bin 0 -> 28475 bytes plugins/org.argeo.slc.akb.ui/plugin.xml | 44 +++++ plugins/org.argeo.slc.akb.ui/pom.xml | 74 ++++++++ .../argeo/slc/akb/ui/AkbEnvPerspective.java | 21 +++ .../java/org/argeo/slc/akb/ui/AkbImages.java | 10 + .../slc/akb/ui/AkbTemplatesPerspective.java | 21 +++ .../org/argeo/slc/akb/ui/AkbUiConstants.java | 10 + .../org/argeo/slc/akb/ui/AkbUiPlugin.java | 68 +++++++ .../slc/akb/ui/views/AkbDefaultView.java | 174 ++++++++++++++++++ runtime/org.argeo.slc.akb/.classpath | 10 + runtime/org.argeo.slc.akb/.project | 29 +++ runtime/org.argeo.slc.akb/build.properties | 5 + runtime/org.argeo.slc.akb/pom.xml | 41 +++++ .../java/org/argeo/slc/akb/AkbConstants.java | 6 + .../java/org/argeo/slc/akb/AkbException.java | 18 ++ .../main/java/org/argeo/slc/akb/AkbNames.java | 8 + .../main/java/org/argeo/slc/akb/AkbTypes.java | 27 +++ .../main/resources/org/argeo/slc/akb/akb.cnd | 62 +++++++ 33 files changed, 927 insertions(+) create mode 100644 modules/org.argeo.slc.akb.services/.project create mode 100644 modules/org.argeo.slc.akb.services/META-INF/spring/jackrabbit.xml create mode 100644 modules/org.argeo.slc.akb.services/META-INF/spring/services-osgi.xml create mode 100644 modules/org.argeo.slc.akb.services/META-INF/spring/services.xml create mode 100644 modules/org.argeo.slc.akb.services/init.ldif create mode 100644 modules/org.argeo.slc.akb.services/pom.xml create mode 100644 plugins/org.argeo.slc.akb.ui/.classpath create mode 100644 plugins/org.argeo.slc.akb.ui/.project create mode 100644 plugins/org.argeo.slc.akb.ui/.settings/org.eclipse.jdt.core.prefs create mode 100644 plugins/org.argeo.slc.akb.ui/META-INF/spring/commands.xml create mode 100644 plugins/org.argeo.slc.akb.ui/META-INF/spring/editors.xml create mode 100644 plugins/org.argeo.slc.akb.ui/META-INF/spring/osgi.xml create mode 100644 plugins/org.argeo.slc.akb.ui/META-INF/spring/views.xml create mode 100644 plugins/org.argeo.slc.akb.ui/build.properties create mode 100644 plugins/org.argeo.slc.akb.ui/icons/akb.png create mode 100644 plugins/org.argeo.slc.akb.ui/icons/smallerOrnamentLogo.png create mode 100644 plugins/org.argeo.slc.akb.ui/plugin.xml create mode 100644 plugins/org.argeo.slc.akb.ui/pom.xml create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbTemplatesPerspective.java create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiConstants.java create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiPlugin.java create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java create mode 100644 runtime/org.argeo.slc.akb/.classpath create mode 100644 runtime/org.argeo.slc.akb/.project create mode 100644 runtime/org.argeo.slc.akb/build.properties create mode 100644 runtime/org.argeo.slc.akb/pom.xml create mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbConstants.java create mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbException.java create mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java create mode 100644 runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbTypes.java create mode 100644 runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd diff --git a/modules/org.argeo.slc.akb.services/.project b/modules/org.argeo.slc.akb.services/.project new file mode 100644 index 000000000..62cda5c4b --- /dev/null +++ b/modules/org.argeo.slc.akb.services/.project @@ -0,0 +1,22 @@ + + + org.argeo.slc.akb.services + + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + + diff --git a/modules/org.argeo.slc.akb.services/META-INF/spring/jackrabbit.xml b/modules/org.argeo.slc.akb.services/META-INF/spring/jackrabbit.xml new file mode 100644 index 000000000..06bdb4523 --- /dev/null +++ b/modules/org.argeo.slc.akb.services/META-INF/spring/jackrabbit.xml @@ -0,0 +1,16 @@ + + + + + + + /org/argeo/slc/akb/akb.cnd + + + + + + diff --git a/modules/org.argeo.slc.akb.services/META-INF/spring/services-osgi.xml b/modules/org.argeo.slc.akb.services/META-INF/spring/services-osgi.xml new file mode 100644 index 000000000..d852bfe0d --- /dev/null +++ b/modules/org.argeo.slc.akb.services/META-INF/spring/services-osgi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + diff --git a/modules/org.argeo.slc.akb.services/META-INF/spring/services.xml b/modules/org.argeo.slc.akb.services/META-INF/spring/services.xml new file mode 100644 index 000000000..22c33a6e8 --- /dev/null +++ b/modules/org.argeo.slc.akb.services/META-INF/spring/services.xml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/modules/org.argeo.slc.akb.services/init.ldif b/modules/org.argeo.slc.akb.services/init.ldif new file mode 100644 index 000000000..4f6a47da0 --- /dev/null +++ b/modules/org.argeo.slc.akb.services/init.ldif @@ -0,0 +1,89 @@ +dn: dc=demo,dc=slc,dc=argeo,dc=org +objectClass: domain +objectClass: extensibleObject +objectClass: top +dc: gr + +dn: ou=Roles,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: organizationalUnit +objectClass: top +ou: Roles + +dn: ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: organizationalUnit +objectClass: top +ou: Akb + +dn: uid=demo,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: organizationalPerson +objectClass: person +objectClass: inetOrgPerson +objectClass: top +cn: Demo User +description: Default demo user +givenname: Demo +mail: demo@localhost +sn: User +uid: demo +userpassword:: e1NIQX1pZVNWNTVRYytlUU9hWURSU2hhL0Fqek5USkU9 + +dn: uid=consultant,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: organizationalPerson +objectClass: person +objectClass: inetOrgPerson +objectClass: top +cn: Consultant +description: Consultant +givenname: Consultant +mail: consultant@localhost +sn: User +uid: consultant +userpassword:: e1NIQX1pZVNWNTVRYytlUU9hWURSU2hhL0Fqek5USkU9 + +dn: uid=manager,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: organizationalPerson +objectClass: person +objectClass: inetOrgPerson +objectClass: top +cn: Manager +description: Manager +givenname: Manager +mail: manager@localhost +sn: User +uid: manager +userpassword:: e1NIQX1pZVNWNTVRYytlUU9hWURSU2hhL0Fqek5USkU9 + +dn: uid=root,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: person +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: top +cn: Slc Demo System +description: Superuser +givenname: Slc Demo +mail: root@localhost +sn: System +uid: root +userpassword:: e1NIQX1pZVNWNTVRYytlUU9hWURSU2hhL0Fqek5USkU9 + +dn: cn=admin,ou=Roles,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: groupOfNames +objectClass: top +cn: admin +member: uid=root,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org + +dn: cn=consultant,ou=Roles,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: groupOfNames +objectClass: top +cn: consultant +member: uid=root,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +member: uid=demo,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +member: uid=manager,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +member: uid=consultant,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org + +dn: cn=manager,ou=Roles,dc=demo,dc=slc,dc=argeo,dc=org +objectClass: groupOfNames +objectClass: top +cn: manager +member: uid=root,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org +member: uid=manager,ou=Akb,dc=demo,dc=slc,dc=argeo,dc=org diff --git a/modules/org.argeo.slc.akb.services/pom.xml b/modules/org.argeo.slc.akb.services/pom.xml new file mode 100644 index 000000000..5b3c4f919 --- /dev/null +++ b/modules/org.argeo.slc.akb.services/pom.xml @@ -0,0 +1,36 @@ + + + 4.0.0 + + org.argeo.slc + modules + 1.1.15-SNAPSHOT + .. + + org.argeo.slc.akb.services + SLC AKB - Services + + + + org.apache.felix + maven-bundle-plugin + + + + *, + org.argeo.slc.akb + + + + + + + + + org.argeo.slc + org.argeo.slc.akb + 1.1.15-SNAPSHOT + + + diff --git a/plugins/org.argeo.slc.akb.ui/.classpath b/plugins/org.argeo.slc.akb.ui/.classpath new file mode 100644 index 000000000..76cb9350a --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/.classpath @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/plugins/org.argeo.slc.akb.ui/.project b/plugins/org.argeo.slc.akb.ui/.project new file mode 100644 index 000000000..1462e5a7a --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/.project @@ -0,0 +1,28 @@ + + + org.argeo.slc.akb.ui + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/plugins/org.argeo.slc.akb.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.argeo.slc.akb.ui/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..c537b6306 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/plugins/org.argeo.slc.akb.ui/META-INF/spring/commands.xml b/plugins/org.argeo.slc.akb.ui/META-INF/spring/commands.xml new file mode 100644 index 000000000..3b2e6ccb0 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/META-INF/spring/commands.xml @@ -0,0 +1,7 @@ + + + + diff --git a/plugins/org.argeo.slc.akb.ui/META-INF/spring/editors.xml b/plugins/org.argeo.slc.akb.ui/META-INF/spring/editors.xml new file mode 100644 index 000000000..7809cbfad --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/META-INF/spring/editors.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/META-INF/spring/osgi.xml b/plugins/org.argeo.slc.akb.ui/META-INF/spring/osgi.xml new file mode 100644 index 000000000..62479ef7b --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/META-INF/spring/osgi.xml @@ -0,0 +1,15 @@ + + + + AKB UI + + + \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/META-INF/spring/views.xml b/plugins/org.argeo.slc.akb.ui/META-INF/spring/views.xml new file mode 100644 index 000000000..f592db19b --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/META-INF/spring/views.xml @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/plugins/org.argeo.slc.akb.ui/build.properties b/plugins/org.argeo.slc.akb.ui/build.properties new file mode 100644 index 000000000..10087d45c --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/build.properties @@ -0,0 +1,8 @@ +source.. = src/main/java/,\ + src/main/resources, + +output.. = target/classes/ +bin.includes = META-INF/,\ + .,\ + icons/,\ + plugin.xml diff --git a/plugins/org.argeo.slc.akb.ui/icons/akb.png b/plugins/org.argeo.slc.akb.ui/icons/akb.png new file mode 100644 index 0000000000000000000000000000000000000000..6588de86ba3c4981b19492eb5322f6b21b9834f4 GIT binary patch literal 306 zcmV-20nPr2P)*O41)JQSpYp`y@7M? zqkZOh1C=vI%Of<#h^A>o2to9H&-xzYeB_LjZ*qhaGINP8?)WZ_8iz*{^N)#wLD6z0 zH#NeB#j3#ILRb;j;8()AD(vDo?hRo_c+UNs#Y=zz0OIpn+a literal 0 HcmV?d00001 diff --git a/plugins/org.argeo.slc.akb.ui/icons/smallerOrnamentLogo.png b/plugins/org.argeo.slc.akb.ui/icons/smallerOrnamentLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5907f80b69aff21aa8b781ec335b7cc1df8b07 GIT binary patch literal 28475 zcmXtg1yq$;_cx(%rA10WT1o^&1SAzyy1PrdI|NZF5do1B5Rka!(A~`yk&^Bbkdl(F z|Gw|HzBP-{F}Tlj&e?na>P(o5k~AS6H68{A2BECXGd1|}9ef2MaNyrhjoWqL2TV6L zX-SNtKH4?-4;(Xj>1P;M=zqR7=ET6S+;EoBb;H2GzlHw7#7O!|1;2>vF01$)cjm?| ziU*iMkH@MpFc>gopFP#^p4@Eo@q4N5v3)kPIxMQ4#~+t9IE&luCL{?EM@>hv@32w&?!*J1RUxo={dcx0CQ(eIVd7~S9)82Af+_ceh+T$5UJ_xozqA~`bWzWE zey=$z7Qsl}93{)4A4GDaMcw$Nx*W&lKWj>X>8OmjkKlwQs2QqwiEwNKLL$Cjx)2=6i_gH-ppZY1%t??u=JO#C{$b z(aay=+}hfjWME}uTie>w#5t0hUB$vy?=r=B#MnW=%ZB8-9m06kym;T>YBZw7g;omj z;97+|2jTKMGPcT;D#ImOKtKQyEJ@8iYWrw(bky3>vCD;4Vd!^9*sY*;)3ycPW!FTu zRPT4`>5QMdS?HodhjNr3iipU|%ZDG5ZftCHm_0Dy9;0Z_r`H}P>@Nz^4KqaZUgv*`IwJI1tIznI^K z{@mhvL9wN+?T2K?x-f~87>R|Zv%lu>-$g~-j?EXI@d*ieBevH9pYENA#>oX6a7$}z zYcKUBctnk|1X)L`6=ALhlOzV95LY#r9a*usm_shK_Z9Q;-urlmJFrV#u8k)joLm*M$`E53s%ezB&!w12X5;>SXIgNRn> ziLx^B+b3^Kc)!EqFT37O=;`d?Y5oacA7e>-%1XGx?-e(Ewo3EYN;_hcIFUWvoM;z2 znwD~Ndl;~T8_-f}j;dMwa1V|Sf{~pfyvBeV>+KWfA{9gxOOW^V?^o;udsp|Qta;y+ zkeC(6^5wosBYCG+_(C9gFLft%iTU zP{3lJ$o94QjBxG@tpbedud10-hcib@2Ne7SlefDL?!AuuAO4xQpul3KumV>K*=_=@}Rph+mqhQiR7e;8rix z%F`+k&UB`g=4rA?s+n+kR1 z-7(KHRh#zWic8=v)1^YktDWe}%gf>2?dzG3b1Z53yU$k3o(@ z&~6>CMi;9lY^yCCnW@_B+C6u5d8BJ(#7ctL`Rmo3td`e-UfhXttJ;H6{gZiIiSP6C z-;A7l%5pV0UzY0<9)9R#g0rYsSQRXt%hN&}Ep59>9rCtkxoykyRun1>wG<@Di1ii& zo`5IULf3CUdG2@d)oC%hI!^pj7Zyy>CtLiaTiNyEU~E72s39~vn-$ii;0-rMwv9k) zICGGZ?fjhH&<< zTWIEvUx@F9DVLa|h_-&*K|$4{7iMvhDOhqL)X~)(VSR2?yZNI3Ta(jwoY(JNG<2Bb z9-^h2?w`F*ac5)j{uj#A-_gT~ZwHnY7V zw(UbaRprp`Ld(@-_WE_|$%zlN)QWm1gFp0@OFZZ6p7qrx@%Z?fKS;$MgqoXH@rJ}KTh}mVCYcxIVuQVi&G=}f9v=Qx>{Yx}C=p}Oe41g%h(V5TL)Lb9^c`N}xn(C+k_}gFUvblq=L~FXN)dS6ZJFPa}R~z#Tfafh;eN>FZO1 zks*ml^*_`VKP-*fZQS-JeglnNu=zw$DNVfh)!dnpYb|Z19^nvwrB~i7ggRn3pTumz z>LzE0@&pZnv4auilJSGxekxn5z;sF=a%pFoCm`|S>}db6x;dr0TNcBy>BN%GZ|5nr zTi7|69)JF@L$CK`<1|+jF}`0nx6MWoelxuDJ!;8Ylb3>t{j0>iynw(l5*;KU?YU5zhvp(_5m-)jfr&TDzQ>y06jpn|o z*+T)oL;}HSXY6>31=reG+&D>uDOJ}ylEq==KhJ%CRfBOR`ge^R6eU;;|v9U2-?Mv})G$Lr9-$niJoFmopOp;iw`o5al*n~ATiIaw1%eGPDPPh>) z8PTOeA}M+`L~v^{CkVGq?ML_>luKSp=JZCuMe$XfVB?x%tlV96Nwc!D%CN?q57J-U z-1Z%-ccu+BEB$`5znYkuIvQStV0zAdH%3-iSQ!2geE30t8e)MeL^VduH-E&o*+RE5 za*1Hrwo(b@vKYDa><;S24Mwa3Neb=+`8%kal4QXoK8zh9Hc7XK_^k-rsXXduZgD5r zDah%1(4q`^_`+-}fBg7?2e9M!zK{J>*Rm@VZk2;Ncfte3n7@A=>+0$d*RY`b@6$Bz z()jI$8~;WRl<8WxhNU~(^U#{jY;118hWwqWuXd)Bd=EALoblQ6Tm>Wl{M+}jd!J7; z5SrM~gr=%)-@a|?=otCxZ*6E!s_%z;MK$l7{FZ3=1qIa$M!qB`FTtr8wtWQWFLKG6 z7^+kTsRn3w4_W2 z|5S1f4Y(5yln%W`{Z>Wh(sj68k7m5~tEw9#qWpd{!+XHt=V|;$T2N5ni>@ihYMQiu zX?b~kIHwY^uU7X@D0<3fvCh9bOugnnsxYYCm*h?`cW_WlNWB$y&B4Lpv|(&)3?@vr zUg4r^EdnPH<^zoD*Uj|py!_Sa6rKEvYx^g1ubZ!Kw)0-jR&6c!K5PG`!p{5PL2FxE z8-;+nf5_C#;edp$fle+ zocfw;dvAv z(1f%OW=gMZZVq?!0aTKblA3hm;L+lu=(a3}v#2n{LPbCt@!|o2RG?uy?~ZR{)!er7 zE78A# z_uqdex)k-ETW!1q{!NkyeZ=mxGM~cxG!oYLqwQ~*gGlhi?)e^Fo^4wl{hgWiUW$OV zrVBWCA)*t7L%49fyQH9?U~Q|td;~xhP7F!Ji&8Fm>JZfe4Niw;*AoGhi{nknj#ze< zgdQ852ed>(v$IOd~X#@vK(-WE}aNb zT;(u@5hU5OZU^vCf9{mR(9m$&1$9S3S@~AjGj>3|N7HWboP*(tkoNG?=7VXPZ&w;KL z+hgJD>kDA^tEi6}O-ax4uRLqML>3Z+Nm6!X4-E|se6YDL1+2;O#p|rt@v8fnH^ZKB zHP2mXPE~E=%Bjh@oFBUYroR!|J~0@12GAuaDhAVC9B~ z$$)Znc0P}!eVpNgVS!k1{sQpGU)_*fn3Tu!$x5<~o!!!Ko_fcU3)GMI$#TLYjx0pl+qamfr>A6y3eLD6 zCgN#V5_eD&TduV)^E60dIzY+7smb0rSCgZlpwKZk9!q?|PR2w|^eGD| zW1L)RLxTdK=vsqF;LvRgJMmnS!BuK`fQR(0txzsd#aU_`{@n2DwY86bESKSARyp*T z@Uly$57;nvh*deH6^z&xnWG}3dzPW&CEY31;M^Q94Fq1-_w{l6<;7VkS2!-cA4&08 z4>G|hUsp9waTxPuSJhSm^-ynG9V35MSp6N8EatB&hxE2Lrc_Y2JHKO;e@#vG+^?Q) zgR#1{wq|N+8IoZ9S{GX)`0vr?gp`$44!0zEc&A{39MY>GrLv+TDE71e*`dv^Yy<8M z$(XtAF+u3UwlCBWPlaelkuN)+Dkv%O2?@QQ+eR(BJ`fhJLwalEX}HHnE3j5-bHvF3 zkA_0v&-~JB30%b8-JJw+jYRTO_e-ifcSZJc_VxqQ(+Wbgvl$^uIYZF$MCpiwCEsdrb^?>=>FI%eFLbqK zc?W0*-ZZ}U8Ug*u zZ%y796dup**~0$XNJ;|64pqjEb&1fo=d0e=s$=((e7#8k{I>IYZ3eK7lizUr_Wbs5<=r>;_CVtK2UQ5TXBem49^8BykL5gJE3Q6#kICR zn50)t4lQeKZoULOOBM1|IAsM_;uy2l1U6quS~`?_!LnR;OKWOs3NWC%a4!_iqpRYI zKmab+urNLUPKR0O3TIMLQ$zXN?n#q(k(CPq=786=v$L!FcC7@|Bcxh-eSI>#GIv5| zdHJn3l*WG1lIc%)seYIBaD&Y9P+T016zH;V*XSc$96WTU=8t4jE~Qw(VM*S zDJg8@^sDVgE*>5<@3W38T@r%R$lZMIik!&Q;B2fl;BJ;i1}!ZuZBA7y?_+?p1hWnY z7grbNSDf5ha!EtOPdMt>*w~ZI(Ds07{@L6FG6P2xCK~`dAT*#2YH*TkX=_90ho4YT zQcg7aivXzt$;yVYz(N;r>t_Yl#FUh~(K4TUErFH*q5yiZ=1vVL5PBtOYdy>S-lATA zY2lM9s;X?aT~Ghnz|8ijtp&1zU=(LVo`(XF=}Qq|qo$zbxO;ZA%@!x;GNP$%b8~A| z{OIxQUVJs+8eq@#Sp?yLX)tW(733% zjC|LSP`3FccVQ2*V)w)(-+OtuyAKQvWnLN0bKI|8j^70bIFg}|c6LML+ z_VD4uI#zXK${U+5w5YQs_aK_9atu{OslJ>Iw&WW2+)>k!%hkov{!Tk_=I{$;@e`JK zi`_PS9(HaFj=K}~@$%fY&yeAK2|X9k^^p!T7%@)1XnH_c9uzrTN3L4o`j%kTw^4JweAKvI?r_q-Q}*ZtB}KIy-4#lttDNSFmVYaY9iWj9dL^r>LdG^af&NVi)O&4fiOg`5 z;dyCs#u<}J%Aj0203wAF-2tQx9kENEr}3Gwaaz$G*zOn^77|Gn?u5$km0AU*rKN9U zKc}YB0d3^>)xPi0{qpn5iY1`m$R!d294OO)`dp(UD>Jiqhlidp${aPI#Q@2E82Qku zj{(`SeFR!6dz>8gN38-)Kqu~m>2OTkg(ECO$2l^%!4A@>Rn$mH3xVN9wE;sSha%h zfqvZ45oGzSV1yHf$ryR;7&R^JOIX0TIPxG8v~C|3c0)7kR-yt9V@ENTlaSwWiG73P z5PxEFvbl>(v|!V2gn>&ZInXs}iBnajuR^V$p`#WT&CK7I1d#+v$bRGn+??0&l$~r5 zoBsF>4j0sUdnoaKp0fW3XcQnwyCW6JEkP^{beK}A)SEFZ)RM5L3W-%i_vz=9hCwz- z3W|!QaQfj;L@uPOya#ZXl3>MmyRN<-tzuMS+zq6sp~+OsBME!PPd_j-Qy4CSHwFOI zwlc|4>4Bm;zP#t=c!{peF=%sKeC-AndzW z^O@oOmYSp4SKur(?6l#ZzVjDPV-*MVbd3}kVCI{iGOh=YA9wHU@H$o}PfX~#)_(n~ zr&TWqTAypJj-g@a(k|2qh*!ok+|m!xL!Jpf&=o6|tk znVd`#sDNz%u#P6iVEQ1DcNKeXhQibNjcM^t{WI9e6y1RVc+kdz<3$7SRMdR%gYv^3=T@uk4*a`)ffSI9q*V1k!V%w zH5TY_UD9XU{3tDb@IX}bKlN7FnaQcCN(TN!1xF71JV_;}{87vrgQEMSp6$HfSNDMl zgK)|J&AomGeme8K@K^H_hHnqCrmCP?HW=X*!=5n-i)p5_!So~w?OxpnkD=Eh7fZ8J z&jQLGEFmG7RB2DEtq>q%AGA$nulmq)%6r_xQA(hj>K6STZ{ z$r@j6jz55+3^>pZKw7NAUr#Xdl}%6|iCq8tSBrAWxL{=V#&;;(!MV9&N>^xJv$IBx zRC455WMcVjrXabX`4T%Bh*3}uFge4XNp8Ow;+JKOA;SxP;iGL{d>1Own*Rr&5D;MW zlZ@}heNe)tdBsf7{tduVL7e9L_;`tkpdeZ=2jB^>pRO|g*|*Ms8Eh8D(wH1()y3u=I7^!$H%Fl$vS<4-g>w_*H1IMg9Czjb8{L@ zD>#XVwg*c>Pegdn%uRz%9py*6Z$P7Zb-1~(*Tb{wbam)7(HtNVVhWas-&^SHKYxCl z&4c3%l*(GC9;gNs!cZC4O#&PnTU)FF*9VoKFh*=O!v!?zz9{7YRva;6r6qbOB$O)> z7dOmB7v*G1Nn^1M%jqXxTo9P9A`^|L%3DM}9o1#|R&+f`CW%RIw(B_{zz0T2}v@;7*QzvfGIxbS+)6c{^j z>+9x1HkM~D1a{z zOyHSk#Nz?t*D14*q8lW%SRjco8V(LTJhvu0Vb~QG7V1fjQx%WM%MRZ`4Q_t>Fa`+O zwlaT0HV*lcFY*3;2g(mF!}{de(APW7K<2HO2RBH4+Z!1Wt7fajl%g~=GouJHT-dXB zpdbRm=4m=+id?e4p^uk<**rQsOBeYf(--whl+Myp;K6*3#D&eBcxCX5pdsR<5-y~l zp>`3N2X4q?e-Ma-UY`pA?!ahRzVDO{8pPnB>K(b^h>1!&O0^&P4pUC~S_MWH3{Zho zA*~?(&dkgJB(|Tjbaws(u3db5Jg9xb7Jyk!-zg4dH8z6fK}AIcwy}*x43^cp)w-oN zkR=KVAO(Z|*m)WsUh;K=&%EpX6^I1{4(OuF%gQ8KNWoP@t4&_^utA`N_mpaBY4Pi5 zgclNY@Dkh+(9oUUIQZQCa=h`CAX<+lB(y0sgDF`X0Pq_m3Jmxa5M@5}EUVp)qV!hx z^75)2ya&t;G{oAaNRdBVTg#^##bb^15vL(_R`>i($G7^ z8?=(IQJ~qEDpoL*13d-6o!Z}uI5}iJMtax8!wly=a}p#?+W03Q1V$Vo&J z(63b3vuyN7*z-MeT-!k{ffX{0h5lNn`5G_{5X5yMdnz2zenBGvs|{8I{9M4qU4)#p zKy&7g&MM>8I8uj;)I|&xJypf1@@=%jj5V?Ws&@e;f9$qG06jd(uGB#v|0TGCz&l`M zLqkL&gJE)#CtY{e2B@6;OE_PA0MHRFY9WyRoWb~fk@BQn;#^8kPp``4I`Y8ZfW*wN_pN$GSDv*@Gf4h=z>Uy0HNop?2ozy#R+NT1~i8Z>!I?a$P`C9o%2| z7N6Ak1O=tp$;|xy4VSywwb_s_eSP(A@#3}KQaZ301_iw1Amn8sFnc2=QqXAwI{Zvd$46+Khh(d4R1j3AK zTPRt%L)J|Z-U;q7d{?|+Ea@n^5vf|(0uKt0!%f}7CHr|{mU#h!r9Kc;qQc%Uq0K#dfS6(q_(@>KSRmZeXnh1XY6UqCCup$7>b6aCOsZMl(W`~NR&(YxAg`f?egamO*sKmJ`Eee#=7k2wln#IM+ zjOSBaJs)U77|9-L7mV=ds>V9-CB8H{MWLCcFmp=%5pCG=BTRJsZ~ z7!CX<6#$>%5rJTXJhivS2isJatREZ+5CaP6@8=IMGJp2>+hOG51cG14 z5+JPD&g;V*hTR$_fDP~&pG|Lh&W%n^=KIhv1|4!W@7-(8*x-j+tZu&8qW*c$;`V@h z`qwSVkDpZ5)Zn3E00kU}2AI5j83fe|wg&VP3m+fdIUS_LfBpRKaXrh``tf(+(8DtW zONC}Y?)$()diHXz8XFqkP449bISnn^ z?{-oGDS*I%7I7gQcXtmDbTX^fVAM~Fg>>QkWFJT|IK$sx@=gAU9aUA7gjWPs1tvLb zESX{9Z!f%7?E=kSZBUyHP1Jq~TxY%C^Q%R}hAOa?0U8fb^O^PHH^tPq4FcrnVGKHX zaY(7SzY4( zPHwV*p8x^0a^Tmm3@;O2s;t672l+FDr4sJSWX(7=548e9_sesiEk;TT3NmcYAd;tP z{Rul~7o0t)rCpFIgTVELS7=+>-RV|-?J9pI9Z30Jmc#Js3u8q-XJ#8tg9xM2z_sjJ_D%vI7u6_)4^TQKgRSAYu$=T|cQTh7;9{s##?FtGA1OrR(Lgn<5C zOzGt63V|_xR@GI2#{9vBU!>yNI7|wBX=WU&i@ex*vRnR>JX?0veI*%u8wUr6pE3Jm zA>{0i&OCZEj2?MlI@#LTlxl<-RxaqqccSwl3PV{sTzlvH{V-(P*4J&Bk$>5@n>$I? z*%I>Aqrs&k{FCat&H-fxvmcTn8x%a9?FIkj5DQ=vRObq~#c|}0?w|*KLIN0zNx|yo z8`Polxyc1G|M`i}joTMA=a*H~36W=$F@li@kw?}zIdq?cQU)RDj)*5ikO}Zth)RLz z0SXw}a70}Dv$mFAS*e*&=`T(XW71nRvS-;0O6p#5RxHo~MadD{N6^bEv&7=$qGeb> z9RkzMwq0$=h}^uctSrM0!MOzFq@uDC#K@bHB@R;py^X^XtMM9~%T8IpG%G#4y{SM( zsh_)W6hEr%cLAC8;)L)&w}zW+HS6?D<9=mf>->weueLjR2?+OQ&sPNP3e^7?%H>5r z9MCM(!j4?}E}71tah8;Hq{^9H3Q0Kj3-%;cLFK<|egg|Lxf1xTfJ0_no> ze&T74$;3E;=m(X|)#0+`S~~Fccp&G&qsd8*HnQOTK{?imM_%Ux5H(CLHF?JV5uzk8 z!(}+u{{9{1%!hE#TWnlwf?@y|##3m4u+yyWUtybFsSeQ6&%KsF0F#Uyzy1YW{R4;# zFi_W8uE16km^SX$vEGJtm1I^>;S$sRHr)251V@)x+t6bqm|Wk6>cwyAU>sFJymW&- zbc7L*?8!i=ILJ8Dz8i%}owi?1hX)7WlC*i!u9`G1-UW+t>90pAqRZSd6A=$nD>Q=Jj#Eib3MrlDXoda$^LL%mWx%Cs~8GAUMAAh16A!WyMk!c;~Zh zuDR=l3u%-?@HMGv2R;!rT&1Vb-XoX(xc-HK3zVg&Oh;Fj5y%#(PMDMb{_#V67xWu2 zO7cn-!9A+U0?a-mD(0g|{z>Det+~0B*L{v<=X8}Pa(VjyG&%?P6~$yNAVFkSnmeJk z{JMRC7la8wM+_uray#}6X1la-%BVru=dQegOv!RJmFJnNTmIDYa~@JPLKNX68teK0 z5~>{BCM*&#Nr*xrXk(+mI5G)N=&qqPA`Bl_5#-dS(~)8<=lPbm_bq0-9zQ#lYi5He z{5bQ@7FXpW4bYP?p(YcR#~nQO{QUnookv{SQlBs|P?yHUeug9RXv`pRZhJM1Ep>kT z>T>&Ja;&Kfih%p80_9nB$hT7rWl%DAmrw`YGZ5FPBZc5dwSr&)^GZs*g^%LU@ONF= zNsTdQm`X6{fN~Y$_(IapU0MyMr=yPS0*x`?THoC`#@uA2s7js&$g<@nCEun-<6JnU z)N!)MzeD=zr|<5IJn(7wz@j0;yKdO1L8oLxLG6{}I=7B|pVu`hb;7L)1syhc7fy+9_K3;}zZgK3)RZW%-1>(K3(=>{w1PR(kbHL~zdUAvkxx(lpZo zXWY{npT#b7&R0S_!J&Evrv-50qnsI`WiHaN+%FHaJfDcC&1Dd(T#LZ+hW-dcyQ{CU z%fy(?G)?wy8sl#-yOvR*d#V;UM{FZZTBOD6BTcEir;|C78LvIvULo}A<{a0Yp##VW zCKOR3=egRnPob|gu?T49}6Qkjqk;+7dv9&Q^(aor;F=5Wk<@KMo1%_=_v2L1hXrvc7&U)iPO=2I$0!yAP( zJ)b7|*U!mYXzA$C(&P5)qk6r)fTwRC713_Tv3{S5hg}xK6n1)~cM}-m4x3%axXV=PBoRb4ogOR;G^{f6C{u z9k(`whW5*@j5#D_nj1`REhKOg?S*Yqdhc{{b(VFWaeJ9h2`o74*wF>1^E%pAB)s@^ z)EE=_6G6p&ysepJ_KJi45`pY^&i;m$C=`U78P_x}{k>l=qtBu!k7pA_k$bd?raWFm z(lr)dw05uKW%!H2UGksg3@hX-OR4VQF%OIVQW2tkEtK4gXVHIz`&|@RZ@&oytz-*%1=u8Ix+QnHEDMB6 z_-+!Y>rz_FQ=WG&ZA?$3WpXh5S^K+!UtDwC=!C~>TO8Ftk?U+<*JhPgC{Zh4F_`C3OwoQB99} zxBc%CT3*oIaNE}jS;d+WpZ?gx6ePy2$eozV;>~9ck_ozR*Y!~#ad+cdrBTI~{ z-lARm>QQeKqZ>rP#q-)?)^Ak)r&yfZ_7g}Cn0K+4wATsUtxfjB^3>jTiflK;Sf%=e zNYnerg8%OkJ`GBYO}PCRF)oOO3gA5_Pb7^(JsQlIp02#$u9AMZ$=A22DKIU z(Y;QHzLpMG5YZ}~M(8#)U`gi>sxHyy#8c$w**f1glLWV~>A!ArwWI7d&72NgT!UwR zF3&5|7mnEQg@yJ0J!f{;kpBJ{(Fi7fVOCP2rQ`~zu8^L(^$&qnJWUu9_JmKJ zU~jq9h%RmCCXw$1`P6*-t3HxL$5d(k-Rs%?ei6%&g7!-0vX!o9bE74ji`keaCB4E@ z#(!;?UPOC%v7vtUbiWd5c~hzx!*i$H`M(@l7X2y>Px8SmK4wkwLLRe$rCpilejI@i z@YajG3I|t$_OWXa#I+6C?H~PfW8(hr3FsEwb$^&HPm8bgqS~}u3SH>R7RNVce!hLt z=$}cVX&MAn4Sb>p*UtyMcxm-@`9A+iz__kT`n&C;mkL^sHlAlY5PD z$8t;xkvE;yOMG5EI6C{vo=3R}bO_=6?=;N=jRbmpyr` zTBG4fjrYm$eEFl2MzdL)_%WK_pq8R--A?_)Q;ay5RDC~n#cIuTzKAm6|L{;|FhbXa4GqBAWah=9rjWHf7rhK|Ex$n8w7ZXhnh^&^g zqewr;?O76|*}4?A*uj3uI#FwSz~w!D;;j)w37|EAg-MA{eSC|^pDEI`ai6izoE?_h zjTI?6t?->pKK%S+C9}CSD9XSl=8|sHw(TsCS;mxsAX!4}!4pxsOy;uoo?O7d z!V~G>EUm95fy(Hc205c2!~NzOmsrZ&R==CkKEfT`w~7HI6;%*JwQG#^GSL==5|z zwyF1pWyJRoj8S7^=2Tu-dAMfu9wgF^W2%+?B47L{j2n^VwKqrOv#r&oNuABQQLT+z z)7}@A|D60nhfAXZ4W-N&6p}OLUBun^mHJZ5(jK&To_Re?y;&FaQ(HglF$N^5&{{N5 zu|ImDh_t2FVmSu{vm1DoTvAdZ-!031e}Q}j(H;F)<2bL|$s}bgbSOvRQi}IHCP*3l z;RV*GV?7FlDM}xd8h5*B(5g6G{%C#<5arjq(edVQqHj*Ummpjb^&AKmUYt3;Z*(5uKbBI?yll!f(CXTSsPEuDX=uh`7 zr&w@5KC<)9wa3!O7T`1zf93iWSYuW{uSp1kF!N9dU zzBVSpX!am;g`6I)!g);_3C+visd$i}>2&wH`uZGPumh|LRy;50D9fYGLjC2d9}YU_ zuGw51%HnhgwH2BC;G5fRz|UQGQ=RFd@hCEyF-WM*TL;H0sZrxJ6lhD)x-n+GPP1h4 zYD$l_zeDug6y5K$;y#!CfQgn-LVs55ji^O_dAK`xIk3USSk>LAEk5TQs*n}L6S@66 zELh7nj`WU$ELs+XFLdb9#^&bWmqbLMicpsPzAZu`2PDJ!IJM{%dpG+btmVSI_#|nV%kKzM>y_ha1>>-$6ZsB5PWe*=|(mgOaXA zp%ySZ0ubvU4)6@T+LZgdw!lTcvkPN(J1dEUy0#`U`y__xQh^<2VZAW_v*yT z>QL7=&2jsnR%@lMOXf7Ruy){vx!~$;U6!z2Y;SI68t7p7w2EHz&D`oz*)dt5{M8dv z)T+$Zq*RAjq=CiI%<7D+v%TStt%HLF=n-&xB|3U-Y)GGDcY@|WC$fLvXCQn7(liKS zp!(Zx<*t9R-859OL7w`U>!+<3s#GT7H+~rOt^}WFI^gO89V4#aZc5hRtn9qS9@)4% zAGwq(J#R8qMMn#kXaCMl32TB2H!ZW#;@gj!!9a2xN z+qtxNtM+K~9Q+~liUIBc1k>U*mrt^f_M3YH-Ye2_Sw{?8;|X;nPs&v0)T|`g<;I57 z(%E+HxAe-iKSO*EqcVmo0KaUA-;UsN3sT`IXR8w+hkRd4il?DA_V*L5;sqnhBX8Ed z(=>F^yz7B91g&qtKh?HWkR$m=e9kDGYOF-`J=)3dxzY<+9wTjk-r zY!RB+FL$|(vS?R)t1uEcw>rVKrKDurrHq+wAW*Q%#liS--CYhTT(hxFF#dH~T6v9K zyZD^k>Bq(0&>rF;C#9updVj`!ZsQ(qqOXAHJJvqGSD^0y>WkO*3qqF zk7(tpZu~MG++4uU5wW53Dxpt(>Dj5(_Sm1BCROQ2u(nXZrKq;C%MBwZT@l{p2>YoO zxR7b??X9zv1b#l}uSy?_71mYW+d@AL#>8!zG_F1>79X2UFo^3e&)f(NC&F<@e0-7F z@bz4iJNeQuNlf>N3F41??~rZ-{R~pBXEHs zxEnY1@8Xj5s%((|$3kJ9s^PqXDUK56{rgEFL_>pvrOU0%wx%Qgnl@(s_dmcb0E6$_ zU=7R=7SetEbxbymFBQ0ZRdux7>JY!$)O-~4QaAjrepQ41teHsIR)_2x`y598>py;d zU1Q`WfYdv`vmCCHFOL*YXqoyS(;9-F7BQBASwmr5ng5>!5a548EURDjB>jmsmM*P` zC+T)Lm(w1r?&rI@W&awFh&OzWH>)aCga$;UAKnfT8a))7+ZXR~!u&KaIdPL^9jsAQ zR|E}Q_4`sHOTZu}l^4z!L}L0}^`#v4d%>8X4suBoR{jV!?)MmKii%S#OgHY}Na7GE zvSBtpNy^B0vbx-6qo5tEo=!_fN!gyUv3rnVA4#$}LV({^mDWG1M(93%Dv@ z(!ziIkoYTo_%uEF`BE%><6OQLU_d8uBWU^$3M3tGT+3fXO@t>}DL6y@?ePRn;#g_ar zO#jV5@QwU=)Z*su>Ngo*dCt$JCl3l9F=N~EVPf83)MSa-uM9fGSJ5PgnDYL*MdD-c zUFv&9+-pzjsNa3!3{qecTze{Y&Y+biZK7eNMrnR2IkW!*(e(o7_IY%2a%jdP>1McL z$kkxQjcsBJNkmu{=fER}&I{>#F3U8U-XmMjG<_b#-#3mVzo%ugztX#(yEctAT{9R` zZ{WmeeCN34LgwNoUl{pAT<4}E#&Isz|BM=`erIVzRn@m?=fBzD{#*@Qs@0{f%g_H%`o`T7 z*~H5jWUWqSQRqpSKSKB=CFQxJBlo7Kh%KkQ%he`F!+xv$ds%F=QlZb$9AvA@EuWLG z*Uv;Eca2T?I7tWQl=d<9giwUZauaNS zp#*6e;yFKq!EO8A-Tl<`DP~A$sBRA{X_#*f@T6LdbqSDll#^1cLfT=P&8w5Xos5|VW`JKMwo)}t+<#Noamb0pXHCg%Rd<97+?yQ z{`vHs;Lu~Z_3Hv2+B}4VybngScOiHEaQI^%_nw0m88W3NU}9oIG-;GCX=rFj7yEId z!Xg+{C@??aDvhZ?vQMmmrsnlVqkhhe4;c&(AKua`Actr3ONhSAXkRcvqzqa=V<7pG z@FPL?d~uvW@5P(=o4AKGg7fwFtXv$Cn5EuWC@ih>Dbp|=K209P+r1sepLZoJ8E<-U zN6RoUGY2mGgVo5*&o}E9%jk|K!iskKY5DM+ZtCV`I!bJjCJg1aGg$Jm**rBFT7fG;Ph# z#LSG%oq#WKb<*!L<1yyKuUDvLDLhy-z2K|>f2}${--04M_<50>oZL8RC{z5kLP)@& z?}21O@N6hIgZ;~wFD-k^J-V2|Dv$pmZ}PS;yF$7UeThkR0Gy}if^!>@iz^A)YU(0k zi8b#~k;%K`E?Ff)VNtD2DxYrBNE#iJZR*n8zWI!_9*IO!L4H{E@5he>5LbzBPWKIS zPGL!Th)%A)uDjJ}#IwG!VaiYa04`|M)d`Qjbrqr|$joUIqmC$hdSmw~e__TeGcz;N zH@ZD}6*^p8vkv7G1K<|f71f3iDm~JdzQWqcCt-RbcK1XOq!Aj}Ry3o-D6v7QTWLT~%JB1;I_+nt-sM`ya$;aclpNOL7UEjf6`gc;uXE+c~p#?-^!W+4A@db01^ zZ7cUGoZ%*^KyrjdV6F!n39rBO%Ol)xk4VF){#a2I;B`p)eT1iR0LFXbT1qn3XO7x?hJ1n=;ztq zbztJ;vPpfiNDTDsrwuy?$5Zf$%acMwLU?(3-@JQ=WrQSM4e^^;tzqi7SmVwMAR&8zVIgC704Gj$jh+<9A zp1kPo>*Je<$8m?;0vAcruR4nSe7cXFX1?nzz&z(P0PKdq|G@%mjYycVT@u!1vKn@G zve=&4acZwu${E2eyT^_VyDwxocEMj==%R57>NGPYCov=G{rU4fBqX1jF~t-;*d>4> z0`{q5Y~0Uu6T~8Rc6O87lXvCgP5!T=>yD@L|D!iDLy{G;XOS(*N_GgjG7H&Jl7uod zvMCLFi>tCrQAA2glvFCKk`eXkcW_AZQ+>tJeBDS-lTFuOOv6itY}(Y8+Tp@2AYc#{wjO0FE7e$L zHDxm#pF$@!#*p8$7r5y_%wYi(Qvk6%z$MvGF0H6Ifhg8qY!j=3zYnvagP#LoHSp#O~3PjbPL!bE3f zZC#tpKdEGqP)sU5BQKva(SH5fHJM(Xg5h}mV!2Ec6g8*!?2+#9x?h*EkA*tY=VNu` zzKpT4vFgt=(5&l2_5pz?S8tbRlM%;0w*#MMQM~4@{h-)PKIF;3$wUh+HB-~zYh#c4 zyIeZe=Xyp)1V8Y@&qee#6qRXh7apFFmB)}V=HBxaH6DSJy>X>LN~~MO(!}#o#@oN+ zN*QG_tVTMD`TNe&f~sl1|9Da6=U@{TY3^rTPwmVdYmeUPMYvve$LoGAdEuH+PT6HD zzC9~D+qMQWHy(KU-G8r=%CIsmE-sebv&Wq&|2ltJ!{}}q8NFl2_(6g74NHB4N*#|n zVasDyyH!>ur=js^ghhmhFEdI>NvQzHNoL9VuEUFJ^|vAat*jwR2&;Z|Ex|t7x8{N> zN@uoR9yHPJLqUA+%FWCBjiktvOwnEG$E$`NySO&Q`#jN3h+^x=@(n*B_1gW znZiC~A87CmMf@J4&ZZA(^5g6C;4_DXX^7eA3nt4mhHJKNssUNTV|5V zydcf+zS*ryeUs5I$8>ysW%yX=@URANXsW9x;a9CsiydkK1MuDklJ?)bzQ4RKFL0#l zLveZeWxWPOqoDiQ1m@2^MmZij-Rmwp=KWH~5!$~boie9eC*o7srSgMr*|K{>)K0C;%9Mlb@f{= zbB=!&6r~(zq`|F{f2a_v#U!-Pmkv123v8q_$^TtvW3NyDhqS- z2spccXn2eH>FetgwcJUL{{H7=_^iHSf2A6{AiBFKEjO}n(sh2}?OV(D5zr*T*6&;+ zr)R+(3prX>jKmAJEBjwT9Lo{!jSm?4`1HeVcdT~HtLc`_1;Tz|P^IBiezIQNS`}D3W5~Nbk)aN2rd0RJ9oFc2`81J;~o|lkK|Z83@mHB5r)yr^BYELJ|^j z(^Orzm6est@7x*NWNu-x4OYj|0JUJI!MJP=cu58@`J9oY$9M z%q!UwJ0yEY0@P4uBT`aW0FsC))<>nzhkuej&F2*0$IG8-b6m+jFM2OIkjrUArJUbd z=j7$N2gq^6h>3~eUP^D(HW12;OVg%(l=8yWWjXU$)pLND95V@lP&-aF)7=*?T*wqM zi#kD}%+5?tAL^SGp3uM-|9`+n#NzY^5g8d~kKA*dzd|hqg*Gr2 zsFb94?cUuEu@Vk!xayq+slvbs!`-s79=nHuG+ftbz=2$bleHKIdqw_Rgz7; zuDz21{!VZ0^6c!%hPi-aNzg!Tp~`Sn zIs4hOXIX}pakXc_(%yHhW|tJ`HtuNg`uXABtV>jy2DHLw-kOJ`Kwh3uX#?)RqrtfDUrLJW^p zap8bT+ZKnWS!P}5y8@(#I`sX=4`G;*%&%;0c4WHqmT{ZiS$}^gm27zpjqd#X9GA|k zT_{f^I&`KGm|O}9L=1B~T!?U%0pUiJN+9wjWJOh!^3s#GCuUtb9O##BnO7tsc;a=_ z?87aAO*@IK3(^SUC|p>@7F%>bpF-Z!{yzt@yH&tnmv*~+ARTJGmn?mL#f}$NNS8Jf^KDH<=?ZCVKLsQ?9-1k zEnIW{E;aVc0wm_XwhEUgwe&O!5hX;FwY~ryWO@+l78;k zxs&YS?#_KhpH(TYeN*c5OGKXmet8CucQVYL=bt!MNhWNTE0IiisM;QSc>gvF^WUe|4P>pg5DVd%+fA|X@mA!B6_G0+P`j8aS zaPor-WPC!u?H-i^lw@RN$Ys8Fsj2SI8~$a0>X_)*S1pEL2F;JGpXOP9G&ZK9KNEru z0_V6&#>!(-uO6o<_3g5Qm`OH+Q_<+|fBW|B^Hb$3zkOR5>xQaY2;jCvSRNRFPwVk@ ztNm|!cPkH_!qg#)Xb5^r`$T8izs~n}>>&o7Tl$t-TvisFXlUwNfJiLO7aHq_KR z_2wpKP(6`BTWnE-Mk49va(`W&6Yb?Cw}D*09$0qW|mEg~eqKflvpS z(u#)!d>yl@bs^ zRM3b3rRXP41h&H1$8{E=Kr&GbTMpP!yVvayze<#d^1FB46$8}nAuu3#{V$pL+ z+(J!RfneWRM$RmGO!Cg&-i$FZF(4W*>k7k^Aaq{c)zuYYkQtWil^>>eiYe9pQ5EuD zL7Gj6{Qz99qePg+7b>^SQf@DgFT`?&$JnomlgY`byfAl4%I0%jd|7*my={VPT=ngU@XnoNH{XUvb+$@z z@?U70IX{&MnW^)8a9FD~k;#N12Rulog~{~yFJBxW$)20Lj7e;e1;-2R67wCNd%vE; zb(8QS>6!etoy~m7`uScyKI~RU zdqXga^XTd6H6kr?{=dG%CuTl15Miijk!G4%%D$&btu=?cXbtBhH0RGCS?sW6g5?!| z^-+zdvCO=4;K)SyQ$Y|3K*|EBUI8da>Gj8Oh|Rh`C8F0ET3X7xfy*gu00apYtK&rOgfSHGe=r`f24jn5wG!m zJ_sT~3-G-VBs&^oX-us}9Z3Q_xW31+i~TS3z64#s&iG`^zvj;q$UhKB6y&-mI-+O% z(twY9;TtTroWZ*{yO_C^Ll*w^v4}wmcc*1qt)siUI5E${aEO~Nw0rj!cuqX3s{>D^ zWwC~%S}kV|epR-AVMw{e%I<5W*o;dxF*Vi3d%8K2h|cXBrjRQ^nK{`CT%6lflJP7^ zJ?vJu`^oz@(hBK@#H@;9#uRzHB~0VUvv|IP+_b{Mtfo0XHxQ8nw~*~=PgHQI&qojR z!;E)<-=gv;hG}pk^g_M;{WN5l`Mc6u3&sks^HOk4a|T-HsvIdw$WuN+xD&a|0XZ6avucDhyJem)jR-?mDa z<+K9EoqDurtu+)pm#SqwQ>R2DZ-o5_-MV`K$ zL;`}dd3um_?o&cf2W4br&LWv}j271ghT*BHDJLbKn(&RVPtyf=@3P=Ohd1f( z$9x4EUF#Uu89T+rmInO-<8urVjAU}D*{$~Js+JVuqz9;hLgxVBF}rp3Lk$W7 zp10s0K+E;{(r5uc;Q;NWQRkN74v&QpKEOU^Z;L#dD&BSm~h5`@OsVhG3b4vr{LCmb9c6VuZN z!Cakcno+?PaP^zkx`=>%MNQqi$p9VWU`vY(hSh6ZBM;A~S%#UC$;BC#k_m0xt9S?< zLKpjqC>k0rhX{=efBd|M5nj;KJejzA*RD2H1vp0Qd6S>T0m$uw1;~nB4;CKKUCx6K z&wVjQ9<_o%8teXdSGFZ&s&gRKBsfq@Svdxmi<^n|H7CkA?1VPporXKUH|iUg!gyw) zBX+IPP&5i|vcTLz*?et9EBe5I06`p8{o?ck)oyNX%~w5re01I1#P+>6Y#Q8Ck`Zdz z^%>SRs#EvvJspP7c(AzO{%nq|A0F_FYtzS{e@oSRog4RF?SMr_8td22TMzC%Jp4QL z7b2Xcgmk5hj#;?zv&0c+4=CKRDe#F)jZwuF_v0(d1qO^;Udg9C$Q4_I~=Y>8bS5|lHNWSPA!;+v8y&Fg3QqMScL*su}fQPGHIvC5swt2Sy`rAJ0 z=eOu!Zr-|Qjx&)4=mkVOd_Xs|vUJq>4KU!JmRMO{4!U3AjL34uH1(r{wOEW5RpH>%1`X=69dwesgfFYs#g{$RZU$K4dnI_^G ztVe2|^S1+s$Kf^$5HUp`ng1YIQ^(r+J=GS+x`8A-GkrD<+PC`FM0t`qdwFg)?^p}d z>U&qg!_UX3iw`&aNGY)F{k6t~PiJqagrVv&Gc*5ms-oCTsy-lT$lXKQjlty3|Da#ja9cn3ge zeS4nzt$nN3Q=}?xA$^2RoS1~MlL7d-h)ZSSDwGw9Ef1<4_{|D&HipV$RU4-*yTY?F zGt(i!>^+5i!}(130$&_g@|E%u!Ot18yPy3Ol&N>LV24M#sIYJo<{nslV_vwn;V>dR zrn|s$=HXtpctM08`e)fVM9V<8;WLX(T{m?@MzJ(`VTD8QUk9SXO|aBKG2L-f&OzB@FPq(;)bUf{_70*-r!e(D)5`(nz>L@tf-iOe!%oGh=+4SMW;T@i`_{%=Ggh z%|>B#+k?*P*Q44PCoy3rWsRWc>NKSD0od#(P;0Fc+%s~ckymy+Hw?LyznnEIHCoMQ`D2$htqqGDFZR_X@sz2 zZ-8I|B04GryxV8(tGZL8aK^h~3<7j!Qp=qc*0Z>qpPgM7-R`_2u>(e6tWQu#T$<6p zbg@IBy7soCT2VMZjXKoVcZRChLyr3?@_VQq+4Uj^PkCt2$(%(bR44l;G3nA(sR(MQ zJI>AqdubQmQJ$bpvm}V+&t3ax8>tBaY0EkknKkF8tsM|>X1BKMlSlxA5Uu8+GfNNX zqROt?6jHqT-3YZDVhjp_iiqGX^abwk7~P0Ge1Zb>8UqZpsXl$HE3fw*lo@e-lR4XU zK5p_cXCKSAB0FLefa!hg%a@#9X@{GadE#|HcAPsCZgyE@dB1R7Z*3CkAv*ZJl+Cw_ z#}Qg~1Brhnvv2u@o~{R}uRDi_hl5JvG29h5$p9d2#7{nf zjyet_!6p(BBp4?Uc9VJv#jx$^)6E`qQ@WD5Y$X~J5(fR#i`($>4wC&jwZSd`8@&_m zjKVVJN2U`EcNpyEFw8cVsWJE*>X}?KvAUNh*_^$jisHQ`;^^1;rF1;Rb;uT!yvcdt zSg%JnD0)zuN51ZPyyU{~KZt0rM(jE)P;=_y-uKUE#*HKc6iy6%eU;;Z?V96D-h0{*{ZGkY;;E@+PSqF`vHO?E`FX!@>zjN@8-X^6&yEUH4uXy{cxtay!WFSnX^?y}(d8UE?>sHqm3ThTw!0kV zk%<)5W85cFs(x3pt03d80AoxMrrv~}@gtUze+*XXx~^Lt#OhDsIiexIB2@1wSVRj; z%P35#9GC@`kTu_(f8f?n1ibCcoGF#;Z>p0vEet(PwLBbKnozq~WBfcY1nyBtUxqsrwSroQD)pNUHiK z7dCx2mO4vvE&IN?d+FoYsXZ}|=u7Kk#5W~XQl^qST;h?;ftb%_goi=rU0chS?#6jR z_K0@6{sD|^yK~k5eZNY~<@-(&1K!5^TF`jzdE)&D*4~9)uDg;Oq!JWX^)^4@%G@S- zjf=`=Pbs@yBNR|UKQcXtnn`N?+p-b*$6?ht0bz%TBeYu@%IBi|s>o=t>}>5QffsKD}4Usv{B2jqy9wV#mlKhRxj; z7D)Av=uHSDoXbXBM(r>}Fr99mr$x+iYtIpT`$VEvL+HE$N&bAeEU03_RMs& z*?&r;Jerm|A#J_m&AMh`0{x)wO==hIM_5u3JR^}@TP{p${PXGL|KHJ&P(*B;%-Lzs z_oMR*ge)wL2MQ&-I=O<`FG@vLmtR(*QZ+EnysPn{f+TwRQ*STprNcv^e;s{>ns*Q} zzFNaz!(xcY{0AhS-zR?vU0Go0=9ozAXY`X{VVhBpOfbjB0tz}zG|xCZ4W3#W6XA4A zqg%r}cLz;*VxN!~w(LbD0G3x&91uCBl61eMR)^hR08u6+~O;68dR zSnS(Q+-!^v2@p2ZU0jIXZDbZi@&Bfu$9ncdnBv|t0uXj(Z~o&OlOSK@0cR;Eo8Y~W)QQ=_VM1y|!E zs(}s}gx)sz%ZbJ!;2;)4sULDIc(Vw02h0Qp#zKWmJ_G-p!`W_S(vKL8PE*qr!SvIX z+D3;Cosh43_nHckf5=)Q;zJVDH6H)#KK-?O@9_5xEsPb%g2yDG+C4>m=vCOK|x9jGRkL%au(O_qLCXer9!w={F{(f+U9e5`W ziA20_h0rl#^e4JI&X@#50hpit@FXb2$H-mD2<04@mDIUhkWs5gzpbCqD|{eTR)clj zq^y%o$Eu_(V(M#GC^Qc-6cSA5)E}#zsSmv+tP-8~w-kIQUX73bqunGhmU&%w%gdU|RH2k#?J2qB$-#OZ0r(qdJ3 zG6+POPM56xIo>2adU?iHnP~bjj+Wn5u7aLaZBzw1^rOA53`VL(#*(JwVIMe7}lH6!)w&>xxd_b?2}5mYO%+!{odGkscqvLEL)P1sdM?&yKrC9+ap?6d$}Ffm6Jv~XfqRM zT?!}v6QX7l-eSVEK{Fi{!nNQb#yT7(2)s|$akjmaURtmapz5DOWryg15 zjcb<1Wcosvp#gE>QYM$7Z%)fqZ+Mrgw3irZ6aKWxc1dojg|@08vPSjMhDOf6jm4#^ e=N=)eTF#ocDS|Fz0?o@ literal 0 HcmV?d00001 diff --git a/plugins/org.argeo.slc.akb.ui/plugin.xml b/plugins/org.argeo.slc.akb.ui/plugin.xml new file mode 100644 index 000000000..891619d21 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/plugin.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/pom.xml b/plugins/org.argeo.slc.akb.ui/pom.xml new file mode 100644 index 000000000..eb6096a97 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + org.argeo.slc + plugins + 1.1.15-SNAPSHOT + .. + + org.argeo.slc.akb.ui + SLC AKB UI + jar + + + + org.apache.felix + maven-bundle-plugin + + + org.argeo.slc.akb.ui.AkbUiPlugin + + org.eclipse.ui;resolution:=optional, + org.eclipse.core.runtime;resolution:=optional, + org.eclipse.rap.ui;resolution:=optional, + org.eclipse.rap.ui.workbench;resolution:=optional + + + *, + org.argeo.eclipse.spring, + + + + + + + + + + + org.argeo.slc + org.argeo.slc.akb.services + 1.1.15-SNAPSHOT + + + + + + org.argeo.commons.base + org.argeo.eclipse.ui + ${version.argeo-commons} + + + + + org.argeo.commons.base + org.argeo.eclipse.ui.rap + ${version.argeo-commons} + provided + + + + org.argeo.commons.base + org.argeo.eclipse.ui.jcr + ${version.argeo-commons} + + + + org.argeo.commons.server + org.argeo.server.jcr + ${version.argeo-commons} + + + \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java new file mode 100644 index 000000000..abd7f90ca --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbEnvPerspective.java @@ -0,0 +1,21 @@ +package org.argeo.slc.akb.ui; + +import org.argeo.slc.akb.ui.views.AkbDefaultView; +import org.eclipse.ui.IFolderLayout; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +public class AkbEnvPerspective implements IPerspectiveFactory { + public static final String ID = AkbUiPlugin.PLUGIN_ID + ".akbEnvPerspective"; + + @Override + public void createInitialLayout(IPageLayout layout) { + String editorArea = layout.getEditorArea(); + layout.setEditorAreaVisible(true); + layout.setFixed(false); + + IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, + 0.3f, editorArea); + left.addView(AkbDefaultView.ID); + } +} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java new file mode 100644 index 000000000..168d787c4 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbImages.java @@ -0,0 +1,10 @@ +package org.argeo.slc.akb.ui; + +import org.eclipse.swt.graphics.Image; + +/** Shared icons. */ +public class AkbImages { + + public final static Image LOGO_SMALL = AkbUiPlugin.getImageDescriptor( + "icons/smallerOrnamentLogo.png").createImage(); +} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbTemplatesPerspective.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbTemplatesPerspective.java new file mode 100644 index 000000000..137ccd28c --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbTemplatesPerspective.java @@ -0,0 +1,21 @@ +package org.argeo.slc.akb.ui; + +import org.argeo.slc.akb.ui.views.AkbDefaultView; +import org.eclipse.ui.IFolderLayout; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +public class AkbTemplatesPerspective implements IPerspectiveFactory { + public static final String ID = AkbUiPlugin.PLUGIN_ID + ".akbTemplatesPerspective"; + + @Override + public void createInitialLayout(IPageLayout layout) { + String editorArea = layout.getEditorArea(); + layout.setEditorAreaVisible(true); + layout.setFixed(false); + + IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, + 0.3f, editorArea); + left.addView(AkbDefaultView.ID); + } +} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiConstants.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiConstants.java new file mode 100644 index 000000000..70f9e5a9a --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiConstants.java @@ -0,0 +1,10 @@ +package org.argeo.slc.akb.ui; + +/** Defines some constants that are used all across the user interface **/ +public interface AkbUiConstants { + + /* Default formats */ + public final static String DEFAULT_DATE_FORMAT = "EEE, dd MMM yyyy"; + public final static String DEFAULT_DATE_TIME_FORMAT = "EEE, dd MMM yyyy 'at' HH:mm"; + public final static String DEFAULT_NUMBER_FORMAT = "#,##0.0"; +} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiPlugin.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiPlugin.java new file mode 100644 index 000000000..03f20c1ca --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/AkbUiPlugin.java @@ -0,0 +1,68 @@ +package org.argeo.slc.akb.ui; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class AkbUiPlugin extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "org.argeo.slc.akb.ui"; //$NON-NLS-1$ + + // The shared instance + private static AkbUiPlugin plugin; + + /** + * The constructor + */ + public AkbUiPlugin() { + } + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext + * ) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext + * ) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static AkbUiPlugin getDefault() { + return plugin; + } + + /** + * Returns an image descriptor for the image file at the given plug-in + * relative path + * + * @param path + * the path + * @return the image descriptor + */ + public static ImageDescriptor getImageDescriptor(String path) { + return imageDescriptorFromPlugin(PLUGIN_ID, path); + } +} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java new file mode 100644 index 000000000..44c419738 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbDefaultView.java @@ -0,0 +1,174 @@ +package org.argeo.slc.akb.ui.views; + +import javax.jcr.Repository; +import javax.jcr.Session; + +import org.argeo.slc.akb.ui.AkbUiPlugin; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.part.ViewPart; + +/** Basic view that display a list of items with a quick search field. */ +public class AkbDefaultView extends ViewPart { + // private final static Log log = LogFactory.getLog(QuickSearchView.class); + + public static final String ID = AkbUiPlugin.PLUGIN_ID + ".akbDefaultView"; + + /* DEPENDENCY INJECTION */ + private Session session; + + // This page widgets + private TableViewer itemViewer; + private Text filterTxt; + private final static String FILTER_HELP_MSG = "Search..."; + + @Override + public void createPartControl(Composite parent) { + GridLayout gl = new GridLayout(); + gl.horizontalSpacing = gl.verticalSpacing = gl.marginWidth = 0; + parent.setLayout(gl); + + // Filter + Composite cmp = new Composite(parent, SWT.NO_FOCUS); + cmp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + createFilterPart(cmp); + + // // Table + // cmp = new Composite(parent, SWT.NO_FOCUS); + // cmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + // itemViewer = createListPart(cmp, new EntitySingleColumnLabelProvider( + // peopleService)); + // + // refreshFilteredList(); + } + + private void createFilterPart(Composite parent) { + parent.setLayout(new GridLayout()); + // Text Area for the filter + filterTxt = new Text(parent, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH + | SWT.ICON_CANCEL); + filterTxt.setMessage(FILTER_HELP_MSG); + filterTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + filterTxt.addModifyListener(new ModifyListener() { + + public void modifyText(ModifyEvent event) { + // refreshFilteredList(); + } + }); + } + + // protected TableViewer createListPart(Composite parent, + // ILabelProvider labelProvider) { + // TableViewer v = new TableViewer(parent); + // v.setLabelProvider(labelProvider); + // + // TableColumn singleColumn = new TableColumn(v.getTable(), SWT.V_SCROLL); + // TableColumnLayout tableColumnLayout = new TableColumnLayout(); + // tableColumnLayout.setColumnData(singleColumn, new ColumnWeightData(85)); + // parent.setLayout(tableColumnLayout); + // + // // Corresponding table & style + // Table table = v.getTable(); + // table.setLinesVisible(true); + // table.setHeaderVisible(false); + // + // v.setContentProvider(new BasicNodeListContentProvider()); + // v.addDoubleClickListener(peopleUiService + // .getNewNodeListDoubleClickListener(peopleService, null)); + // return v; + // } + + @Override + public void dispose() { + // JcrUtils.logoutQuietly(session); + super.dispose(); + } + + @Override + public void setFocus() { + } + + // protected void refreshFilteredList() { + // try { + // List persons = JcrUtils.nodeIteratorToList(doSearch(session, + // filterTxt.getText(), PeopleTypes.PEOPLE_PERSON, + // PeopleNames.PEOPLE_LAST_NAME, + // PeopleNames.PEOPLE_PRIMARY_EMAIL)); + // personViewer.setInput(persons); + // } catch (RepositoryException e) { + // throw new PeopleException("Unable to list persons", e); + // } + // } + // + // /** Build repository request */ + // private NodeIterator doSearch(Session session, String filter, + // String typeName, String orderProperty, String orderProperty2) + // throws RepositoryException { + // QueryManager queryManager = session.getWorkspace().getQueryManager(); + // QueryObjectModelFactory factory = queryManager.getQOMFactory(); + // + // Selector source = factory.selector(typeName, typeName); + // + // // no Default Constraint + // Constraint defaultC = null; + // + // // Parse the String + // String[] strs = filter.trim().split(" "); + // if (strs.length == 0) { + // // StaticOperand so = factory.literal(session.getValueFactory() + // // .createValue("*")); + // // defaultC = factory.fullTextSearch("selector", null, so); + // } else { + // for (String token : strs) { + // StaticOperand so = factory.literal(session.getValueFactory() + // .createValue("*" + token + "*")); + // Constraint currC = factory.fullTextSearch( + // source.getSelectorName(), null, so); + // if (defaultC == null) + // defaultC = currC; + // else + // defaultC = factory.and(defaultC, currC); + // } + // } + // + // Ordering order = null, order2 = null; + // + // if (orderProperty != null && !"".equals(orderProperty.trim())) + // order = factory.ascending(factory.lowerCase(factory.propertyValue( + // source.getSelectorName(), orderProperty))); + // if (orderProperty2 != null && !"".equals(orderProperty2.trim())) + // order2 = factory.ascending(factory.propertyValue( + // source.getSelectorName(), orderProperty2)); + // + // QueryObjectModel query; + // if (order == null) { + // query = factory.createQuery(source, defaultC, null, null); + // } else { + // if (order2 == null) + // query = factory.createQuery(source, defaultC, + // new Ordering[] { order }, null); + // else + // query = factory.createQuery(source, defaultC, new Ordering[] { + // order, order2 }, null); + // } + // query.setLimit(ROW_LIMIT.longValue()); + // QueryResult result = query.execute(); + // return result.getNodes(); + // } + + /* DEPENDENCY INJECTION */ + public void setRepository(Repository repository) { + // try { + // session = repository.login(); + // } catch (RepositoryException e) { + // throw new PeopleException("Unable to initialize " + // + "session for view " + ID, e); + // } + } + } \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/.classpath b/runtime/org.argeo.slc.akb/.classpath new file mode 100644 index 000000000..0611249ba --- /dev/null +++ b/runtime/org.argeo.slc.akb/.classpath @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/.project b/runtime/org.argeo.slc.akb/.project new file mode 100644 index 000000000..d5cad462c --- /dev/null +++ b/runtime/org.argeo.slc.akb/.project @@ -0,0 +1,29 @@ + + + org.argeo.slc.akb + + + org.argeo.connect.people + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/runtime/org.argeo.slc.akb/build.properties b/runtime/org.argeo.slc.akb/build.properties new file mode 100644 index 000000000..f700a650c --- /dev/null +++ b/runtime/org.argeo.slc.akb/build.properties @@ -0,0 +1,5 @@ +source.. = src/main/java/,\ + src/main/resources, + +output.. = target/classes/ +bin.includes = META-INF/,\ \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/pom.xml b/runtime/org.argeo.slc.akb/pom.xml new file mode 100644 index 000000000..66f502715 --- /dev/null +++ b/runtime/org.argeo.slc.akb/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + org.argeo.slc + 1.1.15-SNAPSHOT + runtime + .. + + org.argeo.slc.akb + SLC AKB - Specifications and Core + + + + org.apache.felix + maven-bundle-plugin + + + + *, + javax.jcr.nodetype, + + + + + + + + + org.argeo.commons.server + org.argeo.server.jcr + ${version.argeo-commons} + + + org.argeo.commons.security + org.argeo.security.core + ${version.argeo-commons} + + + diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbConstants.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbConstants.java new file mode 100644 index 000000000..5d725ccac --- /dev/null +++ b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbConstants.java @@ -0,0 +1,6 @@ +package org.argeo.slc.akb; + +/** Centralizes all AKB specific constants */ +public interface AkbConstants { + public final static String AKB_BASE_PATH = "/akb:system"; +} diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbException.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbException.java new file mode 100644 index 000000000..81f69e2d2 --- /dev/null +++ b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbException.java @@ -0,0 +1,18 @@ +package org.argeo.slc.akb; + +/** + * SLC AKB's specific exception. For the time being, it just wraps a usual + * RuntimeException + */ +public class AkbException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public AkbException(String message) { + super(message); + } + + public AkbException(String message, Throwable e) { + super(message, e); + } + +} diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java new file mode 100644 index 000000000..c341f4acc --- /dev/null +++ b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java @@ -0,0 +1,8 @@ +package org.argeo.slc.akb; + +/** Maps AKB specific JCR Property names with java constants */ +public interface AkbNames { + + public final static String AKB_CONNECTOR_URL = "akb:connectorUrl"; + +} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbTypes.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbTypes.java new file mode 100644 index 000000000..79af5b99b --- /dev/null +++ b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbTypes.java @@ -0,0 +1,27 @@ +package org.argeo.slc.akb; + +/** Maps AKB specific JCR node types with java constants */ +public interface AkbTypes { + + public final static String ARGEO_NOTE = "argeo:note"; + + + // Env and templates + public final static String AKB_ENV_TEMPLATE = "akb:envTemplate"; + public final static String AKB_ENV= "akb:env"; + + // Connectors + public final static String AKB_CONNECTOR = "akb:connector"; + + // Item tree + public final static String AKB_ITEM_FOLDER = "akb:itemsFolder"; + public final static String AKB_ITEM = "akb:item"; + + // Various items types + public final static String AKB_SSH_FILE = "akb:sshFile"; + public final static String AKB_SSH_COMMAND = "akb:sshCommand"; + public final static String AKB_JDBC_QUERY = "akb:jdbcQuery"; + public final static String AKB_NOTE = "akb:note"; + + +} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd b/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd new file mode 100644 index 000000000..a73723a01 --- /dev/null +++ b/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd @@ -0,0 +1,62 @@ + + +// +// MOVE THIS TO ITS CORRECT LOCATION +// +[argeo:note] > mix:title, mix:versionable, mix:created, mix:lastModified +mixin + + +// +// TEMPLATES AND ENVIRONMENTS +// + +// Abstract description of whole or part of an IT environment +[akb:envTemplate] > nt:unstructured + +// An environment template (1..1 relationship) applied to a real environment +[akb:env] > nt:unstructured + + +// +// CONNECTORS +// + +// GENERIC TYPE FOR A CONNECTOR +[akb:connector] > nt:unstructured, mix:title +- akb:connectorUrl (STRING) +// add argeo keyring + + +// +// GENERIC ITEM +// +[akb:item] > nt:unstructured + +// +// GENERIC ITEM FOLDER +// +[akb:itemsFolder] > nt:unstructured ++ * (akb:item) * + +// +// SSH FILE +// +[akb:sshFile] > akb:item + +// +// SSH COMMAND +// +[akb:sshCommand] > akb:item + +// +// JDBC QUERY +// +[akb:jdbcQuery] > akb:item + + +// +// NOTE +// +[akb:note] > akb:item, argeo:note + -- 2.39.5