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
@@ -169,6 +169,10 @@
169
169
 
170
170
  <li><a href="../TaskJuggler/DurationAttribute.html">TaskJuggler::DurationAttribute</a></li>
171
171
 
172
+ <li><a href="../TaskJuggler/FileList.html">TaskJuggler::FileList</a></li>
173
+
174
+ <li><a href="../TaskJuggler/FileRecord.html">TaskJuggler::FileRecord</a></li>
175
+
172
176
  <li><a href="../TaskJuggler/FixnumAttribute.html">TaskJuggler::FixnumAttribute</a></li>
173
177
 
174
178
  <li><a href="../TaskJuggler/FlagListAttribute.html">TaskJuggler::FlagListAttribute</a></li>
@@ -241,8 +245,6 @@
241
245
 
242
246
  <li><a href="../TaskJuggler/Macro.html">TaskJuggler::Macro</a></li>
243
247
 
244
- <li><a href="../TaskJuggler/MacroParser.html">TaskJuggler::MacroParser</a></li>
245
-
246
248
  <li><a href="../TaskJuggler/MacroTable.html">TaskJuggler::MacroTable</a></li>
247
249
 
248
250
  <li><a href="../TaskJuggler/ManagerResponsibilities.html">TaskJuggler::ManagerResponsibilities</a></li>
@@ -307,6 +309,8 @@
307
309
 
308
310
  <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
309
311
 
312
+ <li><a href="../TaskJuggler/RTFWithQuerySupport.html">TaskJuggler::RTFWithQuerySupport</a></li>
313
+
310
314
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
311
315
 
312
316
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -353,8 +357,6 @@
353
357
 
354
358
  <li><a href="../TaskJuggler/RichTextElement.html">TaskJuggler::RichTextElement</a></li>
355
359
 
356
- <li><a href="../TaskJuggler/RichTextException.html">TaskJuggler::RichTextException</a></li>
357
-
358
360
  <li><a href="../TaskJuggler/RichTextFunctionExample.html">TaskJuggler::RichTextFunctionExample</a></li>
359
361
 
360
362
  <li><a href="../TaskJuggler/RichTextFunctionHandler.html">TaskJuggler::RichTextFunctionHandler</a></li>
@@ -395,6 +397,8 @@
395
397
 
396
398
  <li><a href="../TaskJuggler/ShiftScenario.html">TaskJuggler::ShiftScenario</a></li>
397
399
 
400
+ <li><a href="../TaskJuggler/SimpleQueryExpander.html">TaskJuggler::SimpleQueryExpander</a></li>
401
+
398
402
  <li><a href="../TaskJuggler/SortListAttribute.html">TaskJuggler::SortListAttribute</a></li>
399
403
 
400
404
  <li><a href="../TaskJuggler/SourceFileInfo.html">TaskJuggler::SourceFileInfo</a></li>
@@ -505,6 +509,8 @@
505
509
 
506
510
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
507
511
 
512
+ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
513
+
508
514
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
509
515
 
510
516
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
@@ -595,6 +601,23 @@ manage the loaded projects. There is one entry for each project in the
595
601
 
596
602
 
597
603
 
604
+ </div>
605
+ </div>
606
+
607
+ <div id="files-attribute-method" class="method-detail">
608
+ <a name="files"></a>
609
+
610
+ <a name="files="></a>
611
+
612
+ <div class="method-heading attribute-method-heading">
613
+ <span class="method-name">files</span><span
614
+ class="attribute-access-type">[RW]</span>
615
+ </div>
616
+
617
+ <div class="method-description">
618
+
619
+
620
+
598
621
  </div>
599
622
  </div>
600
623
 
@@ -646,6 +669,40 @@ manage the loaded projects. There is one entry for each project in the
646
669
 
647
670
 
648
671
 
672
+ </div>
673
+ </div>
674
+
675
+ <div id="modified-attribute-method" class="method-detail">
676
+ <a name="modified"></a>
677
+
678
+ <a name="modified="></a>
679
+
680
+ <div class="method-heading attribute-method-heading">
681
+ <span class="method-name">modified</span><span
682
+ class="attribute-access-type">[RW]</span>
683
+ </div>
684
+
685
+ <div class="method-description">
686
+
687
+
688
+
689
+ </div>
690
+ </div>
691
+
692
+ <div id="reloading-attribute-method" class="method-detail">
693
+ <a name="reloading"></a>
694
+
695
+ <a name="reloading="></a>
696
+
697
+ <div class="method-heading attribute-method-heading">
698
+ <span class="method-name">reloading</span><span
699
+ class="attribute-access-type">[RW]</span>
700
+ </div>
701
+
702
+ <div class="method-description">
703
+
704
+
705
+
649
706
  </div>
650
707
  </div>
651
708
 
@@ -693,26 +750,32 @@ manage the loaded projects. There is one entry for each project in the
693
750
  <div class="method-source-code"
694
751
  id="new-source">
695
752
  <pre>
696
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 446</span>
697
- 446: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">tag</span>)
698
- 447: <span class="ruby-comment cmt"># Before we know the project ID we use this tag to uniquely identify the</span>
699
- 448: <span class="ruby-comment cmt"># project.</span>
700
- 449: <span class="ruby-ivar">@tag</span> = <span class="ruby-identifier">tag</span>
701
- 450: <span class="ruby-comment cmt"># The authentication key for the ProjectServer process.</span>
702
- 451: <span class="ruby-ivar">@authKey</span> = <span class="ruby-keyword kw">nil</span>
703
- 452: <span class="ruby-comment cmt"># The DRb URI where the ProjectServer process is listening.</span>
704
- 453: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
705
- 454: <span class="ruby-comment cmt"># The ID of the project.</span>
706
- 455: <span class="ruby-ivar">@id</span> = <span class="ruby-keyword kw">nil</span>
707
- 456: <span class="ruby-comment cmt"># The state of the project. :new, :loading, :ready, :failed</span>
708
- 457: <span class="ruby-comment cmt"># and :obsolete are supported.</span>
709
- 458: <span class="ruby-ivar">@state</span> = <span class="ruby-value">:new</span>
710
- 459: <span class="ruby-comment cmt"># A time stamp when the project became ready for service.</span>
711
- 460: <span class="ruby-ivar">@readySince</span> = <span class="ruby-keyword kw">nil</span>
712
- 461:
713
- 462: <span class="ruby-ivar">@log</span> = <span class="ruby-constant">LogFile</span>.<span class="ruby-identifier">instance</span>
714
- 463: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-keyword kw">nil</span>
715
- 464: <span class="ruby-keyword kw">end</span></pre>
753
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 521</span>
754
+ 521: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">tag</span>)
755
+ 522: <span class="ruby-comment cmt"># Before we know the project ID we use this tag to uniquely identify the</span>
756
+ 523: <span class="ruby-comment cmt"># project.</span>
757
+ 524: <span class="ruby-ivar">@tag</span> = <span class="ruby-identifier">tag</span>
758
+ 525: <span class="ruby-comment cmt"># Array of [ workingDir, tjp file, ... tji files ]</span>
759
+ 526: <span class="ruby-ivar">@files</span> = <span class="ruby-keyword kw">nil</span>
760
+ 527: <span class="ruby-comment cmt"># The authentication key for the ProjectServer process.</span>
761
+ 528: <span class="ruby-ivar">@authKey</span> = <span class="ruby-keyword kw">nil</span>
762
+ 529: <span class="ruby-comment cmt"># The DRb URI where the ProjectServer process is listening.</span>
763
+ 530: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
764
+ 531: <span class="ruby-comment cmt"># The ID of the project.</span>
765
+ 532: <span class="ruby-ivar">@id</span> = <span class="ruby-keyword kw">nil</span>
766
+ 533: <span class="ruby-comment cmt"># The state of the project. :new, :loading, :ready, :failed</span>
767
+ 534: <span class="ruby-comment cmt"># and :obsolete are supported.</span>
768
+ 535: <span class="ruby-ivar">@state</span> = <span class="ruby-value">:new</span>
769
+ 536: <span class="ruby-comment cmt"># A time stamp when the project became ready for service.</span>
770
+ 537: <span class="ruby-ivar">@readySince</span> = <span class="ruby-keyword kw">nil</span>
771
+ 538: <span class="ruby-comment cmt"># True if any of the input files have been modified after the load.</span>
772
+ 539: <span class="ruby-ivar">@modified</span> = <span class="ruby-keyword kw">false</span>
773
+ 540: <span class="ruby-comment cmt"># True if the reload has already been triggered.</span>
774
+ 541: <span class="ruby-ivar">@reloading</span> = <span class="ruby-keyword kw">false</span>
775
+ 542:
776
+ 543: <span class="ruby-ivar">@log</span> = <span class="ruby-constant">LogFile</span>.<span class="ruby-identifier">instance</span>
777
+ 544: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-keyword kw">nil</span>
778
+ 545: <span class="ruby-keyword kw">end</span></pre>
716
779
  </div>
717
780
 
718
781
  </div>
@@ -749,20 +812,20 @@ manage the loaded projects. There is one entry for each project in the
749
812
  <div class="method-source-code"
750
813
  id="ping-source">
751
814
  <pre>
752
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 466</span>
753
- 466: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
754
- 467: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@uri</span>
755
- 468:
756
- 469: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending ping to ProcessServer #{@uri}&quot;</span>)
757
- 470: <span class="ruby-keyword kw">begin</span>
758
- 471: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@uri</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@projectServer</span>
759
- 472: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">ping</span>(<span class="ruby-ivar">@authKey</span>)
760
- 473: <span class="ruby-keyword kw">rescue</span>
761
- 474: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Ping failed: #{$!}&quot;</span>)
762
- 475: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
763
- 476: <span class="ruby-keyword kw">end</span>
764
- 477: <span class="ruby-keyword kw">true</span>
765
- 478: <span class="ruby-keyword kw">end</span></pre>
815
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 547</span>
816
+ 547: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
817
+ 548: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@uri</span>
818
+ 549:
819
+ 550: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending ping to ProjectServer #{@uri}&quot;</span>)
820
+ 551: <span class="ruby-keyword kw">begin</span>
821
+ 552: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@uri</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@projectServer</span>
822
+ 553: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">ping</span>(<span class="ruby-ivar">@authKey</span>)
823
+ 554: <span class="ruby-keyword kw">rescue</span>
824
+ 555: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Ping failed: #{$!}&quot;</span>)
825
+ 556: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
826
+ 557: <span class="ruby-keyword kw">end</span>
827
+ 558: <span class="ruby-keyword kw">true</span>
828
+ 559: <span class="ruby-keyword kw">end</span></pre>
766
829
  </div>
767
830
 
768
831
  </div>
@@ -796,19 +859,19 @@ href="ProjectServer.html">ProjectServer</a>.
796
859
  <div class="method-source-code"
797
860
  id="terminate-erver-source">
798
861
  <pre>
799
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 481</span>
800
- 481: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminateServer</span>
801
- 482: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@uri</span>
802
- 483:
803
- 484: <span class="ruby-keyword kw">begin</span>
804
- 485: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending termination request to ProcessServer #{@uri}&quot;</span>)
805
- 486: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@uri</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@projectServer</span>
806
- 487: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">terminate</span>(<span class="ruby-ivar">@authKey</span>)
807
- 488: <span class="ruby-keyword kw">rescue</span>
808
- 489: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Termination of ProjectServer failed: #{$!}&quot;</span>)
809
- 490: <span class="ruby-keyword kw">end</span>
810
- 491: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
811
- 492: <span class="ruby-keyword kw">end</span></pre>
862
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 562</span>
863
+ 562: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminateServer</span>
864
+ 563: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@uri</span>
865
+ 564:
866
+ 565: <span class="ruby-keyword kw">begin</span>
867
+ 566: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Sending termination request to ProjectServer #{@uri}&quot;</span>)
868
+ 567: <span class="ruby-ivar">@projectServer</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@uri</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@projectServer</span>
869
+ 568: <span class="ruby-ivar">@projectServer</span>.<span class="ruby-identifier">terminate</span>(<span class="ruby-ivar">@authKey</span>)
870
+ 569: <span class="ruby-keyword kw">rescue</span>
871
+ 570: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Termination of ProjectServer failed: #{$!}&quot;</span>)
872
+ 571: <span class="ruby-keyword kw">end</span>
873
+ 572: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
874
+ 573: <span class="ruby-keyword kw">end</span></pre>
812
875
  </div>
813
876
 
814
877
  </div>
@@ -841,11 +904,11 @@ This is used to generate the status table.
841
904
  <div class="method-source-code"
842
905
  id="to-s-source">
843
906
  <pre>
844
- <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 495</span>
845
- 495: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">index</span>)
846
- 496: <span class="ruby-identifier">sprintf</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">index</span>, <span class="ruby-ivar">@id</span>, <span class="ruby-ivar">@state</span>,
847
- 497: <span class="ruby-ivar">@readySince</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@readySince</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-value str">'%Y-%m-%d %H:%M:%S'</span>) <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
848
- 498: <span class="ruby-keyword kw">end</span></pre>
907
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectBroker.rb, line 576</span>
908
+ 576: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">index</span>)
909
+ 577: <span class="ruby-identifier">sprintf</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">index</span>, <span class="ruby-ivar">@id</span>, <span class="ruby-ivar">@state</span>, <span class="ruby-ivar">@modified</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'*'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">' '</span>,
910
+ 578: <span class="ruby-ivar">@readySince</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@readySince</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-value str">'%Y-%m-%d %H:%M:%S'</span>) <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
911
+ 579: <span class="ruby-keyword kw">end</span></pre>
849
912
  </div>
850
913
 
851
914
  </div>
@@ -188,6 +188,10 @@
188
188
 
189
189
  <li><a href="../TaskJuggler/DurationAttribute.html">TaskJuggler::DurationAttribute</a></li>
190
190
 
191
+ <li><a href="../TaskJuggler/FileList.html">TaskJuggler::FileList</a></li>
192
+
193
+ <li><a href="../TaskJuggler/FileRecord.html">TaskJuggler::FileRecord</a></li>
194
+
191
195
  <li><a href="../TaskJuggler/FixnumAttribute.html">TaskJuggler::FixnumAttribute</a></li>
192
196
 
193
197
  <li><a href="../TaskJuggler/FlagListAttribute.html">TaskJuggler::FlagListAttribute</a></li>
@@ -260,8 +264,6 @@
260
264
 
261
265
  <li><a href="../TaskJuggler/Macro.html">TaskJuggler::Macro</a></li>
262
266
 
263
- <li><a href="../TaskJuggler/MacroParser.html">TaskJuggler::MacroParser</a></li>
264
-
265
267
  <li><a href="../TaskJuggler/MacroTable.html">TaskJuggler::MacroTable</a></li>
266
268
 
267
269
  <li><a href="../TaskJuggler/ManagerResponsibilities.html">TaskJuggler::ManagerResponsibilities</a></li>
@@ -326,6 +328,8 @@
326
328
 
327
329
  <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
328
330
 
331
+ <li><a href="../TaskJuggler/RTFWithQuerySupport.html">TaskJuggler::RTFWithQuerySupport</a></li>
332
+
329
333
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
330
334
 
331
335
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -372,8 +376,6 @@
372
376
 
373
377
  <li><a href="../TaskJuggler/RichTextElement.html">TaskJuggler::RichTextElement</a></li>
374
378
 
375
- <li><a href="../TaskJuggler/RichTextException.html">TaskJuggler::RichTextException</a></li>
376
-
377
379
  <li><a href="../TaskJuggler/RichTextFunctionExample.html">TaskJuggler::RichTextFunctionExample</a></li>
378
380
 
379
381
  <li><a href="../TaskJuggler/RichTextFunctionHandler.html">TaskJuggler::RichTextFunctionHandler</a></li>
@@ -414,6 +416,8 @@
414
416
 
415
417
  <li><a href="../TaskJuggler/ShiftScenario.html">TaskJuggler::ShiftScenario</a></li>
416
418
 
419
+ <li><a href="../TaskJuggler/SimpleQueryExpander.html">TaskJuggler::SimpleQueryExpander</a></li>
420
+
417
421
  <li><a href="../TaskJuggler/SortListAttribute.html">TaskJuggler::SortListAttribute</a></li>
418
422
 
419
423
  <li><a href="../TaskJuggler/SourceFileInfo.html">TaskJuggler::SourceFileInfo</a></li>
@@ -524,6 +528,8 @@
524
528
 
525
529
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
526
530
 
531
+ <li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
532
+
527
533
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
528
534
 
529
535
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
@@ -638,7 +644,7 @@ permit direct access to the <a href="ProjectServer.html">ProjectServer</a>.
638
644
  <div class="method-heading">
639
645
 
640
646
  <span class="method-name">new</span><span
641
- class="method-args">(projectData = nil)</span>
647
+ class="method-args">(projectData = nil, logConsole = false)</span>
642
648
  <span class="method-click-advice">click to toggle source</span>
643
649
 
644
650
  </div>
@@ -653,7 +659,7 @@ permit direct access to the <a href="ProjectServer.html">ProjectServer</a>.
653
659
  id="new-source">
654
660
  <pre>
655
661
  <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 40</span>
656
- 40: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">projectData</span> = <span class="ruby-keyword kw">nil</span>)
662
+ 40: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">projectData</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">logConsole</span> = <span class="ruby-keyword kw">false</span>)
657
663
  41: <span class="ruby-ivar">@projectData</span> = <span class="ruby-identifier">projectData</span>
658
664
  42: <span class="ruby-comment cmt"># Since we are still in the ProjectBroker process, the current DRb</span>
659
665
  43: <span class="ruby-comment cmt"># server is still the ProjectBroker DRb server.</span>
@@ -662,75 +668,87 @@ permit direct access to the <a href="ProjectServer.html">ProjectServer</a>.
662
668
  46: <span class="ruby-ivar">@daemon</span> = <span class="ruby-keyword kw">nil</span>
663
669
  47: <span class="ruby-identifier">initIntercom</span>
664
670
  48:
665
- 49: <span class="ruby-ivar">@pid</span> = <span class="ruby-keyword kw">nil</span>
666
- 50: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
667
- 51:
668
- 52: <span class="ruby-comment cmt"># A reference to the TaskJuggler object that holds the project data.</span>
669
- 53: <span class="ruby-ivar">@tj</span> = <span class="ruby-keyword kw">nil</span>
670
- 54: <span class="ruby-comment cmt"># The current state of the project.</span>
671
- 55: <span class="ruby-ivar">@state</span> = <span class="ruby-value">:new</span>
672
- 56: <span class="ruby-comment cmt"># A time stamp when the last @state update happened.</span>
673
- 57: <span class="ruby-ivar">@stateUpdated</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
674
- 58: <span class="ruby-comment cmt"># A lock to protect access to @state</span>
675
- 59: <span class="ruby-ivar">@stateLock</span> = <span class="ruby-constant">Monitor</span>.<span class="ruby-identifier">new</span>
676
- 60:
677
- 61: <span class="ruby-comment cmt"># A Queue to asynchronously generate new ReportServer objects.</span>
678
- 62: <span class="ruby-ivar">@reportServerRequests</span> = <span class="ruby-constant">Queue</span>.<span class="ruby-identifier">new</span>
679
- 63:
680
- 64: <span class="ruby-comment cmt"># A list of active ReportServer objects</span>
681
- 65: <span class="ruby-ivar">@reportServers</span> = []
682
- 66: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-constant">MonitorMixin</span>)
683
- 67:
684
- 68: <span class="ruby-ivar">@lastPing</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
685
- 69:
686
- 70: <span class="ruby-comment cmt"># We've started a DRb server before. This will continue to live somewhat</span>
687
- 71: <span class="ruby-comment cmt"># in the child. All attempts to create a DRb connection from the child</span>
688
- 72: <span class="ruby-comment cmt"># to the parent will end up in the child again. So we use a Pipe to</span>
689
- 73: <span class="ruby-comment cmt"># communicate the URI of the child DRb server to the parent. The</span>
690
- 74: <span class="ruby-comment cmt"># communication from the parent to the child is not affected by the</span>
691
- 75: <span class="ruby-comment cmt"># zombie DRb server in the child process.</span>
692
- 76: <span class="ruby-identifier">rd</span>, <span class="ruby-identifier">wr</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">pipe</span>
693
- 77:
694
- 78: <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@pid</span> = <span class="ruby-identifier">fork</span>) <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
695
- 79: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'ProjectServer fork failed'</span>)
696
- 80: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">nil?</span>
697
- 81: <span class="ruby-comment cmt"># This is the child</span>
698
- 82: <span class="ruby-identifier">$SAFE</span> = <span class="ruby-value">1</span>
699
- 83: <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
700
- 84: allow 127.0.0.1 ]</span>))
701
- 85: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>
702
- 86: <span class="ruby-identifier">iFace</span> = <span class="ruby-constant">ProjectServerIface</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
703
- 87: <span class="ruby-keyword kw">begin</span>
704
- 88: <span class="ruby-ivar">@uri</span> = <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>(<span class="ruby-value str">'druby://127.0.0.1:0'</span>, <span class="ruby-identifier">iFace</span>).<span class="ruby-identifier">uri</span>
705
- 89: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Project server is listening on #{@uri}&quot;</span>)
706
- 90: <span class="ruby-keyword kw">rescue</span>
707
- 91: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;ProjectServer can't start DRb: #{$!}&quot;</span>)
708
- 92: <span class="ruby-keyword kw">end</span>
709
- 93:
710
- 94: <span class="ruby-comment cmt"># Send the URI of the newly started DRb server to the parent process.</span>
711
- 95: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">close</span>
712
- 96: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">write</span> <span class="ruby-ivar">@uri</span>
713
- 97: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">close</span>
714
- 98:
715
- 99: <span class="ruby-comment cmt"># Start a Thread that waits for the @terminate flag to be set and does</span>
716
- 100: <span class="ruby-comment cmt"># other background tasks.</span>
717
- 101: <span class="ruby-identifier">startTerminator</span>
718
- 102: <span class="ruby-comment cmt"># Start another Thread that will be used to fork-off ReportServer</span>
719
- 103: <span class="ruby-comment cmt"># processes.</span>
720
- 104: <span class="ruby-identifier">startHousekeeping</span>
671
+ 49: <span class="ruby-ivar">@logConsole</span> = <span class="ruby-identifier">logConsole</span>
672
+ 50: <span class="ruby-ivar">@pid</span> = <span class="ruby-keyword kw">nil</span>
673
+ 51: <span class="ruby-ivar">@uri</span> = <span class="ruby-keyword kw">nil</span>
674
+ 52:
675
+ 53: <span class="ruby-comment cmt"># A reference to the TaskJuggler object that holds the project data.</span>
676
+ 54: <span class="ruby-ivar">@tj</span> = <span class="ruby-keyword kw">nil</span>
677
+ 55: <span class="ruby-comment cmt"># The current state of the project.</span>
678
+ 56: <span class="ruby-ivar">@state</span> = <span class="ruby-value">:new</span>
679
+ 57: <span class="ruby-comment cmt"># A time stamp when the last @state update happened.</span>
680
+ 58: <span class="ruby-ivar">@stateUpdated</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
681
+ 59: <span class="ruby-comment cmt"># A lock to protect access to @state</span>
682
+ 60: <span class="ruby-ivar">@stateLock</span> = <span class="ruby-constant">Monitor</span>.<span class="ruby-identifier">new</span>
683
+ 61:
684
+ 62: <span class="ruby-comment cmt"># A Queue to asynchronously generate new ReportServer objects.</span>
685
+ 63: <span class="ruby-ivar">@reportServerRequests</span> = <span class="ruby-constant">Queue</span>.<span class="ruby-identifier">new</span>
686
+ 64:
687
+ 65: <span class="ruby-comment cmt"># A list of active ReportServer objects</span>
688
+ 66: <span class="ruby-ivar">@reportServers</span> = []
689
+ 67: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">extend</span>(<span class="ruby-constant">MonitorMixin</span>)
690
+ 68:
691
+ 69: <span class="ruby-ivar">@lastPing</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
692
+ 70:
693
+ 71: <span class="ruby-comment cmt"># We've started a DRb server before. This will continue to live somewhat</span>
694
+ 72: <span class="ruby-comment cmt"># in the child. All attempts to create a DRb connection from the child</span>
695
+ 73: <span class="ruby-comment cmt"># to the parent will end up in the child again. So we use a Pipe to</span>
696
+ 74: <span class="ruby-comment cmt"># communicate the URI of the child DRb server to the parent. The</span>
697
+ 75: <span class="ruby-comment cmt"># communication from the parent to the child is not affected by the</span>
698
+ 76: <span class="ruby-comment cmt"># zombie DRb server in the child process.</span>
699
+ 77: <span class="ruby-identifier">rd</span>, <span class="ruby-identifier">wr</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">pipe</span>
700
+ 78:
701
+ 79: <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@pid</span> = <span class="ruby-identifier">fork</span>) <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
702
+ 80: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'ProjectServer fork failed'</span>)
703
+ 81: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@pid</span>.<span class="ruby-identifier">nil?</span>
704
+ 82: <span class="ruby-comment cmt"># This is the child</span>
705
+ 83: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@logConsole</span>
706
+ 84: <span class="ruby-comment cmt"># If the Broker wasn't daemonized, log stdout and stderr to PID</span>
707
+ 85: <span class="ruby-comment cmt"># specific files.</span>
708
+ 86: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">reopen</span>(<span class="ruby-node">&quot;tj3d.ps.#{$$}.stderr&quot;</span>, <span class="ruby-value str">'w'</span>)
709
+ 87: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">reopen</span>(<span class="ruby-node">&quot;tj3d.ps.#{$$}.stdout&quot;</span>, <span class="ruby-value str">'w'</span>)
710
+ 88: <span class="ruby-keyword kw">end</span>
711
+ 89: <span class="ruby-keyword kw">begin</span>
712
+ 90: <span class="ruby-identifier">$SAFE</span> = <span class="ruby-value">1</span>
713
+ 91: <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 allow 127.0.0.1 ]</span>))
714
+ 92: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>
715
+ 93: <span class="ruby-identifier">iFace</span> = <span class="ruby-constant">ProjectServerIface</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
716
+ 94: <span class="ruby-keyword kw">begin</span>
717
+ 95: <span class="ruby-ivar">@uri</span> = <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">start_service</span>(<span class="ruby-value str">'druby://127.0.0.1:0'</span>, <span class="ruby-identifier">iFace</span>).<span class="ruby-identifier">uri</span>
718
+ 96: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Project server is listening on #{@uri}&quot;</span>)
719
+ 97: <span class="ruby-keyword kw">rescue</span>
720
+ 98: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;ProjectServer can't start DRb: #{$!}&quot;</span>)
721
+ 99: <span class="ruby-keyword kw">end</span>
722
+ 100:
723
+ 101: <span class="ruby-comment cmt"># Send the URI of the newly started DRb server to the parent process.</span>
724
+ 102: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">close</span>
725
+ 103: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">write</span> <span class="ruby-ivar">@uri</span>
726
+ 104: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">close</span>
721
727
  105:
722
- 106: <span class="ruby-comment cmt"># Cleanup the DRb threads</span>
723
- 107: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">thread</span>.<span class="ruby-identifier">join</span>
724
- 108: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">'Project server terminated'</span>)
725
- 109: <span class="ruby-identifier">exit</span> <span class="ruby-value">0</span>
726
- 110: <span class="ruby-keyword kw">else</span>
727
- 111: <span class="ruby-comment cmt"># This is the parent</span>
728
- 112: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">detach</span>(<span class="ruby-ivar">@pid</span>)
729
- 113: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">close</span>
730
- 114: <span class="ruby-ivar">@uri</span> = <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">read</span>
731
- 115: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">close</span>
732
- 116: <span class="ruby-keyword kw">end</span>
733
- 117: <span class="ruby-keyword kw">end</span></pre>
728
+ 106: <span class="ruby-comment cmt"># Start a Thread that waits for the @terminate flag to be set and does</span>
729
+ 107: <span class="ruby-comment cmt"># other background tasks.</span>
730
+ 108: <span class="ruby-identifier">startTerminator</span>
731
+ 109: <span class="ruby-comment cmt"># Start another Thread that will be used to fork-off ReportServer</span>
732
+ 110: <span class="ruby-comment cmt"># processes.</span>
733
+ 111: <span class="ruby-identifier">startHousekeeping</span>
734
+ 112:
735
+ 113: <span class="ruby-comment cmt"># Cleanup the DRb threads</span>
736
+ 114: <span class="ruby-constant">DRb</span>.<span class="ruby-identifier">thread</span>.<span class="ruby-identifier">join</span>
737
+ 115: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">'Project server terminated'</span>)
738
+ 116: <span class="ruby-identifier">exit</span> <span class="ruby-value">0</span>
739
+ 117: <span class="ruby-keyword kw">rescue</span>
740
+ 118: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>
741
+ 119: <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>)
742
+ 120: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;ProjectServer can't start DRb: #{$!}&quot;</span>)
743
+ 121: <span class="ruby-keyword kw">end</span>
744
+ 122: <span class="ruby-keyword kw">else</span>
745
+ 123: <span class="ruby-comment cmt"># This is the parent</span>
746
+ 124: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">detach</span>(<span class="ruby-ivar">@pid</span>)
747
+ 125: <span class="ruby-identifier">wr</span>.<span class="ruby-identifier">close</span>
748
+ 126: <span class="ruby-ivar">@uri</span> = <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">read</span>
749
+ 127: <span class="ruby-identifier">rd</span>.<span class="ruby-identifier">close</span>
750
+ 128: <span class="ruby-keyword kw">end</span>
751
+ 129: <span class="ruby-keyword kw">end</span></pre>
734
752
  </div>
735
753
 
736
754
  </div>
@@ -769,12 +787,12 @@ Return the name of the loaded project or nil.
769
787
  <div class="method-source-code"
770
788
  id="get-roject-ame-source">
771
789
  <pre>
772
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 156</span>
773
- 156: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getProjectName</span>
774
- 157: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>
775
- 158: <span class="ruby-identifier">restartTimer</span>
776
- 159: <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectName</span>
777
- 160: <span class="ruby-keyword kw">end</span></pre>
790
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 172</span>
791
+ 172: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getProjectName</span>
792
+ 173: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>
793
+ 174: <span class="ruby-identifier">restartTimer</span>
794
+ 175: <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectName</span>
795
+ 176: <span class="ruby-keyword kw">end</span></pre>
778
796
  </div>
779
797
 
780
798
  </div>
@@ -807,18 +825,18 @@ Return a list of the HTML reports defined for the project.
807
825
  <div class="method-source-code"
808
826
  id="get-eport-ist-source">
809
827
  <pre>
810
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 163</span>
811
- 163: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getReportList</span>
812
- 164: <span class="ruby-keyword kw">return</span> [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">project</span> = <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">project</span>)
813
- 165: <span class="ruby-identifier">list</span> = []
814
- 166: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">reports</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
815
- 167: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-value">:html</span>)
816
- 168: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">report</span>.<span class="ruby-identifier">fullId</span>, <span class="ruby-identifier">report</span>.<span class="ruby-identifier">name</span> ]
817
- 169: <span class="ruby-keyword kw">end</span>
818
- 170: <span class="ruby-keyword kw">end</span>
819
- 171: <span class="ruby-identifier">restartTimer</span>
820
- 172: <span class="ruby-identifier">list</span>
821
- 173: <span class="ruby-keyword kw">end</span></pre>
828
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 179</span>
829
+ 179: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getReportList</span>
830
+ 180: <span class="ruby-keyword kw">return</span> [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">project</span> = <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">project</span>)
831
+ 181: <span class="ruby-identifier">list</span> = []
832
+ 182: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">reports</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
833
+ 183: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>).<span class="ruby-identifier">empty?</span>
834
+ 184: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">report</span>.<span class="ruby-identifier">fullId</span>, <span class="ruby-identifier">report</span>.<span class="ruby-identifier">name</span> ]
835
+ 185: <span class="ruby-keyword kw">end</span>
836
+ 186: <span class="ruby-keyword kw">end</span>
837
+ 187: <span class="ruby-identifier">restartTimer</span>
838
+ 188: <span class="ruby-identifier">list</span>
839
+ 189: <span class="ruby-keyword kw">end</span></pre>
822
840
  </div>
823
841
 
824
842
  </div>
@@ -853,35 +871,36 @@ and the authentication key of this new server.
853
871
  <div class="method-source-code"
854
872
  id="get-eport-erver-source">
855
873
  <pre>
856
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 177</span>
857
- 177: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getReportServer</span>
858
- 178: <span class="ruby-comment cmt"># ReportServer objects only make sense for successfully scheduled</span>
859
- 179: <span class="ruby-comment cmt"># projects.</span>
860
- 180: <span class="ruby-keyword kw">return</span> [ <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span>
861
- 181:
862
- 182: <span class="ruby-comment cmt"># The ReportServer will be created asynchronously in another Thread. To</span>
863
- 183: <span class="ruby-comment cmt"># find it in the @reportServers list, we create a unique tag to identify</span>
864
- 184: <span class="ruby-comment cmt"># it.</span>
865
- 185: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-value">99999999999999</span>)
866
- 186: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Pushing #{tag} onto report server request queue&quot;</span>)
867
- 187: <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">tag</span>)
868
- 188:
869
- 189: <span class="ruby-comment cmt"># Now wait until the new ReportServer shows up in the list.</span>
870
- 190: <span class="ruby-identifier">reportServer</span> = <span class="ruby-keyword kw">nil</span>
871
- 191: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">nil?</span>
872
- 192: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
873
- 193: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span>
874
- 194: <span class="ruby-identifier">reportServer</span> = <span class="ruby-identifier">rs</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">tag</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">tag</span>
875
- 195: <span class="ruby-keyword kw">end</span>
876
- 196: <span class="ruby-keyword kw">end</span>
877
- 197: <span class="ruby-comment cmt"># It should not take that long, so we use a short idle time here.</span>
878
- 198: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0.1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">nil?</span>
879
- 199: <span class="ruby-keyword kw">end</span>
880
- 200:
881
- 201: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Got report server with URI #{reportServer.uri} for tag #{tag}&quot;</span>)
882
- 202: <span class="ruby-identifier">restartTimer</span>
883
- 203: [ <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">authKey</span> ]
884
- 204: <span class="ruby-keyword kw">end</span></pre>
874
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 193</span>
875
+ 193: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getReportServer</span>
876
+ 194: <span class="ruby-comment cmt"># ReportServer objects only make sense for successfully scheduled</span>
877
+ 195: <span class="ruby-comment cmt"># projects.</span>
878
+ 196: <span class="ruby-keyword kw">return</span> [ <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span> ] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span>
879
+ 197:
880
+ 198: <span class="ruby-comment cmt"># The ReportServer will be created asynchronously in another Thread. To</span>
881
+ 199: <span class="ruby-comment cmt"># find it in the @reportServers list, we create a unique tag to identify</span>
882
+ 200: <span class="ruby-comment cmt"># it.</span>
883
+ 201: <span class="ruby-identifier">tag</span> = <span class="ruby-identifier">rand</span>(<span class="ruby-value">99999999999999</span>)
884
+ 202: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Pushing #{tag} onto report server request queue&quot;</span>)
885
+ 203: <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">tag</span>)
886
+ 204:
887
+ 205: <span class="ruby-comment cmt"># Now wait until the new ReportServer shows up in the list.</span>
888
+ 206: <span class="ruby-identifier">reportServer</span> = <span class="ruby-keyword kw">nil</span>
889
+ 207: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">nil?</span>
890
+ 208: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
891
+ 209: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span>
892
+ 210: <span class="ruby-identifier">reportServer</span> = <span class="ruby-identifier">rs</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">tag</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">tag</span>
893
+ 211: <span class="ruby-keyword kw">end</span>
894
+ 212: <span class="ruby-keyword kw">end</span>
895
+ 213: <span class="ruby-comment cmt"># It should not take that long, so we use a short idle time here.</span>
896
+ 214: <span class="ruby-identifier">sleep</span> <span class="ruby-value">0.1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">nil?</span>
897
+ 215: <span class="ruby-keyword kw">end</span>
898
+ 216:
899
+ 217: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Got report server with URI #{reportServer.uri} for &quot;</span> <span class="ruby-operator">+</span>
900
+ 218: <span class="ruby-node">&quot;tag #{tag}&quot;</span>)
901
+ 219: <span class="ruby-identifier">restartTimer</span>
902
+ 220: [ <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">uri</span>, <span class="ruby-identifier">reportServer</span>.<span class="ruby-identifier">authKey</span> ]
903
+ 221: <span class="ruby-keyword kw">end</span></pre>
885
904
  </div>
886
905
 
887
906
  </div>
@@ -918,37 +937,41 @@ Additionally a list of optional .tji files can be provided.
918
937
  <div class="method-source-code"
919
938
  id="load-roject-source">
920
939
  <pre>
921
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 124</span>
922
- 124: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadProject</span>(<span class="ruby-identifier">args</span>)
923
- 125: <span class="ruby-comment cmt"># The first argument is the working directory</span>
924
- 126: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span>.<span class="ruby-identifier">untaint</span>)
925
- 127:
926
- 128: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:loading</span>, <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]))
927
- 129: <span class="ruby-ivar">@tj</span> = <span class="ruby-constant">TaskJuggler</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">true</span>)
928
- 130:
929
- 131: <span class="ruby-comment cmt"># Parse all project files</span>
930
- 132: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">args</span>, <span class="ruby-keyword kw">true</span>)
931
- 133: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Parsing of #{args.join(' ')} failed&quot;</span>)
932
- 134: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:failed</span>, <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]))
933
- 135: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
934
- 136: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
935
- 137: <span class="ruby-keyword kw">end</span>
936
- 138:
937
- 139: <span class="ruby-comment cmt"># Then schedule the project</span>
938
- 140: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">schedule</span>
939
- 141: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Scheduling of project #{@tj.projectId} failed&quot;</span>)
940
- 142: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:failed</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>)
941
- 143: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">exit</span>(<span class="ruby-value str">'scheduler'</span>)
942
- 144: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
943
- 145: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
944
- 146: <span class="ruby-keyword kw">end</span>
945
- 147:
946
- 148: <span class="ruby-comment cmt"># Great, everything went fine. We've got a project to work with.</span>
947
- 149: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:ready</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>)
948
- 150: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Project #{@tj.projectId} loaded&quot;</span>)
949
- 151: <span class="ruby-identifier">restartTimer</span>
950
- 152: <span class="ruby-keyword kw">true</span>
951
- 153: <span class="ruby-keyword kw">end</span></pre>
940
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 136</span>
941
+ 136: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadProject</span>(<span class="ruby-identifier">args</span>)
942
+ 137: <span class="ruby-identifier">dirAndFiles</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">untaint</span>
943
+ 138: <span class="ruby-comment cmt"># The first argument is the working directory</span>
944
+ 139: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span>.<span class="ruby-identifier">untaint</span>)
945
+ 140:
946
+ 141: <span class="ruby-comment cmt"># Save a time stamp of when the project file loading started.</span>
947
+ 142: <span class="ruby-ivar">@modifiedCheck</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
948
+ 143:
949
+ 144: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:loading</span>, <span class="ruby-identifier">dirAndFiles</span>, <span class="ruby-keyword kw">false</span>)
950
+ 145: <span class="ruby-ivar">@tj</span> = <span class="ruby-constant">TaskJuggler</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">true</span>)
951
+ 146:
952
+ 147: <span class="ruby-comment cmt"># Parse all project files</span>
953
+ 148: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">args</span>, <span class="ruby-keyword kw">true</span>)
954
+ 149: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Parsing of #{args.join(' ')} failed&quot;</span>)
955
+ 150: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:failed</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">false</span>)
956
+ 151: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
957
+ 152: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
958
+ 153: <span class="ruby-keyword kw">end</span>
959
+ 154:
960
+ 155: <span class="ruby-comment cmt"># Then schedule the project</span>
961
+ 156: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">schedule</span>
962
+ 157: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Scheduling of project #{@tj.projectId} failed&quot;</span>)
963
+ 158: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:failed</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>, <span class="ruby-keyword kw">false</span>)
964
+ 159: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">exit</span>(<span class="ruby-value str">'scheduler'</span>)
965
+ 160: <span class="ruby-ivar">@terminate</span> = <span class="ruby-keyword kw">true</span>
966
+ 161: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
967
+ 162: <span class="ruby-keyword kw">end</span>
968
+ 163:
969
+ 164: <span class="ruby-comment cmt"># Great, everything went fine. We've got a project to work with.</span>
970
+ 165: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:ready</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>, <span class="ruby-keyword kw">false</span>)
971
+ 166: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Project #{@tj.projectId} loaded&quot;</span>)
972
+ 167: <span class="ruby-identifier">restartTimer</span>
973
+ 168: <span class="ruby-keyword kw">true</span>
974
+ 169: <span class="ruby-keyword kw">end</span></pre>
952
975
  </div>
953
976
 
954
977
  </div>
@@ -983,24 +1006,24 @@ href="ProjectServer.html">ProjectServer</a> is still operating properly.
983
1006
  <div class="method-source-code"
984
1007
  id="ping-source">
985
1008
  <pre>
986
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 208</span>
987
- 208: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
988
- 209: <span class="ruby-comment cmt"># Store the time stamp. If we don't get the ping for some time, we</span>
989
- 210: <span class="ruby-comment cmt"># assume the ProjectBroker has died.</span>
990
- 211: <span class="ruby-ivar">@lastPing</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
991
- 212:
992
- 213: <span class="ruby-comment cmt"># Now also check our ReportServers if they are still there. If not, we</span>
993
- 214: <span class="ruby-comment cmt"># can remove them from the @reportServers list.</span>
994
- 215: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
995
- 216: <span class="ruby-identifier">deadServers</span> = []
996
- 217: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span>
997
- 218: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">ping</span>
998
- 219: <span class="ruby-identifier">deadServers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rs</span>
999
- 220: <span class="ruby-keyword kw">end</span>
1000
- 221: <span class="ruby-keyword kw">end</span>
1001
- 222: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span> <span class="ruby-identifier">deadServers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">rs</span>) }
1002
- 223: <span class="ruby-keyword kw">end</span>
1003
- 224: <span class="ruby-keyword kw">end</span></pre>
1009
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 225</span>
1010
+ 225: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ping</span>
1011
+ 226: <span class="ruby-comment cmt"># Store the time stamp. If we don't get the ping for some time, we</span>
1012
+ 227: <span class="ruby-comment cmt"># assume the ProjectBroker has died.</span>
1013
+ 228: <span class="ruby-ivar">@lastPing</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
1014
+ 229:
1015
+ 230: <span class="ruby-comment cmt"># Now also check our ReportServers if they are still there. If not, we</span>
1016
+ 231: <span class="ruby-comment cmt"># can remove them from the @reportServers list.</span>
1017
+ 232: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1018
+ 233: <span class="ruby-identifier">deadServers</span> = []
1019
+ 234: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span>
1020
+ 235: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">ping</span>
1021
+ 236: <span class="ruby-identifier">deadServers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rs</span>
1022
+ 237: <span class="ruby-keyword kw">end</span>
1023
+ 238: <span class="ruby-keyword kw">end</span>
1024
+ 239: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">rs</span><span class="ruby-operator">|</span> <span class="ruby-identifier">deadServers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">rs</span>) }
1025
+ 240: <span class="ruby-keyword kw">end</span>
1026
+ 241: <span class="ruby-keyword kw">end</span></pre>
1004
1027
  </div>
1005
1028
 
1006
1029
  </div>
@@ -1037,57 +1060,77 @@ href="ProjectServer.html">ProjectServer</a> is still operating properly.
1037
1060
  <div class="method-source-code"
1038
1061
  id="start-ousekeeping-source">
1039
1062
  <pre>
1040
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 242</span>
1041
- 242: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startHousekeeping</span>
1042
- 243: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1043
- 244: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1044
- 245: <span class="ruby-comment cmt"># Was the project data provided during object creation?</span>
1045
- 246: <span class="ruby-comment cmt"># Then we load the data here.</span>
1046
- 247: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@projectData</span>
1047
- 248: <span class="ruby-identifier">loadProject</span>(<span class="ruby-ivar">@projectData</span>)
1048
- 249: <span class="ruby-ivar">@projectData</span> = <span class="ruby-keyword kw">nil</span>
1049
- 250: <span class="ruby-keyword kw">end</span>
1050
- 251:
1051
- 252: <span class="ruby-comment cmt"># Check for pending requests for new ReportServers.</span>
1052
- 253: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">empty?</span>
1053
- 254: <span class="ruby-identifier">tag</span> = <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">pop</span>
1054
- 255: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Popped #{tag}&quot;</span>)
1055
- 256: <span class="ruby-comment cmt"># Create an new entry for the @reportServers list.</span>
1056
- 257: <span class="ruby-identifier">rsr</span> = <span class="ruby-constant">ReportServerRecord</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tag</span>)
1057
- 258: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">&quot;RSR created&quot;</span>)
1058
- 259: <span class="ruby-comment cmt"># Create a new ReportServer object that runs as a separate</span>
1059
- 260: <span class="ruby-comment cmt"># process. The constructor will tell us the URI and authentication</span>
1060
- 261: <span class="ruby-comment cmt"># key of the new ReportServer.</span>
1061
- 262: <span class="ruby-identifier">rs</span> = <span class="ruby-constant">ReportServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tj</span>)
1062
- 263: <span class="ruby-identifier">rsr</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">uri</span>
1063
- 264: <span class="ruby-identifier">rsr</span>.<span class="ruby-identifier">authKey</span> = <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">authKey</span>
1064
- 265: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Adding ReportServer with URI #{rsr.uri} to list&quot;</span>)
1065
- 266: <span class="ruby-comment cmt"># Add the new ReportServer to our list.</span>
1066
- 267: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1067
- 268: <span class="ruby-ivar">@reportServers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rsr</span>
1068
- 269: <span class="ruby-keyword kw">end</span>
1069
- 270: <span class="ruby-keyword kw">end</span>
1070
- 271:
1071
- 272: <span class="ruby-comment cmt"># Some state changing operations are not atomic. Since the client</span>
1072
- 273: <span class="ruby-comment cmt"># can die during the transaction, the server might hang in some</span>
1073
- 274: <span class="ruby-comment cmt"># states. Here we define timeout for each state. If the timeout is</span>
1074
- 275: <span class="ruby-comment cmt"># not 0 and exceeded, we immediately terminate the process.</span>
1075
- 276: <span class="ruby-identifier">timeouts</span> = { <span class="ruby-value">:new</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">10</span>, <span class="ruby-value">:loading</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">15</span> * <span class="ruby-value">60</span>, <span class="ruby-value">:failed</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">60</span>,
1076
- 277: <span class="ruby-value">:ready</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> }
1077
- 278: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">timeouts</span>[<span class="ruby-ivar">@state</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span>
1078
- 279: <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@stateUpdated</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">timeouts</span>[<span class="ruby-ivar">@state</span>]
1079
- 280: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Reached timeout for state #{@state}. Terminating.&quot;</span>)
1080
- 281: <span class="ruby-keyword kw">end</span>
1081
- 282:
1082
- 283: <span class="ruby-comment cmt"># If we have not received a ping from the ProjectBroker for 2</span>
1083
- 284: <span class="ruby-comment cmt"># minutes, we assume it has died and terminate as well.</span>
1084
- 285: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@lastPing</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">180</span>
1085
- 286: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'Heartbeat from daemon lost. Terminating.'</span>)
1086
- 287: <span class="ruby-keyword kw">end</span>
1087
- 288: <span class="ruby-identifier">sleep</span> <span class="ruby-value">1</span>
1088
- 289: <span class="ruby-keyword kw">end</span>
1089
- 290: <span class="ruby-keyword kw">end</span>
1090
- 291: <span class="ruby-keyword kw">end</span></pre>
1063
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 262</span>
1064
+ 262: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">startHousekeeping</span>
1065
+ 263: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span>
1066
+ 264: <span class="ruby-keyword kw">begin</span>
1067
+ 265: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1068
+ 266: <span class="ruby-comment cmt"># Was the project data provided during object creation?</span>
1069
+ 267: <span class="ruby-comment cmt"># Then we load the data here.</span>
1070
+ 268: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@projectData</span>
1071
+ 269: <span class="ruby-identifier">loadProject</span>(<span class="ruby-ivar">@projectData</span>)
1072
+ 270: <span class="ruby-ivar">@projectData</span> = <span class="ruby-keyword kw">nil</span>
1073
+ 271: <span class="ruby-keyword kw">end</span>
1074
+ 272:
1075
+ 273: <span class="ruby-comment cmt"># Check every 60 seconds if the input files have been modified.</span>
1076
+ 274: <span class="ruby-comment cmt"># Don't check if we already know it has been modified.</span>
1077
+ 275: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@stateLock</span>.<span class="ruby-identifier">synchronize</span> { <span class="ruby-ivar">@state</span> <span class="ruby-operator">==</span> <span class="ruby-value">:ready</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@modified</span> <span class="ruby-operator">&amp;&amp;</span>
1078
+ 276: <span class="ruby-ivar">@modifiedCheck</span> <span class="ruby-operator">+</span> <span class="ruby-value">60</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> }
1079
+ 277: <span class="ruby-comment cmt"># Reset the timer</span>
1080
+ 278: <span class="ruby-ivar">@stateLock</span>.<span class="ruby-identifier">synchronize</span> { <span class="ruby-ivar">@modifiedCheck</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> }
1081
+ 279:
1082
+ 280: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">inputFiles</span>.<span class="ruby-identifier">modified?</span>
1083
+ 281: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">&quot;Project #{@tj.projectId} has been modified&quot;</span>)
1084
+ 282: <span class="ruby-identifier">updateState</span>(<span class="ruby-value">:ready</span>, <span class="ruby-ivar">@tj</span>.<span class="ruby-identifier">projectId</span>, <span class="ruby-keyword kw">true</span>)
1085
+ 283: <span class="ruby-keyword kw">end</span>
1086
+ 284: <span class="ruby-keyword kw">end</span>
1087
+ 285:
1088
+ 286: <span class="ruby-comment cmt"># Check for pending requests for new ReportServers.</span>
1089
+ 287: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">empty?</span>
1090
+ 288: <span class="ruby-identifier">tag</span> = <span class="ruby-ivar">@reportServerRequests</span>.<span class="ruby-identifier">pop</span>
1091
+ 289: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Popped #{tag}&quot;</span>)
1092
+ 290: <span class="ruby-comment cmt"># Create an new entry for the @reportServers list.</span>
1093
+ 291: <span class="ruby-identifier">rsr</span> = <span class="ruby-constant">ReportServerRecord</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tag</span>)
1094
+ 292: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-value str">&quot;RSR created&quot;</span>)
1095
+ 293: <span class="ruby-comment cmt"># Create a new ReportServer object that runs as a separate</span>
1096
+ 294: <span class="ruby-comment cmt"># process. The constructor will tell us the URI and authentication</span>
1097
+ 295: <span class="ruby-comment cmt"># key of the new ReportServer.</span>
1098
+ 296: <span class="ruby-identifier">rs</span> = <span class="ruby-constant">ReportServer</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tj</span>, <span class="ruby-ivar">@logConsole</span>)
1099
+ 297: <span class="ruby-identifier">rsr</span>.<span class="ruby-identifier">uri</span> = <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">uri</span>
1100
+ 298: <span class="ruby-identifier">rsr</span>.<span class="ruby-identifier">authKey</span> = <span class="ruby-identifier">rs</span>.<span class="ruby-identifier">authKey</span>
1101
+ 299: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Adding ReportServer with URI #{rsr.uri} to list&quot;</span>)
1102
+ 300: <span class="ruby-comment cmt"># Add the new ReportServer to our list.</span>
1103
+ 301: <span class="ruby-ivar">@reportServers</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1104
+ 302: <span class="ruby-ivar">@reportServers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rsr</span>
1105
+ 303: <span class="ruby-keyword kw">end</span>
1106
+ 304: <span class="ruby-keyword kw">end</span>
1107
+ 305:
1108
+ 306: <span class="ruby-comment cmt"># Some state changing operations are not atomic. Since the client</span>
1109
+ 307: <span class="ruby-comment cmt"># can die during the transaction, the server might hang in some</span>
1110
+ 308: <span class="ruby-comment cmt"># states. Here we define timeout for each state. If the timeout is</span>
1111
+ 309: <span class="ruby-comment cmt"># not 0 and exceeded, we immediately terminate the process.</span>
1112
+ 310: <span class="ruby-identifier">timeouts</span> = { <span class="ruby-value">:new</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">10</span>, <span class="ruby-value">:loading</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">15</span> * <span class="ruby-value">60</span>, <span class="ruby-value">:failed</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">60</span>,
1113
+ 311: <span class="ruby-value">:ready</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> }
1114
+ 312: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">timeouts</span>[<span class="ruby-ivar">@state</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span>
1115
+ 313: <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@stateUpdated</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">timeouts</span>[<span class="ruby-ivar">@state</span>]
1116
+ 314: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Reached timeout for state #{@state}. Terminating.&quot;</span>)
1117
+ 315: <span class="ruby-keyword kw">end</span>
1118
+ 316:
1119
+ 317: <span class="ruby-comment cmt"># If we have not received a ping from the ProjectBroker for 2</span>
1120
+ 318: <span class="ruby-comment cmt"># minutes, we assume it has died and terminate as well.</span>
1121
+ 319: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@lastPing</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">180</span>
1122
+ 320: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-value str">'Heartbeat from daemon lost. Terminating.'</span>)
1123
+ 321: <span class="ruby-keyword kw">end</span>
1124
+ 322: <span class="ruby-identifier">sleep</span> <span class="ruby-value">1</span>
1125
+ 323: <span class="ruby-keyword kw">end</span>
1126
+ 324: <span class="ruby-keyword kw">rescue</span>
1127
+ 325: <span class="ruby-comment cmt"># Make sure we get a backtrace for this thread.</span>
1128
+ 326: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>
1129
+ 327: <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>)
1130
+ 328: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;ProjectServer housekeeping error: #{$!}&quot;</span>)
1131
+ 329: <span class="ruby-keyword kw">end</span>
1132
+ 330: <span class="ruby-keyword kw">end</span>
1133
+ 331: <span class="ruby-keyword kw">end</span></pre>
1091
1134
  </div>
1092
1135
 
1093
1136
  </div>
@@ -1104,7 +1147,7 @@ href="ProjectServer.html">ProjectServer</a> is still operating properly.
1104
1147
  <div class="method-heading">
1105
1148
 
1106
1149
  <span class="method-name">updateState</span><span
1107
- class="method-args">(state, id)</span>
1150
+ class="method-args">(state, filesOrId, modified)</span>
1108
1151
  <span class="method-click-advice">click to toggle source</span>
1109
1152
 
1110
1153
  </div>
@@ -1112,8 +1155,8 @@ href="ProjectServer.html">ProjectServer</a> is still operating properly.
1112
1155
  <div class="method-description">
1113
1156
 
1114
1157
  <p>
1115
- Update the <em>state</em> and <em>id</em> of the project locally and
1116
- remotely.
1158
+ Update the <em>state</em>, <em>id</em> and <em>modified</em> state of the
1159
+ project locally and remotely.
1117
1160
  </p>
1118
1161
 
1119
1162
 
@@ -1121,19 +1164,21 @@ remotely.
1121
1164
  <div class="method-source-code"
1122
1165
  id="update-tate-source">
1123
1166
  <pre>
1124
- <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 229</span>
1125
- 229: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">updateState</span>(<span class="ruby-identifier">state</span>, <span class="ruby-identifier">id</span>)
1126
- 230: <span class="ruby-keyword kw">begin</span>
1127
- 231: <span class="ruby-ivar">@daemon</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@daemonURI</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@daemon</span>
1128
- 232: <span class="ruby-ivar">@daemon</span>.<span class="ruby-identifier">updateState</span>(<span class="ruby-ivar">@authKey</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">state</span>)
1129
- 233: <span class="ruby-keyword kw">rescue</span>
1130
- 234: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Can't update state with daemon: #{$!}&quot;</span>)
1131
- 235: <span class="ruby-keyword kw">end</span>
1132
- 236: <span class="ruby-ivar">@stateLock</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1133
- 237: <span class="ruby-ivar">@state</span> = <span class="ruby-identifier">state</span>
1134
- 238: <span class="ruby-ivar">@stateUpdated</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
1135
- 239: <span class="ruby-keyword kw">end</span>
1136
- 240: <span class="ruby-keyword kw">end</span></pre>
1167
+ <span class="ruby-comment cmt"># File lib/daemon/ProjectServer.rb, line 247</span>
1168
+ 247: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">updateState</span>(<span class="ruby-identifier">state</span>, <span class="ruby-identifier">filesOrId</span>, <span class="ruby-identifier">modified</span>)
1169
+ 248: <span class="ruby-keyword kw">begin</span>
1170
+ 249: <span class="ruby-ivar">@daemon</span> = <span class="ruby-constant">DRbObject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@daemonURI</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@daemon</span>
1171
+ 250: <span class="ruby-ivar">@daemon</span>.<span class="ruby-identifier">updateState</span>(<span class="ruby-ivar">@authKey</span>, <span class="ruby-identifier">filesOrId</span>, <span class="ruby-identifier">state</span>, <span class="ruby-identifier">modified</span>)
1172
+ 251: <span class="ruby-keyword kw">rescue</span>
1173
+ 252: <span class="ruby-ivar">@log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Can't update state with daemon: #{$!}&quot;</span>)
1174
+ 253: <span class="ruby-keyword kw">end</span>
1175
+ 254: <span class="ruby-ivar">@stateLock</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
1176
+ 255: <span class="ruby-ivar">@state</span> = <span class="ruby-identifier">state</span>
1177
+ 256: <span class="ruby-ivar">@stateUpdated</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
1178
+ 257: <span class="ruby-ivar">@modified</span> = <span class="ruby-identifier">modified</span>
1179
+ 258: <span class="ruby-ivar">@modifiedCheck</span> = <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>
1180
+ 259: <span class="ruby-keyword kw">end</span>
1181
+ 260: <span class="ruby-keyword kw">end</span></pre>
1137
1182
  </div>
1138
1183
 
1139
1184
  </div>