pione 0.4.2 → 0.5.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +1 -1
  3. data/History.txt +6 -0
  4. data/example/ActionError/ActionError.action.md +11 -0
  5. data/example/ActionError/ActionError.pione +6 -3
  6. data/example/ActionError/ActionError.pnml +86 -0
  7. data/example/ActionError/Package.pione +2 -0
  8. data/example/ActionError/pione-package.json +5 -1
  9. data/example/CTFCorrection/CTFCorrection.action.md +46 -0
  10. data/example/CTFCorrection/CTFCorrection.pione +19 -41
  11. data/example/CTFCorrection/CTFCorrection.pnml +839 -0
  12. data/example/CTFCorrection/Package.pione +1 -0
  13. data/example/CTFCorrection/Params.pione +21 -0
  14. data/example/CTFCorrection/pione-package.json +20 -0
  15. data/example/ChildPackage/ChildPackage.pione +8 -0
  16. data/example/ChildPackage/pione-package.json +20 -0
  17. data/example/CountChar/CountChar.pione +31 -0
  18. data/example/CountChar/CountChar.pnml +239 -0
  19. data/example/CountChar/Main.pione +6 -26
  20. data/example/CountChar/Main.pnml +32 -100
  21. data/example/CountChar/Package.pione +1 -0
  22. data/example/CountChar/pione-package.json +3 -1
  23. data/example/DeferredChoice/DeferredChoice.action.md +46 -0
  24. data/example/DeferredChoice/DeferredChoice.pione +2 -7
  25. data/example/DeferredChoice/DeferredChoice.pnml +371 -0
  26. data/example/DeferredChoice/Package.pione +4 -0
  27. data/example/DeferredChoice/pione-package.json +7 -3
  28. data/example/DeferredChoiceWithPage/DeferredChoiceWithPage.action.md +34 -0
  29. data/example/DeferredChoiceWithPage/DefferredChoiceWithPage.pnml +371 -0
  30. data/example/DeferredChoiceWithPage/Package.pione +2 -0
  31. data/example/FeatureExample/FeatureExample.action.md +7 -0
  32. data/example/FeatureExample/FeatureExample.pione +7 -4
  33. data/example/FeatureExample/FeatureExample.pnml +86 -0
  34. data/example/FeatureExample/Package.pione +1 -0
  35. data/example/FeatureExample/pione-package.json +4 -0
  36. data/example/Fib/Fib.action.md +33 -0
  37. data/example/Fib/Fib.pnml +208 -0
  38. data/example/Fib/FibN.pnml +807 -0
  39. data/example/Fib/Package.pione +6 -0
  40. data/example/HelloWorld/HelloWorld.action.md +7 -0
  41. data/example/HelloWorld/HelloWorld.pione +6 -2
  42. data/example/HelloWorld/HelloWorld.pnml +86 -0
  43. data/example/HelloWorld/Package.pione +2 -0
  44. data/example/HelloWorld/pione-package.json +5 -1
  45. data/example/Interaction/Interaction.action.md +21 -0
  46. data/example/Interaction/Interaction.pnml +89 -0
  47. data/example/Interaction/Package.pione +2 -0
  48. data/example/LoopByTouch/LoopByTouch.pione +32 -12
  49. data/example/LoopByTouch/LoopByTouch.pnml +575 -0
  50. data/example/LoopByTouch/Package.pione +3 -0
  51. data/example/LoopByTouch/PairLoop.pione +6 -7
  52. data/example/LoopByTouch/PairLoop.pnml +188 -0
  53. data/example/LoopByTouch/SingleLoop.pione +6 -0
  54. data/example/LoopByTouch/SingleLoop.pnml +86 -0
  55. data/example/LoopByTouch/TripletLoop.pione +12 -13
  56. data/example/LoopByTouch/TripletLoop.pnml +239 -0
  57. data/example/LoopByTouch/pione-package.json +7 -3
  58. data/example/LucasNumber/LucasNumber.action.md +25 -0
  59. data/example/LucasNumber/LucasNumber.pnml +244 -0
  60. data/example/LucasNumber/LucasNumberN.pnml +1719 -0
  61. data/example/LucasNumber/Package.pione +2 -0
  62. data/example/MakePair/MakePair.pione +8 -10
  63. data/example/MakePair/MakePair.pnml +1141 -0
  64. data/example/MakePair/Package.pione +2 -0
  65. data/example/MakePair/pione-package.json +7 -3
  66. data/example/MakePair/scenario/case1/pione-scenario.json +30 -30
  67. data/example/MakePair/scenario/case2/pione-scenario.json +10 -10
  68. data/example/MakePair/scenario/case3/pione-scenario.json +28 -28
  69. data/example/OddSelector/OddSelector.pione +8 -8
  70. data/example/OddSelector/OddSelector.pnml +401 -0
  71. data/example/OddSelector/Package.pione +2 -0
  72. data/example/OddSelector/pione-package.json +4 -0
  73. data/example/OddSelector/scenario/pione-scenario.json +8 -8
  74. data/example/ParentPackage/ParentPackage.pione +13 -0
  75. data/example/ParentPackage/pione-package.json +18 -0
  76. data/example/PegasusWMS/Merge/Package.pione +2 -0
  77. data/example/PegasusWMS/Merge/PegasusWMSMerge.action.md +17 -0
  78. data/example/PegasusWMS/Merge/{Merge.pione → PegasusWMSMerge.pione} +9 -10
  79. data/example/PegasusWMS/Merge/PegasusWMSMerge.pnml +217 -0
  80. data/example/PegasusWMS/Merge/pione-package.json +6 -2
  81. data/example/PegasusWMS/Pipeline/Package.pione +2 -0
  82. data/example/PegasusWMS/Pipeline/PegasusWMSPipeline.action.md +17 -0
  83. data/example/PegasusWMS/Pipeline/{Pipeline.pione → PegasusWMSPipeline.pione} +7 -9
  84. data/example/PegasusWMS/Pipeline/PegasusWMSPipeline.pnml +137 -0
  85. data/example/PegasusWMS/Pipeline/pione-package.json +6 -2
  86. data/example/PegasusWMS/Split/Package.pione +2 -0
  87. data/example/PegasusWMS/Split/PegasusWMSSplit.action.md +19 -0
  88. data/example/PegasusWMS/Split/{Split.pione → PegasusWMSSplit.pione} +9 -10
  89. data/example/PegasusWMS/Split/PegasusWMSSplit.pnml +293 -0
  90. data/example/PegasusWMS/Split/pione-package.json +6 -2
  91. data/example/ScoreAggregation/Package.pione +2 -0
  92. data/example/ScoreAggregation/ScoreAggregation.action.md +56 -0
  93. data/example/ScoreAggregation/ScoreAggregation.pione +37 -76
  94. data/example/ScoreAggregation/ScoreAggregation.pnml +1221 -0
  95. data/example/ScoreAggregation/pione-package.json +6 -2
  96. data/example/ScoreAggregation/scenario/case1/pione-scenario.json +21 -21
  97. data/example/SelectRuleByParam/Package.pione +2 -0
  98. data/example/SelectRuleByParam/SelectRuleByParam.action.md +19 -0
  99. data/example/SelectRuleByParam/SelectRuleByParam.pnml +388 -0
  100. data/example/SequentialParameter/Package.pione +2 -0
  101. data/example/SequentialParameter/SequentialParameter.pione +9 -3
  102. data/example/SequentialParameter/SequentialParameter.pnml +140 -0
  103. data/example/SequentialParameter/pione-package.json +19 -0
  104. data/example/SerialProcessing/A.pione +25 -0
  105. data/example/SerialProcessing/A.pnml +395 -0
  106. data/example/SerialProcessing/B.pione +25 -0
  107. data/example/SerialProcessing/B.pnml +395 -0
  108. data/example/SerialProcessing/Package.pione +2 -0
  109. data/example/SerialProcessing/SerialProcessing.pione +9 -60
  110. data/example/SerialProcessing/SerialProcessing.pnml +160 -0
  111. data/example/SerialProcessing/pione-package.json +7 -1
  112. data/example/SieveOfEratosthenes/CreateUndeterminedNumbers.pnml +157 -0
  113. data/example/SieveOfEratosthenes/Package.pione +4 -0
  114. data/example/SieveOfEratosthenes/Sieve.pnml +1493 -0
  115. data/example/SieveOfEratosthenes/SieveOfEratosthenes.pnml +174 -0
  116. data/example/SingleParticlesWithRef/Create3dinfo.pnml +342 -0
  117. data/example/SingleParticlesWithRef/Package.pione +42 -0
  118. data/example/SingleParticlesWithRef/SingleParticlesWithRef.action.md +34 -0
  119. data/example/SingleParticlesWithRef/SingleParticlesWithRef.pnml +404 -0
  120. data/example/SingleParticlesWithRef/{Makefile → misc/Makefile} +0 -0
  121. data/example/SingleParticlesWithRef/{SingleParticlesWithRef.Display2.pione → misc/SingleParticlesWithRef.Display2.pione} +0 -0
  122. data/example/SingleParticlesWithRef/{SingleParticlesWithRef.Makefile → misc/SingleParticlesWithRef.Makefile} +0 -0
  123. data/example/SingleParticlesWithRef/{SingleParticlesWithRefFull.pione → misc/SingleParticlesWithRefFull.pione} +0 -0
  124. data/example/Sum/CalcEachLine.pione +30 -0
  125. data/example/Sum/CalcEachLine.pnml +327 -0
  126. data/example/Sum/Package.pione +2 -0
  127. data/example/Sum/Sum.action.md +35 -0
  128. data/example/Sum/Sum.pione +9 -35
  129. data/example/Sum/Sum.pnml +191 -0
  130. data/example/Sum/pione-package.json +5 -0
  131. data/example/Touch/Package.pione +2 -0
  132. data/example/Touch/Touch.pione +8 -2
  133. data/example/Touch/Touch.pnml +89 -0
  134. data/example/Touch/pione-package.json +4 -0
  135. data/example/WorkflowPatterns/01_Sequence/Package.pione +2 -0
  136. data/example/WorkflowPatterns/01_Sequence/Sequence.pione +9 -9
  137. data/example/WorkflowPatterns/01_Sequence/Sequence.pnml +191 -0
  138. data/example/WorkflowPatterns/01_Sequence/pione-package.json +19 -0
  139. data/example/WorkflowPatterns/02_PrallelSplit/Package.pione +2 -0
  140. data/example/WorkflowPatterns/02_PrallelSplit/ParallelSplit.pione +12 -12
  141. data/example/WorkflowPatterns/02_PrallelSplit/ParallelSplit.pnml +265 -0
  142. data/example/WorkflowPatterns/02_PrallelSplit/pione-package.json +19 -0
  143. data/example/WorkflowPatterns/03_Synchronization/Package.pione +2 -0
  144. data/example/WorkflowPatterns/03_Synchronization/Synchronization.pione +12 -13
  145. data/example/WorkflowPatterns/03_Synchronization/Synchronization.pnml +273 -0
  146. data/example/WorkflowPatterns/03_Synchronization/pione-package.json +19 -0
  147. data/example/WorkflowPatterns/04_ExclusiveChoice/ExclusiveChoice.pione +15 -22
  148. data/example/WorkflowPatterns/04_ExclusiveChoice/ExclusiveChoice.pnml +533 -0
  149. data/example/WorkflowPatterns/04_ExclusiveChoice/Package.pione +4 -0
  150. data/example/WorkflowPatterns/04_ExclusiveChoice/pione-package.json +19 -0
  151. data/example/WorkflowPatterns/05_SimpleMerge/Package.pione +4 -0
  152. data/example/WorkflowPatterns/05_SimpleMerge/SimpleMerge.pione +10 -18
  153. data/example/WorkflowPatterns/05_SimpleMerge/SimpleMerge.pnml +431 -0
  154. data/example/WorkflowPatterns/05_SimpleMerge/pione-package.json +19 -0
  155. data/example/WorkflowPatterns/06_MultiChoice/MultiChoice.pione +20 -28
  156. data/example/WorkflowPatterns/06_MultiChoice/MultiChoice.pnml +797 -0
  157. data/example/WorkflowPatterns/06_MultiChoice/Package.pione +5 -0
  158. data/example/WorkflowPatterns/06_MultiChoice/pione-package.json +19 -0
  159. data/example/WorkflowPatterns/07_StructuredSynchronizingMerge/Package.pione +5 -0
  160. data/example/WorkflowPatterns/07_StructuredSynchronizingMerge/StructuredSynchronizingMerge.pnml +668 -0
  161. data/example/WorkflowPatterns/08_MultiMerge/MultiMerge.pione +9 -20
  162. data/example/WorkflowPatterns/08_MultiMerge/MultiMerge.pnml +551 -0
  163. data/example/WorkflowPatterns/08_MultiMerge/Package.pione +4 -0
  164. data/example/WorkflowPatterns/08_MultiMerge/pione-package.json +19 -0
  165. data/example/WorkflowPatterns/11_ImplicitTermination/ImplicitTermination.pione +9 -17
  166. data/example/WorkflowPatterns/11_ImplicitTermination/ImplicitTermination.pnml +188 -0
  167. data/example/WorkflowPatterns/11_ImplicitTermination/Package.pione +2 -0
  168. data/example/WorkflowPatterns/11_ImplicitTermination/pione-package.json +19 -0
  169. data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/MultipleInstancesWithoutSynchronization.pione +11 -11
  170. data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/MultipleInstancesWithoutSynchronization.pnml +319 -0
  171. data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/Package.pione +4 -0
  172. data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/pione-package.json +19 -0
  173. data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/MultipleInstancesWithDesignTimeKnowledge.pione +11 -11
  174. data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/MultipleInstancesWithDesignTimeKnowledge.pnml +319 -0
  175. data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/Package.pione +2 -0
  176. data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/pione-package.json +19 -0
  177. data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/MultipleInstancesWithRunTimeKnowledge.pione +14 -17
  178. data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/MultipleInstancesWithRunTimeKnowledge.pnml +355 -0
  179. data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/Package.pione +4 -0
  180. data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/pione-package.json +19 -0
  181. data/example/WorkflowPatterns/33_GeneralizedANDJoin/GeneralizedANDJoin.pione +9 -10
  182. data/example/WorkflowPatterns/33_GeneralizedANDJoin/GeneralizedANDJoin.pnml +409 -0
  183. data/example/WorkflowPatterns/33_GeneralizedANDJoin/Package.pione +2 -0
  184. data/example/WorkflowPatterns/33_GeneralizedANDJoin/pione-package.json +19 -0
  185. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/A.pione +34 -0
  186. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/A.pnml +570 -0
  187. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/LocalSynchronizingMerge.pione +36 -70
  188. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/LocalSynchronizingMerge.pnml +854 -0
  189. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/Package.pione +5 -0
  190. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/pione-package.json +20 -0
  191. data/example/WorkflowPatterns/38_GeneralSynchronizingMerge/GeneralSynchronizingMerge.pnml +1003 -0
  192. data/example/WorkflowPatterns/38_GeneralSynchronizingMerge/Package.pione +6 -0
  193. data/example/WorkflowPatterns/41_ThreadMerge/A.pnml +429 -0
  194. data/example/WorkflowPatterns/41_ThreadMerge/A1.pnml +141 -0
  195. data/example/WorkflowPatterns/41_ThreadMerge/Package.pione +2 -0
  196. data/example/WorkflowPatterns/41_ThreadMerge/ThreadMerge.pnml +205 -0
  197. data/example/WorkflowPatterns/42_ThreadSplit/Package.pione +2 -0
  198. data/example/WorkflowPatterns/42_ThreadSplit/ThreadSplit.pnml +217 -0
  199. data/lib/pione/agent/job-manager.rb +4 -3
  200. data/lib/pione/agent/task-worker.rb +2 -7
  201. data/lib/pione/command.rb +1 -0
  202. data/lib/pione/command/basic-command.rb +3 -1
  203. data/lib/pione/command/command-exception.rb +14 -0
  204. data/lib/pione/command/pione-action-exec.rb +4 -1
  205. data/lib/pione/command/pione-clean.rb +13 -6
  206. data/lib/pione/command/pione-client.rb +5 -5
  207. data/lib/pione/command/pione-compile.rb +1 -1
  208. data/lib/pione/command/pione-log-format.rb +1 -1
  209. data/lib/pione/command/pione-package-add.rb +1 -1
  210. data/lib/pione/command/pione-package-build.rb +87 -32
  211. data/lib/pione/command/pione-package-remove.rb +117 -0
  212. data/lib/pione/command/pione-package.rb +1 -0
  213. data/lib/pione/command/spawner.rb +12 -3
  214. data/lib/pione/lang/boolean.rb +1 -1
  215. data/lib/pione/lang/common-parser.rb +5 -3
  216. data/lib/pione/lang/context-parser.rb +8 -2
  217. data/lib/pione/lang/context-transformer.rb +13 -3
  218. data/lib/pione/lang/context.rb +20 -2
  219. data/lib/pione/lang/data-expr.rb +1 -1
  220. data/lib/pione/lang/declaration-parser.rb +18 -4
  221. data/lib/pione/lang/declaration-transformer.rb +1 -1
  222. data/lib/pione/lang/declaration.rb +5 -3
  223. data/lib/pione/lang/definition.rb +1 -0
  224. data/lib/pione/lang/environment.rb +37 -2
  225. data/lib/pione/lang/expr.rb +10 -12
  226. data/lib/pione/lang/feature-expr.rb +1 -1
  227. data/lib/pione/lang/float.rb +1 -1
  228. data/lib/pione/lang/integer.rb +1 -1
  229. data/lib/pione/lang/keyed-sequence.rb +5 -5
  230. data/lib/pione/lang/lang-exception.rb +9 -5
  231. data/lib/pione/lang/literal-parser.rb +2 -2
  232. data/lib/pione/lang/literal-transformer.rb +3 -0
  233. data/lib/pione/lang/message.rb +3 -3
  234. data/lib/pione/lang/ordinal-sequence.rb +1 -1
  235. data/lib/pione/lang/package-expr.rb +1 -1
  236. data/lib/pione/lang/parameters.rb +1 -1
  237. data/lib/pione/lang/pione-method.rb +16 -16
  238. data/lib/pione/lang/rule-expr.rb +6 -1
  239. data/lib/pione/lang/sequence.rb +8 -3
  240. data/lib/pione/lang/string.rb +1 -1
  241. data/lib/pione/lang/ticket-expr.rb +1 -1
  242. data/lib/pione/lang/type.rb +17 -8
  243. data/lib/pione/lang/variable.rb +4 -1
  244. data/lib/pione/literate-action.rb +1 -2
  245. data/lib/pione/literate-action/document.rb +1 -1
  246. data/lib/pione/literate-action/handler.rb +22 -7
  247. data/lib/pione/literate-action/{parser.rb → markdown-parser.rb} +2 -1
  248. data/lib/pione/log/domain-log.rb +1 -1
  249. data/lib/pione/model/task-worker-broker-model.rb +1 -1
  250. data/lib/pione/package/package-database.rb +16 -2
  251. data/lib/pione/package/package-exception.rb +1 -1
  252. data/lib/pione/package/package-handler.rb +11 -7
  253. data/lib/pione/package/package-info.rb +13 -7
  254. data/lib/pione/package/package-scanner.rb +1 -1
  255. data/lib/pione/package/scenario-info.rb +2 -2
  256. data/lib/pione/pnml.rb +6 -0
  257. data/lib/pione/pnml/compiler.rb +329 -95
  258. data/lib/pione/pnml/declaration-extractor.rb +90 -0
  259. data/lib/pione/pnml/input-merge-complement.rb +17 -11
  260. data/lib/pione/pnml/input-parallelization-complement.rb +10 -6
  261. data/lib/pione/pnml/input-reduction.rb +5 -5
  262. data/lib/pione/pnml/invalid-arc-elimination.rb +2 -2
  263. data/lib/pione/pnml/io-expansion.rb +9 -5
  264. data/lib/pione/pnml/isolated-element-elimination.rb +2 -2
  265. data/lib/pione/pnml/label-extractor.rb +258 -0
  266. data/lib/pione/pnml/net-rewriter.rb +6 -4
  267. data/lib/pione/pnml/output-decomposition-complement.rb +12 -7
  268. data/lib/pione/pnml/output-reduction.rb +11 -5
  269. data/lib/pione/pnml/output-synchronization-complement.rb +11 -7
  270. data/lib/pione/pnml/parser.rb +106 -0
  271. data/lib/pione/pnml/pione-model.rb +685 -230
  272. data/lib/pione/pnml/pnml-model.rb +73 -41
  273. data/lib/pione/pnml/ticket-instantiation.rb +42 -0
  274. data/lib/pione/rule-engine/action-handler.rb +212 -135
  275. data/lib/pione/rule-engine/basic-handler.rb +29 -3
  276. data/lib/pione/rule-engine/engine-exception.rb +10 -6
  277. data/lib/pione/system/status.rb +12 -6
  278. data/lib/pione/version.rb +1 -1
  279. data/lib/rootage/help.md.erb +45 -0
  280. data/lib/rootage/help.rb +1 -0
  281. data/lib/rootage/scenario.rb +20 -2
  282. data/misc/pione-completion.bash +15 -5
  283. data/misc/pione-completion.zsh +16 -6
  284. data/test/command/spec_pione-client.rb +60 -60
  285. data/test/lang/data/context-parser.yml +12 -1
  286. data/test/lang/spec_pione-method.rb +7 -6
  287. data/test/literate-action/spec_handler.rb +19 -13
  288. data/test/literate-action/{spec_parser.rb → spec_markdown-parser.rb} +3 -3
  289. data/test/log/spec_message-log-receiver.rb +1 -1
  290. data/test/package/spec_package-info.rb +1 -1
  291. data/test/pnml/spec_input-merge-complement.rb +4 -2
  292. data/test/pnml/spec_input-parallelization-complement.rb +4 -2
  293. data/test/pnml/spec_input-reduction.rb +8 -4
  294. data/test/pnml/spec_invalid-arc-elimination.rb +2 -1
  295. data/test/pnml/spec_io-expansion.rb +4 -2
  296. data/test/pnml/spec_isolated-element-elimination.rb +2 -1
  297. data/test/pnml/spec_label-extractor.rb +100 -0
  298. data/test/pnml/spec_output-decomposition-complement.rb +4 -2
  299. data/test/pnml/spec_output-reduction.rb +8 -4
  300. data/test/pnml/spec_output-synchronization-complement.rb +4 -2
  301. data/test/pnml/spec_pione-element.rb +116 -37
  302. data/test/pnml/spec_pnml-element.rb +32 -8
  303. data/test/rule-engine/spec_action-handler.rb +12 -20
  304. metadata +159 -16
  305. data/example/CTFCorrection/package.yml +0 -1
  306. data/example/DeferredChoice/bin/ui.xml +0 -28
@@ -58,6 +58,7 @@ module Pione
58
58
  @request_from = @tuple_space.attribute("request_from")
59
59
  @session_id = @tuple_space.attribute("session_id")
60
60
  @client_ui = @tuple_space.attribute("client_ui")
61
+ super
61
62
  end
62
63
 
63
64
  # Take a task and turn it to foreground.
@@ -92,13 +93,7 @@ module Pione
92
93
 
93
94
  # start the engine
94
95
  @execution_thread = Thread.new do
95
- begin
96
- engine.handle
97
- rescue RuleEngine::RuleExecutionError, Lang::LangError => e
98
- user_message("ERROR: " + e.message, 0, "info", :red)
99
- write(TupleSpace::CommandTuple.new(name: "terminate", args: [System::Status.error(e.message)]))
100
- terminate
101
- end
96
+ engine.handle || terminate
102
97
  end
103
98
 
104
99
  # spawn child task worker if flow
data/lib/pione/command.rb CHANGED
@@ -25,6 +25,7 @@ module Pione
25
25
  require 'pione/command/pione-package-build'
26
26
  require 'pione/command/pione-package-show'
27
27
  require 'pione/command/pione-package-update'
28
+ require 'pione/command/pione-package-remove'
28
29
  end
29
30
  end
30
31
  end
@@ -37,7 +37,9 @@ module Pione
37
37
 
38
38
  # Exit the running command and return failure status. Note that this
39
39
  # method enters termination phase before it exits.
40
- def abort(msg_or_exception, pos=caller(1).first)
40
+ def abort(msg_or_exception, option={})
41
+ pos = option[:pos] || caller(1).first
42
+
41
43
  # hide the message because some option errors are meaningless
42
44
  if msg_or_exception.is_a?(HideableOptionError)
43
45
  Log::Debug.system(msg_or_exception.message, pos)
@@ -4,6 +4,20 @@ module Pione
4
4
 
5
5
  # SpawnError is raised when the command failed to run.
6
6
  class SpawnError < CommandException
7
+ # Create a spawn error caused that child process is dead
8
+ #
9
+ # @param caller [String]
10
+ # caller name
11
+ # @param callee [String]
12
+ # callee name
13
+ # @param argv [Array<String>]
14
+ # arguments of process call
15
+ # @return [SpawnError]
16
+ # a spawn error
17
+ def self.child_process_is_dead(caller, callee, argv)
18
+ new(caller, callee, argv, "child process is dead")
19
+ end
20
+
7
21
  def initialize(caller, callee, argv, cause)
8
22
  @caller = caller
9
23
  @callee = callee
@@ -68,7 +68,10 @@ module Pione
68
68
 
69
69
  item.process do
70
70
  if action = LiterateAction::Document.load(model[:location]).find(model[:name])
71
- action.execute(model[:domain_info], model[:directory])
71
+ action.execute(
72
+ domain_dump: model[:domain_dump],
73
+ chdir: model[:directory] || Location[Global.pwd]
74
+ )
72
75
  else
73
76
  cmd.abort("The action not found.")
74
77
  end
@@ -115,10 +115,15 @@ module Pione
115
115
  # remove PPG packages
116
116
  item.process do
117
117
  Global.ppg_package_cache_directory.each_entry do |entry|
118
- unless model[:db].has_digest?(Package::PackageFilename.parse(entry.basename).digest)
119
- if delete?(entry)
120
- entry.delete
118
+ begin
119
+ digest = Package::PackageFilename.parse(entry.basename).digest
120
+ unless model[:db].has_digest?(digest)
121
+ if delete?(entry)
122
+ entry.delete
123
+ end
121
124
  end
125
+ rescue
126
+ # do nothing
122
127
  end
123
128
  end
124
129
  end
@@ -141,9 +146,11 @@ module Pione
141
146
  item.process do
142
147
  test(type?("profile"))
143
148
 
144
- Location[Global.profile_report_directory].each_entry do |entry|
145
- if delete?(entry)
146
- entry.delete
149
+ if (Location[Global.profile_report_directory].exist?)
150
+ Location[Global.profile_report_directory].each_entry do |entry|
151
+ if delete?(entry)
152
+ entry.delete
153
+ end
147
154
  end
148
155
  end
149
156
  end
@@ -102,8 +102,8 @@ module Pione
102
102
  item.long = '--params="{Var:1,...}"'
103
103
  item.desc = "Set user parameters"
104
104
 
105
- item.assign do |str|
106
- model[:params].merge(Util.parse_param_set(str))
105
+ item.assign do |params|
106
+ model[:params].merge(params)
107
107
  end
108
108
 
109
109
  item.exception(Parslet::ParseFailed) do |e, str|
@@ -138,7 +138,7 @@ module Pione
138
138
  item.arg = '[SCENARIO]'
139
139
  item.desc = 'rehearse the scenario'
140
140
 
141
- item.assign {|val| not(val.nil?) and val.size != 0 ? val : :anything}
141
+ item.assign {|val| (not(val.nil?) and val.size != 0) ? val : :anything}
142
142
  end
143
143
 
144
144
  option(:timeout) do |item|
@@ -352,7 +352,7 @@ module Pione
352
352
  item.assign(:job_terminator) do
353
353
  Agent::JobTerminator.start(model[:tuple_space]) do |status|
354
354
  if status.error?
355
- cmd.abort("pione-client catched the error: %s" % status.message)
355
+ cmd.abort("pione-client catched the error: %s" % status.message, exception: status.exception)
356
356
  else
357
357
  cmd.terminate
358
358
  end
@@ -535,7 +535,7 @@ module Pione
535
535
 
536
536
  pscenario = test(model[:package_handler].find_scenario(model[:rehearse]))
537
537
 
538
- errors = pscenario.validate(model[:base_location])
538
+ errors = pscenario.validate(model[:base_location] + "output")
539
539
  if errors.empty?
540
540
  Log::SystemLog.info "Rehearsal Result: Succeeded"
541
541
  else
@@ -74,7 +74,7 @@ module Pione
74
74
 
75
75
  item.assign(:literate_action) do
76
76
  if document = model[:literate_action_document]
77
- LiterateAction::Parser.parse(Location[document].read)
77
+ LiterateAction::MarkdownParser.parse(Location[document].read)
78
78
  end
79
79
  end
80
80
  end
@@ -92,7 +92,7 @@ module Pione
92
92
  else
93
93
  model[:trace_filters] << Proc.new do |trace|
94
94
  trace.attributes.include?(XES.string("pione:traceType", "agent_activity")) and
95
- model[:agent_types].includes?(trace.events.first.org_resource)
95
+ model[:agent_types].include?(trace.events.first.org_resource)
96
96
  end
97
97
  end
98
98
  end
@@ -126,7 +126,7 @@ module Pione
126
126
  item.process do
127
127
  arg = {name: model[:name], info: model[:info]}
128
128
  Log::SystemLog.info(
129
- 'Package "%{name}"%{info} was added to package database' % arg
129
+ 'Package "%{name}"%{info} has been added to package database.' % arg
130
130
  )
131
131
  end
132
132
  end
@@ -63,15 +63,14 @@ module Pione
63
63
  #
64
64
 
65
65
  phase(:setup) do |seq|
66
- seq << :source_locations
66
+ seq << :source_location
67
67
  end
68
68
 
69
- setup(:source_locations) do |item|
69
+ setup(:source_location) do |item|
70
70
  item.desc = "Setup source locations"
71
71
 
72
- item.assign(:source_locations) do
73
- source = model[:source].address
74
- [Location[git: source], Location[data: source]]
72
+ item.assign(:source_location) do
73
+ Location[data: model[:source].address]
75
74
  end
76
75
  end
77
76
 
@@ -87,49 +86,108 @@ module Pione
87
86
  item.desc = "Build a PPG package"
88
87
 
89
88
  item.process do
90
- model[:source_locations].each do |location|
91
- if ppg = try_to_archive(location)
92
- Log::SystemLog.info('Package %s has been built successfully.' % ppg.address)
93
- cmd.terminate
94
- end
89
+ begin
90
+ ppg = build_package(model[:source_location])
91
+ Log::SystemLog.info('Package %s has been built successfully.' % ppg.address)
92
+ cmd.terminate
93
+ rescue => e
94
+ cmd.abort("PIONE has failed to build a package of %s." % model[:source_location].address, exception: e)
95
95
  end
96
-
97
- cmd.abort("Package build has failed.")
98
96
  end
99
97
  end
100
98
  end
101
99
 
102
100
  # `PionePackageBuildContext` is a context for `pione package build`.
103
101
  class PionePackageBuildContext < Rootage::CommandContext
104
- def try_to_archive(location)
102
+ # Build a package of the location.
103
+ #
104
+ # @param location [Location]
105
+ # package directory location
106
+ # @return [Location]
107
+ # location of the generated PPG file
108
+ def build_package(location)
105
109
  local_location = location.local
106
110
 
107
111
  # action documents
108
- actions = local_location.entries.each_with_object(Hash.new) do |entry, actions|
112
+ actions = read_action_documents(local_location)
113
+
114
+ # compile
115
+ compile_pnml(local_location, actions)
116
+
117
+ # update
118
+ update_package_info(local_location)
119
+
120
+ # make archiver
121
+ return archive_package(local_location, model[:output])
122
+ end
123
+
124
+ # Read actions from action documents(files that named "*.action.md").
125
+ #
126
+ # @param location [Location]
127
+ # package directory location
128
+ # @return [Hash{String=>String}]
129
+ # relation table for rule name and the action content
130
+ def read_action_documents(location)
131
+ location.entries.each_with_object(Hash.new) do |entry, actions|
109
132
  if entry.basename.end_with?(".action.md")
110
- actions.merge!(LiterateAction::Parser.parse(entry.read))
133
+ begin
134
+ actions.merge!(LiterateAction::Parser.parse(entry.read))
135
+ rescue
136
+ Log::SystemLog.fatal("Error has occured when parsing the action document %s." % entry.address)
137
+ raise
138
+ end
111
139
  end
112
140
  end
141
+ end
113
142
 
114
- # compile
115
- local_location.each_entry do |entry|
143
+ # Compile all PNML files in the location.
144
+ #
145
+ # @param location [Location]
146
+ # package directory location
147
+ # @param actions [Hash{String=>String}]
148
+ # relation table for rule name and the action content
149
+ # @return [void]
150
+ def compile_pnml(location, actions)
151
+ location.each_entry do |entry|
116
152
  if (entry.extname == ".pnml")
117
- flow_name = entry.basename(".pnml")
118
- net = PNML::Reader.read(entry)
119
- option = {
120
- :flow_name => flow_name,
121
- :literate_actions => actions,
122
- }
123
- content = PNML::Compiler.new(net, option).compile
124
- file = entry.dirname + (flow_name + ".pione")
125
- file.write(content)
153
+ begin
154
+ flow_name = entry.basename(".pnml")
155
+ net = PNML::Reader.read(entry)
156
+ option = {
157
+ :flow_rule_name => flow_name,
158
+ :literate_actions => actions,
159
+ }
160
+ content = PNML::Compiler.new(net, option).compile
161
+ file = entry.dirname + (flow_name + ".pione")
162
+ file.write(content)
163
+ rescue
164
+ Log::SystemLog.fatal("Error has occured when compiling the PNML file %s." % entry.address)
165
+ raise
166
+ end
126
167
  end
127
168
  end
169
+ end
128
170
 
129
- # update
130
- Package::PackageHandler.write_info_files(local_location, force: true)
171
+ # Update package information file.
172
+ #
173
+ # @param location [Location]
174
+ # package directory location
175
+ # @return [void]
176
+ def update_package_info(location)
177
+ Package::PackageHandler.write_info_files(location, force: true)
178
+ rescue
179
+ Log::SystemLog.fatal("Error has occured when updating package information file.")
180
+ raise
181
+ end
131
182
 
132
- handler = Package::PackageReader.read(local_location)
183
+ # Update package information file.
184
+ #
185
+ # @param location [Location]
186
+ # package directory location
187
+ # @return [Location]
188
+ # location of the generated PPG file
189
+ def archive_package(location, output)
190
+ handler = Package::PackageReader.read(location)
133
191
  cache_location = Package::PackageCache.directory_cache(handler.digest)
134
192
 
135
193
  # make archiver
@@ -137,9 +195,6 @@ module Pione
137
195
 
138
196
  # archive
139
197
  return archiver.archive(model[:output], false)
140
- rescue => e
141
- Log::Debug.system("PIONE has failed to archive %s: %s" % [location, e.message])
142
- return nil
143
198
  end
144
199
  end
145
200
 
@@ -0,0 +1,117 @@
1
+ module Pione
2
+ module Command
3
+ # `PionePackageRemove` is a subcommand that removes PIONE package from package
4
+ # database in your system.
5
+ class PionePackageRemove < BasicCommand
6
+ #
7
+ # informations
8
+ #
9
+
10
+ define(:name, "remove")
11
+ define(:desc, "Remove the package from package database")
12
+
13
+ #
14
+ # arguments
15
+ #
16
+
17
+ argument(:target) do |item|
18
+ item.type = :string
19
+ item.desc = "package name that is removed from package database"
20
+ item.missing = "There are no package name."
21
+ end
22
+
23
+ #
24
+ # options
25
+ #
26
+
27
+ option(:editor) do |item|
28
+ item.type = :string
29
+ item.long = "--editor"
30
+ item.arg = "NAME"
31
+ item.desc = "Specify editor name"
32
+ end
33
+
34
+ option(:tag) do |item|
35
+ item.type = :string
36
+ item.long = "--tag"
37
+ item.arg = "NAME"
38
+ item.desc = "Specify tag name"
39
+ end
40
+
41
+ #
42
+ # command lifecycle: setup phase
43
+ #
44
+
45
+ phase(:setup) do |seq|
46
+ seq << :db
47
+ end
48
+
49
+ setup(:db) do |item|
50
+ item.desc = "Setup package database"
51
+
52
+ item.assign(:db) do
53
+ Package::Database.load
54
+ end
55
+ end
56
+
57
+ #
58
+ # command lifecycle: execution phase
59
+ #
60
+
61
+ phase(:execution) do |seq|
62
+ seq << :remove_package
63
+ seq << :show
64
+ end
65
+
66
+ execution(:remove_package) do |item|
67
+ item.desc = "Remove the package from package database"
68
+
69
+ item.process do
70
+ if model[:db].exist?(model[:target], model[:editor], model[:tag])
71
+ model[:db].delete(model[:target], model[:editor], model[:tag])
72
+ model[:db].save
73
+ model[:removed] = true
74
+ end
75
+ end
76
+ end
77
+
78
+ execution(:show) do |item|
79
+ item.desc = "Show the result"
80
+
81
+ item.assign(:additions) do
82
+ Array.new
83
+ end
84
+
85
+ item.process do
86
+ test(model[:editor])
87
+ model[:additions] << "editor: %s" % model[:editor]
88
+ end
89
+
90
+ item.process do
91
+ test(model[:tag])
92
+ model[:additions] << "tag: %s" % model[:tag]
93
+ end
94
+
95
+ item.assign(:info) do
96
+ model[:additions].size > 0 ? "(" + model[:additions].join(", ") + ")" : ""
97
+ end
98
+
99
+ # show log
100
+ item.process do
101
+ arg = {name: model[:target], info: model[:info]}
102
+ if model[:removed]
103
+ Log::SystemLog.info(
104
+ 'Package "%{name}"%{info} has been removed from package database.' % arg
105
+ )
106
+ else
107
+ Log::SystemLog.info(
108
+ 'Package "%{name}"%{info} not found in package database.' % arg
109
+ )
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ PionePackage.define_subcommand("remove", PionePackageRemove)
116
+ end
117
+ end