taskjuggler 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. data/CHANGELOG +160 -0
  2. data/benchmarks/UTF-8-Strings.rb +58 -0
  3. data/data/css/tjreport.css +7 -2
  4. data/doc/AppConfig.html +10 -4
  5. data/doc/Arguments.html +10 -4
  6. data/doc/CHANGELOG.html +171 -5
  7. data/doc/COPYING.html +10 -4
  8. data/doc/Object.html +11 -107
  9. data/doc/README.html +10 -4
  10. data/doc/RuntimeConfig.html +10 -4
  11. data/doc/String.html +16 -11
  12. data/doc/StringIO.html +10 -4
  13. data/doc/TaskJuggler.html +506 -435
  14. data/doc/TaskJuggler/Account.html +10 -4
  15. data/doc/TaskJuggler/AccountAttribute.html +10 -4
  16. data/doc/TaskJuggler/AccountScenario.html +10 -4
  17. data/doc/TaskJuggler/Allocation.html +69 -60
  18. data/doc/TaskJuggler/AllocationAttribute.html +10 -4
  19. data/doc/TaskJuggler/AttributeBase.html +10 -4
  20. data/doc/TaskJuggler/AttributeDefinition.html +10 -4
  21. data/doc/TaskJuggler/BatchProcessor.html +202 -192
  22. data/doc/TaskJuggler/Booking.html +10 -4
  23. data/doc/TaskJuggler/BookingListAttribute.html +10 -4
  24. data/doc/TaskJuggler/BooleanAttribute.html +10 -4
  25. data/doc/TaskJuggler/CSVFile.html +10 -4
  26. data/doc/TaskJuggler/CellSettingPattern.html +10 -4
  27. data/doc/TaskJuggler/CellSettingPatternList.html +10 -4
  28. data/doc/TaskJuggler/Charge.html +10 -4
  29. data/doc/TaskJuggler/ChargeListAttribute.html +10 -4
  30. data/doc/TaskJuggler/ChargeSet.html +10 -4
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +10 -4
  32. data/doc/TaskJuggler/ColumnListAttribute.html +10 -4
  33. data/doc/TaskJuggler/ColumnTable.html +10 -4
  34. data/doc/TaskJuggler/Daemon.html +71 -52
  35. data/doc/TaskJuggler/DateAttribute.html +10 -4
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +10 -4
  37. data/doc/TaskJuggler/DependencyListAttribute.html +10 -4
  38. data/doc/TaskJuggler/DurationAttribute.html +10 -4
  39. data/doc/TaskJuggler/{MacroParser.html → FileList.html} +58 -173
  40. data/doc/TaskJuggler/{RichTextException.html → FileRecord.html} +59 -80
  41. data/doc/TaskJuggler/FixnumAttribute.html +10 -4
  42. data/doc/TaskJuggler/FlagListAttribute.html +10 -4
  43. data/doc/TaskJuggler/FloatAttribute.html +10 -4
  44. data/doc/TaskJuggler/FormatListAttribute.html +10 -4
  45. data/doc/TaskJuggler/GanttChart.html +10 -4
  46. data/doc/TaskJuggler/GanttContainer.html +14 -8
  47. data/doc/TaskJuggler/GanttHeader.html +10 -4
  48. data/doc/TaskJuggler/GanttHeaderScaleItem.html +10 -4
  49. data/doc/TaskJuggler/GanttLine.html +29 -24
  50. data/doc/TaskJuggler/GanttLoadStack.html +10 -4
  51. data/doc/TaskJuggler/GanttMilestone.html +10 -4
  52. data/doc/TaskJuggler/GanttRouter.html +10 -4
  53. data/doc/TaskJuggler/GanttTaskBar.html +20 -10
  54. data/doc/TaskJuggler/HTMLDocument.html +10 -4
  55. data/doc/TaskJuggler/HTMLGraphics.html +10 -4
  56. data/doc/TaskJuggler/Interval.html +10 -4
  57. data/doc/TaskJuggler/IntervalListAttribute.html +10 -4
  58. data/doc/TaskJuggler/JobInfo.html +10 -4
  59. data/doc/TaskJuggler/Journal.html +227 -160
  60. data/doc/TaskJuggler/JournalEntry.html +10 -4
  61. data/doc/TaskJuggler/JournalEntryList.html +158 -72
  62. data/doc/TaskJuggler/KeywordArray.html +21 -9
  63. data/doc/TaskJuggler/KeywordDocumentation.html +612 -475
  64. data/doc/TaskJuggler/Limits.html +13 -8
  65. data/doc/TaskJuggler/Limits/Limit.html +10 -4
  66. data/doc/TaskJuggler/LimitsAttribute.html +10 -4
  67. data/doc/TaskJuggler/ListAttributeBase.html +10 -4
  68. data/doc/TaskJuggler/Log.html +10 -4
  69. data/doc/TaskJuggler/LogFile.html +10 -4
  70. data/doc/TaskJuggler/LogicalAttribute.html +10 -4
  71. data/doc/TaskJuggler/LogicalExpression.html +11 -5
  72. data/doc/TaskJuggler/LogicalExpressionAttribute.html +10 -4
  73. data/doc/TaskJuggler/LogicalFlag.html +10 -4
  74. data/doc/TaskJuggler/LogicalFunction.html +132 -124
  75. data/doc/TaskJuggler/LogicalOperation.html +10 -4
  76. data/doc/TaskJuggler/Macro.html +16 -10
  77. data/doc/TaskJuggler/MacroTable.html +44 -38
  78. data/doc/TaskJuggler/ManagerResponsibilities.html +10 -4
  79. data/doc/TaskJuggler/ManagerStatusRecord.html +10 -4
  80. data/doc/TaskJuggler/Message.html +92 -68
  81. data/doc/TaskJuggler/MessageHandler.html +349 -28
  82. data/doc/TaskJuggler/Navigator.html +10 -4
  83. data/doc/TaskJuggler/NavigatorElement.html +10 -4
  84. data/doc/TaskJuggler/NikuProject.html +10 -4
  85. data/doc/TaskJuggler/NikuReport.html +10 -4
  86. data/doc/TaskJuggler/NikuResource.html +10 -4
  87. data/doc/TaskJuggler/NodeListAttribute.html +10 -4
  88. data/doc/TaskJuggler/OnShiftCache.html +10 -4
  89. data/doc/TaskJuggler/ProcessIntercom.html +118 -111
  90. data/doc/TaskJuggler/ProcessIntercomIface.html +75 -22
  91. data/doc/TaskJuggler/Project.html +886 -913
  92. data/doc/TaskJuggler/ProjectBroker.html +442 -331
  93. data/doc/TaskJuggler/ProjectBrokerIface.html +95 -38
  94. data/doc/TaskJuggler/ProjectFileParser.html +320 -317
  95. data/doc/TaskJuggler/ProjectFileScanner.html +336 -339
  96. data/doc/TaskJuggler/ProjectRecord.html +119 -56
  97. data/doc/TaskJuggler/ProjectServer.html +282 -237
  98. data/doc/TaskJuggler/ProjectServerIface.html +45 -39
  99. data/doc/TaskJuggler/PropertyAttribute.html +10 -4
  100. data/doc/TaskJuggler/PropertyList.html +177 -173
  101. data/doc/TaskJuggler/PropertySet.html +11 -5
  102. data/doc/TaskJuggler/PropertyTreeNode.html +194 -191
  103. data/doc/TaskJuggler/Query.html +280 -256
  104. data/doc/TaskJuggler/RTFHandlers.html +10 -4
  105. data/doc/TaskJuggler/RTFNavigator.html +33 -26
  106. data/doc/TaskJuggler/RTFQuery.html +135 -169
  107. data/doc/TaskJuggler/RTFReport.html +63 -56
  108. data/doc/TaskJuggler/RTFReportLink.html +58 -47
  109. data/doc/TaskJuggler/RTFWithQuerySupport.html +666 -0
  110. data/doc/TaskJuggler/RealFormat.html +10 -4
  111. data/doc/TaskJuggler/RealFormatAttribute.html +10 -4
  112. data/doc/TaskJuggler/ReferenceAttribute.html +10 -4
  113. data/doc/TaskJuggler/Report.html +333 -290
  114. data/doc/TaskJuggler/ReportBase.html +182 -174
  115. data/doc/TaskJuggler/ReportContext.html +10 -4
  116. data/doc/TaskJuggler/ReportServer.html +144 -126
  117. data/doc/TaskJuggler/ReportServerIface.html +50 -44
  118. data/doc/TaskJuggler/ReportServerRecord.html +38 -32
  119. data/doc/TaskJuggler/ReportServlet.html +144 -137
  120. data/doc/TaskJuggler/ReportTable.html +10 -4
  121. data/doc/TaskJuggler/ReportTableCell.html +169 -164
  122. data/doc/TaskJuggler/ReportTableColumn.html +10 -4
  123. data/doc/TaskJuggler/ReportTableLegend.html +10 -4
  124. data/doc/TaskJuggler/ReportTableLine.html +10 -4
  125. data/doc/TaskJuggler/Resource.html +121 -115
  126. data/doc/TaskJuggler/ResourceListAttribute.html +10 -4
  127. data/doc/TaskJuggler/ResourceListRE.html +10 -4
  128. data/doc/TaskJuggler/ResourceScenario.html +13 -7
  129. data/doc/TaskJuggler/RichText.html +61 -37
  130. data/doc/TaskJuggler/RichTextAttribute.html +10 -4
  131. data/doc/TaskJuggler/RichTextDocument.html +91 -81
  132. data/doc/TaskJuggler/RichTextElement.html +378 -317
  133. data/doc/TaskJuggler/RichTextFunctionExample.html +10 -4
  134. data/doc/TaskJuggler/RichTextFunctionHandler.html +16 -11
  135. data/doc/TaskJuggler/RichTextImage.html +10 -4
  136. data/doc/TaskJuggler/RichTextIntermediate.html +138 -70
  137. data/doc/TaskJuggler/RichTextParser.html +48 -40
  138. data/doc/TaskJuggler/RichTextScanner.html +328 -906
  139. data/doc/TaskJuggler/RichTextSnip.html +59 -57
  140. data/doc/TaskJuggler/RichTextSyntaxRules.html +458 -369
  141. data/doc/TaskJuggler/Scenario.html +10 -4
  142. data/doc/TaskJuggler/ScenarioData.html +33 -30
  143. data/doc/TaskJuggler/ScenarioListAttribute.html +10 -4
  144. data/doc/TaskJuggler/Scoreboard.html +10 -4
  145. data/doc/TaskJuggler/SheetHandlerBase.html +315 -191
  146. data/doc/TaskJuggler/SheetReceiver.html +334 -313
  147. data/doc/TaskJuggler/SheetSender.html +10 -4
  148. data/doc/TaskJuggler/Shift.html +10 -4
  149. data/doc/TaskJuggler/ShiftAssignment.html +10 -4
  150. data/doc/TaskJuggler/ShiftAssignments.html +10 -4
  151. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +10 -4
  152. data/doc/TaskJuggler/ShiftScenario.html +10 -4
  153. data/doc/TaskJuggler/SimpleQueryExpander.html +697 -0
  154. data/doc/TaskJuggler/SortListAttribute.html +10 -4
  155. data/doc/TaskJuggler/SourceFileInfo.html +10 -4
  156. data/doc/TaskJuggler/StatusSheetReceiver.html +10 -4
  157. data/doc/TaskJuggler/StatusSheetReport.html +10 -4
  158. data/doc/TaskJuggler/StatusSheetSender.html +10 -4
  159. data/doc/TaskJuggler/StringAttribute.html +10 -4
  160. data/doc/TaskJuggler/SymbolAttribute.html +10 -4
  161. data/doc/TaskJuggler/SyntaxReference.html +260 -230
  162. data/doc/TaskJuggler/TOCEntry.html +99 -42
  163. data/doc/TaskJuggler/TSResourceRecord.html +10 -4
  164. data/doc/TaskJuggler/TSTaskRecord.html +10 -4
  165. data/doc/TaskJuggler/TableColumnDefinition.html +10 -4
  166. data/doc/TaskJuggler/TableOfContents.html +54 -12
  167. data/doc/TaskJuggler/TableReport.html +877 -872
  168. data/doc/TaskJuggler/Task.html +117 -68
  169. data/doc/TaskJuggler/TaskDependency.html +10 -4
  170. data/doc/TaskJuggler/TaskListAttribute.html +10 -4
  171. data/doc/TaskJuggler/TaskListRE.html +10 -4
  172. data/doc/TaskJuggler/TaskScenario.html +1681 -1563
  173. data/doc/TaskJuggler/TextFormatter.html +10 -4
  174. data/doc/TaskJuggler/TextParser.html +567 -534
  175. data/doc/TaskJuggler/TextParser/Pattern.html +128 -118
  176. data/doc/TaskJuggler/TextParser/Rule.html +26 -15
  177. data/doc/TaskJuggler/TextParser/StackElement.html +10 -4
  178. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +22 -16
  179. data/doc/TaskJuggler/TextParser/TokenDoc.html +10 -4
  180. data/doc/TaskJuggler/TextReport.html +15 -6
  181. data/doc/TaskJuggler/TextScanner.html +319 -287
  182. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +16 -10
  183. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +23 -17
  184. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +17 -11
  185. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  186. data/doc/TaskJuggler/TimeSheet.html +138 -175
  187. data/doc/TaskJuggler/TimeSheetReceiver.html +10 -4
  188. data/doc/TaskJuggler/TimeSheetRecord.html +65 -58
  189. data/doc/TaskJuggler/TimeSheetReport.html +47 -42
  190. data/doc/TaskJuggler/TimeSheetSender.html +10 -4
  191. data/doc/TaskJuggler/TimeSheetSummary.html +91 -83
  192. data/doc/TaskJuggler/TimeSheets.html +22 -16
  193. data/doc/TaskJuggler/Tj3AppBase.html +10 -4
  194. data/doc/TaskJuggler/Tj3Client.html +399 -365
  195. data/doc/TaskJuggler/Tj3Daemon.html +107 -94
  196. data/doc/TaskJuggler/Tj3SheetAppBase.html +10 -4
  197. data/doc/TaskJuggler/Tj3SsReceiver.html +10 -4
  198. data/doc/TaskJuggler/Tj3SsSender.html +10 -4
  199. data/doc/TaskJuggler/Tj3TsReceiver.html +10 -4
  200. data/doc/TaskJuggler/Tj3TsSender.html +10 -4
  201. data/doc/TaskJuggler/Tj3TsSummary.html +10 -4
  202. data/doc/TaskJuggler/TjException.html +10 -4
  203. data/doc/TaskJuggler/TjTime.html +145 -140
  204. data/doc/TaskJuggler/TjpExample.html +10 -4
  205. data/doc/TaskJuggler/TjpExportRE.html +122 -118
  206. data/doc/TaskJuggler/TjpSyntaxRules.html +4065 -4052
  207. data/doc/TaskJuggler/URLParameter.html +10 -4
  208. data/doc/TaskJuggler/UserManual.html +162 -155
  209. data/doc/TaskJuggler/VimSyntax.html +1028 -0
  210. data/doc/TaskJuggler/WebServer.html +45 -27
  211. data/doc/TaskJuggler/WorkingHours.html +10 -4
  212. data/doc/TaskJuggler/WorkingHoursAttribute.html +10 -4
  213. data/doc/TaskJuggler/XMLBlob.html +10 -4
  214. data/doc/TaskJuggler/XMLComment.html +10 -4
  215. data/doc/TaskJuggler/XMLDocument.html +10 -4
  216. data/doc/TaskJuggler/XMLElement.html +10 -4
  217. data/doc/TaskJuggler/XMLNamedText.html +10 -4
  218. data/doc/TaskJuggler/XMLText.html +10 -4
  219. data/doc/index.html +735 -677
  220. data/doc/lib/AccountScenario_rb.html +1 -1
  221. data/doc/lib/Account_rb.html +1 -1
  222. data/doc/lib/Allocation_rb.html +1 -1
  223. data/doc/lib/AppConfig_rb.html +1 -1
  224. data/doc/lib/AttributeBase_rb.html +1 -1
  225. data/doc/lib/AttributeDefinition_rb.html +1 -1
  226. data/doc/lib/Attributes_rb.html +1 -1
  227. data/doc/lib/BatchProcessor_rb.html +1 -1
  228. data/doc/lib/Booking_rb.html +1 -1
  229. data/doc/lib/ChargeSet_rb.html +1 -1
  230. data/doc/lib/Charge_rb.html +1 -1
  231. data/doc/lib/{Message_rb.html → FileList_rb.html} +3 -5
  232. data/doc/lib/HTMLDocument_rb.html +1 -1
  233. data/doc/lib/Interval_rb.html +1 -1
  234. data/doc/lib/Journal_rb.html +1 -1
  235. data/doc/lib/KeywordArray_rb.html +1 -1
  236. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  237. data/doc/lib/Limits_rb.html +1 -1
  238. data/doc/lib/LogFile_rb.html +1 -1
  239. data/doc/lib/Log_rb.html +1 -1
  240. data/doc/lib/LogicalExpression_rb.html +1 -1
  241. data/doc/lib/LogicalFunction_rb.html +1 -1
  242. data/doc/lib/LogicalOperation_rb.html +1 -1
  243. data/doc/lib/MacroTable_rb.html +1 -3
  244. data/doc/lib/MessageHandler_rb.html +1 -1
  245. data/doc/lib/ProjectFileParser_rb.html +1 -1
  246. data/doc/lib/ProjectFileScanner_rb.html +1 -1
  247. data/doc/lib/Project_rb.html +4 -2
  248. data/doc/lib/PropertyList_rb.html +1 -1
  249. data/doc/lib/PropertySet_rb.html +1 -1
  250. data/doc/lib/PropertyTreeNode_rb.html +1 -1
  251. data/doc/lib/Query_rb.html +1 -1
  252. data/doc/lib/RTFHandlers_rb.html +1 -1
  253. data/doc/lib/RTFNavigator_rb.html +1 -1
  254. data/doc/lib/RTFQuery_rb.html +2 -2
  255. data/doc/lib/RTFReportLink_rb.html +4 -2
  256. data/doc/lib/RTFReport_rb.html +1 -1
  257. data/doc/lib/{MacroParser_rb.html → RTFWithQuerySupport_rb.html} +4 -6
  258. data/doc/lib/RealFormat_rb.html +1 -1
  259. data/doc/lib/ResourceScenario_rb.html +1 -1
  260. data/doc/lib/Resource_rb.html +1 -1
  261. data/doc/lib/RichTextDocument_rb.html +1 -1
  262. data/doc/lib/RichTextElement_rb.html +1 -1
  263. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  264. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  265. data/doc/lib/RichTextParser_rb.html +1 -1
  266. data/doc/lib/RichTextScanner_rb.html +3 -1
  267. data/doc/lib/RichTextSnip_rb.html +1 -1
  268. data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
  269. data/doc/lib/RichText_rb.html +3 -1
  270. data/doc/lib/RuntimeConfig_rb.html +1 -1
  271. data/doc/lib/ScenarioData_rb.html +2 -2
  272. data/doc/lib/Scenario_rb.html +1 -1
  273. data/doc/lib/Scoreboard_rb.html +1 -1
  274. data/doc/lib/SheetHandlerBase_rb.html +5 -1
  275. data/doc/lib/SheetReceiver_rb.html +3 -1
  276. data/doc/lib/SheetSender_rb.html +1 -1
  277. data/doc/lib/ShiftAssignments_rb.html +1 -1
  278. data/doc/lib/ShiftScenario_rb.html +1 -1
  279. data/doc/lib/Shift_rb.html +1 -1
  280. data/doc/lib/SimpleQueryExpander_rb.html +67 -0
  281. data/doc/lib/SourceFileInfo_rb.html +1 -1
  282. data/doc/lib/StatusSheetReceiver_rb.html +1 -1
  283. data/doc/lib/StatusSheetSender_rb.html +1 -1
  284. data/doc/lib/SyntaxReference_rb.html +1 -1
  285. data/doc/lib/TOCEntry_rb.html +1 -1
  286. data/doc/lib/TableColumnDefinition_rb.html +1 -1
  287. data/doc/lib/TableOfContents_rb.html +1 -1
  288. data/doc/lib/TaskDependency_rb.html +1 -1
  289. data/doc/lib/TaskJuggler_rb.html +1 -1
  290. data/doc/lib/TaskScenario_rb.html +1 -1
  291. data/doc/lib/Task_rb.html +1 -1
  292. data/doc/lib/TextFormatter_rb.html +1 -1
  293. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  294. data/doc/lib/TextParser/Rule_rb.html +1 -1
  295. data/doc/lib/TextParser/StackElement_rb.html +1 -1
  296. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  297. data/doc/lib/TextParser_rb.html +3 -1
  298. data/doc/lib/TextScanner_rb.html +1 -3
  299. data/doc/lib/TimeSheetReceiver_rb.html +1 -1
  300. data/doc/lib/TimeSheetSender_rb.html +1 -1
  301. data/doc/lib/TimeSheetSummary_rb.html +1 -1
  302. data/doc/lib/TimeSheets_rb.html +1 -1
  303. data/doc/lib/Tj3AppBase_rb.html +1 -1
  304. data/doc/lib/Tj3Config_rb.html +1 -1
  305. data/doc/lib/Tj3SheetAppBase_rb.html +1 -1
  306. data/doc/lib/TjException_rb.html +1 -1
  307. data/doc/lib/TjTime_rb.html +1 -1
  308. data/doc/lib/TjpExample_rb.html +1 -1
  309. data/doc/lib/TjpSyntaxRules_rb.html +1 -1
  310. data/doc/lib/URLParameter_rb.html +1 -1
  311. data/doc/lib/UTF8String_rb.html +1 -1
  312. data/doc/lib/UserManual_rb.html +1 -1
  313. data/doc/lib/{ruby-signal-bug_rb.html → VimSyntax_rb.html} +17 -4
  314. data/doc/lib/WorkingHours_rb.html +1 -1
  315. data/doc/lib/XMLDocument_rb.html +1 -1
  316. data/doc/lib/XMLElement_rb.html +1 -1
  317. data/doc/lib/daemon/Daemon_rb.html +1 -1
  318. data/doc/lib/daemon/ProcessIntercom_rb.html +1 -1
  319. data/doc/lib/daemon/ProjectBroker_rb.html +1 -1
  320. data/doc/lib/daemon/ProjectServer_rb.html +1 -1
  321. data/doc/lib/daemon/ReportServer_rb.html +1 -3
  322. data/doc/lib/daemon/WebServer_rb.html +1 -1
  323. data/doc/lib/deep_copy_rb.html +1 -1
  324. data/doc/lib/reports/CSVFile_rb.html +1 -1
  325. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  326. data/doc/lib/reports/GanttChart_rb.html +1 -1
  327. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  328. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  329. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  330. data/doc/lib/reports/GanttLine_rb.html +1 -1
  331. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  332. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  333. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  334. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  335. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  336. data/doc/lib/reports/Navigator_rb.html +1 -1
  337. data/doc/lib/reports/NikuReport_rb.html +1 -1
  338. data/doc/lib/reports/ReportBase_rb.html +1 -1
  339. data/doc/lib/reports/ReportContext_rb.html +1 -1
  340. data/doc/lib/reports/ReportTableCell_rb.html +1 -1
  341. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  342. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  343. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  344. data/doc/lib/reports/ReportTable_rb.html +1 -1
  345. data/doc/lib/reports/Report_rb.html +1 -1
  346. data/doc/lib/reports/ResourceListRE_rb.html +1 -1
  347. data/doc/lib/reports/StatusSheetReport_rb.html +1 -1
  348. data/doc/lib/reports/TableReport_rb.html +1 -1
  349. data/doc/lib/reports/TaskListRE_rb.html +1 -1
  350. data/doc/lib/reports/TextReport_rb.html +1 -1
  351. data/doc/lib/reports/TimeSheetReport_rb.html +1 -1
  352. data/doc/lib/reports/TjpExportRE_rb.html +1 -1
  353. data/doc/lib/taskjuggler3_rb.html +1 -1
  354. data/doc/lib/tj3client_rb.html +1 -1
  355. data/doc/lib/tj3d_rb.html +1 -1
  356. data/doc/lib/tj3man_rb.html +1 -1
  357. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  358. data/doc/lib/tj3ss_sender_rb.html +1 -1
  359. data/doc/lib/tj3ts_receiver_rb.html +1 -1
  360. data/doc/lib/tj3ts_sender_rb.html +1 -1
  361. data/doc/lib/tj3ts_summary_rb.html +1 -1
  362. data/lib/Allocation.rb +8 -5
  363. data/lib/BatchProcessor.rb +7 -3
  364. data/lib/FileList.rb +58 -0
  365. data/lib/Journal.rb +73 -33
  366. data/lib/KeywordArray.rb +4 -0
  367. data/lib/KeywordDocumentation.rb +45 -11
  368. data/lib/Limits.rb +0 -1
  369. data/lib/LogicalExpression.rb +1 -1
  370. data/lib/LogicalFunction.rb +14 -12
  371. data/lib/MacroTable.rb +3 -4
  372. data/lib/MessageHandler.rb +136 -7
  373. data/lib/Project.rb +72 -86
  374. data/lib/ProjectFileParser.rb +30 -33
  375. data/lib/ProjectFileScanner.rb +7 -16
  376. data/lib/PropertyList.rb +25 -27
  377. data/lib/PropertySet.rb +1 -1
  378. data/lib/PropertyTreeNode.rb +9 -12
  379. data/lib/Query.rb +5 -4
  380. data/lib/RTFNavigator.rb +2 -1
  381. data/lib/RTFQuery.rb +4 -11
  382. data/lib/RTFReport.rb +2 -1
  383. data/lib/RTFReportLink.rb +10 -4
  384. data/lib/RTFWithQuerySupport.rb +45 -0
  385. data/lib/Resource.rb +20 -20
  386. data/lib/ResourceScenario.rb +3 -3
  387. data/lib/RichText.rb +15 -7
  388. data/lib/RichTextDocument.rb +8 -4
  389. data/lib/RichTextElement.rb +35 -12
  390. data/lib/RichTextFunctionHandler.rb +11 -12
  391. data/lib/RichTextParser.rb +5 -3
  392. data/lib/RichTextScanner.rb +144 -565
  393. data/lib/RichTextSnip.rb +3 -7
  394. data/lib/RichTextSyntaxRules.rb +51 -32
  395. data/lib/ScenarioData.rb +16 -25
  396. data/lib/SheetHandlerBase.rb +59 -2
  397. data/lib/SheetReceiver.rb +36 -18
  398. data/lib/SimpleQueryExpander.rb +58 -0
  399. data/lib/SyntaxReference.rb +9 -5
  400. data/lib/TOCEntry.rb +2 -0
  401. data/lib/TableOfContents.rb +4 -0
  402. data/lib/Task.rb +23 -12
  403. data/lib/TaskJuggler.rb +72 -33
  404. data/lib/TaskScenario.rb +131 -53
  405. data/lib/TextParser.rb +43 -30
  406. data/lib/TextParser/Pattern.rb +17 -13
  407. data/lib/TextParser/Rule.rb +5 -0
  408. data/lib/TextScanner.rb +46 -25
  409. data/lib/TimeSheetSummary.rb +9 -7
  410. data/lib/TimeSheets.rb +14 -23
  411. data/lib/Tj3Config.rb +1 -1
  412. data/lib/TjTime.rb +1 -2
  413. data/lib/TjpSyntaxRules.rb +128 -104
  414. data/lib/UTF8String.rb +0 -1
  415. data/lib/UserManual.rb +5 -4
  416. data/lib/VimSyntax.rb +223 -0
  417. data/lib/daemon/Daemon.rb +9 -0
  418. data/lib/daemon/ProcessIntercom.rb +19 -4
  419. data/lib/daemon/ProjectBroker.rb +149 -68
  420. data/lib/daemon/ProjectServer.rb +119 -79
  421. data/lib/daemon/ReportServer.rb +42 -31
  422. data/lib/daemon/WebServer.rb +21 -2
  423. data/lib/deep_copy.rb +1 -1
  424. data/lib/reports/GanttContainer.rb +2 -2
  425. data/lib/reports/GanttLine.rb +2 -3
  426. data/lib/reports/GanttTaskBar.rb +7 -3
  427. data/lib/reports/Report.rb +62 -57
  428. data/lib/reports/ReportBase.rb +6 -4
  429. data/lib/reports/ReportTableCell.rb +13 -14
  430. data/lib/reports/TableReport.rb +2 -1
  431. data/lib/reports/TextReport.rb +3 -0
  432. data/lib/reports/TimeSheetReport.rb +2 -3
  433. data/lib/reports/TjpExportRE.rb +0 -2
  434. data/lib/tj3client.rb +31 -3
  435. data/lib/tj3d.rb +8 -1
  436. data/manual/Day_To_Day_Juggling +2 -95
  437. data/manual/How_To_Contribute +2 -1
  438. data/manual/Rich_Text_Attributes +37 -3
  439. data/manual/Software +203 -0
  440. data/test/MessageChecker.rb +4 -4
  441. data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
  442. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  443. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  444. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  445. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  446. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  447. data/test/TestSuite/HTML-Reports/css/tjmanual.css +14 -0
  448. data/test/TestSuite/HTML-Reports/css/tjreport.css +233 -21
  449. data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
  450. data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
  451. data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +20 -20
  452. data/test/TestSuite/ReportGenerator/Correct/Alerts.tjp +48 -0
  453. data/test/TestSuite/ReportGenerator/Correct/Macros.tjp +57 -0
  454. data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +386 -0
  455. data/test/TestSuite/ReportGenerator/Correct/refs/Macros-1.csv +6 -0
  456. data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjmanual.css +0 -0
  457. data/test/TestSuite/ReportGenerator/{Correct → Errors}/css/tjreport.css +0 -0
  458. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/details.png +0 -0
  459. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-green.png +0 -0
  460. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-red.png +0 -0
  461. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/flag-yellow.png +0 -0
  462. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resource.png +0 -0
  463. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/resourcegroup.png +0 -0
  464. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/task.png +0 -0
  465. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/taskgroup.png +0 -0
  466. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-down.png +0 -0
  467. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-flat.png +0 -0
  468. data/test/TestSuite/ReportGenerator/{Correct → Errors}/icons/trend-up.png +0 -0
  469. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +26 -0
  470. data/test/TestSuite/ReportGenerator/{Correct → Errors}/scripts/wz_tooltip.js +0 -0
  471. data/test/TestSuite/Scheduler/Correct/Allocate.html +3210 -0
  472. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +19 -0
  473. data/test/TestSuite/Scheduler/Correct/Container.html +22 -22
  474. data/test/TestSuite/Scheduler/Correct/Limits.html +4964 -0
  475. data/test/TestSuite/Scheduler/Correct/Shift.html +1707 -417
  476. data/test/TestSuite/Scheduler/Correct/Shift2.html +9 -9
  477. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +6 -2
  478. data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +66 -0
  479. data/test/TestSuite/Scheduler/Errors/css/tjreport.css +407 -0
  480. data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
  481. data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
  482. data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
  483. data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
  484. data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
  485. data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
  486. data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
  487. data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
  488. data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
  489. data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
  490. data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
  491. data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +1 -1
  492. data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +1 -1
  493. data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +1 -1
  494. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +1 -1
  495. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +1 -1
  496. data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +1 -1
  497. data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +1 -1
  498. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +1 -1
  499. data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +1 -1
  500. data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +1 -1
  501. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +1 -1
  502. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +1 -1
  503. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +1 -1
  504. data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +1 -1
  505. data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +1301 -0
  506. data/test/TestSuite/Scheduler/Errors/task_pred_before.tjp +11 -0
  507. data/test/TestSuite/Scheduler/Errors/task_pred_before_gd.tjp +11 -0
  508. data/test/TestSuite/Scheduler/Errors/task_pred_before_gl.tjp +11 -0
  509. data/test/TestSuite/Scheduler/Errors/task_succ_after.tjp +12 -0
  510. data/test/TestSuite/Scheduler/Errors/task_succ_after_gd.tjp +12 -0
  511. data/test/TestSuite/Scheduler/Errors/task_succ_after_gl.tjp +12 -0
  512. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  513. data/test/TestSuite/StatusSheets/resrep.tji +7 -0
  514. data/test/TestSuite/StatusSheets/run +6 -4
  515. data/test/TestSuite/StatusSheets/tj3d.log +312 -0
  516. data/test/TestSuite/Syntax/Correct/Managers.html +263 -0
  517. data/test/TestSuite/Syntax/Correct/tutorial.tjp +1 -2
  518. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  519. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +1 -1
  520. data/test/TestSuite/TimeSheets/acceptable_intervals +1 -0
  521. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  522. data/test/TestSuite/TimeSheets/run +6 -5
  523. data/test/TestSuite/TimeSheets/statussheets.log +1 -0
  524. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  525. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  526. data/test/test_PropertySet.rb +2 -2
  527. data/test/test_RichText.rb +178 -387
  528. data/test/test_SimpleQueryExpander.rb +55 -0
  529. data/test/test_deep_copy.rb +2 -2
  530. metadata +854 -834
  531. data/lib/MacroParser.rb +0 -77
  532. data/lib/Message.rb +0 -56
  533. data/lib/ruby-signal-bug.rb +0 -43
  534. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  535. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  536. data/test/TestSuite/ReportGenerator/Correct/Journal.html +0 -63
  537. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  538. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  539. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  540. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  541. data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
  542. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
  543. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  544. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  545. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
@@ -93,6 +93,8 @@
93
93
 
94
94
  <li><a href="#method-i-stop">#stop</a></li>
95
95
 
96
+ <li><a href="#method-i-update">#update</a></li>
97
+
96
98
  <li><a href="#method-i-updateState">#updateState</a></li>
97
99
 
98
100
  </ul>
@@ -187,6 +189,10 @@
187
189
 
188
190
  <li><a href="../TaskJuggler/DurationAttribute.html">TaskJuggler::DurationAttribute</a></li>
189
191
 
192
+ <li><a href="../TaskJuggler/FileList.html">TaskJuggler::FileList</a></li>
193
+
194
+ <li><a href="../TaskJuggler/FileRecord.html">TaskJuggler::FileRecord</a></li>
195
+
190
196
  <li><a href="../TaskJuggler/FixnumAttribute.html">TaskJuggler::FixnumAttribute</a></li>
191
197
 
192
198
  <li><a href="../TaskJuggler/FlagListAttribute.html">TaskJuggler::FlagListAttribute</a></li>
@@ -259,8 +265,6 @@
259
265
 
260
266
  <li><a href="../TaskJuggler/Macro.html">TaskJuggler::Macro</a></li>
261
267
 
262
- <li><a href="../TaskJuggler/MacroParser.html">TaskJuggler::MacroParser</a></li>
263
-
264
268
  <li><a href="../TaskJuggler/MacroTable.html">TaskJuggler::MacroTable</a></li>
265
269
 
266
270
  <li><a href="../TaskJuggler/ManagerResponsibilities.html">TaskJuggler::ManagerResponsibilities</a></li>
@@ -325,6 +329,8 @@
325
329
 
326
330
  <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
327
331
 
332
+ <li><a href="../TaskJuggler/RTFWithQuerySupport.html">TaskJuggler::RTFWithQuerySupport</a></li>
333
+
328
334
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
329
335
 
330
336
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -371,8 +377,6 @@
371
377
 
372
378
  <li><a href="../TaskJuggler/RichTextElement.html">TaskJuggler::RichTextElement</a></li>
373
379
 
374
- <li><a href="../TaskJuggler/RichTextException.html">TaskJuggler::RichTextException</a></li>
375
-
376
380
  <li><a href="../TaskJuggler/RichTextFunctionExample.html">TaskJuggler::RichTextFunctionExample</a></li>
377
381
 
378
382
  <li><a href="../TaskJuggler/RichTextFunctionHandler.html">TaskJuggler::RichTextFunctionHandler</a></li>
@@ -413,6 +417,8 @@
413
417
 
414
418
  <li><a href="../TaskJuggler/ShiftScenario.html">TaskJuggler::ShiftScenario</a></li>
415
419
 
420
+ <li><a href="../TaskJuggler/SimpleQueryExpander.html">TaskJuggler::SimpleQueryExpander</a></li>
421
+
416
422
  <li><a href="../TaskJuggler/SortListAttribute.html">TaskJuggler::SortListAttribute</a></li>
417
423
 
418
424
  <li><a href="../TaskJuggler/SourceFileInfo.html">TaskJuggler::SourceFileInfo</a></li>
@@ -523,6 +529,8 @@
523
529
 
524
530
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
525
531
 
532
+ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
533
+
526
534
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
527
535
 
528
536
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
@@ -609,6 +617,23 @@ href="../TaskJuggler.html">TaskJuggler</a> daemon.
609
617
 
610
618
 
611
619
 
620
+ </div>
621
+ </div>
622
+
623
+ <div id="uri-ile-attribute-method" class="method-detail">
624
+ <a name="uriFile"></a>
625
+
626
+ <a name="uriFile="></a>
627
+
628
+ <div class="method-heading attribute-method-heading">
629
+ <span class="method-name">uriFile</span><span
630
+ class="attribute-access-type">[RW]</span>
631
+ </div>
632
+
633
+ <div class="method-description">
634
+
635
+
636
+
612
637
  </div>
613
638
  </div>
614
639
 
@@ -707,39 +732,41 @@ href="../TaskJuggler.html">TaskJuggler</a> daemon.
707
732
  <div class="method-source-code"
708
733
  id="new-source">
709
734
  <pre>
710
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 42</span>
711
- 42: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
712
- 43: <span class="ruby-keyword kw">super</span>
713
- 44: <span class="ruby-comment cmt"># We don't have a default key. The user must provice a key in the config</span>
714
- 45: <span class="ruby-comment cmt"># file. Otherwise the daemon will not start.</span>
715
- 46: <span class="ruby-ivar">@authKey</span> = <span class="ruby-keyword kw">nil</span>
716
- 47: <span class="ruby-comment cmt"># The default TCP/IP port. ASCII code decimals for 'T' and 'J'.</span>
717
- 48: <span class="ruby-ivar">@port</span> = <span class="ruby-value">8474</span>
718
- 49: <span class="ruby-comment cmt"># A list of loaded projects as Array of ProjectRecord objects.</span>
719
- 50: <span class="ruby-ivar">@projects</span> = []
720
- 51: <span class="ruby-comment cmt"># We operate with multiple threads so we need a Monitor to synchronize</span>
721
- 52: <span class="ruby-comment cmt"># the access to the list.</span>
722
- 53: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-constant">MonitorMixin</span>)
723
- 54:
724
- 55: <span class="ruby-comment cmt"># A list of the initial projects. Array with Array of files names.</span>
725
- 56: <span class="ruby-ivar">@projectFiles</span> = []
735
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 43</span>
736
+ 43: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
737
+ 44: <span class="ruby-keyword kw">super</span>
738
+ 45: <span class="ruby-comment cmt"># We don't have a default key. The user must provice a key in the config</span>
739
+ 46: <span class="ruby-comment cmt"># file. Otherwise the daemon will not start.</span>
740
+ 47: <span class="ruby-ivar">@authKey</span> = <span class="ruby-keyword kw">nil</span>
741
+ 48: <span class="ruby-comment cmt"># The default TCP/IP port. ASCII code decimals for 'T' and 'J'.</span>
742
+ 49: <span class="ruby-ivar">@port</span> = <span class="ruby-value">8474</span>
743
+ 50: <span class="ruby-comment cmt"># The name of the URI file.</span>
744
+ 51: <span class="ruby-ivar">@uriFile</span> = <span class="ruby-keyword kw">nil</span>
745
+ 52: <span class="ruby-comment cmt"># A list of loaded projects as Array of ProjectRecord objects.</span>
746
+ 53: <span class="ruby-ivar">@projects</span> = []
747
+ 54: <span class="ruby-comment cmt"># We operate with multiple threads so we need a Monitor to synchronize</span>
748
+ 55: <span class="ruby-comment cmt"># the access to the list.</span>
749
+ 56: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-constant">MonitorMixin</span>)
726
750
  57:
727
- 58: <span class="ruby-comment cmt"># This Queue is used to load new projects. The DRb thread pushes load</span>
728
- 59: <span class="ruby-comment cmt"># requests that the housekeeping thread will then perform.</span>
729
- 60: <span class="ruby-ivar">@projectsToLoad</span> = <span class="ruby-constant">Queue</span>.<span class="ruby-identifier">new</span>
730
- 61:
731
- 62: <span class="ruby-comment cmt"># Referece to WEBrick object.</span>
732
- 63: <span class="ruby-ivar">@webServer</span> = <span class="ruby-keyword kw">nil</span>
751
+ 58: <span class="ruby-comment cmt"># A list of the initial projects. Array with Array of files names.</span>
752
+ 59: <span class="ruby-ivar">@projectFiles</span> = []
753
+ 60:
754
+ 61: <span class="ruby-comment cmt"># This Queue is used to load new projects. The DRb thread pushes load</span>
755
+ 62: <span class="ruby-comment cmt"># requests that the housekeeping thread will then perform.</span>
756
+ 63: <span class="ruby-ivar">@projectsToLoad</span> = <span class="ruby-constant">Queue</span>.<span class="ruby-identifier">new</span>
733
757
  64:
734
- 65: <span class="ruby-comment cmt"># Port used by the web server</span>
735
- 66: <span class="ruby-ivar">@webServerPort</span> = <span class="ruby-value">8080</span>
758
+ 65: <span class="ruby-comment cmt"># Referece to WEBrick object.</span>
759
+ 66: <span class="ruby-ivar">@webServer</span> = <span class="ruby-keyword kw">nil</span>
736
760
  67:
737
- 68: <span class="ruby-comment cmt"># True if web server should be activated</span>
738
- 69: <span class="ruby-ivar">@enableWebServer</span> = <span class="ruby-keyword kw">false</span>
761
+ 68: <span class="ruby-comment cmt"># Port used by the web server</span>
762
+ 69: <span class="ruby-ivar">@webServerPort</span> = <span class="ruby-value">8080</span>
739
763
  70:
740
- 71: <span class="ruby-comment cmt"># This flag will be set to true to terminate the daemon.</span>
741
- 72: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">false</span>
742
- 73: <span class="ruby-keyword kw">end</span></pre>
764
+ 71: <span class="ruby-comment cmt"># True if web server should be activated</span>
765
+ 72: <span class="ruby-ivar">@enableWebServer</span> = <span class="ruby-keyword kw">false</span>
766
+ 73:
767
+ 74: <span class="ruby-comment cmt"># This flag will be set to true to terminate the daemon.</span>
768
+ 75: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">false</span>
769
+ 76: <span class="ruby-keyword kw">end</span></pre>
743
770
  </div>
744
771
 
745
772
  </div>
@@ -779,37 +806,37 @@ the project has been loaded or the load has failed.
779
806
  <div class="method-source-code"
780
807
  id="add-roject-source">
781
808
  <pre>
782
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 185</span>
783
- 185: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addProject</span>
784
- 186: <span class="ruby-comment cmt"># We need some tag to identify the ProjectRecord that this project was</span>
785
- 187: <span class="ruby-comment cmt"># associated to. Just use a large enough random number.</span>
786
- 188: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-value">9999999999999</span>)
787
- 189:
788
- 190: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Pushing #{tag} to load Queue&quot;</span>)
789
- 191: <span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">tag</span>)
790
- 192:
791
- 193: <span class="ruby-comment cmt"># Now we have to wait until the loaded project shows up in the @projects</span>
792
- 194: <span class="ruby-comment cmt"># list. We use our tag to identify the right entry.</span>
793
- 195: <span class="ruby-identifier">pr</span> = <span class="ruby-keyword kw">nil</span>
794
- 196: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">nil?</span>
795
- 197: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
796
- 198: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
797
- 199: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">tag</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">tag</span>
798
- 200: <span class="ruby-identifier">pr</span> = <span class="ruby-identifier">p</span>
799
- 201: <span class="ruby-keyword kw">break</span>
800
- 202: <span class="ruby-keyword kw">end</span>
801
- 203: <span class="ruby-keyword kw">end</span>
802
- 204: <span class="ruby-keyword kw">end</span>
803
- 205: <span class="ruby-comment cmt"># The wait in this loop should be pretty short and we don't want to</span>
804
- 206: <span class="ruby-comment cmt"># miss IO from the ProjectServer process.</span>
805
- 207: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0.1</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">pr</span>
806
- 208: <span class="ruby-keyword kw">end</span>
807
- 209:
808
- 210: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Found tag #{tag} in list of loaded projects with URI &quot;</span> <span class="ruby-operator">+</span>
809
- 211: <span class="ruby-node">&quot;#{pr.uri}&quot;</span>)
810
- 212: <span class="ruby-comment cmt"># Return the URI and the authentication key of the new ProjectServer.</span>
811
- 213: [ <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">authKey</span> ]
812
- 214: <span class="ruby-keyword kw">end</span></pre>
809
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 208</span>
810
+ 208: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addProject</span>
811
+ 209: <span class="ruby-comment cmt"># We need some tag to identify the ProjectRecord that this project was</span>
812
+ 210: <span class="ruby-comment cmt"># associated to. Just use a large enough random number.</span>
813
+ 211: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-value">9999999999999</span>)
814
+ 212:
815
+ 213: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Pushing #{tag} to load Queue&quot;</span>)
816
+ 214: <span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">tag</span>)
817
+ 215:
818
+ 216: <span class="ruby-comment cmt"># Now we have to wait until the loaded project shows up in the @projects</span>
819
+ 217: <span class="ruby-comment cmt"># list. We use our tag to identify the right entry.</span>
820
+ 218: <span class="ruby-identifier">pr</span> = <span class="ruby-keyword kw">nil</span>
821
+ 219: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">nil?</span>
822
+ 220: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
823
+ 221: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
824
+ 222: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">tag</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">tag</span>
825
+ 223: <span class="ruby-identifier">pr</span> = <span class="ruby-identifier">p</span>
826
+ 224: <span class="ruby-keyword kw">break</span>
827
+ 225: <span class="ruby-keyword kw">end</span>
828
+ 226: <span class="ruby-keyword kw">end</span>
829
+ 227: <span class="ruby-keyword kw">end</span>
830
+ 228: <span class="ruby-comment cmt"># The wait in this loop should be pretty short and we don't want to</span>
831
+ 229: <span class="ruby-comment cmt"># miss IO from the ProjectServer process.</span>
832
+ 230: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0.1</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">pr</span>
833
+ 231: <span class="ruby-keyword kw">end</span>
834
+ 232:
835
+ 233: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Found tag #{tag} in list of loaded projects with URI &quot;</span> <span class="ruby-operator">+</span>
836
+ 234: <span class="ruby-node">&quot;#{pr.uri}&quot;</span>)
837
+ 235: <span class="ruby-comment cmt"># Return the URI and the authentication key of the new ProjectServer.</span>
838
+ 236: [ <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">authKey</span> ]
839
+ 237: <span class="ruby-keyword kw">end</span></pre>
813
840
  </div>
814
841
 
815
842
  </div>
@@ -843,17 +870,17 @@ client and the server get this secret key from the same configuration file.
843
870
  <div class="method-source-code"
844
871
  id="check-ey-source">
845
872
  <pre>
846
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 133</span>
847
- 133: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkKey</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-identifier">command</span>)
848
- 134: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">authKey</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@authKey</span>
849
- 135: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Accepted authentication key for command '#{command}'&quot;</span>)
850
- 136: <span class="ruby-keyword kw">else</span>
851
- 137: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-node">&quot;Rejected wrong authentication key '#{authKey}' &quot;</span> <span class="ruby-operator">+</span>
852
- 138: <span class="ruby-node">&quot;for command '#{command}'&quot;</span>)
853
- 139: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
854
- 140: <span class="ruby-keyword kw">end</span>
855
- 141: <span class="ruby-keyword kw">true</span>
856
- 142: <span class="ruby-keyword kw">end</span></pre>
873
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 156</span>
874
+ 156: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkKey</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-identifier">command</span>)
875
+ 157: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">authKey</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@authKey</span>
876
+ 158: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Accepted authentication key for command '#{command}'&quot;</span>)
877
+ 159: <span class="ruby-keyword kw">else</span>
878
+ 160: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-node">&quot;Rejected wrong authentication key '#{authKey}' &quot;</span> <span class="ruby-operator">+</span>
879
+ 161: <span class="ruby-node">&quot;for command '#{command}'&quot;</span>)
880
+ 162: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
881
+ 163: <span class="ruby-keyword kw">end</span>
882
+ 164: <span class="ruby-keyword kw">true</span>
883
+ 165: <span class="ruby-keyword kw">end</span></pre>
857
884
  </div>
858
885
 
859
886
  </div>
@@ -887,22 +914,22 @@ for the project with project ID <em>projectId</em>.
887
914
  <div class="method-source-code"
888
915
  id="get-roject-source">
889
916
  <pre>
890
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 239</span>
891
- 239: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getProject</span>(<span class="ruby-identifier">projectId</span>)
892
- 240: <span class="ruby-comment cmt"># Find the project with the ID args[0].</span>
893
- 241: <span class="ruby-identifier">project</span> = <span class="ruby-keyword kw">nil</span>
894
- 242: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
895
- 243: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
896
- 244: <span class="ruby-identifier">project</span> = <span class="ruby-identifier">p</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">projectId</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span>
897
- 245: <span class="ruby-keyword kw">end</span>
898
- 246: <span class="ruby-keyword kw">end</span>
899
- 247:
900
- 248: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">nil?</span>
901
- 249: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;No project with ID #{projectId} found&quot;</span>)
902
- 250: <span class="ruby-keyword kw">return</span> [ <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ]
903
- 251: <span class="ruby-keyword kw">end</span>
904
- 252: [ <span class="ruby-identifier">project</span>.<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">project</span>.<span class="ruby-identifier">authKey</span> ]
905
- 253: <span class="ruby-keyword kw">end</span></pre>
917
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 262</span>
918
+ 262: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getProject</span>(<span class="ruby-identifier">projectId</span>)
919
+ 263: <span class="ruby-comment cmt"># Find the project with the ID args[0].</span>
920
+ 264: <span class="ruby-identifier">project</span> = <span class="ruby-keyword kw">nil</span>
921
+ 265: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
922
+ 266: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
923
+ 267: <span class="ruby-identifier">project</span> = <span class="ruby-identifier">p</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">projectId</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span>
924
+ 268: <span class="ruby-keyword kw">end</span>
925
+ 269: <span class="ruby-keyword kw">end</span>
926
+ 270:
927
+ 271: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">nil?</span>
928
+ 272: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;No project with ID #{projectId} found&quot;</span>)
929
+ 273: <span class="ruby-keyword kw">return</span> [ <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ]
930
+ 274: <span class="ruby-keyword kw">end</span>
931
+ 275: [ <span class="ruby-identifier">project</span>.<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">project</span>.<span class="ruby-identifier">authKey</span> ]
932
+ 276: <span class="ruby-keyword kw">end</span></pre>
906
933
  </div>
907
934
 
908
935
  </div>
@@ -935,16 +962,16 @@ Return a list of IDs of projects that are in state :ready.
935
962
  <div class="method-source-code"
936
963
  id="get-roject-ist-source">
937
964
  <pre>
938
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 256</span>
939
- 256: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getProjectList</span>
940
- 257: <span class="ruby-identifier">list</span> = []
941
- 258: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
942
- 259: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
943
- 260: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">id</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span>
944
- 261: <span class="ruby-keyword kw">end</span>
945
- 262: <span class="ruby-keyword kw">end</span>
946
- 263: <span class="ruby-identifier">list</span>
947
- 264: <span class="ruby-keyword kw">end</span></pre>
965
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 292</span>
966
+ 292: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getProjectList</span>
967
+ 293: <span class="ruby-identifier">list</span> = []
968
+ 294: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
969
+ 295: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
970
+ 296: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">id</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span>
971
+ 297: <span class="ruby-keyword kw">end</span>
972
+ 298: <span class="ruby-keyword kw">end</span>
973
+ 299: <span class="ruby-identifier">list</span>
974
+ 300: <span class="ruby-keyword kw">end</span></pre>
948
975
  </div>
949
976
 
950
977
  </div>
@@ -975,27 +1002,27 @@ Return a list of IDs of projects that are in state :ready.
975
1002
  <div class="method-source-code"
976
1003
  id="remove-roject-source">
977
1004
  <pre>
978
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 216</span>
979
- 216: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">removeProject</span>(<span class="ruby-identifier">indexOrId</span>)
980
- 217: <span class="ruby-comment cmt"># Find all projects with the IDs in indexOrId and mark them as :obsolete.</span>
981
- 218: <span class="ruby-keyword kw">if</span> <span class="ruby-regexp re">/^[0-9]$/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">indexOrId</span>)
982
- 219: <span class="ruby-identifier">index</span> = <span class="ruby-identifier">indexOrId</span>.<span class="ruby-identifier">to_i</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
983
- 220: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">index</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">index</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">length</span>
984
- 221: <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">index</span>].<span class="ruby-identifier">state</span> = <span class="ruby-value">:obsolete</span>
985
- 222: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
986
- 223: <span class="ruby-keyword kw">end</span>
987
- 224: <span class="ruby-keyword kw">else</span>
988
- 225: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
989
- 226: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
990
- 227: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">indexOrId</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span>
991
- 228: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> = <span class="ruby-value">:obsolete</span>
992
- 229: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
993
- 230: <span class="ruby-keyword kw">end</span>
994
- 231: <span class="ruby-keyword kw">end</span>
995
- 232: <span class="ruby-keyword kw">end</span>
996
- 233: <span class="ruby-keyword kw">end</span>
997
- 234: <span class="ruby-keyword kw">false</span>
998
- 235: <span class="ruby-keyword kw">end</span></pre>
1005
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 239</span>
1006
+ 239: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">removeProject</span>(<span class="ruby-identifier">indexOrId</span>)
1007
+ 240: <span class="ruby-comment cmt"># Find all projects with the IDs in indexOrId and mark them as :obsolete.</span>
1008
+ 241: <span class="ruby-keyword kw">if</span> <span class="ruby-regexp re">/^[0-9]$/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">indexOrId</span>)
1009
+ 242: <span class="ruby-identifier">index</span> = <span class="ruby-identifier">indexOrId</span>.<span class="ruby-identifier">to_i</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1010
+ 243: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">index</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">index</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">length</span>
1011
+ 244: <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">index</span>].<span class="ruby-identifier">state</span> = <span class="ruby-value">:obsolete</span>
1012
+ 245: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
1013
+ 246: <span class="ruby-keyword kw">end</span>
1014
+ 247: <span class="ruby-keyword kw">else</span>
1015
+ 248: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1016
+ 249: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1017
+ 250: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">indexOrId</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span>
1018
+ 251: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> = <span class="ruby-value">:obsolete</span>
1019
+ 252: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
1020
+ 253: <span class="ruby-keyword kw">end</span>
1021
+ 254: <span class="ruby-keyword kw">end</span>
1022
+ 255: <span class="ruby-keyword kw">end</span>
1023
+ 256: <span class="ruby-keyword kw">end</span>
1024
+ 257: <span class="ruby-keyword kw">false</span>
1025
+ 258: <span class="ruby-keyword kw">end</span></pre>
999
1026
  </div>
1000
1027
 
1001
1028
  </div>
@@ -1026,10 +1053,10 @@ Return a list of IDs of projects that are in state :ready.
1026
1053
  <div class="method-source-code"
1027
1054
  id="report-source">
1028
1055
  <pre>
1029
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 266</span>
1030
- 266: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">report</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">reportId</span>)
1031
- 267: <span class="ruby-identifier">uri</span>, <span class="ruby-identifier">key</span> = <span class="ruby-identifier">getProject</span>(<span class="ruby-identifier">projectId</span>)
1032
- 268: <span class="ruby-keyword kw">end</span></pre>
1056
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 302</span>
1057
+ 302: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">report</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">reportId</span>)
1058
+ 303: <span class="ruby-identifier">uri</span>, <span class="ruby-identifier">key</span> = <span class="ruby-identifier">getProject</span>(<span class="ruby-identifier">projectId</span>)
1059
+ 304: <span class="ruby-keyword kw">end</span></pre>
1033
1060
  </div>
1034
1061
 
1035
1062
  </div>
@@ -1060,54 +1087,74 @@ Return a list of IDs of projects that are in state :ready.
1060
1087
  <div class="method-source-code"
1061
1088
  id="start-source">
1062
1089
  <pre>
1063
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 75</span>
1064
- 75: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start</span>
1065
- 76: <span class="ruby-comment cmt"># To ensure a certain level of security, the user must provide an</span>
1066
- 77: <span class="ruby-comment cmt"># authentication key to authenticate the client to this server.</span>
1067
- 78: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@authKey</span>
1068
- 79: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">You must set an authentication key in the configuration file. Create a filenamed .taskjugglerrc or taskjuggler.rc that contains at least the followinglines. Replace 'your_secret_key' with some random character sequence._global: authKey: your_secret_key</span>
1069
- 80: )
1070
- 81: <span class="ruby-keyword kw">end</span>
1071
- 82:
1072
- 83: <span class="ruby-comment cmt"># In daemon mode, we fork twice and only the 2nd child continues here.</span>
1073
- 84: <span class="ruby-keyword kw">super</span>()
1074
- 85: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">&quot;Starting project broker&quot;</span>)
1075
- 86:
1076
- 87: <span class="ruby-keyword kw">begin</span>
1077
- 88: <span class="ruby-comment cmt"># The web server must be started before we turn SAFE mode on.</span>
1078
- 89: <span class="ruby-ivar">@webServer</span> = <span class="ruby-constant">WebServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-ivar">@webServerPort</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@enableWebServer</span>
1079
- 90: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-value str">&quot;TaskJuggler web server is listening on port &quot;</span> <span class="ruby-operator">+</span>
1080
- 91: <span class="ruby-node">&quot;#{@webServerPort}&quot;</span>)
1081
- 92: <span class="ruby-keyword kw">rescue</span>
1082
- 93: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot start web server: #{$!}&quot;</span>)
1083
- 94: <span class="ruby-keyword kw">end</span>
1084
- 95:
1085
- 96: <span class="ruby-comment cmt"># Setup a DRb server to handle the incomming requests from the clients.</span>
1086
- 97: <span class="ruby-identifier">brokerIface</span> = <span class="ruby-constant">ProjectBrokerIface</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
1087
- 98: <span class="ruby-keyword kw">begin</span>
1088
- 99: <span class="ruby-identifier">$SAFE</span> = <span class="ruby-value">1</span>
1089
- 100: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">install_acl</span>(<span class="ruby-constant">ACL</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">] deny all
1090
- 101: allow 127.0.0.1 ]</span>))
1091
- 102: <span class="ruby-ivar">@uri</span> = <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>(<span class="ruby-node">&quot;druby://127.0.0.1:#{@port}&quot;</span>, <span class="ruby-identifier">brokerIface</span>).<span class="ruby-identifier">uri</span>
1092
- 103: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;TaskJuggler daemon is listening on #{@uri}&quot;</span>)
1093
- 104: <span class="ruby-keyword kw">rescue</span>
1094
- 105: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot listen on port #{@port}: #{$!}&quot;</span>)
1095
- 106: <span class="ruby-keyword kw">end</span>
1096
- 107:
1097
- 108: <span class="ruby-comment cmt"># If project files were specified on the command line, we add them here.</span>
1098
- 109: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1099
- 110: <span class="ruby-ivar">@projectFiles</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
1100
- 111: <span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">project</span>)
1101
- 112: <span class="ruby-keyword kw">end</span>
1102
- 113:
1103
- 114: <span class="ruby-comment cmt"># Start a Thread that waits for the @terminate flag to be set and does</span>
1104
- 115: <span class="ruby-comment cmt"># some other work asynchronously.</span>
1105
- 116: <span class="ruby-identifier">startHousekeeping</span>
1106
- 117:
1107
- 118: <span class="ruby-comment cmt"># Cleanup the DRb threads</span>
1108
- 119: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">thread</span>.<span class="ruby-identifier">join</span>
1109
- 120: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-value str">'TaskJuggler daemon terminated'</span>)
1110
- 121: <span class="ruby-keyword kw">end</span></pre>
1090
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 78</span>
1091
+ 78: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start</span>
1092
+ 79: <span class="ruby-comment cmt"># To ensure a certain level of security, the user must provide an</span>
1093
+ 80: <span class="ruby-comment cmt"># authentication key to authenticate the client to this server.</span>
1094
+ 81: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@authKey</span>
1095
+ 82: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">You must set an authentication key in the configuration file. Create a filenamed .taskjugglerrc or taskjuggler.rc that contains at least the followinglines. Replace 'your_secret_key' with some random character sequence._global: authKey: your_secret_key</span>
1096
+ 83: )
1097
+ 84: <span class="ruby-keyword kw">end</span>
1098
+ 85:
1099
+ 86: <span class="ruby-comment cmt"># In daemon mode, we fork twice and only the 2nd child continues here.</span>
1100
+ 87: <span class="ruby-keyword kw">super</span>()
1101
+ 88: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">&quot;Starting project broker&quot;</span>)
1102
+ 89:
1103
+ 90: <span class="ruby-keyword kw">begin</span>
1104
+ 91: <span class="ruby-comment cmt"># The web server must be started before we turn SAFE mode on.</span>
1105
+ 92: <span class="ruby-ivar">@webServer</span> = <span class="ruby-constant">WebServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-ivar">@webServerPort</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@enableWebServer</span>
1106
+ 93: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-value str">&quot;TaskJuggler web server is listening on port &quot;</span> <span class="ruby-operator">+</span>
1107
+ 94: <span class="ruby-node">&quot;#{@webServerPort}&quot;</span>)
1108
+ 95: <span class="ruby-keyword kw">rescue</span>
1109
+ 96: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot start web server: #{$!}&quot;</span>)
1110
+ 97: <span class="ruby-keyword kw">end</span>
1111
+ 98:
1112
+ 99: <span class="ruby-comment cmt"># Setup a DRb server to handle the incomming requests from the clients.</span>
1113
+ 100: <span class="ruby-identifier">brokerIface</span> = <span class="ruby-constant">ProjectBrokerIface</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
1114
+ 101: <span class="ruby-keyword kw">begin</span>
1115
+ 102: <span class="ruby-identifier">$SAFE</span> = <span class="ruby-value">1</span>
1116
+ 103: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">install_acl</span>(<span class="ruby-constant">ACL</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">] deny all
1117
+ 104: allow 127.0.0.1 ]</span>))
1118
+ 105: <span class="ruby-ivar">@uri</span> = <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>(<span class="ruby-node">&quot;druby://127.0.0.1:#{@port}&quot;</span>, <span class="ruby-identifier">brokerIface</span>).<span class="ruby-identifier">uri</span>
1119
+ 106: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;TaskJuggler daemon is listening on #{@uri}&quot;</span>)
1120
+ 107: <span class="ruby-keyword kw">rescue</span>
1121
+ 108: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot listen on port #{@port}: #{$!}&quot;</span>)
1122
+ 109: <span class="ruby-keyword kw">end</span>
1123
+ 110:
1124
+ 111: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@port</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1125
+ 112: <span class="ruby-comment cmt"># If the port is set to 0 (any port) we save the ProjectBroker URI in</span>
1126
+ 113: <span class="ruby-comment cmt"># the file .tj3d.uri. tj3client will look for it.</span>
1127
+ 114: <span class="ruby-keyword kw">begin</span>
1128
+ 115: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@uriFile</span>, <span class="ruby-value str">'w'</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span> <span class="ruby-ivar">@uri</span> }
1129
+ 116: <span class="ruby-keyword kw">rescue</span>
1130
+ 117: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot write URI file #{@uriFile}: #{$!}&quot;</span>)
1131
+ 118: <span class="ruby-keyword kw">end</span>
1132
+ 119: <span class="ruby-keyword kw">end</span>
1133
+ 120:
1134
+ 121: <span class="ruby-comment cmt"># If project files were specified on the command line, we add them here.</span>
1135
+ 122: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1136
+ 123: <span class="ruby-ivar">@projectFiles</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
1137
+ 124: <span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">project</span>)
1138
+ 125: <span class="ruby-keyword kw">end</span>
1139
+ 126:
1140
+ 127: <span class="ruby-comment cmt"># Start a Thread that waits for the @terminate flag to be set and does</span>
1141
+ 128: <span class="ruby-comment cmt"># some other work asynchronously.</span>
1142
+ 129: <span class="ruby-identifier">startHousekeeping</span>
1143
+ 130:
1144
+ 131: <span class="ruby-comment cmt"># Cleanup the DRb threads</span>
1145
+ 132: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">thread</span>.<span class="ruby-identifier">join</span>
1146
+ 133:
1147
+ 134: <span class="ruby-comment cmt"># If we have created a URI file, we need to delete it again.</span>
1148
+ 135: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@port</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1149
+ 136: <span class="ruby-keyword kw">begin</span>
1150
+ 137: <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-ivar">@uriFile</span>)
1151
+ 138: <span class="ruby-keyword kw">rescue</span>
1152
+ 139: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Cannot delete URI file .tj3d.uri: #{$!}&quot;</span>)
1153
+ 140: <span class="ruby-keyword kw">end</span>
1154
+ 141: <span class="ruby-keyword kw">end</span>
1155
+ 142:
1156
+ 143: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-value str">'TaskJuggler daemon terminated'</span>)
1157
+ 144: <span class="ruby-keyword kw">end</span></pre>
1111
1158
  </div>
1112
1159
 
1113
1160
  </div>
@@ -1140,24 +1187,24 @@ Generate a table with information about the loaded projects.
1140
1187
  <div class="method-source-code"
1141
1188
  id="status-source">
1142
1189
  <pre>
1143
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 165</span>
1144
- 165: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">status</span>
1145
- 166: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">empty?</span>
1146
- 167: <span class="ruby-value str">&quot;No projects registered\n&quot;</span>
1147
- 168: <span class="ruby-keyword kw">else</span>
1148
- 169: <span class="ruby-identifier">format</span> = <span class="ruby-value str">&quot; %3s | %-25s | %-14s | %-20s\n&quot;</span>
1149
- 170: <span class="ruby-identifier">out</span> = <span class="ruby-identifier">sprintf</span>(<span class="ruby-identifier">format</span>, <span class="ruby-value str">'No.'</span>, <span class="ruby-value str">'Project ID'</span>, <span class="ruby-value str">'Status'</span>, <span class="ruby-value str">'Loaded since'</span>)
1150
- 171: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'-'</span> * <span class="ruby-value">4</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'+'</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'-'</span> * <span class="ruby-value">27</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'+'</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'-'</span> * <span class="ruby-value">16</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'+'</span> <span class="ruby-operator">+</span>
1151
- 172: <span class="ruby-value str">'-'</span> * <span class="ruby-value">20</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span>
1152
- 173: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1153
- 174: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1154
- 175: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
1155
- 176: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>)
1156
- 177: <span class="ruby-keyword kw">end</span>
1157
- 178: <span class="ruby-keyword kw">end</span>
1158
- 179: <span class="ruby-identifier">out</span>
1159
- 180: <span class="ruby-keyword kw">end</span>
1160
- 181: <span class="ruby-keyword kw">end</span></pre>
1190
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 188</span>
1191
+ 188: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">status</span>
1192
+ 189: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">empty?</span>
1193
+ 190: <span class="ruby-value str">&quot;No projects registered\n&quot;</span>
1194
+ 191: <span class="ruby-keyword kw">else</span>
1195
+ 192: <span class="ruby-identifier">format</span> = <span class="ruby-value str">&quot; %3s | %-25s | %-14s | %s | %-20s\n&quot;</span>
1196
+ 193: <span class="ruby-identifier">out</span> = <span class="ruby-identifier">sprintf</span>(<span class="ruby-identifier">format</span>, <span class="ruby-value str">'No.'</span>, <span class="ruby-value str">'Project ID'</span>, <span class="ruby-value str">'Status'</span>, <span class="ruby-value str">'M'</span>,
1197
+ 194: <span class="ruby-value str">'Loaded since'</span>)
1198
+ 195: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; #{'-' * 4}+#{'-' * 27}+#{'-' * 16}+#{'-' * 3}+#{'-' * 20}\n&quot;</span>
1199
+ 196: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1200
+ 197: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1201
+ 198: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
1202
+ 199: <span class="ruby-identifier">out</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>)
1203
+ 200: <span class="ruby-keyword kw">end</span>
1204
+ 201: <span class="ruby-keyword kw">end</span>
1205
+ 202: <span class="ruby-identifier">out</span>
1206
+ 203: <span class="ruby-keyword kw">end</span>
1207
+ 204: <span class="ruby-keyword kw">end</span></pre>
1161
1208
  </div>
1162
1209
 
1163
1210
  </div>
@@ -1190,25 +1237,69 @@ This command will initiate the termination of the daemon.
1190
1237
  <div class="method-source-code"
1191
1238
  id="stop-source">
1192
1239
  <pre>
1193
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 145</span>
1194
- 145: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stop</span>
1195
- 146: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">'Terminating on client request'</span>)
1196
- 147:
1197
- 148: <span class="ruby-comment cmt"># Shut down the web server if we've started one.</span>
1198
- 149: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@webServer</span>
1199
- 150: <span class="ruby-ivar">@webServer</span>.<span class="ruby-identifier">stop</span>
1200
- 151: <span class="ruby-keyword kw">end</span>
1201
- 152:
1202
- 153: <span class="ruby-comment cmt"># Send termination signal to all ProjectServer instances</span>
1203
- 154: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1204
- 155: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">terminateServer</span> }
1205
- 156: <span class="ruby-keyword kw">end</span>
1206
- 157:
1207
- 158: <span class="ruby-comment cmt"># Setting the @terminate flag to true will case the terminator Thread to</span>
1208
- 159: <span class="ruby-comment cmt"># call DRb.stop_service</span>
1209
- 160: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
1210
- 161: <span class="ruby-keyword kw">super</span>
1211
- 162: <span class="ruby-keyword kw">end</span></pre>
1240
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 168</span>
1241
+ 168: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">stop</span>
1242
+ 169: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">'Terminating on client request'</span>)
1243
+ 170:
1244
+ 171: <span class="ruby-comment cmt"># Shut down the web server if we've started one.</span>
1245
+ 172: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@webServer</span>
1246
+ 173: <span class="ruby-ivar">@webServer</span>.<span class="ruby-identifier">stop</span>
1247
+ 174: <span class="ruby-keyword kw">end</span>
1248
+ 175:
1249
+ 176: <span class="ruby-comment cmt"># Send termination signal to all ProjectServer instances</span>
1250
+ 177: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1251
+ 178: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">terminateServer</span> }
1252
+ 179: <span class="ruby-keyword kw">end</span>
1253
+ 180:
1254
+ 181: <span class="ruby-comment cmt"># Setting the @terminate flag to true will case the terminator Thread to</span>
1255
+ 182: <span class="ruby-comment cmt"># call DRb.stop_service</span>
1256
+ 183: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
1257
+ 184: <span class="ruby-keyword kw">super</span>
1258
+ 185: <span class="ruby-keyword kw">end</span></pre>
1259
+ </div>
1260
+
1261
+ </div>
1262
+
1263
+
1264
+
1265
+
1266
+ </div>
1267
+
1268
+
1269
+ <div id="update-method" class="method-detail ">
1270
+ <a name="method-i-update"></a>
1271
+
1272
+ <div class="method-heading">
1273
+
1274
+ <span class="method-name">update</span><span
1275
+ class="method-args">()</span>
1276
+ <span class="method-click-advice">click to toggle source</span>
1277
+
1278
+ </div>
1279
+
1280
+ <div class="method-description">
1281
+
1282
+ <p>
1283
+ Reload all projects that have modified files and are not already being
1284
+ reloaded.
1285
+ </p>
1286
+
1287
+
1288
+
1289
+ <div class="method-source-code"
1290
+ id="update-source">
1291
+ <pre>
1292
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 280</span>
1293
+ 280: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">update</span>
1294
+ 281: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1295
+ 282: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
1296
+ 283: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">modified</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">project</span>.<span class="ruby-identifier">reloading</span>
1297
+ 284: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">reloading</span> = <span class="ruby-keyword kw">true</span>
1298
+ 285: <span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">files</span>)
1299
+ 286: <span class="ruby-keyword kw">end</span>
1300
+ 287: <span class="ruby-keyword kw">end</span>
1301
+ 288: <span class="ruby-keyword kw">end</span>
1302
+ 289: <span class="ruby-keyword kw">end</span></pre>
1212
1303
  </div>
1213
1304
 
1214
1305
  </div>
@@ -1225,7 +1316,7 @@ This command will initiate the termination of the daemon.
1225
1316
  <div class="method-heading">
1226
1317
 
1227
1318
  <span class="method-name">updateState</span><span
1228
- class="method-args">(authKey, id, state)</span>
1319
+ class="method-args">(authKey, filesOrId, state, modified)</span>
1229
1320
  <span class="method-click-advice">click to toggle source</span>
1230
1321
 
1231
1322
  </div>
@@ -1244,45 +1335,59 @@ href="ProjectRecord.html">ProjectRecord</a> list.
1244
1335
  <div class="method-source-code"
1245
1336
  id="update-tate-source">
1246
1337
  <pre>
1247
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 272</span>
1248
- 272: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">updateState</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">state</span>)
1249
- 273: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">false</span>
1250
- 274: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1251
- 275: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
1252
- 276: <span class="ruby-comment cmt"># Don't accept updates for already obsolete entries.</span>
1253
- 277: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:obsolete</span>
1254
- 278:
1255
- 279: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Updating state for #{id} to #{state}&quot;</span>)
1256
- 280: <span class="ruby-comment cmt"># Only update the record that has the matching authKey</span>
1257
- 281: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">authKey</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">authKey</span>
1258
- 282: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">id</span> = <span class="ruby-identifier">id</span>
1259
- 283:
1260
- 284: <span class="ruby-comment cmt"># If the state is being changed from something to :ready, this is</span>
1261
- 285: <span class="ruby-comment cmt"># now the current project for the project ID.</span>
1262
- 286: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">!=</span> <span class="ruby-value">:ready</span>
1263
- 287: <span class="ruby-comment cmt"># Mark other project records with same project ID as obsolete</span>
1264
- 288: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1265
- 289: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">project</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">id</span>
1266
- 290: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> = <span class="ruby-value">:obsolete</span>
1267
- 291: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Marking entry with ID #{id} as obsolete&quot;</span>)
1268
- 292: <span class="ruby-keyword kw">end</span>
1269
- 293: <span class="ruby-keyword kw">end</span>
1270
- 294: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">readySince</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
1271
- 295: <span class="ruby-keyword kw">end</span>
1272
- 296:
1273
- 297: <span class="ruby-comment cmt"># Failed ProjectServers are terminated automatically. We can't</span>
1274
- 298: <span class="ruby-comment cmt"># reach them any more.</span>
1275
- 299: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:failed</span>
1276
- 300:
1277
- 301: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">state</span> = <span class="ruby-identifier">state</span>
1278
- 302: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">true</span>
1279
- 303: <span class="ruby-keyword kw">break</span>
1280
- 304: <span class="ruby-keyword kw">end</span>
1281
- 305: <span class="ruby-keyword kw">end</span>
1282
- 306: <span class="ruby-keyword kw">end</span>
1283
- 307:
1284
- 308: <span class="ruby-identifier">result</span>
1285
- 309: <span class="ruby-keyword kw">end</span></pre>
1338
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 308</span>
1339
+ 308: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">updateState</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-identifier">filesOrId</span>, <span class="ruby-identifier">state</span>, <span class="ruby-identifier">modified</span>)
1340
+ 309: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">false</span>
1341
+ 310: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">filesOrId</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
1342
+ 311: <span class="ruby-identifier">files</span> = <span class="ruby-identifier">filesOrId</span>
1343
+ 312: <span class="ruby-comment cmt"># Use the name of the master files for now.</span>
1344
+ 313: <span class="ruby-identifier">id</span> = <span class="ruby-identifier">files</span>[<span class="ruby-value">1</span>]
1345
+ 314: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">filesOrId</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
1346
+ 315: <span class="ruby-identifier">id</span> = <span class="ruby-identifier">filesOrId</span>
1347
+ 316: <span class="ruby-identifier">files</span> = <span class="ruby-keyword kw">nil</span>
1348
+ 317: <span class="ruby-keyword kw">else</span>
1349
+ 318: <span class="ruby-identifier">id</span> = <span class="ruby-identifier">files</span> = <span class="ruby-keyword kw">nil</span>
1350
+ 319: <span class="ruby-keyword kw">end</span>
1351
+ 320:
1352
+ 321: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1353
+ 322: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
1354
+ 323: <span class="ruby-comment cmt"># Don't accept updates for already obsolete entries.</span>
1355
+ 324: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:obsolete</span>
1356
+ 325:
1357
+ 326: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Updating state for #{id} to #{state}&quot;</span>)
1358
+ 327: <span class="ruby-comment cmt"># Only update the record that has the matching authKey</span>
1359
+ 328: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">authKey</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">authKey</span>
1360
+ 329: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">id</span> = <span class="ruby-identifier">id</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">id</span>
1361
+ 330: <span class="ruby-comment cmt"># An Array of [ workingDir, tjpFile, ... other tji files ]</span>
1362
+ 331: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">files</span> = <span class="ruby-identifier">files</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">files</span>
1363
+ 332:
1364
+ 333: <span class="ruby-comment cmt"># If the state is being changed from something to :ready, this is</span>
1365
+ 334: <span class="ruby-comment cmt"># now the current project for the project ID.</span>
1366
+ 335: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">!=</span> <span class="ruby-value">:ready</span>
1367
+ 336: <span class="ruby-comment cmt"># Mark other project records with same project ID as obsolete</span>
1368
+ 337: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1369
+ 338: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">project</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">id</span>
1370
+ 339: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> = <span class="ruby-value">:obsolete</span>
1371
+ 340: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Marking entry with ID #{id} as obsolete&quot;</span>)
1372
+ 341: <span class="ruby-keyword kw">end</span>
1373
+ 342: <span class="ruby-keyword kw">end</span>
1374
+ 343: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">readySince</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
1375
+ 344: <span class="ruby-keyword kw">end</span>
1376
+ 345:
1377
+ 346: <span class="ruby-comment cmt"># Failed ProjectServers are terminated automatically. We can't</span>
1378
+ 347: <span class="ruby-comment cmt"># reach them any more.</span>
1379
+ 348: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:failed</span>
1380
+ 349:
1381
+ 350: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">state</span> = <span class="ruby-identifier">state</span>
1382
+ 351: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">modified</span> = <span class="ruby-identifier">modified</span>
1383
+ 352: <span class="ruby-identifier">result</span> = <span class="ruby-keyword kw">true</span>
1384
+ 353: <span class="ruby-keyword kw">break</span>
1385
+ 354: <span class="ruby-keyword kw">end</span>
1386
+ 355: <span class="ruby-keyword kw">end</span>
1387
+ 356: <span class="ruby-keyword kw">end</span>
1388
+ 357:
1389
+ 358: <span class="ruby-identifier">result</span>
1390
+ 359: <span class="ruby-keyword kw">end</span></pre>
1286
1391
  </div>
1287
1392
 
1288
1393
  </div>
@@ -1319,30 +1424,30 @@ href="ProjectRecord.html">ProjectRecord</a> list.
1319
1424
  <div class="method-source-code"
1320
1425
  id="load-roject-source">
1321
1426
  <pre>
1322
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 369</span>
1323
- 369: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadProject</span>(<span class="ruby-identifier">tagOrProject</span>)
1324
- 370: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tagOrProject</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
1325
- 371: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-value">9999999999999</span>)
1326
- 372: <span class="ruby-identifier">project</span> = <span class="ruby-identifier">tagOrProject</span>
1327
- 373: <span class="ruby-comment cmt"># The 2nd element of the Array is the *.tjp file name.</span>
1328
- 374: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Loading project #{tagOrProject[1]} with tag #{tag}&quot;</span>)
1329
- 375: <span class="ruby-keyword kw">else</span>
1330
- 376: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">tagOrProject</span>
1331
- 377: <span class="ruby-identifier">project</span> = <span class="ruby-keyword kw">nil</span>
1332
- 378: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Loading project for tag #{tag}&quot;</span>)
1333
- 379: <span class="ruby-keyword kw">end</span>
1334
- 380: <span class="ruby-identifier">pr</span> = <span class="ruby-constant">ProjectRecord</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tag</span>)
1335
- 381: <span class="ruby-identifier">ps</span> = <span class="ruby-constant">ProjectServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">project</span>)
1336
- 382: <span class="ruby-comment cmt"># The ProjectServer can be reached via this DRb URI</span>
1337
- 383: <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">uri</span>
1338
- 384: <span class="ruby-comment cmt"># Method calls must be authenticated with this key</span>
1339
- 385: <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">authKey</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">authKey</span>
1340
- 386:
1341
- 387: <span class="ruby-comment cmt"># Add the ProjectRecord to the @projects list</span>
1342
- 388: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1343
- 389: <span class="ruby-ivar">@projects</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">pr</span>
1344
- 390: <span class="ruby-keyword kw">end</span>
1345
- 391: <span class="ruby-keyword kw">end</span></pre>
1427
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 425</span>
1428
+ 425: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadProject</span>(<span class="ruby-identifier">tagOrProject</span>)
1429
+ 426: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tagOrProject</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
1430
+ 427: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-value">9999999999999</span>)
1431
+ 428: <span class="ruby-identifier">project</span> = <span class="ruby-identifier">tagOrProject</span>
1432
+ 429: <span class="ruby-comment cmt"># The 2nd element of the Array is the *.tjp file name.</span>
1433
+ 430: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Loading project #{tagOrProject[1]} with tag #{tag}&quot;</span>)
1434
+ 431: <span class="ruby-keyword kw">else</span>
1435
+ 432: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">tagOrProject</span>
1436
+ 433: <span class="ruby-identifier">project</span> = <span class="ruby-keyword kw">nil</span>
1437
+ 434: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Loading project for tag #{tag}&quot;</span>)
1438
+ 435: <span class="ruby-keyword kw">end</span>
1439
+ 436: <span class="ruby-identifier">pr</span> = <span class="ruby-constant">ProjectRecord</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tag</span>)
1440
+ 437: <span class="ruby-identifier">ps</span> = <span class="ruby-constant">ProjectServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">project</span>, <span class="ruby-operator">!</span><span class="ruby-ivar">@daemonize</span>)
1441
+ 438: <span class="ruby-comment cmt"># The ProjectServer can be reached via this DRb URI</span>
1442
+ 439: <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">uri</span>
1443
+ 440: <span class="ruby-comment cmt"># Method calls must be authenticated with this key</span>
1444
+ 441: <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">authKey</span> = <span class="ruby-identifier">ps</span>.<span class="ruby-identifier">authKey</span>
1445
+ 442:
1446
+ 443: <span class="ruby-comment cmt"># Add the ProjectRecord to the @projects list</span>
1447
+ 444: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1448
+ 445: <span class="ruby-ivar">@projects</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">pr</span>
1449
+ 446: <span class="ruby-keyword kw">end</span>
1450
+ 447: <span class="ruby-keyword kw">end</span></pre>
1346
1451
  </div>
1347
1452
 
1348
1453
  </div>
@@ -1373,62 +1478,68 @@ href="ProjectRecord.html">ProjectRecord</a> list.
1373
1478
  <div class="method-source-code"
1374
1479
  id="start-ousekeeping-source">
1375
1480
  <pre>
1376
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 313</span>
1377
- 313: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startHousekeeping</span>
1378
- 314: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1379
- 315: <span class="ruby-identifier">cntr</span> = <span class="ruby-value">0</span>
1380
- 316: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1381
- 317: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@terminate</span>
1382
- 318: <span class="ruby-comment cmt"># Give the caller a chance to properly terminate the connection.</span>
1383
- 319: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0.5</span>
1384
- 320: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">'Shutting down DRb server'</span>)
1385
- 321: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">stop_service</span>
1386
- 322: <span class="ruby-keyword kw">break</span>
1387
- 323: <span class="ruby-keyword kw">elsif</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">empty?</span>
1388
- 324: <span class="ruby-identifier">loadProject</span>(<span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">pop</span>)
1389
- 325: <span class="ruby-keyword kw">else</span>
1390
- 326: <span class="ruby-comment cmt"># Send termination command to all obsolute ProjectServer objects.</span>
1391
- 327: <span class="ruby-comment cmt"># To minimize the locking of @projects we collect the obsolete</span>
1392
- 328: <span class="ruby-comment cmt"># items first.</span>
1393
- 329: <span class="ruby-identifier">termList</span> = []
1394
- 330: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1395
- 331: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1396
- 332: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:obsolete</span>
1397
- 333: <span class="ruby-identifier">termList</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">p</span>
1398
- 334: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:failed</span>
1399
- 335: <span class="ruby-comment cmt"># Start removal of entries that didn't parse.</span>
1400
- 336: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> = <span class="ruby-value">:obsolete</span>
1401
- 337: <span class="ruby-keyword kw">end</span>
1402
- 338: <span class="ruby-keyword kw">end</span>
1403
- 339: <span class="ruby-keyword kw">end</span>
1404
- 340: <span class="ruby-comment cmt"># And then send them a termination command.</span>
1405
- 341: <span class="ruby-identifier">termList</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">terminateServer</span> }
1406
- 342:
1407
- 343: <span class="ruby-comment cmt"># Check every 30 seconds that the ProjectServer processes are</span>
1408
- 344: <span class="ruby-comment cmt"># still alive. If not, remove them from the list.</span>
1409
- 345: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">cntr</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">30</span>
1410
- 346: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1411
- 347: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1412
- 348: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">ping</span>
1413
- 349: <span class="ruby-identifier">termList</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">p</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">termList</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">p</span>)
1414
- 350: <span class="ruby-keyword kw">end</span>
1415
- 351: <span class="ruby-keyword kw">end</span>
1416
- 352: <span class="ruby-keyword kw">end</span>
1417
- 353: <span class="ruby-identifier">cntr</span> = <span class="ruby-value">0</span>
1418
- 354: <span class="ruby-keyword kw">end</span>
1419
- 355:
1420
- 356: <span class="ruby-comment cmt"># The housekeeping thread rarely needs to so something. Make sure</span>
1421
- 357: <span class="ruby-comment cmt"># it's sleeping most of the time.</span>
1422
- 358: <span class="ruby-identifier">sleep</span> <span class="ruby-value">1</span>
1423
- 359:
1424
- 360: <span class="ruby-comment cmt"># Remove the obsolete records from the @projects list.</span>
1425
- 361: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1426
- 362: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">termList</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">p</span>) }
1427
- 363: <span class="ruby-keyword kw">end</span>
1428
- 364: <span class="ruby-keyword kw">end</span>
1429
- 365: <span class="ruby-keyword kw">end</span>
1430
- 366: <span class="ruby-keyword kw">end</span>
1431
- 367: <span class="ruby-keyword kw">end</span></pre>
1481
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 363</span>
1482
+ 363: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startHousekeeping</span>
1483
+ 364: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1484
+ 365: <span class="ruby-keyword kw">begin</span>
1485
+ 366: <span class="ruby-identifier">cntr</span> = <span class="ruby-value">0</span>
1486
+ 367: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1487
+ 368: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@terminate</span>
1488
+ 369: <span class="ruby-comment cmt"># Give the caller a chance to properly terminate the connection.</span>
1489
+ 370: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0.5</span>
1490
+ 371: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">'Shutting down DRb server'</span>)
1491
+ 372: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">stop_service</span>
1492
+ 373: <span class="ruby-keyword kw">break</span>
1493
+ 374: <span class="ruby-keyword kw">elsif</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">empty?</span>
1494
+ 375: <span class="ruby-identifier">loadProject</span>(<span class="ruby-ivar">@projectsToLoad</span>.<span class="ruby-identifier">pop</span>)
1495
+ 376: <span class="ruby-keyword kw">else</span>
1496
+ 377: <span class="ruby-comment cmt"># Send termination command to all obsolute ProjectServer</span>
1497
+ 378: <span class="ruby-comment cmt"># objects. To minimize the locking of @projects we collect the</span>
1498
+ 379: <span class="ruby-comment cmt"># obsolete items first.</span>
1499
+ 380: <span class="ruby-identifier">termList</span> = []
1500
+ 381: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1501
+ 382: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1502
+ 383: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:obsolete</span>
1503
+ 384: <span class="ruby-identifier">termList</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">p</span>
1504
+ 385: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:failed</span>
1505
+ 386: <span class="ruby-comment cmt"># Start removal of entries that didn't parse.</span>
1506
+ 387: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">state</span> = <span class="ruby-value">:obsolete</span>
1507
+ 388: <span class="ruby-keyword kw">end</span>
1508
+ 389: <span class="ruby-keyword kw">end</span>
1509
+ 390: <span class="ruby-keyword kw">end</span>
1510
+ 391: <span class="ruby-comment cmt"># And then send them a termination command.</span>
1511
+ 392: <span class="ruby-identifier">termList</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">terminateServer</span> }
1512
+ 393:
1513
+ 394: <span class="ruby-comment cmt"># Check every 10 seconds that the ProjectServer processes are</span>
1514
+ 395: <span class="ruby-comment cmt"># still alive. If not, remove them from the list.</span>
1515
+ 396: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">cntr</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">10</span>
1516
+ 397: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1517
+ 398: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1518
+ 399: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">ping</span>
1519
+ 400: <span class="ruby-identifier">termList</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">p</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">termList</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">p</span>)
1520
+ 401: <span class="ruby-keyword kw">end</span>
1521
+ 402: <span class="ruby-keyword kw">end</span>
1522
+ 403: <span class="ruby-keyword kw">end</span>
1523
+ 404: <span class="ruby-identifier">cntr</span> = <span class="ruby-value">0</span>
1524
+ 405: <span class="ruby-keyword kw">end</span>
1525
+ 406:
1526
+ 407: <span class="ruby-comment cmt"># The housekeeping thread rarely needs to so something. Make</span>
1527
+ 408: <span class="ruby-comment cmt"># sure it's sleeping most of the time.</span>
1528
+ 409: <span class="ruby-identifier">sleep</span> <span class="ruby-value">1</span>
1529
+ 410:
1530
+ 411: <span class="ruby-comment cmt"># Remove the obsolete records from the @projects list.</span>
1531
+ 412: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1532
+ 413: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">termList</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">p</span>) }
1533
+ 414: <span class="ruby-keyword kw">end</span>
1534
+ 415: <span class="ruby-keyword kw">end</span>
1535
+ 416: <span class="ruby-keyword kw">end</span>
1536
+ 417: <span class="ruby-keyword kw">rescue</span>
1537
+ 418: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>
1538
+ 419: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
1539
+ 420: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;ProjectBroker housekeeping error: #{$!}&quot;</span>)
1540
+ 421: <span class="ruby-keyword kw">end</span>
1541
+ 422: <span class="ruby-keyword kw">end</span>
1542
+ 423: <span class="ruby-keyword kw">end</span></pre>
1432
1543
  </div>
1433
1544
 
1434
1545
  </div>