From d601802d5a50e4e30eb639a08eff5270b63fe599 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 28 Jul 2010 15:41:14 +0000 Subject: [PATCH] Introduce SLC RCP git-svn-id: https://svn.argeo.org/slc/trunk@3724 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- demo/log4j.properties | 2 + .../org.argeo.slc.client.rcp/.classpath | 7 + .../plugins/org.argeo.slc.client.rcp/.project | 28 +++ .../.settings/org.eclipse.jdt.core.prefs | 8 + .../META-INF/MANIFEST.MF | 11 + .../org/argeo/slc/client/rcp/Activator.class | Bin 0 -> 1183 bytes .../rcp/ApplicationActionBarAdvisor.class | Bin 0 -> 1696 bytes .../rcp/ApplicationWorkbenchAdvisor.class | Bin 0 -> 1032 bytes .../ApplicationWorkbenchWindowAdvisor.class | Bin 0 -> 1399 bytes .../argeo/slc/client/rcp/Perspective.class | Bin 0 -> 881 bytes .../rcp/SlcClientRcpApplication$1.class | Bin 0 -> 1077 bytes .../client/rcp/SlcClientRcpApplication.class | Bin 0 -> 1870 bytes .../org.argeo.slc.client.rcp/build.properties | 7 + .../icons/argeo-icon-256.png | Bin 0 -> 10716 bytes .../org.argeo.slc.client.rcp/plugin.xml | 35 +++ .../org.argeo.slc.client.rcp/splash.bmp | Bin 0 -> 403614 bytes .../org/argeo/slc/client/rcp/Activator.java | 61 +++++ .../rcp/ApplicationActionBarAdvisor.java | 48 ++++ .../rcp/ApplicationWorkbenchAdvisor.java | 20 ++ .../ApplicationWorkbenchWindowAdvisor.java | 26 +++ .../org/argeo/slc/client/rcp/Perspective.java | 18 ++ .../client/rcp/SlcClientRcpApplication.java | 45 ++++ .../org.argeo.slc.client.ui/.classpath | 7 + .../plugins/org.argeo.slc.client.ui/.project | 28 +++ .../.settings/org.eclipse.jdt.core.prefs | 8 + .../.settings/org.eclipse.pde.core.prefs | 3 + .../META-INF/MANIFEST.MF | 23 ++ .../META-INF/spring/osgi.xml | 11 + .../META-INF/spring/views.xml | 19 ++ .../spring/ApplicationContextTracker.class | Bin 0 -> 2419 bytes .../spring/SpringExtensionFactory.class | Bin 0 -> 3853 bytes .../bin/org/argeo/eclipse/ui/TreeObject.class | Bin 0 -> 867 bytes .../bin/org/argeo/eclipse/ui/TreeParent.class | Bin 0 -> 1687 bytes .../argeo/slc/client/ui/ClientUiPlugin.class | Bin 0 -> 1898 bytes .../slc/client/ui/actions/RefreshAction.class | Bin 0 -> 1998 bytes ...tionModulesContentProvider$AgentNode.class | Bin 0 -> 1003 bytes ...sContentProvider$ExecutionModuleNode.class | Bin 0 -> 5447 bytes ...utionModulesContentProvider$FlowNode.class | Bin 0 -> 1414 bytes ...ionModulesContentProvider$FolderNode.class | Bin 0 -> 772 bytes .../ExecutionModulesContentProvider.class | Bin 0 -> 4711 bytes .../ui/views/ExecutionModulesView$1.class | Bin 0 -> 3358 bytes ...ecutionModulesView$ViewLabelProvider.class | Bin 0 -> 2496 bytes .../ui/views/ExecutionModulesView.class | Bin 0 -> 1976 bytes .../org.argeo.slc.client.ui/build.properties | 6 + .../org.argeo.slc.client.ui/icons/archive.png | Bin 0 -> 985 bytes .../icons/computer.png | Bin 0 -> 1146 bytes .../org.argeo.slc.client.ui/icons/folder.png | Bin 0 -> 397 bytes .../org.argeo.slc.client.ui/icons/refresh.png | Bin 0 -> 934 bytes .../org.argeo.slc.client.ui/icons/sample.gif | Bin 0 -> 983 bytes .../icons/slc-launch.gif | Bin 0 -> 223 bytes .../org.argeo.slc.client.ui/icons/system.png | Bin 0 -> 3776 bytes .../org.argeo.slc.client.ui/plugin.xml | 40 ++++ .../spring/ApplicationContextTracker.java | 66 ++++++ .../spring/SpringExtensionFactory.java | 105 +++++++++ .../src/org/argeo/eclipse/ui/TreeObject.java | 26 +++ .../src/org/argeo/eclipse/ui/TreeParent.java | 44 ++++ .../argeo/slc/client/ui/ClientUiPlugin.java | 86 +++++++ .../slc/client/ui/actions/RefreshAction.java | 69 ++++++ .../ExecutionModulesContentProvider.java | 220 ++++++++++++++++++ .../client/ui/views/ExecutionModulesView.java | 104 +++++++++ runtime/org.argeo.slc.core/.classpath | 19 +- runtime/org.argeo.slc.core/build.properties | 3 + ...faultExecutionFlowDescriptorConverter.java | 5 +- .../argeo/slc/core/runtime/DefaultAgent.java | 31 ++- .../execution/ExecutionFlowDescriptor.java | 6 + .../java/org/argeo/slc/runtime/SlcAgent.java | 3 + .../argeo/slc/runtime/SlcAgentDescriptor.java | 5 + .../build.properties | 3 +- .../main/java/org/argeo/slc/jms/JmsAgent.java | 51 ++-- .../java/org/argeo/slc/jms/JmsAgentProxy.java | 4 + 70 files changed, 1265 insertions(+), 46 deletions(-) create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/.classpath create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/.project create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/.settings/org.eclipse.jdt.core.prefs create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/META-INF/MANIFEST.MF create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/Activator.class create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/ApplicationActionBarAdvisor.class create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/ApplicationWorkbenchAdvisor.class create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.class create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/Perspective.class create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/SlcClientRcpApplication$1.class create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/SlcClientRcpApplication.class create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/build.properties create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/icons/argeo-icon-256.png create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/plugin.xml create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/splash.bmp create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Activator.java create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationActionBarAdvisor.java create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchAdvisor.java create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Perspective.java create mode 100644 eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/SlcClientRcpApplication.java create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/.classpath create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/.project create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/.settings/org.eclipse.jdt.core.prefs create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/.settings/org.eclipse.pde.core.prefs create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/osgi.xml create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/views.xml create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/spring/ApplicationContextTracker.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/spring/SpringExtensionFactory.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/ui/TreeObject.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/ui/TreeParent.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/ClientUiPlugin.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/actions/RefreshAction.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider$AgentNode.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider$ExecutionModuleNode.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider$FlowNode.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider$FolderNode.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesView$1.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesView$ViewLabelProvider.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesView.class create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/build.properties create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/icons/archive.png create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/icons/computer.png create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/icons/folder.png create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/icons/refresh.png create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/icons/sample.gif create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/icons/slc-launch.gif create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/icons/system.png create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/plugin.xml create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/spring/ApplicationContextTracker.java create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/spring/SpringExtensionFactory.java create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/ui/TreeObject.java create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/ui/TreeParent.java create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/ClientUiPlugin.java create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/actions/RefreshAction.java create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider.java create mode 100644 eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java diff --git a/demo/log4j.properties b/demo/log4j.properties index 694a56334..feb4b3a75 100644 --- a/demo/log4j.properties +++ b/demo/log4j.properties @@ -8,6 +8,8 @@ log4j.logger.org.argeo.slc.execution.SimpleExecutionSpec=DEBUG log4j.logger.org.argeo.security.mvc.ArgeoRememberMeServices=WARN #log4j.logger.org.argeo.server.jcr.mvc.OpenSessionInViewJcrInterceptor=TRACE +log4j.logger.org.argeo.slc.client.ui.views.ExecutionModulesContentProvider=TRACE + #log4j.logger.org.argeo.slc.web.mvc=TRACE #log4j.logger.org.argeo.slc.jms=TRACE #log4j.logger.org.argeo.server.json=TRACE diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/.classpath b/eclipse/plugins/org.argeo.slc.client.rcp/.classpath new file mode 100644 index 000000000..ad32c83a7 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/.project b/eclipse/plugins/org.argeo.slc.client.rcp/.project new file mode 100644 index 000000000..75fcdba86 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/.project @@ -0,0 +1,28 @@ + + + org.argeo.slc.client.rcp + + + + + + 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/eclipse/plugins/org.argeo.slc.client.rcp/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.argeo.slc.client.rcp/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..4186daad0 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +#Tue Jul 27 13:22:37 CEST 2010 +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/eclipse/plugins/org.argeo.slc.client.rcp/META-INF/MANIFEST.MF b/eclipse/plugins/org.argeo.slc.client.rcp/META-INF/MANIFEST.MF new file mode 100644 index 000000000..b89b70c1e --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/META-INF/MANIFEST.MF @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Rcp +Bundle-SymbolicName: org.argeo.slc.client.rcp; singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: org.argeo.slc.client.rcp.Activator +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Import-Package: org.argeo.slc.client.ui.views diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/Activator.class b/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/Activator.class new file mode 100644 index 0000000000000000000000000000000000000000..61a031c107c69c8fa91c4613484df923a06ca59a GIT binary patch literal 1183 zcmbtTTTc@~7(LS#mevKdNTnhw2&EM5czLWbB8X|y5F)~>nJ&XJxZT~%<g{%LB#- ze}F&A_|2A!)(a-?!(6`an{&=LXZGv2&tCvM#61T&hPg=lTxefLJPADR1xkj7YcJ+2 zo>7OwMA|`tp=RqOrQ<~MRPi`SeHHSRZeq0X%yxS-3osNnJKHbX8?W1I4CT&&I21e( zq0hIBR-xZw7+sCR#E8)Bh#-|CC^AeDcrz2xBoWQNh$e|(8154>%y%wUO6bFnRjAAp zhJ1Z#hoP_ob9b)|kKx`DJJBToc7LMyvJ2^P%0N*IPns5T4> z^^84Ae8u;)=*hQ{e#4)o;cg(Q9V3rS%hHveA9*r1iaK;K#V~Q+|5?VWx$fdBCW~OW z;i7~~435`_AxAEzqP`Ln#TIGS#Vt${voFn>+!JX)a%=Uaf4i+Rooe@lFV|$^X%&;( z3{UI7+SbQA_5WZ`c#>; zeQagg)|It*?CdQ!ts$5tfqD7~a;Rbm!?bg<-3WO>ZqRy&V)R~U9HZSMnwgC@jxqi| zE4@Nvi2#5}6i`8#R&Kut6Bz`v7E?uqG6l+9%b?aNVo#MC%g3lTK4SVDZ!8lvL*zG6 zBwH>BaKg}4IXO!a9Iu-1O+NzrZI=R-vL__0*wFw literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/ApplicationActionBarAdvisor.class b/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/ApplicationActionBarAdvisor.class new file mode 100644 index 0000000000000000000000000000000000000000..1f119e1cb33c043a1b8939cc5d96928d78da6cdd GIT binary patch literal 1696 zcmb7EYflqF6g|_Hwv-hR5fuH@_M}4n!u0{AEjSCW>_w?<^}*> zEpLrmzNZ6V@3IhWRT~ zXXq;P15xdYc#OAoU)O3|Iz{)Gy6wbG+=^j&Mx#WqI~A>E-WO%kQ4@TkE6^px%KrqKY?Ac9$TSvl-K8eeYPhDP z2DW;XHr$G`gjR}S^nzDvPV2>B_kF3pnN!TIr)R!nK7^Sn%5oiLFz7W!YnpmZQBO03HcQ>i1&E{7 lT4#vEc#3C)WKdrjtWX~zJSVgeDfE)QdYE6)Q?eTE{0l0y%lrTU literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/ApplicationWorkbenchAdvisor.class b/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/ApplicationWorkbenchAdvisor.class new file mode 100644 index 0000000000000000000000000000000000000000..30dc3506858254aa44e754ca75364dfb196ba5db GIT binary patch literal 1032 zcmbVLZEF)j5PmjEoAjErHn#P(TEP#A#aj?jFe;Q7;UGvbCB;v&*{s*qbMM%@i+@W$ z6%_md{wQ(oawHlwV86^T!#vMCGdug^=hyE59^kNw62rsL`dnCFg**-=ygxLQSYty zf}z=eFQ$SA!uWicSZ(|cL!%p-I1wfpi6B)qY%tuVHf}D^C4uftpi2VXNZB}2GSO4T zu>MpVojhkKx7s6yN;jM+2W4#4;b4!XpW(@W z4f2Ov2Ya}ht?wGqTv#|gh9l>LFg#v0$%+jy9QZ2n=#jMuW;zFp1MnscyRG)$Zps;k zsg>%b&K~`6#Z|l6LE;YRhUkMZT*n&L$yX^Vp+;F61)F5+l;PwV`L%oJXne^_w#jAy z5abfs`m6vuXi~&*8M|aN@G~MSk>B`+y*Eeaxbm5T5*7rFoM3-eR1i=(X}UoabZ0my YsP5-6P;SV>`0$Y-YDK@hN;1 z{UbpVAHat)-f5e*qEyn|-!G?>sU`9!tg}thRt>$|?M|^4`lvOAEb`uQSB9)xNM0MKXm6#2IF)(i1OQANPcQ&G%fvFk4j) zck5hBilY9*VMK%KVJ$UTGQLjV?_eFkF;T zS@Z!tg^dK}7#^Hw_fJDD%wpcuJVOLyq)B^M8kK6LFF3R~hACf*ZvVaXg~t%hVHpwwGaG|W0^J~ zN=FLFQW+2@n;>rs5xRkRp?HJ~U+FCZi>%f8YN|GcN%Aw@D5S_YR~*xrAr6L%NcXs& z61U+>o?v#D=q`OBr%Pw#K!F3QWS=TYRF^wc3%JswIv`;~l`VY3)oSqsi@WK_n>71; xgqz1$iJ%xeMxGwgW88~ikavcFz&zOu7KnC<>?+X?gtI+i>WBUs?spO`{RY{Zf1m&W literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/Perspective.class b/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/Perspective.class new file mode 100644 index 0000000000000000000000000000000000000000..e0e312b6f47411671c4546225cd020fc6da0c08f GIT binary patch literal 881 zcma)4O>fgc5Ph4taY$U+rY+Dmv`r|*Nh(|78ia%pks_sl6y!s18++t#W$efwCH+~P zP&n`d_)&be`41N2<D zEG4jKc1HJY8mF-e{eDh(VBio(3`kZ39F?e|T+O^%2tPG&oa3sD8>kt1Rh$Z3a3WSQ zB#Vb+Erw)e%Ay&$S*oJ&GV-#35=YUOT&`{48O{WDr00!O8G15^LdstSy5@R{SHr>j zWj?A(us*W&M_KIBK;`4zUfB{WZx~wO?ci^NceBKv_k!&MKH2OA z`;G25)V>za2HQ$;sbiD>jRgP?vBf8*#}3;(c*eLg`*v@RhQMX7Jjas~dfFUKc8!y= zW?anCs^Fgan8kq_+d4BE*k^md%uV(!=FSyQ7pzM~=ErlKv!;$CyntDh&|zE&-QPY_ B(}Dm1 literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/SlcClientRcpApplication$1.class b/eclipse/plugins/org.argeo.slc.client.rcp/bin/org/argeo/slc/client/rcp/SlcClientRcpApplication$1.class new file mode 100644 index 0000000000000000000000000000000000000000..045c8422bfe3ab87c3b873065020088d1ece49d3 GIT binary patch literal 1077 zcmb7D+iuf95Iq~GF?F0agalezXbYhv?!`&O8wd#kNR`@x8q`X>ZJbrItyvq}X~eJa z7f1vI4}1V0g_w1NXe2<&!+K_R=bYI+Gyd`O+jjshv`l0eT0zuzdDIty8~dK?`BJFF zjl9t9_+C4Wj=b}C%+FVJNHN`nLK8ASDXEMQ_O$6%~Zm4>H0B4wjK1uJQ%LpFmXkD*KEwg z(q6?z9<~JoH*6HJ#9-7kXmMXEaX5V2718Spg-iQ^$Ngg-NgYo%vs!kB2Q$B_+9X+w zXs9f#VZ+2a!C|gfMQ8EEVa}w`n58&3Rs}5Me?3foF!X!w#Fzr+hdfR zoiT-9aQ$PNy-Z&#MQOw)Zc=O$nlM$SZ$EmElAa r8qkCbWI@VWs1uEIiL^2yt*5!HOoo@KgVa zKcV_TsGg%Adrp5te~Q}P*@T!_QjW>V+?m~(d!PHy~4MiwyB>Zk<7?xOI_4978HN4lxW@El1pKKH3m| z&DgL7!${RN4SU`2ExB$#RKiUwV3@CdZU!ZWL=YN&$WYEkrw_thah*_XhoxNg)4WSb z9K$HbafY$(?32!88{Lst6 zekgiiQfgGwJvnF{Pwlv+oIZ#Ird6bIhCyBaS+D)Fy1Z5^uhtljbup+DsSV*1g&E9p zoMo8mrf?r1D!!Bg;dP?W4TOx7Q<0Z(cogT}9h#Y~YB9|9;O-~Lz2dh0Mx{yjoZJTq zX(;K7u<1Key$npJ`mTkB`EbSXB7t&TWGHkebN~R3%f!z|fz>vBcdMm;B?w(l*77SA z*RVjWl1MtlGfaM>Br1{Kd0iU9bu4n+_^(7iZc_2JlxULtwx!2Wrpwh=d40M==0Xxn zsK}dqi{WugTA$NiN(VCEv!OTB+`81#Z57|(TZTiyQ^#E17AC{VY?tmx{*L6eB)iYx z*518g82=yF#Lb%9^i6Twk{xNHPyXj*{ir^=;|RZE8$lofx(L+k=$D|rD=l?78V6~m zk!55P`5h#m(AhnC} z#YyEEhF@T6AyIsZnX$z0FOcob7nJCs@|I#LNMVjVq%j-Wcocm;8b|2uaf&ud-xIVi zh0|oy)Kz9_o+mqpF-jnXix`iP=II2XX(N@h0*ZuHp+B2BoTGS0sS{~9Pq;78&I!cc zBh8Uv|6mAl4#qK0OKC6Bxhox-exp3&bYf~3SF43Tp*%1A0lI=R>!thoVqph2Ut(Dj z*h(Q45p#w@&ybT0(RG%B&r%A-2l4ErTE|eu N3fUy>Tp~-Ke*q?6;KTp` literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/build.properties b/eclipse/plugins/org.argeo.slc.client.rcp/build.properties new file mode 100644 index 000000000..8923d2306 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/build.properties @@ -0,0 +1,7 @@ +source.. = src/ +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + icons/,\ + splash.bmp diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/icons/argeo-icon-256.png b/eclipse/plugins/org.argeo.slc.client.rcp/icons/argeo-icon-256.png new file mode 100644 index 0000000000000000000000000000000000000000..a9af08836dc8d229623613658ddbe78a7f5b8230 GIT binary patch literal 10716 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 + + + + + + + + + + + + + + + + + + + + + diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/splash.bmp b/eclipse/plugins/org.argeo.slc.client.rcp/splash.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ee502f3094cee88bb2264f444ce54d6aa4c5b030 GIT binary patch literal 403614 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 KAfpg~SN}hRcX|Z? literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Activator.java b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Activator.java new file mode 100644 index 000000000..84bc8c0fe --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Activator.java @@ -0,0 +1,61 @@ +package org.argeo.slc.client.rcp; + +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 Activator extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "org.argeo.slc.client.rcp"; + + // The shared instance + private static Activator plugin; + + /** + * The constructor + */ + public Activator() { + } + + /* + * (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 Activator 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); + } +} diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationActionBarAdvisor.java b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationActionBarAdvisor.java new file mode 100644 index 000000000..340f17542 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationActionBarAdvisor.java @@ -0,0 +1,48 @@ +package org.argeo.slc.client.rcp; + +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; +import org.eclipse.ui.application.ActionBarAdvisor; +import org.eclipse.ui.application.IActionBarConfigurer; + +/** + * An action bar advisor is responsible for creating, adding, and disposing of + * the actions added to a workbench window. Each window will be populated with + * new actions. + */ +public class ApplicationActionBarAdvisor extends ActionBarAdvisor { + + // Actions - important to allocate these only in makeActions, and then use + // them + // in the fill methods. This ensures that the actions aren't recreated + // when fillActionBars is called with FILL_PROXY. + private IWorkbenchAction exitAction; + + public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { + super(configurer); + } + + protected void makeActions(final IWorkbenchWindow window) { + // Creates the actions and registers them. + // Registering is needed to ensure that key bindings work. + // The corresponding commands keybindings are defined in the plugin.xml + // file. + // Registering also provides automatic disposal of the actions when + // the window is closed. + + exitAction = ActionFactory.QUIT.create(window); + register(exitAction); + } + + protected void fillMenuBar(IMenuManager menuBar) { + MenuManager fileMenu = new MenuManager("&File", + IWorkbenchActionConstants.M_FILE); + menuBar.add(fileMenu); + fileMenu.add(exitAction); + } + +} diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchAdvisor.java b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchAdvisor.java new file mode 100644 index 000000000..a97fb5706 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchAdvisor.java @@ -0,0 +1,20 @@ +package org.argeo.slc.client.rcp; + +import org.eclipse.ui.application.IWorkbenchWindowConfigurer; +import org.eclipse.ui.application.WorkbenchAdvisor; +import org.eclipse.ui.application.WorkbenchWindowAdvisor; + +public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { + + private static final String PERSPECTIVE_ID = "org.argeo.slc.client.rcp.perspective"; + + public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor( + IWorkbenchWindowConfigurer configurer) { + return new ApplicationWorkbenchWindowAdvisor(configurer); + } + + public String getInitialWindowPerspectiveId() { + return PERSPECTIVE_ID; + } + +} diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java new file mode 100644 index 000000000..e660ccf64 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/ApplicationWorkbenchWindowAdvisor.java @@ -0,0 +1,26 @@ +package org.argeo.slc.client.rcp; + +import org.eclipse.swt.graphics.Point; +import org.eclipse.ui.application.ActionBarAdvisor; +import org.eclipse.ui.application.IActionBarConfigurer; +import org.eclipse.ui.application.IWorkbenchWindowConfigurer; +import org.eclipse.ui.application.WorkbenchWindowAdvisor; + +public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { + + public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { + super(configurer); + } + + public ActionBarAdvisor createActionBarAdvisor( + IActionBarConfigurer configurer) { + return new ApplicationActionBarAdvisor(configurer); + } + + public void preWindowOpen() { + IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); + configurer.setInitialSize(new Point(600, 400)); + configurer.setShowCoolBar(true); + configurer.setShowStatusLine(false); + } +} diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Perspective.java b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Perspective.java new file mode 100644 index 000000000..8ada2a007 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Perspective.java @@ -0,0 +1,18 @@ +package org.argeo.slc.client.rcp; + +import org.argeo.slc.client.ui.views.ExecutionModulesView; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +public class Perspective implements IPerspectiveFactory { + + public void createInitialLayout(IPageLayout layout) { + String editorArea = layout.getEditorArea(); + layout.setEditorAreaVisible(false); + layout.setFixed(true); + + layout.addStandaloneView(ExecutionModulesView.ID, false, + IPageLayout.LEFT, 1.0f, editorArea); + } + +} diff --git a/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/SlcClientRcpApplication.java b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/SlcClientRcpApplication.java new file mode 100644 index 000000000..1919c48ea --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/SlcClientRcpApplication.java @@ -0,0 +1,45 @@ +package org.argeo.slc.client.rcp; + +import org.eclipse.equinox.app.IApplication; +import org.eclipse.equinox.app.IApplicationContext; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.PlatformUI; + +/** + * This class controls all aspects of the application's execution + */ +public class SlcClientRcpApplication implements IApplication { + + /* (non-Javadoc) + * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext) + */ + public Object start(IApplicationContext context) { + Display display = PlatformUI.createDisplay(); + try { + int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); + if (returnCode == PlatformUI.RETURN_RESTART) { + return IApplication.EXIT_RESTART; + } + return IApplication.EXIT_OK; + } finally { + display.dispose(); + } + } + + /* (non-Javadoc) + * @see org.eclipse.equinox.app.IApplication#stop() + */ + public void stop() { + final IWorkbench workbench = PlatformUI.getWorkbench(); + if (workbench == null) + return; + final Display display = workbench.getDisplay(); + display.syncExec(new Runnable() { + public void run() { + if (!display.isDisposed()) + workbench.close(); + } + }); + } +} diff --git a/eclipse/plugins/org.argeo.slc.client.ui/.classpath b/eclipse/plugins/org.argeo.slc.client.ui/.classpath new file mode 100644 index 000000000..ad32c83a7 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/eclipse/plugins/org.argeo.slc.client.ui/.project b/eclipse/plugins/org.argeo.slc.client.ui/.project new file mode 100644 index 000000000..ed71a2e72 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/.project @@ -0,0 +1,28 @@ + + + org.argeo.slc.client.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/eclipse/plugins/org.argeo.slc.client.ui/.settings/org.eclipse.jdt.core.prefs b/eclipse/plugins/org.argeo.slc.client.ui/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..6abb6ecd1 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +#Tue Jul 27 13:26:24 CEST 2010 +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/eclipse/plugins/org.argeo.slc.client.ui/.settings/org.eclipse.pde.core.prefs b/eclipse/plugins/org.argeo.slc.client.ui/.settings/org.eclipse.pde.core.prefs new file mode 100644 index 000000000..31cbfaeee --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/.settings/org.eclipse.pde.core.prefs @@ -0,0 +1,3 @@ +#Tue Jul 27 14:24:51 CEST 2010 +eclipse.preferences.version=1 +resolve.requirebundle=false diff --git a/eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF new file mode 100644 index 000000000..406012cae --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF @@ -0,0 +1,23 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Ui +Bundle-SymbolicName: org.argeo.slc.client.ui;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: org.argeo.slc.client.ui.ClientUiPlugin +Require-Bundle: org.eclipse.ui;resolution:=optional, + org.eclipse.rap.ui;resolution:=optional, + org.eclipse.core.runtime +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Export-Package: org.argeo.slc.client.ui, + org.argeo.slc.client.ui.actions, + org.argeo.slc.client.ui.views +Import-Package: org.apache.commons.logging;version="1.1.1", + org.argeo.slc.build;version="0.13.0.SNAPSHOT-r3685", + org.argeo.slc.core.runtime;version="0.13.0.SNAPSHOT-r3701", + org.argeo.slc.execution;version="0.13.0.SNAPSHOT-r3685", + org.argeo.slc.process;version="0.13.0.SNAPSHOT-r3685", + org.argeo.slc.runtime;version="0.13.0.SNAPSHOT-r3685", + org.springframework.beans.factory, + org.springframework.context, + org.springframework.core.io.support diff --git a/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/osgi.xml b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/osgi.xml new file mode 100644 index 000000000..8758543f0 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/osgi.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/views.xml b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/views.xml new file mode 100644 index 000000000..1aecce0e3 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/views.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/spring/ApplicationContextTracker.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/spring/ApplicationContextTracker.class new file mode 100644 index 0000000000000000000000000000000000000000..d816af318724a01e77f91682545d3583c17d54cd GIT binary patch literal 2419 zcmb7F-%}e^6#i}!*d*OT3seLYD72UW%~DLOG|)m36b#fFiemjSOIXrvmuzNt!;dgf37gRlNS>UVdS1e%l?n91(md(S=RJKuNC;qQNc{R6-xzEKbnn6#ae zraL9W){LTMR$N1KD~?$%X>*l|WfpbMw9E5$*)#UNHAgQ#F&qUkfeVlIU0t(u8s6J{ zY!p3#*2Sg#+QO#-9r^lU!IRE%0_W+(_4Km0u3J?jj)cHYY9wX*m**|rb!P}A69nIO z^c`c*cAjL4LFh~)nsn+kd)IJw&7zSh)6vYg6W^uN0)u)(N`=5I%uHY;FZrkW$mOL(`lVH%cgf*U^Z31QiHACt(LbeBlr5FkkVXwT_84ZZy8BMaY2QOivrP9 zdi@+aaY;d!Ku-D&z4U*_VpMqY2ZeJfMskUOc zu3j=0ZD&XKRJ?_^ncKF%5|~OgdU<$kD^NbyB$k2!fh#rOr*N6XWeh7AqC7S8dY+3% zh46rCsJMcw0&3AQbkA5cEzfWSv?d_a&4>>!K;;zijubk@RsHCc1m~-+ zXYZI#4ToYUATX*TiE|RhxQc61@0eXN%1LOru3$nS-Gqpx@~&=~TZMzNr|&Q97mbQ+ zOqG4i`|Yx0y@JQ~l$Fc^XwREvW3{@oX*g^8rp29(yj|3-b=@)LI^2wTk4#q}>nC!y zDZn1MD4WwUH>;lQ1O+e9SLdXzV%QC=%Wb_#d}X9* zk~P_SjdyY_oXq^|{9gM1SVbNy0&RP`>9Ik>8N`68<>M_EcA zJz2|1_SAwLpI@q2mx3ey2+e--Br+mzoi z?x{G>XB$`l&_>F1YxD)$JL0k55#5N6{eljG!b`llI{F*>H^#5M#GrVAk)M$s{R!zq zj6Fm0R;(v>h|F_(>SnV~@)yOs^fiJ6p973E$de&X;bC0mJH>%F$*(Lernt(|DjP({ z4cz34IPf0cr$_lU#b1OThLI!6sBb%s8T!4=^BzS0qq~>_p`cU29R+jpQ3T;C~-KZIWZ literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/spring/SpringExtensionFactory.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/spring/SpringExtensionFactory.class new file mode 100644 index 0000000000000000000000000000000000000000..8611f17ced2887d56b39fcff4d35a78dcffbe9e4 GIT binary patch literal 3853 zcmb7HYj+e?7TvegNj05drNPKrihkgOYt2uZVfL-6G!5w}Sy?M}>(;sZo_+2<=iL7Fe?R;P zU<q)~a<$XIRje-6tX_b64?Z}0A34zWftrUo-rI{CK9K6<# z9)Y?YcHZ`P3e>c;PSCW^&B!Eb(4eCpxU3qE67)Nqr)hDF);F^Fa3Wf1tIj%7#+G!>;k zK$^Dc*pHbCYOm>=0tZ_Hf2$utpPQewvn4OE?{{QQ=KY=u2giJM?v*p);r6snB)Rv^ zI&ML;Kz&yFy^Q~`nIp%EmI{Q(eyKiGMk#VaZFsAW+pvygx#6Bd!LhBtbJFnTlrNB8 zGTGL^vrylY9{oS*ddCeb1T+@z(Nm8NXwk4ypi3Rn^{>>?iZ%f)iWLvJGENc6O5RcE z>Y<@S#~S=e=_oibflW&dsDNJZ+=BG{>F|^)GbP%bsgVgZlTgVNnkCIbp&Z_D*XyTD zt4q`+|4j4Y5CNBx}*~J_YNs?OYJ(K;~q2#EF;3G=`ocw z3<}(~XfCq`MwPT42QaK-L`7gVmyg-Gf+Ghq#IPrA>2a3&4y*27IjPDS6I@{ZZ^)nw zPRaIROvgCx7g#}bb)Eq~m%y#8NQ-+|VM>^TIHchLZhKt|bUdi|D8VZ&CGjvG(QsH` z?V`&^9n+t5y_}9C_-h!+-cmlJO0rQkTNIL8%-Y74+zl7d+cYv7EP>RbMmnU@Q9?!B zXMJ9VENl%_R7E=*n=bm29v#DRD$Omi%ru1s&UTGa)<>>obJ|=q=e! zMtTXj0;`I?>G`av&FO$ucXJXB9#w6KC(%@m;e_Jh>nN#EHYi7@b7_}_FAS-JlRBm_ z&17Jr%6x{Mvl>iAMZU_d9_7IHB%Z)i8lI%g0{5>brsHYlo~D|=@8p$3r*!;XbRT>_g6DsFW^-jui;kJQX66%e&Enoss)9J{7PlzNfu<=c_nJ-~9WF1B0mRZI zLCD61kQ%<2mv?YW9Y5;1C&Sxba?CAxmfUBnILs^JB?i{=4pM^{YT1+7ZPd++ z7w1}zd6DG*<$N>v6l%8ZJXU88Dh#g(3t;|3$U3gx-PYND9)IqRxAC#IyEYZSgsxQWCA7As_%es}F?@$q z8#ntI+8H#e(M4$O9i4M%k3$iu35aYUYoHSebfE#8kiuqOiMDWbJMO?%w(;Asiz7vJ zXSjDnlwNRMS3rI@{e29b^&2%*Go59Q=#}XK+I}zK8?E zLti6hD5h Men_1o%NV}=KXVQi0{{R3 literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/ui/TreeObject.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/ui/TreeObject.class new file mode 100644 index 0000000000000000000000000000000000000000..e3beb3d8a6ba643be5f0cc096e8517f92d39957b GIT binary patch literal 867 zcmaiy%SyvQ6o&ulB{eZxTdUT)RTpUm18x;Jf~%r}()~0JaY{@iO?@r}FW|xl@S(&r zlW4_OWgv6=&wsviCU5UAuK@P2SwfCsJ&Jvo$G(VM;RW)hFWiB2FJd81yFKA0B@`HD zdi<8V0S|pQJ!L3_{8}(n+rz8#B$lDS&tTl}ScC~fqy4M=?uz(=cLPloc|7RwSgL(?SV*p9|4*j0 zHexFIB016Z)tu%i6@%FqNm>EJw)1b5Desbv5+*2^+&_c2$p8NyO(ap;T#L$Hw=su# z2J1W;#GW{os^aqS#dg(;ph3z!y>pHRbxE%%JIzJ9F`=9$X?Ls@fYo}2-P(CX`Ce-) z^qtlY^aoI!Nux?<^Q0#=W>KSAt&}^XK~R~etM`pniE>bON(R{4#@6d%X2Y<6 zdKP?`0T~KraR_7S#50tx@(slJ0x?u`b>d~LWM1Dv7Jq`&#)7Plsp1K1KZEOIgEw@o FjSo2#oLv9_ literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/ui/TreeParent.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/eclipse/ui/TreeParent.class new file mode 100644 index 0000000000000000000000000000000000000000..b6657567b89460c6be9c903d07511f60175c3f3f GIT binary patch literal 1687 zcmai!YflqF6o%jFg)L?24a!Xci->Jes^GndLKQ^|m_TZTPeVJF#idKOTN3>-{sKN| zA|e`%pZ!tBGrQZ14VN_8?wQMT-t*3x{qy(xF96e6QQ%=1HOz8`n`L2SL{ZoFsv=X< zGV7)gued2HmIB{di&nRGMA2dh6t^|KL>m|)`5nH`Gc`-oGkL9QWf?lxv~q=8HB&Im zv`x?EPgUT+vvWk~&<$P^B?h)Z!K_x%tT~2w(t+u`QqHVdrdBCuQw0WJ&M1i>ya=o4 zf~p|O(9={kZ<_qQlomt;J#tAegEyHfbb_Hzg&!UAZ9qjQf(+rjRuL<;-7R6R^DUif zh~RQcjx5FrGY}<$9AUbYTqR z3NAB*nib08R9wLX)kVBEr|Nq*q(w;;DWvI)s={&vo}Jh&LfY)N5BsJJCh#&6FMqAaZXywsT5Jl7tHxu@bj9+2r( z?E{%k=e#6`XH`4|^^js2c0VvAlbbE=R5$5_F$Iqq#?H@9lDB!aDVb7J_ja#Yy!dXJ z@40;w(5iX2x#P)Hi-HBiAWJIQAf91K!E=UavtQgv6)*6TirD9RO{~79_Dyb_#9#=n z88x#g7B$(x;pPROl1wD1-@Wu%@X(LipCZMM0u<9Fpm&AF=q}N-o1y}(_RxP{dh!UN z^bbVd93ggyc-ni2{?GQ_L3+mEqo=%5-E`MNh$D<4xzE{+3%E#;jE6Bo>;y(}sgXmf zkvV+COn*Uq@)!vZUQedK;%a-280F}p9KDnyeoBr>T(fgrZ{%2}3^GU5#ZO5*`wt(o zjTxZg2MIsaf{r%iM^Q)LBms^^^8{vu4%?PU{xPN*nz|kEFzFs4XGU$X^q01{-~?{t zj*H8=xIsyBXm=TY!h4LY2fy*?6K(X6M%c#(YH?|_0~~As=dsWL($|z$L>jP<@cRzD x2Q=nw;Y_q}A}%LquVEoNuP1ow0;lO;0s{o>|AxhOLFpDyzy&enX@>{P{{WaKSF->B literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/ClientUiPlugin.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/ClientUiPlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..2f8f505895b9be33dcaf26c432ef7779fb7499be GIT binary patch literal 1898 zcmbtVYgZFj6y28u^5`Hqv>u>*7K6~W?9i2g6?u;3cuM-Q zl_+a1J?*G1FL9M$K)&xQ>C%g&cIl-iYjrP*L)(dWTA8mvX{){Sptbp3YhA!>KeeCP zmS_8}wH=4bcUJ@^*8)F^Z9m?%y+jsK5}2cqMk=I1A&pE(BT)hq8IM4veKxV0U@!6a zJxQ8a9>xNf)6gJtmDLIDu6!PZ-&^;N`Y>qXmhx46TOe0i+7-yJ1^cp$983e}FeNb6 zR=(U!x_dJG*531^PA+h4Z`Tf$zV|=o;{z25j5EQI)K@dvr*dn$^8G_c_F~1#6!5OV z%&2Zdi&pc#fmzIzAn<_!1C#pnp@A~q5-2!>g!54x^tAhefy+Tw zxXH0l>_cQZLARI0GHmpGSEu`_fsaus<8ypjz!#inJwVk>{$!9g4xU;0oRHr#}$JSF|p+B>yE)wT_JDsL{<}i9VZ45>35Vt5jbFcU=(8kT@bDFoCd<(wEt1of>=hSV6&oV=S z3&<1hZJvzG3Gbv(LN6;lF3^&vWj=*^%r81>s#<%A_o}tuak2U#spWL^Ia7f)*6KB9em*zq(+r3r{S|AZ|qHll#%4PKY~Bg znU<1%=3AgVN_Wpa_uPly|NZA*0B&K^Ku+LB5H@WmY|6lnJlA$T zCH>fLE8B5n75I_;LhghzYCTD|1_}bByUxC2dye0*cBrYW3qvO?nr%2)A2fqZ#kOQ5h4G-L^RoHa3w zlEAr|^5wJkt8E!>I@=!M&({Li@wS{$>3#QQA#SNiz)n1VaM1Lh58J-LY&k=9cgJyM zS0}rg##dR`8iv59CJYRX;1b3Sj0s%(j}T3KhRXtGQ^q~n1g@4BG7dAURz`3Y*9=Su zjGu^Z;yNY;#)zx=?aLl|niPTQ(|n{x^mGZ+CT1`zaJC1v;WVl9Hw1=uSV{VvfK{#? z6=yvTmEWxNYp88EoG`8!umx^uAA^cvpJtK$bO6B;EZj8NL$?KnDToG?p+NaxVx$$K zaby_To1v7cWu=5K@TGyf0yD=WJjvd~JzeESnD(O1$9)qOJYev2UvEjz>rX}0iS3SR z&>*rC6Q+VKl>12y;W3GKJ6kqN_y(&6Rs`nz*)){n1iBDh* z1&reyS7vI2QGCoDXD&YBT?4$PgFK&i7k|Tr16&k1z!iO)qSf31$~nA)wZ8lYpTEJK z)aWaI`uhB%w|H{oaf0-KDSDhH_6(=w6ecjs-yAz=K4Eb^_0(lSpZFHvk;ep?R`ESK zGo7e)nLQ$&W+slD6!{6bc?^stk%Xj!O2PDM9nTW5=RKX4G|(Wh`^WS-1QXc6k2Kf% nJS33TvbebPJ1!hiNflmUI#v^ei>XzQPBBTBPR-UeJ0G?y743F?WF_8#NBomRwp$KCowH28X6D2>U z;_W9HW>zKoLo&=_nRXIw8E|5fi5g1NcoVU8lniAV1;WmZOfu7XDjn0Qk@6%k3?vi- zmq6I<&Y-TY$+T5tDSC03QyvgX_DrRXXN1>t*adrZR4;?tnyu~(b?H5*VF{Z) zs@NiIHm}B8eOK+4k0MHh)vnU=C>sx?ISmG}B&>ClFo^qsQO=$^3r=3b;oL+EiaUD% zEORB2Hs2oM5zle$hHJefGogH^T$7D!p4w9<3&B6sTAEHAq^V5HcuaWtZ=D4PAXNXp zVLW6Rm-y%KcrUCaP_MfU<{k#3#_=0$9W%n=*4s}m;J5d`VdXnE+WQyS{*r@l^LHhO zjF{*Q%TTz(zAaAVG~C5KKHbfg@tF2L9!$vvpTx0Z`zy9T^TmUsE9K5{PUBw!rZgUQ Pa?~#OkGx0L9}UnSJhc!o literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider$ExecutionModuleNode.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider$ExecutionModuleNode.class new file mode 100644 index 0000000000000000000000000000000000000000..1001b4cee05988f92e13a789e59bf0d5400c650d GIT binary patch literal 5447 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 P2G&u>Rl-qQ;2PLZ=^v6+ literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider$FolderNode.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider$FolderNode.class new file mode 100644 index 0000000000000000000000000000000000000000..ca2aaeac7b8960a18029549b67b11ec31315ebb1 GIT binary patch literal 772 zcmbtS+e!m55Ixye*KVuUOT9jb(1%*Z6<@tQEQ(4M!P571JJiUUNOrgSTRw>3gCF1* z=+B6=MW~=4SOPOSlgyc!le~UBzW~_AvI|Gx*x0TwZI_H6N1-1^ige8TFc>XC`qotqB1$P26t*odiaW6G$SmgquS&J!3-u2fvz z5;$lK?*60l4pZ$at&)9#W^G8W#N{|Y)2$8-7ukyTGFZve+BcI2m+_Wwf#+eRwJ+FO~2lcSp>XG zliHAuRMt`Tk2l@S2n0$eT9XYT8OId6SQOYB>cO~+!DqoL%bMeFD9Ytb+ib_n#TeTH zqX16-yjWj`|fw| zyYuh&{{9w#2k@qbguug&TgV!2K{{ElXlBi#CGB#yVr9=-@|>3)J}=Em*>da&CtoQ_ zZ^*IBTyWBL&RTitYG@GHGH;wUvPHu#WFMcMmu6W*lfZxyEGe(#$?W{IhADlK()F^V zr(7vxk_3`Pry$Td?i*Ax%sH7gorML*_OhHQSQJ0*6mkM78v1B~Rz#~K^WBPFwiaY| zDqNvfAEphqRX#!u-96I+4MR>|rf~cXpmp3ajpDT7TIxLv^i~kl~nyPJt(Gi!@y^ zQce2)=)i6r_n}K*6Ae2iJ=3*HgkIo4cL;5CSXpIdoS(IAximVkSI7P67SJitXN*!M zFt$eEO`_Ko38R_}`ZV+k9KStKB9S`!F+ko{Z5G(Q#@;nNPh$`dXxJyPZ?zdW0F{pY zcu+v2!bxL+_-v!T8oQ^;E@O`e9mGK$52>YTE}dp1GcUB@L&#}3B(Q6>;<$-A4&z~g zc5aRNzveW7nR*(An%CNLt9*Dw$A|GKqt8_7rC#sB?pQqC0B*USX+^Rj9Us6kfv#@G zOAUi+>SHQZ=`IYP7L4G8hT~PZHq3K6M)8=yX3IO}GItK!Dl6pu9Clj6xWHX;4;`&A zmZh7*Bx8HZH0(}8CCSb-#&A+4k0+RZ)`3@@VhmF{PT@&rIHOdOHWl^PFRdnoHLeJi zk{x6CsE&^*cBINq;5l{J(>k8Q#|0Y8>KHK#s$ywD2A|OJj7o5u%%U{hYGzXWGIY$s zBxFU)+n78|img@R^2#b^$GJM!0*Qi#X9=YbSTv(!4i=5I%F;FbJhOe(?$L0Z63$>j zLy_WZ5~{O0Y&cBHwmi@4Xm#L(r&ApHl)|5>?5#M>ZZh%Y>IilV*L7XqiV3<=x@S<< zQNdXPXXNv~lN9soq^-~Uo@oW+c^%IwR%>&HH%Y{l+lMrKMxbNEz&UB~e&WgtYUSqy zMrtc>1%Z*Gb57j?>N38lqZw&s#21u*z9=wTf0A1eANNl@2{L6c#7h2=)RkY0;gBo> zZILU2k}J5frs@#B1-sU}a#;c-uAYP%Jb@{ zX@<*qX++h2)Kntl@%{3cjr_+jjKi2UR zEUJ9rjXOqOrQ$oQ`NA)Kk2((Xmd#A~Q~X@R&jhyCycp z*v|jW6aj3bkTz~<#a;dkxPe~^;r1+_N~8F$yVHu;0W7PXWMuoLZk3gu4zQ@8jp zEocVmhHd_KA6O0AG=35bM!LTXBIKf^_hv+ zux$my0*lzm?p2JIBgxwju7S z_a%Ip$m{6Bi}(tiyp`I&im%be!>oY5j&E@6BHjK?f9xH;eT&)>_zvatLmPY-0~#{d zc%nuPLPL^oRB{H`agEy&!61p#LN(vT_X0Q5JV7C3l~8~L+zJSC%r|sPlf8MQB3vv@x=!5Bto$QzpusDKe@l zJfgs#aEWGYqVgj(Id9;F+Tqf^bc0aLZXio#7_lWqPW~m7)y1d!H851-7Pa|Od}`pY fT$8|MC~dn5T!#BzW9wjho$YzHD{ODDEkpbtwhj67 literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesView$1.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesView$1.class new file mode 100644 index 0000000000000000000000000000000000000000..f444eb12cd0d300b004f924ae1310f253e310260 GIT binary patch literal 3358 zcmbVOX;%|h7=CUD3?zf#QrooET0jkp4p>D?)QT*E0xnUkwxt~=*Eld_=*$FM+S+~9 zZr}Pd`l0bq&*`yW`qvi^ryYG7!UC;x=8|bRW+rW%pPiFd zprJwFpt2`vX3>|%+zr!`c}vpsjqzbOJL||H$F}AtY(J10=?OFhH*LS8myt|tK9mIY zkJ}kLI4N*6{yYXcrv<`8Zb~*mpjn58#t7=rqN53|0(EgE&@y3X#!@6{Q?mV#gAl(-FLcmo>x$x}MyF zT0I@F;8g)VErXw>!|tcIJQ;XdE692>RaS~(7xw6Q9c?Tu z{f^q6AB;G1foTZrpzB&-(M^ZI=;q)t75JUbJZF6lkmVwCK5(^nK%!G#&enOesqd#L*H#J9=~+z(IkX%%o;mlsADZ z#aeEB#%d#9$7~{kUL4ZUCvdSk*k=v!28`=?1BW>b%xGBpmS-;pE(i6RKC@@t);e~hw zn2PdhQu=X9$DlGEq48<56LGH$4e1zGhFZ&p%76A^RL2>NarmjDK(Lx7r+#Y*xOr4f znu`pq9cOi%Q*NR~6%|$#lQ^$ois7!pkP133;36r9q5}IWBQNl4V%^C|k|~~9+3ILj zqE~cG<0`{uqSgPBiEEj3onBSzkba`LhIcev7ud3zm6|IZ@8UhCWu{UBRShYnbzQ^z zPn^1>W0eOWf*Cb+Gnmz3f#y`3D#wz2*j_ALz75KMo*H{`Lq{4n3sg6lCNmVq^V}L# zZ+3#p#@O&VI2z^!&Qy2gxlQU=0QtC)kjT4XmDa@TWix@jAPp8OFO!I35uSz*1$I}5 zQ7fs#2cg!&^U5jq6EBpej4NK9aE<*C&Hc%HXD( z((tXop=!W93%BYusN;M5KpwGJ#z0;$y+F0YbDcbgDSM??gufgZ%XW%b_KhKTVUf-Q znMaX6p5a??$T59i`Wk)|II+1vY7ijMRGvyQLQNG4gWp&}3HI>iSI2KXL~E;h0P=Yp z;4 z98Q7m zfQz_`OZW;&+{cxCVa5u{7YoBOAd4lIrWv1N8Mj!*82RWn?yyX4WYW9%h>>;E=EwMi z?D@Fn*ldjFbh7~kMKMghu)Y4-tsqHZtO PpSiYk{e`P)8bAL7m2u{s literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesView$ViewLabelProvider.class b/eclipse/plugins/org.argeo.slc.client.ui/bin/org/argeo/slc/client/ui/views/ExecutionModulesView$ViewLabelProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..f264a7ae79823832be8dc81784d50f61783d6882 GIT binary patch literal 2496 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 nmO13W+y{=lkBi-SyhBlR7C)T-v5-)li@~idq_w zBBg*Ts4y39fJDV#021QFsaz{KA}&arxS$A2AQUPPC{+9q0o*Eu(jE+NHFg;M?#?T4C}8B`%5 z9Qu0Z?Ae*Qsi%~%1@0#k8C0&kQjADKBl`MB}}9~2N; ztrqHyI*17q4^AL6m;nHsI$l<%Cdx2r3IT#e6*@6;VDQrMBPUg>-GWIBmVQ~npKCYa z7=?_T!Qv0!VyINandvha$`1hyNR|*JU=iV!QsJP}(>?Tb57(|=!#~ZtoOM+cMDdj{ zjg2SN`L=G^3x6%p?8#ZU?1CbKB!cC5YK{$PtG$Je-$DJ(ZFrvQclzODT;*F-p(&E| z3_nWrz~TMqT3z&a`tY}XPztt`Bg)#uNPHj7f18j-pclno?$+hG&aljj%)n3%$!3Uk ze-+)$F1VK>(dG-vzN{j%BNZ$lc4DZQ5JhIe%%|t~Y{LamP>{sLCIy=m9P_8#6`?ji zB1oW>hAA5GQNVHKELG^lo(9JR(MNV!7OiO#_8}P$z~C7^cg_pDC@bxA@}=aES(EuUe&pzA#aEcx=0Pe^LQxZswIrWjSeL6l#Q%o zqiA`syOIS6ye~}xO4fCp)Pg8lj=SdX{vXLg|ATm4aFuWLb^Nxstzy?w$k-OLj)LV8 za0C=iCKQdND(l(Da*q9Q!S*J@TKbmWNX7wRce9sU8^KqDt8O?bGH{gwWeJ`A8rx%i zv`00%BO&sZb1b+XoeSF0GJtRX2XK`cz_az0&YO+Jou1qjDFp=EwIB-uswaWp!N1No zbp57(8H^Y2WkC12^I-t50(epinq~&2%ryYt0eGLQe0#6|KSQi=IDDePAOHXW07*qo IM6N<$g3chO)c^nh literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/icons/sample.gif b/eclipse/plugins/org.argeo.slc.client.ui/icons/sample.gif new file mode 100644 index 0000000000000000000000000000000000000000..34fb3c9d8cb7d489681b7f7aee4bdcd7eaf53610 GIT binary patch literal 983 zcmZ?wbhEHb6krfw_|CxKYUg-n!?izO{@9*?jxd%4aX0yzy`dymabz zw#(eg=y~&N&n)dZv2xzduG}5lraiApo3(c4*{Ylg5#|$JO_EEZ<^|a2`Z*=9ns7DV zy=TR&gYw*7f%auV?ip3tvjRPmcdoho{K?x$_vR?C#t5&<;~V}S*>OMCr>h}%%bLZ9 zmo3`hYEwTICo-TTCZwgTsC&VjZRgJ1eE#fBa^%9R zmmfWS@;bnyJ27HWY}kxYzv(Hl>yu;FCPlAEh+34Muq-8Rb6C)<8qA3{r2e5 z`$vyngh#H=FWlqqvnapfc5%(!sQ4v?r7J61-&eJNEN^;KTK}T7{#i-gJh%G*9vcYdwv_*~xdw!Gz4Va?T!sXyyF@8?w<>X`X=#j%uHV4GRvj@+tE@ zQ%F!a)GKcn^~8abN>4la1UNXVL;{ZWi)lEwyeatDu%Lr6;aASiLrXXW zQm#x?3nK%AG=mOE3}hz*Ys>?+zLd;)88b5@wUTCtWfpY#2H7RP(2A7mZYjMKq9xTO zSQ!=CAeNHN%)sKdy}Qhu$$^3OAltH?7b=tvJbuU^;IcYXe4&MmP=iRq!3YK(JqBI| O=A_0jy-syS25SJFSX2-I literal 0 HcmV?d00001 diff --git a/eclipse/plugins/org.argeo.slc.client.ui/icons/system.png b/eclipse/plugins/org.argeo.slc.client.ui/icons/system.png new file mode 100644 index 0000000000000000000000000000000000000000..71f44d0ce611ea1fc3241bcf2df4d68905771082 GIT binary patch literal 3776 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 + + + + + + + + + + + + + + + + + + + + diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/spring/ApplicationContextTracker.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/spring/ApplicationContextTracker.java new file mode 100644 index 000000000..be53a97fc --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/spring/ApplicationContextTracker.java @@ -0,0 +1,66 @@ +package org.argeo.eclipse.spring; + +import static java.text.MessageFormat.format; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.util.tracker.ServiceTracker; +import org.springframework.context.ApplicationContext; + +/** + * @author Heiko Seeberger + */ +public class ApplicationContextTracker { + + private static final String FILTER = "(&(objectClass=org.springframework.context.ApplicationContext)" //$NON-NLS-1$ + + "(org.springframework.context.service.name={0}))"; //$NON-NLS-1$ + + private ServiceTracker applicationContextServiceTracker; + + /** + * @param contributorBundle + * OSGi bundle for which the Spring application context is to be + * tracked. Must not be null! + * @param factoryBundleContext + * BundleContext object which can be used to track services + * @throws IllegalArgumentException + * if the given bundle is null. + */ + public ApplicationContextTracker(final Bundle contributorBundle, final BundleContext factoryBundleContext) { + final String filter = format(FILTER, contributorBundle.getSymbolicName()); + try { + applicationContextServiceTracker = new ServiceTracker( + factoryBundleContext, FrameworkUtil.createFilter(filter), null); + applicationContextServiceTracker.open(); + } catch (final InvalidSyntaxException e) { + e.printStackTrace(); + } + } + + public void close() { + if (applicationContextServiceTracker != null) { + applicationContextServiceTracker.close(); + } + } + + public ApplicationContext getApplicationContext() { + ApplicationContext applicationContext = null; + if (applicationContextServiceTracker != null) { + try { + applicationContext = (ApplicationContext) applicationContextServiceTracker + .waitForService(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + return applicationContext; + } + + @Override + protected void finalize() throws Throwable { + close(); + super.finalize(); + } +} diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/spring/SpringExtensionFactory.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/spring/SpringExtensionFactory.java new file mode 100644 index 000000000..7e38dde33 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/spring/SpringExtensionFactory.java @@ -0,0 +1,105 @@ +package org.argeo.eclipse.spring; + +import org.argeo.slc.client.ui.ClientUiPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExecutableExtension; +import org.eclipse.core.runtime.IExecutableExtensionFactory; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.Platform; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleException; +import org.springframework.context.ApplicationContext; + +/** + * The Spring Extension Factory builds a bridge between the Eclipse Extension + * Registry and the Spring Framework (especially Spring Dynamic Modules). + * + * It allows you to define your extension as a spring bean within the spring + * application context of your bundle. If you would like to use this bean as an + * instance of an extension (an Eclipse RCP view, for example) you define the + * extension with this spring extension factory as the class to be created. + * + * To let the spring extension factory pick the right bean from your application + * context you need to set the bean id to the same value as the id of the view + * within the view definition, for example. This is important if your extension + * definition contains more than one element, where each element has its own id. + * + * If the extension definition elements themselves have no id attribute the + * spring extension factory uses the id of the extension itself to identify the + * bean. + * + * @author Martin Lippert + */ +public class SpringExtensionFactory implements IExecutableExtensionFactory, + IExecutableExtension { + + private Object bean; + + public Object create() throws CoreException { + return bean; + } + + public void setInitializationData(IConfigurationElement config, + String propertyName, Object data) throws CoreException { + String beanName = getBeanName(data, config); + ApplicationContext appContext = getApplicationContext(config); + + if (beanName != null && appContext != null) { + this.bean = appContext.getBean(beanName); + if (this.bean instanceof IExecutableExtension) { + ((IExecutableExtension) this.bean).setInitializationData( + config, propertyName, data); + } + } + } + + private String getBeanName(Object data, IConfigurationElement config) { + + // try the specific bean id the extension defines + if (data != null && data.toString().length() > 0) { + return data.toString(); + } + + // try the id of the config element + if (config.getAttribute("id") != null) { + return config.getAttribute("id"); + } + + // try the id of the extension element itself + if (config.getParent() != null + && config.getParent() instanceof IExtension) { + IExtension extensionDefinition = (IExtension) config.getParent(); + return extensionDefinition.getSimpleIdentifier(); + } + + return null; + } + + private ApplicationContext getApplicationContext( + IConfigurationElement config) { + String contributorName = config.getContributor().getName(); + Bundle contributorBundle = Platform.getBundle(contributorName); + + if (contributorBundle.getState() != Bundle.ACTIVE && contributorBundle.getState() != Bundle.STARTING) { + try { + System.out.println("starting bundle: " + contributorBundle.getSymbolicName()); + contributorBundle.start(); + } catch (BundleException e) { + e.printStackTrace(); + } + } + + final ApplicationContextTracker applicationContextTracker = new ApplicationContextTracker( + contributorBundle, ClientUiPlugin.getDefault().getBundleContext()); + ApplicationContext applicationContext = null; + try { + applicationContext = applicationContextTracker + .getApplicationContext(); + } finally { + applicationContextTracker.close(); + } + return applicationContext; + } + +} diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/ui/TreeObject.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/ui/TreeObject.java new file mode 100644 index 000000000..d75db780e --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/ui/TreeObject.java @@ -0,0 +1,26 @@ +package org.argeo.eclipse.ui; + +public class TreeObject { + private String name; + private TreeParent parent; + + public TreeObject(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setParent(TreeParent parent) { + this.parent = parent; + } + + public TreeParent getParent() { + return parent; + } + + public String toString() { + return getName(); + } +} diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/ui/TreeParent.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/ui/TreeParent.java new file mode 100644 index 000000000..d45844de2 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/eclipse/ui/TreeParent.java @@ -0,0 +1,44 @@ +package org.argeo.eclipse.ui; + +import java.util.ArrayList; +import java.util.List; + +public class TreeParent extends TreeObject { + private List children; + + private boolean loaded; + + public TreeParent(String name) { + super(name); + children = new ArrayList(); + loaded = false; + } + + public synchronized void addChild(TreeObject child) { + loaded = true; + children.add(child); + child.setParent(this); + } + + public synchronized void removeChild(TreeObject child) { + children.remove(child); + child.setParent(null); + } + + public synchronized void clearChildren() { + loaded = false; + children.clear(); + } + + public synchronized TreeObject[] getChildren() { + return (TreeObject[]) children.toArray(new TreeObject[children.size()]); + } + + public synchronized boolean hasChildren() { + return children.size() > 0; + } + + public synchronized Boolean isLoaded() { + return loaded; + } +} diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/ClientUiPlugin.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/ClientUiPlugin.java new file mode 100644 index 000000000..9bffcdd7c --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/ClientUiPlugin.java @@ -0,0 +1,86 @@ +package org.argeo.slc.client.ui; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ImageRegistry; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class ClientUiPlugin extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "org.argeo.slc.client.ui"; + + // The shared instance + private static ClientUiPlugin plugin; + + private BundleContext bundleContext; + + /** + * The constructor + */ + public ClientUiPlugin() { + } + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext + * ) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + this.bundleContext = 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 ClientUiPlugin 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); + } + + @Override + protected void initializeImageRegistry(ImageRegistry reg) { + reg.put("agent", getImageDescriptor("icons/computer.png")); + reg.put("executionModule", getImageDescriptor("icons/archive.png")); + reg.put("folder", getImageDescriptor("icons/folder.png")); + //reg.put("flow", getImageDescriptor("icons/slc-launch.gif")); + reg.put("flow", getImageDescriptor("icons/system.png")); + } + + public BundleContext getBundleContext() { + return bundleContext; + } + +} diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/actions/RefreshAction.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/actions/RefreshAction.java new file mode 100644 index 000000000..4e5aea7e2 --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/actions/RefreshAction.java @@ -0,0 +1,69 @@ +package org.argeo.slc.client.ui.actions; + +import org.argeo.slc.client.ui.views.ExecutionModulesView; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.IWorkbenchWindowActionDelegate; + +/** + * Our sample action implements workbench action delegate. The action proxy will + * be created by the workbench and shown in the UI. When the user tries to use + * the action, this delegate will be created and execution will be delegated to + * it. + * + * @see IWorkbenchWindowActionDelegate + */ +public class RefreshAction implements IWorkbenchWindowActionDelegate { + private IWorkbenchWindow window; + + /** + * The constructor. + */ + public RefreshAction() { + } + + /** + * The action has been activated. The argument of the method represents the + * 'real' action sitting in the workbench UI. + * + * @see IWorkbenchWindowActionDelegate#run + */ + public void run(IAction action) { + ExecutionModulesView view = (ExecutionModulesView) window + .getWorkbench().getActiveWorkbenchWindow().getActivePage() + .findView(ExecutionModulesView.ID); + view.getViewer().refresh(); + MessageDialog.openInformation(window.getShell(), "Ui", "Refreshed"); + } + + /** + * Selection in the workbench has been changed. We can change the state of + * the 'real' action here if we want, but this can only happen after the + * delegate has been created. + * + * @see IWorkbenchWindowActionDelegate#selectionChanged + */ + public void selectionChanged(IAction action, ISelection selection) { + } + + /** + * We can use this method to dispose of any system resources we previously + * allocated. + * + * @see IWorkbenchWindowActionDelegate#dispose + */ + public void dispose() { + } + + /** + * We will cache window object in order to be able to provide parent shell + * for the message dialog. + * + * @see IWorkbenchWindowActionDelegate#init + */ + public void init(IWorkbenchWindow window) { + this.window = window; + } +} \ No newline at end of file diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider.java new file mode 100644 index 000000000..6bfb921db --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesContentProvider.java @@ -0,0 +1,220 @@ +package org.argeo.slc.client.ui.views; + +import java.util.HashMap; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.eclipse.ui.TreeObject; +import org.argeo.eclipse.ui.TreeParent; +import org.argeo.slc.execution.ExecutionFlowDescriptor; +import org.argeo.slc.execution.ExecutionModuleDescriptor; +import org.argeo.slc.runtime.SlcAgent; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.Viewer; + +public class ExecutionModulesContentProvider implements ITreeContentProvider { + private final static Log log = LogFactory + .getLog(ExecutionModulesContentProvider.class); + + private SlcAgent slcAgent; + + @Override + public Object[] getChildren(Object parent) { + if (parent instanceof ExecutionModuleNode) { + ExecutionModuleNode executionModuleNode = (ExecutionModuleNode) parent; + ExecutionModuleDescriptor emd = executionModuleNode.getDescriptor(); + emd = executionModuleNode.getAgentNode().getAgent() + .getExecutionModuleDescriptor(emd.getName(), + emd.getVersion()); + executionModuleNode.cacheDescriptor(emd); + // for (String flowName : executionModuleNode.getFlowDescriptors() + // .keySet()) { + // executionModuleNode.addChild(new FlowNode(flowName, + // executionModuleNode)); + // } + return executionModuleNode.getChildren(); + } else if (parent instanceof AgentNode) { + AgentNode agentNode = (AgentNode) parent; + + if (log.isTraceEnabled()) + log.trace("Scan agent " + agentNode); + + agentNode.clearChildren(); + for (ExecutionModuleDescriptor desc : agentNode.getAgent() + .listExecutionModuleDescriptors()) { + agentNode.addChild(new ExecutionModuleNode(agentNode, desc)); + } + + return agentNode.getChildren(); + } else if (parent instanceof TreeParent) { + return ((TreeParent) parent).getChildren(); + } else if (parent instanceof FlowNode) { + return new Object[0]; + } else { + log.trace(parent); + Object[] arr = { new AgentNode(slcAgent) }; + return arr; + } + } + + @Override + public Object getParent(Object node) { + // if (node instanceof TreeObject) { + // return ((TreeObject) node).getParent(); + // } + return null; + } + + @Override + public boolean hasChildren(Object parent) { + if (parent instanceof TreeParent && ((TreeParent) parent).isLoaded()) { + return ((TreeParent) parent).hasChildren(); + } else if (parent instanceof AgentNode) { + return true; + } else if (parent instanceof ExecutionModuleNode) { + return true; + } + return false; + } + + @Override + public void inputChanged(Viewer v, Object oldInput, Object newInput) { + } + + @Override + public void dispose() { + } + + @Override + public Object[] getElements(Object parent) { + return getChildren(parent); + } + + public void setSlcAgent(SlcAgent slcAgent) { + this.slcAgent = slcAgent; + } + + public class AgentNode extends TreeParent { + private final SlcAgent agent; + + public AgentNode(SlcAgent agent) { + super(agent.toString()); + this.agent = agent; + } + + public SlcAgent getAgent() { + return agent; + } + } + + public class ExecutionModuleNode extends TreeParent { + private final AgentNode agentNode; + private ExecutionModuleDescriptor descriptor; + private Map flowDescriptors; + + public ExecutionModuleNode(AgentNode agentNode, + ExecutionModuleDescriptor descriptor) { + super(descriptor.toString()); + this.agentNode = agentNode; + this.descriptor = descriptor; + + } + + public AgentNode getAgentNode() { + return agentNode; + } + + public ExecutionModuleDescriptor getDescriptor() { + return descriptor; + } + + public void cacheDescriptor(ExecutionModuleDescriptor descriptor) { + this.descriptor = descriptor; + + SortedMap folderNodes = new TreeMap(); + + // SortedMap directChildren = new TreeMap(); + + flowDescriptors = new HashMap(); + for (ExecutionFlowDescriptor fd : descriptor.getExecutionFlows()) { + if (log.isTraceEnabled()) + log + .trace("path=" + fd.getPath() + ", name=" + + fd.getName()); + + String path = fd.getPath(); + String name = fd.getName(); + + if (path == null || path.trim().equals("")) { + // directChildren.put(name, new FlowNode(name, this)); + addChild(new FlowNode(name, this)); + } else { + FolderNode folderNode = mkdirs(this, path, folderNodes); + folderNode.addChild(new FlowNode(name, this)); + } + + flowDescriptors.put(fd.getName(), fd); + } + // TODO: make it readonly + } + + protected FolderNode mkdirs(TreeParent root, String path, + SortedMap folderNodes) { + if (path.charAt(path.length() - 1) == '/') + path = path.substring(0, path.length() - 1); + + if (folderNodes.containsKey(path)) + return folderNodes.get(path); + + int lastIndx = path.lastIndexOf('/'); + String folderName = path.substring(lastIndx + 1); + String parentPath = path.substring(0, lastIndx); + + TreeParent parent; + if (parentPath.equals("")) + parent = root; + else + parent = mkdirs(root, parentPath, folderNodes); + FolderNode newFolder = new FolderNode(folderName); + parent.addChild(newFolder); + folderNodes.put(path, newFolder); + return newFolder; + } + + public Map getFlowDescriptors() { + return flowDescriptors; + } + + } + + public class FlowNode extends TreeObject { + private final String flowName; + private final ExecutionModuleNode executionModuleNode; + + public FlowNode(String flowName, ExecutionModuleNode executionModuleNode) { + super(flowName); + this.flowName = flowName; + this.executionModuleNode = executionModuleNode; + } + + public String getFlowName() { + return flowName; + } + + public ExecutionModuleNode getExecutionModuleNode() { + return executionModuleNode; + } + + } + + public class FolderNode extends TreeParent { + public FolderNode(String name) { + super(name); + } + + } +} diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java new file mode 100644 index 000000000..0f358c36a --- /dev/null +++ b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ExecutionModulesView.java @@ -0,0 +1,104 @@ +package org.argeo.slc.client.ui.views; + +import java.util.ArrayList; +import java.util.List; + +import org.argeo.slc.client.ui.ClientUiPlugin; +import org.argeo.slc.process.RealizedFlow; +import org.argeo.slc.process.SlcExecution; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IContentProvider; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.part.ViewPart; + +public class ExecutionModulesView extends ViewPart { + public static final String ID = "org.argeo.slc.client.ui.executionModulesView"; + + private TreeViewer viewer; + + private IContentProvider contentProvider; + + class ViewLabelProvider extends LabelProvider implements + ITableLabelProvider { + public String getColumnText(Object obj, int index) { + return getText(obj); + } + + public Image getColumnImage(Object obj, int index) { + return getImage(obj); + } + + public Image getImage(Object obj) { + if (obj instanceof ExecutionModulesContentProvider.AgentNode) + return ClientUiPlugin.getDefault().getImageRegistry().get("agent"); + else if (obj instanceof ExecutionModulesContentProvider.ExecutionModuleNode) + return ClientUiPlugin.getDefault().getImageRegistry().get( + "executionModule"); + else if (obj instanceof ExecutionModulesContentProvider.FolderNode) + return ClientUiPlugin.getDefault().getImageRegistry().get("folder"); + else if (obj instanceof ExecutionModulesContentProvider.FlowNode) + return ClientUiPlugin.getDefault().getImageRegistry().get("flow"); + else + return PlatformUI.getWorkbench().getSharedImages().getImage( + ISharedImages.IMG_OBJ_ELEMENT); + } + } + + public void createPartControl(Composite parent) { + viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); + viewer.setContentProvider(contentProvider); + viewer.setLabelProvider(new ViewLabelProvider()); + viewer.setInput(getViewSite()); + viewer.addDoubleClickListener(new IDoubleClickListener() { + + @Override + public void doubleClick(DoubleClickEvent evt) { + Object obj = ((IStructuredSelection) evt.getSelection()) + .getFirstElement(); + if (obj instanceof ExecutionModulesContentProvider.FlowNode) { + ExecutionModulesContentProvider.FlowNode fn = (ExecutionModulesContentProvider.FlowNode) obj; + + List realizedFlows = new ArrayList(); + RealizedFlow realizedFlow = new RealizedFlow(); + realizedFlow.setModuleName(fn.getExecutionModuleNode() + .getDescriptor().getName()); + realizedFlow.setModuleVersion(fn.getExecutionModuleNode() + .getDescriptor().getVersion()); + realizedFlow.setFlowDescriptor(fn.getExecutionModuleNode() + .getFlowDescriptors().get(fn.getFlowName())); + realizedFlows.add(realizedFlow); + + SlcExecution slcExecution = new SlcExecution(); + slcExecution.setRealizedFlows(realizedFlows); + fn.getExecutionModuleNode().getAgentNode().getAgent() + .runSlcExecution(slcExecution); + } + } + }); + } + + /** + * Passing the focus request to the viewer's control. + */ + public void setFocus() { + viewer.getControl().setFocus(); + } + + public TreeViewer getViewer() { + return viewer; + } + + public void setContentProvider(IContentProvider contentProvider) { + this.contentProvider = contentProvider; + } + +} \ No newline at end of file diff --git a/runtime/org.argeo.slc.core/.classpath b/runtime/org.argeo.slc.core/.classpath index 2d4929187..2ee785fbd 100644 --- a/runtime/org.argeo.slc.core/.classpath +++ b/runtime/org.argeo.slc.core/.classpath @@ -1,11 +1,14 @@ - - - - - - - - + + + + + + + diff --git a/runtime/org.argeo.slc.core/build.properties b/runtime/org.argeo.slc.core/build.properties index f0008122b..d58192aeb 100644 --- a/runtime/org.argeo.slc.core/build.properties +++ b/runtime/org.argeo.slc.core/build.properties @@ -9,3 +9,6 @@ source.. = src/main/java/,\ src/main/resources/,\ src/test/java/,\ src/test/resources/ +bin.includes = META-INF/spring.handlers,\ + META-INF/spring.schemas + diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java index e4e24ec81..7860feea6 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java @@ -300,15 +300,16 @@ public class DefaultExecutionFlowDescriptorConverter implements // Check whether name include path int lastIndex1 = name1.lastIndexOf('/'); + //log.debug(name1+", "+lastIndex1); if (!StringUtils.hasText(path1) && lastIndex1 >= 0) { - name1 = name1.substring(lastIndex1 + 1); path1 = name1.substring(0, lastIndex1); + name1 = name1.substring(lastIndex1 + 1); } int lastIndex2 = name2.lastIndexOf('/'); if (!StringUtils.hasText(path2) && lastIndex2 >= 0) { - name2 = name2.substring(lastIndex2 + 1); path2 = name2.substring(0, lastIndex2); + name2 = name2.substring(lastIndex2 + 1); } // Perform the actual comparison diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/runtime/DefaultAgent.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/runtime/DefaultAgent.java index ef2c52382..430b6bd97 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/runtime/DefaultAgent.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/runtime/DefaultAgent.java @@ -16,26 +16,41 @@ package org.argeo.slc.core.runtime; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.List; +import java.util.UUID; +import org.argeo.slc.SlcException; import org.argeo.slc.execution.ExecutionModuleDescriptor; import org.argeo.slc.execution.ExecutionModulesManager; import org.argeo.slc.process.SlcExecution; import org.argeo.slc.runtime.SlcAgent; +import org.argeo.slc.runtime.SlcAgentDescriptor; public class DefaultAgent implements SlcAgent { // private final static Log log = LogFactory.getLog(AbstractAgent.class); + private final SlcAgentDescriptor agentDescriptor; private ExecutionModulesManager modulesManager; + public DefaultAgent() { + try { + agentDescriptor = new SlcAgentDescriptor(); + agentDescriptor.setUuid(UUID.randomUUID().toString()); + agentDescriptor.setHost(InetAddress.getLocalHost().getHostName()); + } catch (UnknownHostException e) { + throw new SlcException("Unable to create agent descriptor.", e); + } + } + public void runSlcExecution(final SlcExecution slcExecution) { modulesManager.process(slcExecution); } public ExecutionModuleDescriptor getExecutionModuleDescriptor( String moduleName, String version) { - return modulesManager.getExecutionModuleDescriptor(moduleName, - version); + return modulesManager.getExecutionModuleDescriptor(moduleName, version); } public List listExecutionModuleDescriptors() { @@ -54,4 +69,16 @@ public class DefaultAgent implements SlcAgent { return modulesManager; } + protected SlcAgentDescriptor getAgentDescriptor() { + return agentDescriptor; + } + + public String getAgentUuid() { + return getAgentDescriptor().getUuid(); + } + + @Override + public String toString() { + return agentDescriptor.toString(); + } } diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/execution/ExecutionFlowDescriptor.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/execution/ExecutionFlowDescriptor.java index 654572722..575886d9a 100644 --- a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/execution/ExecutionFlowDescriptor.java +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/execution/ExecutionFlowDescriptor.java @@ -89,4 +89,10 @@ public class ExecutionFlowDescriptor implements Serializable { return name.hashCode(); } + @Override + public String toString() { + return (path != null && !path.trim().equals("") ? path + "/" : "") + + name; + } + } diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgent.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgent.java index 44c8ccb81..70c8f9c2f 100644 --- a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgent.java +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgent.java @@ -23,6 +23,9 @@ import org.argeo.slc.process.SlcExecution; /** A local agent, able to run SLC Execution locally. */ public interface SlcAgent { + /** Agent unique identifier */ + public String getAgentUuid(); + public ExecutionModuleDescriptor getExecutionModuleDescriptor( String moduleName, String version); diff --git a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java index 235b88042..f53982fcb 100644 --- a/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java +++ b/runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/runtime/SlcAgentDescriptor.java @@ -62,4 +62,9 @@ public class SlcAgentDescriptor implements Cloneable, Serializable { List modulesDescriptors) { this.moduleDescriptors = modulesDescriptors; } + + @Override + public String toString() { + return host + " #" + uuid; + } } diff --git a/runtime/org.argeo.slc.support.activemq/build.properties b/runtime/org.argeo.slc.support.activemq/build.properties index f0cc4f1b4..4453b0d9c 100644 --- a/runtime/org.argeo.slc.support.activemq/build.properties +++ b/runtime/org.argeo.slc.support.activemq/build.properties @@ -1,2 +1,3 @@ source.. = src/main/java/,\ - src/main/resources/ + src/main/resources/,\ + . diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java index f5472b0e5..fecb5178b 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgent.java @@ -16,10 +16,7 @@ package org.argeo.slc.jms; -import java.net.InetAddress; -import java.net.UnknownHostException; import java.util.List; -import java.util.UUID; import javax.jms.Destination; import javax.jms.JMSException; @@ -50,32 +47,21 @@ public class JmsAgent extends DefaultAgent implements InitializingBean, private final static Log log = LogFactory.getLog(JmsAgent.class); - private final SlcAgentDescriptor agentDescriptor; private JmsTemplate jmsTemplate; private Destination agentRegister; private Destination agentUnregister; private Destination responseDestination; - public JmsAgent() { - try { - agentDescriptor = new SlcAgentDescriptor(); - agentDescriptor.setUuid(UUID.randomUUID().toString()); - agentDescriptor.setHost(InetAddress.getLocalHost().getHostName()); - } catch (UnknownHostException e) { - throw new SlcException("Unable to create agent descriptor.", e); - } - } - public void afterPropertiesSet() throws Exception { try { - jmsTemplate.convertAndSend(agentRegister, agentDescriptor); - log.info("Agent #" + agentDescriptor.getUuid() + " registered to " + jmsTemplate.convertAndSend(agentRegister, getAgentDescriptor()); + log.info("Agent #" + getAgentUuid() + " registered to " + agentRegister); } catch (JmsException e) { log .warn("Could not register agent " - + agentDescriptor.getUuid() + + getAgentDescriptor().getUuid() + " to server: " + e.getMessage() + ". The agent will stay offline but will keep listening for a ping all sent by server."); @@ -86,12 +72,12 @@ public class JmsAgent extends DefaultAgent implements InitializingBean, public void destroy() throws Exception { try { - jmsTemplate.convertAndSend(agentUnregister, agentDescriptor); - log.info("Agent #" + agentDescriptor.getUuid() - + " unregistered from " + agentUnregister); + jmsTemplate.convertAndSend(agentUnregister, getAgentDescriptor()); + log.info("Agent #" + getAgentUuid() + " unregistered from " + + agentUnregister); } catch (JmsException e) { - log.warn("Could not unregister agent " + agentDescriptor.getUuid() - + ": " + e.getMessage()); + log.warn("Could not unregister agent " + getAgentUuid() + ": " + + e.getMessage()); if (log.isTraceEnabled()) log.debug("Original error.", e); } @@ -106,8 +92,7 @@ public class JmsAgent extends DefaultAgent implements InitializingBean, } public String getMessageSelector() { - String messageSelector = "slc_agentId='" + agentDescriptor.getUuid() - + "'"; + String messageSelector = "slc_agentId='" + getAgentUuid() + "'"; // if (log.isDebugEnabled()) // log.debug("Message selector: " + messageSelector); return messageSelector; @@ -127,12 +112,12 @@ public class JmsAgent extends DefaultAgent implements InitializingBean, final Destination destinationSend; if (QUERY_PING_ALL.equals(query)) { ReferenceList refList = (ReferenceList) convertFrom(message); - if (!refList.getReferences().contains(agentDescriptor.getUuid())) { - response = agentDescriptor; + if (!refList.getReferences().contains(getAgentUuid())) { + response = getAgentDescriptor(); destinationSend = agentRegister; - log.info("Agent #" + agentDescriptor.getUuid() - + " registering to " + agentRegister - + " in reply to a " + QUERY_PING_ALL + " query"); + log.info("Agent #" + getAgentUuid() + " registering to " + + agentRegister + " in reply to a " + QUERY_PING_ALL + + " query"); } else { return; } @@ -151,7 +136,7 @@ public class JmsAgent extends DefaultAgent implements InitializingBean, messageToSend.setStringProperty(PROPERTY_QUERY, query); messageToSend.setStringProperty( MsgConstants.PROPERTY_SLC_AGENT_ID, - agentDescriptor.getUuid()); + getAgentUuid()); messageToSend.setJMSCorrelationID(correlationId); return messageToSend; } @@ -172,7 +157,7 @@ public class JmsAgent extends DefaultAgent implements InitializingBean, List lst = listExecutionModuleDescriptors(); SlcAgentDescriptor agentDescriptorToSend = new SlcAgentDescriptor( - agentDescriptor); + getAgentDescriptor()); agentDescriptorToSend.setModuleDescriptors(lst); return agentDescriptorToSend; } else if ("runSlcExecution".equals(query)) { @@ -183,9 +168,9 @@ public class JmsAgent extends DefaultAgent implements InitializingBean, } }.start(); return ExecutionAnswer.ok("Execution started on agent " - + agentDescriptor.getUuid()); + + getAgentUuid()); } else if ("ping".equals(query)) { - return ExecutionAnswer.ok("Agent " + agentDescriptor.getUuid() + return ExecutionAnswer.ok("Agent " + getAgentUuid() + " is alive."); } else { throw new SlcException("Unsupported query " + query); diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java index 2ab9a38f8..2230cb876 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAgentProxy.java @@ -53,6 +53,10 @@ public class JmsAgentProxy implements SlcAgent { this.jmsTemplate = jmsTemplate; } + public String getAgentUuid() { + return agentUuid; + } + public ExecutionModuleDescriptor getExecutionModuleDescriptor( final String moduleName, final String version) { return (ExecutionModuleDescriptor) sendReceive(new AgentMC( -- 2.39.2