taskjuggler 0.0.3 → 0.0.4

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 (495) hide show
  1. data/benchmarks/UTF-8-Strings.rb +58 -0
  2. data/data/css/tjmanual.css +52 -0
  3. data/data/css/tjreport.css +195 -0
  4. data/data/icons/details.png +0 -0
  5. data/data/icons/flag-green.png +0 -0
  6. data/data/icons/flag-red.png +0 -0
  7. data/data/icons/flag-yellow.png +0 -0
  8. data/data/icons/resource.png +0 -0
  9. data/data/icons/resourcegroup.png +0 -0
  10. data/data/icons/task.png +0 -0
  11. data/data/icons/taskgroup.png +0 -0
  12. data/data/icons/trend-down.png +0 -0
  13. data/data/icons/trend-flat.png +0 -0
  14. data/data/icons/trend-up.png +0 -0
  15. data/data/scripts/wz_tooltip.js +1301 -0
  16. data/doc/classes/AppConfig.html +298 -230
  17. data/doc/classes/Arguments.html +8 -8
  18. data/doc/classes/Object.html +7 -7
  19. data/doc/classes/String.html +89 -89
  20. data/doc/classes/TaskJuggler.html +396 -264
  21. data/doc/classes/TaskJuggler/Account.html +18 -18
  22. data/doc/classes/TaskJuggler/AccountAttribute.html +26 -26
  23. data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
  24. data/doc/classes/TaskJuggler/Allocation.html +30 -30
  25. data/doc/classes/TaskJuggler/AllocationAttribute.html +26 -26
  26. data/doc/classes/TaskJuggler/AttributeBase.html +227 -115
  27. data/doc/classes/TaskJuggler/AttributeDefinition.html +6 -6
  28. data/doc/classes/TaskJuggler/BatchProcessor.html +117 -83
  29. data/doc/classes/TaskJuggler/Booking.html +18 -18
  30. data/doc/classes/TaskJuggler/BookingListAttribute.html +26 -26
  31. data/doc/classes/TaskJuggler/BooleanAttribute.html +26 -26
  32. data/doc/classes/TaskJuggler/CSVFile.html +24 -24
  33. data/doc/classes/TaskJuggler/CellSettingPattern.html +201 -0
  34. data/doc/classes/TaskJuggler/CellSettingPatternList.html +253 -0
  35. data/doc/classes/TaskJuggler/Charge.html +18 -18
  36. data/doc/classes/TaskJuggler/ChargeListAttribute.html +20 -20
  37. data/doc/classes/TaskJuggler/ChargeSet.html +37 -37
  38. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +26 -26
  39. data/doc/classes/TaskJuggler/ColumnListAttribute.html +20 -20
  40. data/doc/classes/TaskJuggler/ColumnTable.html +40 -40
  41. data/doc/classes/TaskJuggler/DateAttribute.html +54 -15
  42. data/doc/classes/TaskJuggler/DefinitionListAttribute.html +10 -10
  43. data/doc/classes/TaskJuggler/DependencyListAttribute.html +47 -47
  44. data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
  45. data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
  46. data/doc/classes/TaskJuggler/FlagListAttribute.html +43 -43
  47. data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
  48. data/doc/classes/TaskJuggler/FormatListAttribute.html +21 -21
  49. data/doc/classes/TaskJuggler/GanttChart.html +48 -48
  50. data/doc/classes/TaskJuggler/GanttContainer.html +42 -42
  51. data/doc/classes/TaskJuggler/GanttHeader.html +12 -12
  52. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +12 -12
  53. data/doc/classes/TaskJuggler/GanttLine.html +24 -24
  54. data/doc/classes/TaskJuggler/GanttLoadStack.html +18 -18
  55. data/doc/classes/TaskJuggler/GanttMilestone.html +42 -42
  56. data/doc/classes/TaskJuggler/GanttRouter.html +24 -24
  57. data/doc/classes/TaskJuggler/GanttTaskBar.html +42 -42
  58. data/doc/classes/TaskJuggler/HTMLDocument.html +13 -13
  59. data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
  60. data/doc/classes/TaskJuggler/Interval.html +57 -57
  61. data/doc/classes/TaskJuggler/IntervalListAttribute.html +47 -47
  62. data/doc/classes/TaskJuggler/JobInfo.html +68 -12
  63. data/doc/classes/TaskJuggler/Journal.html +266 -20
  64. data/doc/classes/TaskJuggler/JournalEntry.html +79 -23
  65. data/doc/classes/TaskJuggler/JournalEntryList.html +454 -0
  66. data/doc/classes/TaskJuggler/KeywordArray.html +10 -10
  67. data/doc/classes/TaskJuggler/KeywordDocumentation.html +171 -170
  68. data/doc/classes/TaskJuggler/Limits.html +36 -36
  69. data/doc/classes/TaskJuggler/Limits/Limit.html +30 -30
  70. data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
  71. data/doc/classes/TaskJuggler/ListAttributeBase.html +20 -20
  72. data/doc/classes/TaskJuggler/Log.html +145 -107
  73. data/doc/classes/TaskJuggler/LogicalAttribute.html +65 -36
  74. data/doc/classes/TaskJuggler/LogicalExpression.html +61 -24
  75. data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +20 -20
  76. data/doc/classes/TaskJuggler/LogicalFlag.html +31 -51
  77. data/doc/classes/TaskJuggler/LogicalFunction.html +64 -53
  78. data/doc/classes/TaskJuggler/LogicalOperation.html +103 -55
  79. data/doc/classes/TaskJuggler/Macro.html +6 -6
  80. data/doc/classes/TaskJuggler/MacroParser.html +36 -36
  81. data/doc/classes/TaskJuggler/MacroTable.html +37 -37
  82. data/doc/classes/TaskJuggler/Message.html +12 -12
  83. data/doc/classes/TaskJuggler/MessageHandler.html +32 -20
  84. data/doc/classes/TaskJuggler/Navigator.html +110 -46
  85. data/doc/classes/TaskJuggler/NavigatorElement.html +449 -0
  86. data/doc/classes/TaskJuggler/OnShiftCache.html +24 -24
  87. data/doc/classes/TaskJuggler/Project.html +1158 -893
  88. data/doc/classes/TaskJuggler/ProjectFileParser.html +94 -91
  89. data/doc/classes/TaskJuggler/PropertyAttribute.html +20 -20
  90. data/doc/classes/TaskJuggler/PropertyList.html +225 -155
  91. data/doc/classes/TaskJuggler/PropertySet.html +375 -332
  92. data/doc/classes/TaskJuggler/PropertyTreeNode.html +750 -510
  93. data/doc/classes/TaskJuggler/Query.html +404 -139
  94. data/doc/classes/TaskJuggler/{RTPNavigator.html → RTFNavigator.html} +57 -56
  95. data/doc/classes/TaskJuggler/RTFQuery.html +343 -0
  96. data/doc/classes/TaskJuggler/{RTPReport.html → RTFReport.html} +70 -67
  97. data/doc/classes/TaskJuggler/RealFormat.html +18 -18
  98. data/doc/classes/TaskJuggler/RealFormatAttribute.html +10 -10
  99. data/doc/classes/TaskJuggler/ReferenceAttribute.html +107 -40
  100. data/doc/classes/TaskJuggler/RemoteServiceManager.html +335 -0
  101. data/doc/classes/TaskJuggler/Report.html +66 -64
  102. data/doc/classes/TaskJuggler/ReportBase.html +112 -123
  103. data/doc/classes/TaskJuggler/ReportContext.html +43 -38
  104. data/doc/classes/TaskJuggler/ReportServer.html +320 -0
  105. data/doc/classes/TaskJuggler/ReportTable.html +42 -42
  106. data/doc/classes/TaskJuggler/ReportTableCell.html +221 -129
  107. data/doc/classes/TaskJuggler/ReportTableColumn.html +27 -27
  108. data/doc/classes/TaskJuggler/ReportTableLegend.html +24 -24
  109. data/doc/classes/TaskJuggler/ReportTableLine.html +126 -80
  110. data/doc/classes/TaskJuggler/Resource.html +12 -12
  111. data/doc/classes/TaskJuggler/ResourceListAttribute.html +82 -47
  112. data/doc/classes/TaskJuggler/ResourceListRE.html +43 -39
  113. data/doc/classes/TaskJuggler/ResourceScenario.html +413 -321
  114. data/doc/classes/TaskJuggler/RichText.html +64 -248
  115. data/doc/classes/TaskJuggler/RichTextAttribute.html +94 -30
  116. data/doc/classes/TaskJuggler/RichTextDocument.html +87 -85
  117. data/doc/classes/TaskJuggler/RichTextElement.html +456 -363
  118. data/doc/classes/TaskJuggler/RichTextException.html +13 -13
  119. data/doc/classes/TaskJuggler/{RichTextProtocolExample.html → RichTextFunctionExample.html} +64 -63
  120. data/doc/classes/TaskJuggler/{RichTextProtocolHandler.html → RichTextFunctionHandler.html} +42 -36
  121. data/doc/classes/TaskJuggler/RichTextIntermediate.html +563 -0
  122. data/doc/classes/TaskJuggler/RichTextParser.html +54 -51
  123. data/doc/classes/TaskJuggler/RichTextScanner.html +94 -92
  124. data/doc/classes/TaskJuggler/RichTextSnip.html +96 -60
  125. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +369 -227
  126. data/doc/classes/TaskJuggler/Scenario.html +6 -6
  127. data/doc/classes/TaskJuggler/ScenarioData.html +37 -37
  128. data/doc/classes/TaskJuggler/ScenarioListAttribute.html +31 -31
  129. data/doc/classes/TaskJuggler/Scoreboard.html +66 -66
  130. data/doc/classes/TaskJuggler/Shift.html +18 -18
  131. data/doc/classes/TaskJuggler/ShiftAssignment.html +54 -54
  132. data/doc/classes/TaskJuggler/ShiftAssignments.html +78 -78
  133. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
  134. data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
  135. data/doc/classes/TaskJuggler/SortListAttribute.html +22 -22
  136. data/doc/classes/TaskJuggler/SourceFileInfo.html +12 -12
  137. data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
  138. data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
  139. data/doc/classes/TaskJuggler/SyntaxReference.html +42 -42
  140. data/doc/classes/TaskJuggler/TOCEntry.html +12 -12
  141. data/doc/classes/TaskJuggler/TSResourceRecord.html +197 -0
  142. data/doc/classes/TaskJuggler/TSTaskRecord.html +215 -0
  143. data/doc/classes/TaskJuggler/TableColumnDefinition.html +64 -43
  144. data/doc/classes/TaskJuggler/TableOfContents.html +18 -18
  145. data/doc/classes/TaskJuggler/TableReport.html +447 -468
  146. data/doc/classes/TaskJuggler/Task.html +12 -12
  147. data/doc/classes/TaskJuggler/TaskDependency.html +12 -12
  148. data/doc/classes/TaskJuggler/TaskListAttribute.html +47 -47
  149. data/doc/classes/TaskJuggler/TaskListRE.html +43 -39
  150. data/doc/classes/TaskJuggler/TaskScenario.html +529 -282
  151. data/doc/classes/TaskJuggler/TextParser.html +215 -194
  152. data/doc/classes/TaskJuggler/TextParser/Pattern.html +97 -97
  153. data/doc/classes/TaskJuggler/TextParser/Rule.html +84 -84
  154. data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -15
  155. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
  156. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +6 -6
  157. data/doc/classes/TaskJuggler/TextReport.html +77 -74
  158. data/doc/classes/TaskJuggler/TextScanner.html +294 -281
  159. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
  160. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +59 -60
  161. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +12 -12
  162. data/doc/classes/TaskJuggler/TimeSheetReport.html +406 -0
  163. data/doc/classes/TaskJuggler/TjException.html +6 -6
  164. data/doc/classes/TaskJuggler/TjTime.html +522 -513
  165. data/doc/classes/TaskJuggler/TjpExample.html +25 -25
  166. data/doc/classes/TaskJuggler/TjpExportRE.html +21 -24
  167. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +6177 -4318
  168. data/doc/classes/TaskJuggler/UserManual.html +212 -213
  169. data/doc/classes/TaskJuggler/WorkingHours.html +49 -49
  170. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -53
  171. data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
  172. data/doc/classes/TaskJuggler/XMLComment.html +21 -21
  173. data/doc/classes/TaskJuggler/XMLDocument.html +27 -26
  174. data/doc/classes/TaskJuggler/XMLElement.html +86 -50
  175. data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
  176. data/doc/classes/TaskJuggler/XMLText.html +36 -36
  177. data/doc/files/COPYING.html +1 -1
  178. data/doc/files/README.html +1 -1
  179. data/doc/files/lib/AccountScenario_rb.html +3 -2
  180. data/doc/files/lib/Account_rb.html +3 -2
  181. data/doc/files/lib/Allocation_rb.html +3 -2
  182. data/doc/files/lib/AppConfig_rb.html +5 -2
  183. data/doc/files/lib/AttributeBase_rb.html +3 -2
  184. data/doc/files/lib/AttributeDefinition_rb.html +3 -2
  185. data/doc/files/lib/Attributes_rb.html +3 -2
  186. data/doc/files/lib/BatchProcessor_rb.html +4 -3
  187. data/doc/files/lib/Booking_rb.html +3 -2
  188. data/doc/files/lib/ChargeSet_rb.html +3 -2
  189. data/doc/files/lib/Charge_rb.html +3 -2
  190. data/doc/files/lib/HTMLDocument_rb.html +3 -2
  191. data/doc/files/lib/Interval_rb.html +3 -2
  192. data/doc/files/lib/Journal_rb.html +4 -3
  193. data/doc/files/lib/KeywordArray_rb.html +3 -2
  194. data/doc/files/lib/KeywordDocumentation_rb.html +3 -2
  195. data/doc/files/lib/Limits_rb.html +3 -2
  196. data/doc/files/lib/Log_rb.html +3 -2
  197. data/doc/files/lib/LogicalExpression_rb.html +3 -2
  198. data/doc/files/lib/LogicalFunction_rb.html +3 -2
  199. data/doc/files/lib/LogicalOperation_rb.html +3 -2
  200. data/doc/files/lib/MacroParser_rb.html +3 -2
  201. data/doc/files/lib/MacroTable_rb.html +3 -2
  202. data/doc/files/lib/MessageHandler_rb.html +3 -2
  203. data/doc/files/lib/Message_rb.html +3 -2
  204. data/doc/files/lib/ProjectFileParser_rb.html +7 -4
  205. data/doc/files/lib/Project_rb.html +3 -2
  206. data/doc/files/lib/PropertyList_rb.html +3 -2
  207. data/doc/files/lib/PropertySet_rb.html +3 -2
  208. data/doc/files/lib/PropertyTreeNode_rb.html +3 -2
  209. data/doc/files/lib/Query_rb.html +3 -2
  210. data/doc/files/lib/{RTPNavigator_rb.html → RTFNavigator_rb.html} +8 -7
  211. data/doc/files/lib/RTFQuery_rb.html +121 -0
  212. data/doc/files/lib/{RTPReport_rb.html → RTFReport_rb.html} +8 -7
  213. data/doc/files/lib/RealFormat_rb.html +3 -2
  214. data/doc/files/lib/RemoteServiceManager_rb.html +117 -0
  215. data/doc/files/lib/ReportServer_rb.html +107 -0
  216. data/doc/files/lib/ResourceScenario_rb.html +3 -2
  217. data/doc/files/lib/Resource_rb.html +3 -2
  218. data/doc/files/lib/RichTextDocument_rb.html +4 -3
  219. data/doc/files/lib/RichTextElement_rb.html +3 -2
  220. data/doc/files/lib/{RichTextProtocolExample_rb.html → RichTextFunctionExample_rb.html} +8 -7
  221. data/doc/files/lib/{RichTextProtocolHandler_rb.html → RichTextFunctionHandler_rb.html} +7 -6
  222. data/doc/files/lib/RichTextParser_rb.html +3 -2
  223. data/doc/files/lib/RichTextScanner_rb.html +3 -2
  224. data/doc/files/lib/RichTextSnip_rb.html +3 -2
  225. data/doc/files/lib/RichTextSyntaxRules_rb.html +3 -2
  226. data/doc/files/lib/RichText_rb.html +3 -2
  227. data/doc/files/lib/ScenarioData_rb.html +3 -2
  228. data/doc/files/lib/Scenario_rb.html +3 -2
  229. data/doc/files/lib/Scoreboard_rb.html +3 -2
  230. data/doc/files/lib/ShiftAssignments_rb.html +3 -2
  231. data/doc/files/lib/ShiftScenario_rb.html +3 -2
  232. data/doc/files/lib/Shift_rb.html +3 -2
  233. data/doc/files/lib/SourceFileInfo_rb.html +3 -2
  234. data/doc/files/lib/SyntaxReference_rb.html +3 -2
  235. data/doc/files/lib/TOCEntry_rb.html +3 -2
  236. data/doc/files/lib/TableColumnDefinition_rb.html +3 -2
  237. data/doc/files/lib/TableOfContents_rb.html +3 -2
  238. data/doc/files/lib/TaskDependency_rb.html +3 -2
  239. data/doc/files/lib/TaskJuggler_rb.html +7 -2
  240. data/doc/files/lib/TaskScenario_rb.html +3 -2
  241. data/doc/files/lib/Task_rb.html +3 -2
  242. data/doc/files/lib/TextParser/Pattern_rb.html +4 -3
  243. data/doc/files/lib/TextParser/Rule_rb.html +4 -3
  244. data/doc/files/lib/TextParser/StackElement_rb.html +4 -3
  245. data/doc/files/lib/TextParser/TokenDoc_rb.html +4 -3
  246. data/doc/files/lib/TextParser_rb.html +3 -2
  247. data/doc/files/lib/TextScanner_rb.html +3 -2
  248. data/doc/files/lib/Tj3Config_rb.html +3 -2
  249. data/doc/files/lib/TjException_rb.html +3 -2
  250. data/doc/files/lib/TjTime_rb.html +3 -2
  251. data/doc/files/lib/TjpExample_rb.html +3 -2
  252. data/doc/files/lib/TjpSyntaxRules_rb.html +3 -2
  253. data/doc/files/lib/UTF8String_rb.html +14 -6
  254. data/doc/files/lib/UserManual_rb.html +6 -3
  255. data/doc/files/lib/WorkingHours_rb.html +3 -2
  256. data/doc/files/lib/XMLDocument_rb.html +3 -2
  257. data/doc/files/lib/XMLElement_rb.html +3 -2
  258. data/doc/files/lib/deep_copy_rb.html +3 -2
  259. data/doc/files/lib/reports/CSVFile_rb.html +3 -2
  260. data/doc/files/lib/reports/ColumnTable_rb.html +3 -2
  261. data/doc/files/lib/reports/GanttChart_rb.html +3 -2
  262. data/doc/files/lib/reports/GanttContainer_rb.html +3 -2
  263. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +3 -2
  264. data/doc/files/lib/reports/GanttHeader_rb.html +3 -2
  265. data/doc/files/lib/reports/GanttLine_rb.html +3 -2
  266. data/doc/files/lib/reports/GanttLoadStack_rb.html +3 -2
  267. data/doc/files/lib/reports/GanttMilestone_rb.html +3 -2
  268. data/doc/files/lib/reports/GanttRouter_rb.html +3 -2
  269. data/doc/files/lib/reports/GanttTaskBar_rb.html +3 -2
  270. data/doc/files/lib/reports/HTMLGraphics_rb.html +3 -2
  271. data/doc/files/lib/reports/Navigator_rb.html +3 -2
  272. data/doc/files/lib/reports/ReportBase_rb.html +3 -2
  273. data/doc/files/lib/reports/ReportContext_rb.html +3 -2
  274. data/doc/files/lib/reports/ReportTableCell_rb.html +3 -2
  275. data/doc/files/lib/reports/ReportTableColumn_rb.html +3 -2
  276. data/doc/files/lib/reports/ReportTableLegend_rb.html +3 -2
  277. data/doc/files/lib/reports/ReportTableLine_rb.html +3 -2
  278. data/doc/files/lib/reports/ReportTable_rb.html +3 -2
  279. data/doc/files/lib/reports/Report_rb.html +7 -2
  280. data/doc/files/lib/reports/ResourceListRE_rb.html +3 -2
  281. data/doc/files/lib/reports/TableReport_rb.html +3 -2
  282. data/doc/files/lib/reports/TaskListRE_rb.html +3 -2
  283. data/doc/files/lib/reports/TextReport_rb.html +4 -3
  284. data/doc/files/lib/reports/TimeSheetReport_rb.html +117 -0
  285. data/doc/files/lib/reports/TjpExportRE_rb.html +3 -2
  286. data/doc/files/lib/taskjuggler3_rb.html +94 -77
  287. data/doc/files/lib/tj3client_rb.html +280 -0
  288. data/doc/files/lib/tj3man_rb.html +10 -9
  289. data/doc/fr_class_index.html +27 -5
  290. data/doc/fr_file_index.html +15 -7
  291. data/doc/fr_method_index.html +1312 -1020
  292. data/examples/tutorial.tjp +113 -14
  293. data/gem_spec.rb +2 -1
  294. data/lib/Account.rb +1 -1
  295. data/lib/AccountScenario.rb +1 -1
  296. data/lib/Allocation.rb +1 -1
  297. data/lib/AppConfig.rb +23 -10
  298. data/lib/AttributeBase.rb +34 -6
  299. data/lib/AttributeDefinition.rb +1 -1
  300. data/lib/Attributes.rb +51 -16
  301. data/lib/BatchProcessor.rb +204 -77
  302. data/lib/Booking.rb +1 -1
  303. data/lib/Charge.rb +1 -1
  304. data/lib/ChargeSet.rb +1 -1
  305. data/lib/HTMLDocument.rb +2 -2
  306. data/lib/Interval.rb +1 -1
  307. data/lib/Journal.rb +231 -9
  308. data/lib/KeywordArray.rb +1 -1
  309. data/lib/KeywordDocumentation.rb +6 -4
  310. data/lib/Limits.rb +1 -1
  311. data/lib/Log.rb +8 -1
  312. data/lib/LogicalExpression.rb +14 -13
  313. data/lib/LogicalFunction.rb +88 -14
  314. data/lib/LogicalOperation.rb +124 -53
  315. data/lib/MacroParser.rb +1 -1
  316. data/lib/MacroTable.rb +2 -2
  317. data/lib/Message.rb +1 -1
  318. data/lib/MessageHandler.rb +7 -3
  319. data/lib/Project.rb +93 -14
  320. data/lib/ProjectFileParser.rb +30 -15
  321. data/lib/PropertyList.rb +103 -36
  322. data/lib/PropertySet.rb +22 -10
  323. data/lib/PropertyTreeNode.rb +120 -15
  324. data/lib/Query.rb +119 -48
  325. data/lib/{RTPNavigator.rb → RTFNavigator.rb} +11 -10
  326. data/lib/RTFQuery.rb +166 -0
  327. data/lib/{RTPReport.rb → RTFReport.rb} +11 -8
  328. data/lib/RealFormat.rb +1 -1
  329. data/lib/RemoteServiceManager.rb +80 -0
  330. data/lib/ReportServer.rb +66 -0
  331. data/lib/Resource.rb +1 -1
  332. data/lib/ResourceScenario.rb +48 -19
  333. data/lib/RichText.rb +98 -41
  334. data/lib/RichTextDocument.rb +10 -8
  335. data/lib/RichTextElement.rb +72 -28
  336. data/lib/{RichTextProtocolExample.rb → RichTextFunctionExample.rb} +8 -7
  337. data/lib/{RichTextProtocolHandler.rb → RichTextFunctionHandler.rb} +12 -14
  338. data/lib/RichTextParser.rb +6 -3
  339. data/lib/RichTextScanner.rb +91 -19
  340. data/lib/RichTextSnip.rb +8 -3
  341. data/lib/RichTextSyntaxRules.rb +103 -45
  342. data/lib/Scenario.rb +1 -1
  343. data/lib/ScenarioData.rb +2 -2
  344. data/lib/Scoreboard.rb +1 -1
  345. data/lib/Shift.rb +1 -1
  346. data/lib/ShiftAssignments.rb +1 -1
  347. data/lib/ShiftScenario.rb +1 -1
  348. data/lib/SourceFileInfo.rb +1 -1
  349. data/lib/SyntaxReference.rb +2 -2
  350. data/lib/TOCEntry.rb +1 -1
  351. data/lib/TableColumnDefinition.rb +59 -16
  352. data/lib/TableOfContents.rb +1 -1
  353. data/lib/Task.rb +1 -1
  354. data/lib/TaskDependency.rb +1 -1
  355. data/lib/TaskJuggler.rb +31 -8
  356. data/lib/TaskScenario.rb +165 -16
  357. data/lib/TextParser.rb +36 -22
  358. data/lib/TextParser/Pattern.rb +3 -3
  359. data/lib/TextParser/Rule.rb +2 -2
  360. data/lib/TextParser/StackElement.rb +4 -3
  361. data/lib/TextParser/TokenDoc.rb +2 -2
  362. data/lib/TextScanner.rb +52 -37
  363. data/lib/Tj3Config.rb +6 -5
  364. data/lib/TjException.rb +1 -1
  365. data/lib/TjTime.rb +12 -3
  366. data/lib/TjpExample.rb +1 -1
  367. data/lib/TjpSyntaxRules.rb +1044 -150
  368. data/lib/UTF8String.rb +2 -1
  369. data/lib/UserManual.rb +18 -70
  370. data/lib/WorkingHours.rb +3 -3
  371. data/lib/XMLDocument.rb +3 -2
  372. data/lib/XMLElement.rb +6 -1
  373. data/lib/deep_copy.rb +1 -1
  374. data/lib/reports/CSVFile.rb +1 -1
  375. data/lib/reports/ColumnTable.rb +9 -9
  376. data/lib/reports/GanttChart.rb +1 -1
  377. data/lib/reports/GanttContainer.rb +1 -1
  378. data/lib/reports/GanttHeader.rb +1 -1
  379. data/lib/reports/GanttHeaderScaleItem.rb +1 -1
  380. data/lib/reports/GanttLine.rb +40 -40
  381. data/lib/reports/GanttLoadStack.rb +1 -1
  382. data/lib/reports/GanttMilestone.rb +1 -1
  383. data/lib/reports/GanttRouter.rb +1 -1
  384. data/lib/reports/GanttTaskBar.rb +1 -1
  385. data/lib/reports/HTMLGraphics.rb +1 -1
  386. data/lib/reports/Navigator.rb +149 -22
  387. data/lib/reports/Report.rb +115 -172
  388. data/lib/reports/ReportBase.rb +22 -27
  389. data/lib/reports/ReportContext.rb +29 -15
  390. data/lib/reports/ReportTable.rb +1 -1
  391. data/lib/reports/ReportTableCell.rb +120 -27
  392. data/lib/reports/ReportTableColumn.rb +3 -3
  393. data/lib/reports/ReportTableLegend.rb +1 -1
  394. data/lib/reports/ReportTableLine.rb +10 -2
  395. data/lib/reports/ResourceListRE.rb +5 -1
  396. data/lib/reports/TableReport.rb +237 -287
  397. data/lib/reports/TaskListRE.rb +5 -1
  398. data/lib/reports/TextReport.rb +7 -4
  399. data/lib/reports/TimeSheetReport.rb +233 -0
  400. data/lib/reports/TjpExportRE.rb +2 -2
  401. data/lib/taskjuggler3.rb +27 -11
  402. data/lib/tj3client.rb +110 -0
  403. data/lib/tj3man.rb +4 -4
  404. data/manual/Getting_Started +0 -50
  405. data/manual/How_To_Contribute +6 -13
  406. data/manual/Installation +102 -28
  407. data/manual/Intro +11 -1
  408. data/manual/Reporting_Bugs +23 -7
  409. data/manual/Rich_Text_Attributes +59 -6
  410. data/manual/TaskJuggler_2x_Migration +27 -0
  411. data/manual/The_TaskJuggler_Syntax +104 -0
  412. data/manual/Tutorial +10 -9
  413. data/prj_cfg.rb +8 -2
  414. data/tasks/csts.rake +1 -1
  415. data/tasks/manual.rake +5 -3
  416. data/test/MessageChecker.rb +1 -1
  417. data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
  418. data/test/TestSuite/HTML-Reports/Alerts.tjp +77 -0
  419. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  420. data/test/TestSuite/HTML-Reports/CellText.tjp +75 -0
  421. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  422. data/test/TestSuite/HTML-Reports/ColumnPeriods.tjp +44 -0
  423. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  424. data/test/TestSuite/HTML-Reports/IsOngoing.tjp +34 -0
  425. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +80 -0
  426. data/test/TestSuite/HTML-Reports/LogicalFunctions.tjp +20 -0
  427. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  428. data/test/TestSuite/HTML-Reports/Query.tjp +28 -0
  429. data/test/TestSuite/HTML-Reports/Sorting.tjp +68 -0
  430. data/test/TestSuite/HTML-Reports/TimeSheet.tjp +69 -0
  431. data/test/TestSuite/HTML-Reports/UDAQuery.tjp +27 -0
  432. data/test/TestSuite/HTML-Reports/css/tjmanual.css +52 -0
  433. data/test/TestSuite/HTML-Reports/css/tjreport.css +195 -0
  434. data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
  435. data/test/TestSuite/HTML-Reports/icons/details.png +0 -0
  436. data/test/TestSuite/HTML-Reports/icons/flag-green.png +0 -0
  437. data/test/TestSuite/HTML-Reports/icons/flag-red.png +0 -0
  438. data/test/TestSuite/HTML-Reports/icons/flag-yellow.png +0 -0
  439. data/test/TestSuite/HTML-Reports/icons/resource.png +0 -0
  440. data/test/TestSuite/HTML-Reports/icons/resourcegroup.png +0 -0
  441. data/test/TestSuite/HTML-Reports/icons/task.png +0 -0
  442. data/test/TestSuite/HTML-Reports/icons/taskgroup.png +0 -0
  443. data/test/TestSuite/HTML-Reports/reference.tjp +7 -8
  444. data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
  445. data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +1301 -0
  446. data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +34 -0
  447. data/test/TestSuite/Syntax/Correct/Celltext.tjp +2 -1
  448. data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -2
  449. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +2 -1
  450. data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +20 -0
  451. data/test/TestSuite/Syntax/Correct/Query.tjp +18 -0
  452. data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +45 -0
  453. data/test/TestSuite/Syntax/Correct/TimeSheet.tjp +49 -0
  454. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  455. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  456. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  457. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  458. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  459. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  460. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  461. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  462. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
  463. data/test/TestSuite/Syntax/Correct/tutorial.tjp +113 -14
  464. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +28 -0
  465. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +12 -0
  466. data/test/all.rb +2 -2
  467. data/test/test_BatchProcessor.rb +42 -13
  468. data/test/test_CSV-Reports.rb +1 -1
  469. data/test/test_Journal.rb +176 -0
  470. data/test/test_Limits.rb +1 -1
  471. data/test/test_LogicalExpression.rb +14 -5
  472. data/test/test_MacroTable.rb +1 -1
  473. data/test/test_Project.rb +1 -1
  474. data/test/test_PropertySet.rb +1 -1
  475. data/test/test_Query.rb +1 -1
  476. data/test/test_RealFormat.rb +1 -1
  477. data/test/test_RichText.rb +30 -20
  478. data/test/test_Scheduler.rb +1 -1
  479. data/test/test_ShiftAssignments.rb +2 -2
  480. data/test/test_Syntax.rb +1 -1
  481. data/test/test_TextScanner.rb +1 -1
  482. data/test/test_TjTime.rb +1 -1
  483. data/test/test_TjpExample.rb +1 -1
  484. data/test/test_UTF8String.rb +1 -1
  485. data/test/test_WorkingHours.rb +1 -1
  486. data/test/test_deep_copy.rb +2 -2
  487. metadata +610 -532
  488. data/doc/files/lib/ms_test_rb.html +0 -90
  489. data/examples/ContactList.html +0 -1467
  490. data/examples/Deliveries.html +0 -485
  491. data/examples/Development.html +0 -2525
  492. data/examples/Overview.html +0 -747
  493. data/examples/Resource Graph.html +0 -616
  494. data/lib/ms_test.rb +0 -27
  495. data/test/TestSuite/HTML-Reports/reference-export.html +0 -187
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = TaskListRE.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -30,6 +30,8 @@ class TaskJuggler
30
30
 
31
31
  # Generate the table in the intermediate format.
32
32
  def generateIntermediateFormat
33
+ super
34
+
33
35
  setReportPeriod
34
36
 
35
37
  # Prepare the task list.
@@ -37,6 +39,7 @@ class TaskJuggler
37
39
  taskList.setSorting(@report.get('sortTasks'))
38
40
  taskList = filterTaskList(taskList, nil, @report.get('hideTask'),
39
41
  @report.get('rollupTask'))
42
+ taskList.query = @report.project.reportContext.query
40
43
  taskList.sort!
41
44
 
42
45
  # Prepare the resource list.
@@ -45,6 +48,7 @@ class TaskJuggler
45
48
  resourceList = filterResourceList(resourceList, nil,
46
49
  @report.get('hideResource'),
47
50
  @report.get('rollupResource'))
51
+ resourceList.query = @report.project.reportContext.query
48
52
  resourceList.sort!
49
53
 
50
54
  adjustReportPeriod(taskList, @report.get('scenarios'),
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby -w
2
2
  # encoding: UTF-8
3
3
  #
4
- # = ReportBase.rb -- The TaskJuggler III Project Management Software
4
+ # = TextReport.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -28,6 +28,8 @@ class TaskJuggler
28
28
  end
29
29
 
30
30
  def generateIntermediateFormat
31
+ super
32
+
31
33
  if a('center')
32
34
  if a('left') && a('right')
33
35
  @lWidth = @rWidth = 20
@@ -66,8 +68,9 @@ class TaskJuggler
66
68
  %w( left center right).each do |i|
67
69
  width = instance_variable_get('@' + i[0].chr + 'Width')
68
70
  if width > 0
69
- tr << (td = XMLElement.new('td', 'width' => "#{width}%"))
70
- td << rt_to_html(i)
71
+ tr << (td = XMLElement.new('td', 'width' => "#{width}%",
72
+ 'style' => 'vertical-align:top'))
73
+ td << (el = rt_to_html(i))
71
74
  end
72
75
  end
73
76
 
@@ -0,0 +1,233 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = TimeSheetReport.rb -- The TaskJuggler III Project Management Software
5
+ #
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of version 2 of the GNU General Public License as
10
+ # published by the Free Software Foundation.
11
+ #
12
+
13
+ require 'reports/ReportBase'
14
+
15
+ class TaskJuggler
16
+
17
+ # Utility class for the intermediate TimeSheetReport format.
18
+ class TSResourceRecord
19
+
20
+ attr_reader :resource, :tasks
21
+
22
+ def initialize(resource)
23
+ @resource = resource
24
+ @tasks = []
25
+ end
26
+
27
+ end
28
+
29
+ # Utility class for the intermediate TimeSheetReport format.
30
+ class TSTaskRecord
31
+
32
+ attr_reader :task, :work, :remaining, :endDate
33
+
34
+ def initialize(task, work, remaining = nil, endDate = nil)
35
+ @task = task
36
+ @work = work
37
+ @remaining = remaining
38
+ @endDate = endDate
39
+ end
40
+
41
+ end
42
+
43
+ # This specialization of ReportBase implements a template generator for time
44
+ # sheets. The time sheet is structured using the TJP file syntax.
45
+ class TimeSheetReport < ReportBase
46
+
47
+ attr_reader :mainFile
48
+
49
+ # Create a new object and set some default values.
50
+ def initialize(report)
51
+ super(report)
52
+
53
+ @report.set('scenarios', [ 0 ])
54
+ # Show all tasks, sorted by seqno-up.
55
+ @report.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
56
+ @report.set('sortTasks', [ [ 'seqno', true, -1 ] ])
57
+ # Show all resources, sorted by seqno-up.
58
+ @report.set('hideResource', LogicalExpression.new(LogicalOperation.new(0)))
59
+ @report.set('sortResources', [ [ 'seqno', true, -1 ] ])
60
+
61
+ @records = []
62
+ end
63
+
64
+ # In the future we might want to generate other output than TJP synatx. So
65
+ # we generate an abstract version of the time sheet first. This abstract
66
+ # version has a TSResourceRecord for each resource and each of these
67
+ # records holds a TSTaskRecord for each assigned task.
68
+ def generateIntermediateFormat
69
+ super
70
+
71
+ # Prepare the resource list.
72
+ resourceList = PropertyList.new(@project.resources)
73
+ resourceList.setSorting(@report.get('sortResources'))
74
+ resourceList = filterResourceList(resourceList, nil,
75
+ @report.get('hideResource'),
76
+ @report.get('rollupResource'))
77
+ # Prepare a template for the Query we will use to get all the data.
78
+ scenarioIdx = a('scenarios')[0]
79
+ queryAttrs = { 'project' => @project,
80
+ 'scopeProperty' => nil,
81
+ 'scenarioIdx' => scenarioIdx,
82
+ 'loadUnit' => a('loadUnit'),
83
+ 'numberFormat' => a('numberFormat'),
84
+ 'timeFormat' => a('timeFormat'),
85
+ 'currencyFormat' => a('currencyFormat'),
86
+ 'start' => a('start'), 'end' => a('end'),
87
+ 'costAccount' => a('costAccount'),
88
+ 'revenueAccount' => a('revenueAccount') }
89
+ resourceList.query = Query.new(queryAttrs)
90
+ resourceList.sort!
91
+
92
+ # Prepare the task list.
93
+ taskList = PropertyList.new(@project.tasks)
94
+ taskList.setSorting(@report.get('sortTasks'))
95
+ taskList = filterTaskList(taskList, nil, @report.get('hideTask'),
96
+ @report.get('rollupTask'))
97
+
98
+ resourceList.each do |resource|
99
+ # Time sheets only make sense for leaf resources that actuall do work.
100
+ next unless resource.leaf?
101
+
102
+ # Create a new TSResourceRecord for the resource.
103
+ @records << (resourceRecord = TSResourceRecord.new(resource))
104
+
105
+ # Now we have to find all the task that the resource is allocated to
106
+ # during the report period.
107
+ assignedTaskList = filterTaskList(taskList, resource,
108
+ a('hideTask'),
109
+ a('rollupTask'))
110
+ queryAttrs['scopeProperty'] = resource
111
+ assignedTaskList.query = Query.new(queryAttrs)
112
+ assignedTaskList.sort!
113
+
114
+ assignedTaskList.each do |task|
115
+ # Time sheet task records only make sense for leaf tasks.
116
+ next unless task.leaf?
117
+
118
+ queryAttrs['property'] = task
119
+ query = Query.new(queryAttrs)
120
+
121
+ # Get the allocated effort for the task for this period.
122
+ query.attributeId = 'effort'
123
+ query.start = a('start')
124
+ query.end = a('end')
125
+ query.process
126
+ work = query.to_s
127
+
128
+ if task['effort', scenarioIdx]
129
+ # The task is an effort based task.
130
+ # Get the remaining effort for this task.
131
+ query.start = a('end')
132
+ query.end = task['end', scenarioIdx]
133
+ query.process
134
+ remaining = query.to_s
135
+ endDate = nil
136
+ else
137
+ # The task is a duration task.
138
+ # Get the planned task end date.
139
+ remaining = nil
140
+ endDate = task['end', scenarioIdx]
141
+ end
142
+
143
+ # Put all data into a TSTaskRecord and push it into the resource
144
+ # record.
145
+ resourceRecord.tasks <<
146
+ TSTaskRecord.new(task, work, remaining, endDate)
147
+ end
148
+ end
149
+ end
150
+
151
+ # Generate a time sheet in TJP syntax format.
152
+ def to_tjp
153
+
154
+ # Prepare the task list.
155
+ @taskList = PropertyList.new(@project.tasks)
156
+ @taskList.setSorting(a('sortTasks'))
157
+ @taskList = filterTaskList(@taskList, nil, a('hideTask'), a('rollupTask'))
158
+ @taskList.sort!
159
+
160
+ # This String will hold the result.
161
+ @file = ''
162
+
163
+ # Iterate over all the resources that we have TSResourceRecords for.
164
+ @records.each do |rr|
165
+ resource = rr.resource
166
+ # Generate the time sheet header
167
+ @file << "timesheet #{resource.fullId} " +
168
+ "#{a('start')} - #{a('end')} {\n\n"
169
+
170
+ if rr.tasks.empty?
171
+ # If there were no assignments, just write a comment.
172
+ @file << " # There were no planned tasks assignements for " +
173
+ "this period!\n\n"
174
+ else
175
+ rr.tasks.each do |tr|
176
+ task = tr.task
177
+
178
+ @file << " # Task: #{task.name}\n"
179
+ @file << " task #{task.fullId} {\n"
180
+ @file << " work #{tr.work}\n"
181
+ if tr.remaining
182
+ @file << " remaining #{tr.remaining}\n"
183
+ else
184
+ @file << " end #{tr.endDate.to_tjp}\n"
185
+ end
186
+ @file << " status green \"Your status here!\" {\n" +
187
+ " summary\n" +
188
+ " -8<-\n" +
189
+ " Your summary here!\n" +
190
+ " ->8-\n" +
191
+ " }\n"
192
+ @file << " }\n\n"
193
+ end
194
+ end
195
+ @file << <<'EOT'
196
+ # If you had unplanned tasks, uncomment and fill out the following lines:
197
+ # newtask new.task.id "A task title" {
198
+ # work X.Xd
199
+ # remaining Y.Yd
200
+ # }
201
+ EOT
202
+ @file << "}\n\n"
203
+ end
204
+ @file
205
+ end
206
+
207
+ private
208
+
209
+ # This utility function is used to indent multi-line attributes. All
210
+ # attributes should be filtered through this function. Attributes that
211
+ # contain line breaks will be indented properly. In addition to the
212
+ # indentation specified by _indent_ all but the first line will be indented
213
+ # after the first word of the first line. The text may not end with a line
214
+ # break.
215
+ def indentBlock(text, indent)
216
+ out = ''
217
+ firstSpace = 0
218
+ text.length.times do |i|
219
+ if firstSpace == 0 && text[i] == ?\ # There must be a space after ?
220
+ firstSpace = i
221
+ end
222
+ out << text[i]
223
+ if text[i] == ?\n
224
+ out += ' ' * (indent + firstSpace)
225
+ end
226
+ end
227
+ out
228
+ end
229
+
230
+ end
231
+
232
+ end
233
+
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = TjpExportRE.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -41,8 +41,8 @@ class TaskJuggler
41
41
  @report.set('sortResources', [ [ 'seqno', true, -1 ] ])
42
42
  end
43
43
 
44
- # There is nothing to do here.
45
44
  def generateIntermediateFormat
45
+ super
46
46
  end
47
47
 
48
48
  # Return the project data in TJP syntax format.
data/lib/taskjuggler3.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = taskjuggler3.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
7
  #
8
8
  # This program is free software; you can redistribute it and/or modify
9
9
  # it under the terms of version 2 of the GNU General Public License as
@@ -20,12 +20,12 @@ AppConfig.appName = 'taskjuggler3'
20
20
  def processArguments(argv)
21
21
  opts = OptionParser.new
22
22
 
23
- opts.banner = "#{AppConfig.packageName} v#{AppConfig.version} - " +
23
+ opts.banner = "#{AppConfig.softwareName} v#{AppConfig.version} - " +
24
24
  "#{AppConfig.packageInfo}\n\n" +
25
25
  "Copyright (c) #{AppConfig.copyright.join(', ')}" +
26
26
  " by #{AppConfig.authors.join(', ')}\n\n" +
27
27
  "#{AppConfig.license}\n" +
28
- "For more info about #{AppConfig.packageName} see " +
28
+ "For more info about #{AppConfig.softwareName} see " +
29
29
  "#{AppConfig.contact}\n\n" +
30
30
  "Usage: #{AppConfig.appName} [options] file.tjp " +
31
31
  "[ file1.tji ... ]"
@@ -44,6 +44,11 @@ def processArguments(argv)
44
44
  'Generate reports despite scheduling errors') do
45
45
  @forceReports = true
46
46
  end
47
+ opts.on('-s', '--report-server',
48
+ 'Parse and schedule the project and wait for remote report ' +
49
+ 'requests') do
50
+ @reportServer = true
51
+ end
47
52
  opts.on('-o', '--output-dir <directory>', String,
48
53
  'Directory the reports should go into') do |arg|
49
54
  @outputDir = arg + '/'
@@ -57,7 +62,7 @@ def processArguments(argv)
57
62
  end
58
63
 
59
64
  opts.on_tail('--version', 'Show version info') do
60
- puts "#{AppConfig.packageName} v#{AppConfig.version} - " +
65
+ puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
61
66
  "#{AppConfig.packageInfo}"
62
67
  exit 0
63
68
  end
@@ -74,12 +79,12 @@ def processArguments(argv)
74
79
 
75
80
  if files.empty?
76
81
  puts opts.to_s
77
- $stderr.puts "\nNo file name specified!"
82
+ $stderr.puts "\nNo project file name specified!"
78
83
  exit 1
79
84
  end
80
85
 
81
86
  unless TaskJuggler::Log.silent
82
- puts "#{AppConfig.packageName} v#{AppConfig.version} - " +
87
+ puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
83
88
  "#{AppConfig.packageInfo}\n\n" +
84
89
  "Copyright (c) #{AppConfig.copyright.join(', ')}" +
85
90
  " by #{AppConfig.authors.join(', ')}\n\n" +
@@ -92,17 +97,28 @@ end
92
97
  def main
93
98
  @maxCpuCores = 1
94
99
  @forceReports = false
100
+ @reportServer = false
95
101
  @outputDir = ''
96
102
 
97
- errors = false
98
- tj = TaskJuggler.new(files = processArguments(ARGV))
103
+ # Install signal handler to exit gracefully on CTRL-C.
104
+ Kernel.trap('INT') do
105
+ puts "\nAborting on user request!"
106
+ exit 1
107
+ end
108
+
109
+ files = processArguments(ARGV)
110
+ tj = TaskJuggler.new(true)
99
111
  tj.maxCpuCores = @maxCpuCores
100
- exit 1 unless tj.parse(files)
112
+ exit 1 unless tj.parse(files, @reportServer)
101
113
  if !tj.schedule
102
- errors = true
103
114
  exit 1 unless @forceReports
104
115
  end
105
- exit 1 if !tj.generateReports(@outputDir) || errors
116
+
117
+ if @reportServer
118
+ tj.serveReports
119
+ else
120
+ exit 1 if !tj.generateReports(@outputDir) || tj.errors > 0
121
+ end
106
122
 
107
123
  end
108
124
 
data/lib/tj3client.rb ADDED
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = tj3client.rb -- The TaskJuggler III Project Management Software
5
+ #
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of version 2 of the GNU General Public License as
10
+ # published by the Free Software Foundation.
11
+ #
12
+
13
+ require 'optparse'
14
+ require 'drb'
15
+ require 'Tj3Config'
16
+
17
+ # Name of the application suite
18
+ AppConfig.appName = 'tj3client'
19
+
20
+ def processArguments(argv)
21
+ opts = OptionParser.new
22
+
23
+ opts.banner = "#{AppConfig.softwareName} v#{AppConfig.version} - " +
24
+ "#{AppConfig.packageInfo}\n\n" +
25
+ "Copyright (c) #{AppConfig.copyright.join(', ')}" +
26
+ " by #{AppConfig.authors.join(', ')}\n\n" +
27
+ "#{AppConfig.license}\n" +
28
+ "For more info about #{AppConfig.softwareName} see " +
29
+ "#{AppConfig.contact}\n\n" +
30
+ "Usage: #{AppConfig.appName} [options] file.tjp " +
31
+ "[ file1.tji ... ]"
32
+ opts.separator ""
33
+ opts.on('--silent', "Don't show program and progress information") do
34
+ @silent = true
35
+ end
36
+ opts.on('-g', '--generate-report <ID>', String,
37
+ 'Generate reports despite scheduling errors') do |arg|
38
+ @reports << arg
39
+ end
40
+ opts.on_tail('-h', '--help', 'Show this message') do
41
+ puts opts.to_s
42
+ exit 0
43
+ end
44
+
45
+ opts.on_tail('--version', 'Show version info') do
46
+ puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
47
+ "#{AppConfig.packageInfo}"
48
+ exit 0
49
+ end
50
+
51
+ # Show some progress information by default
52
+ @silent = false
53
+ begin
54
+ files = opts.parse(argv)
55
+ rescue OptionParser::ParseError => msg
56
+ puts opts.to_s + "\n"
57
+ $stderr.puts msg
58
+ exit 0
59
+ end
60
+
61
+ unless @silent
62
+ puts "#{AppConfig.softwareName} v#{AppConfig.version} - " +
63
+ "#{AppConfig.packageInfo}\n\n" +
64
+ "Copyright (c) #{AppConfig.copyright.join(', ')}" +
65
+ " by #{AppConfig.authors.join(', ')}\n\n" +
66
+ "#{AppConfig.license}\n"
67
+ end
68
+
69
+ files
70
+ end
71
+
72
+ def main
73
+ @reports = []
74
+
75
+ # Install signal handler to exit gracefully on CTRL-C.
76
+ Kernel.trap('INT') do
77
+ puts "\nAborting on user request!"
78
+ exit 1
79
+ end
80
+
81
+ files = processArguments(ARGV)
82
+
83
+ # Connect to the RemoteServiceManager object and request a new service
84
+ # process.
85
+ DRb.start_service
86
+ serviceManager = DRbObject.new(nil, 'druby://localhost:8474')
87
+
88
+ uri = serviceManager.requestService
89
+ DRb.stop_service
90
+
91
+ DRb.start_service
92
+ server = DRbObject.new(nil, uri)
93
+ server.connect($stdout, $stderr)
94
+
95
+ files.each do |file|
96
+ fileContent = IO.read(file)
97
+ server.parse(fileContent)
98
+ end
99
+
100
+ @reports.each do |id|
101
+ server.generateReport(id)
102
+ end
103
+
104
+ server.disconnect
105
+ end
106
+
107
+ main()
108
+ exit 0
109
+
110
+