taskjuggler 0.0.8 → 0.0.9

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 (613) hide show
  1. data/CHANGELOG +1144 -2047
  2. data/README +1 -1
  3. data/Rakefile +6 -6
  4. data/data/css/tjmanual.css +20 -0
  5. data/data/css/tjreport.css +7 -6
  6. data/doc/AppConfig.html +136 -130
  7. data/doc/Arguments.html +46 -40
  8. data/doc/CHANGELOG.html +1162 -2057
  9. data/doc/COPYING.html +8 -2
  10. data/doc/Object.html +205 -199
  11. data/doc/README.html +9 -3
  12. data/doc/RuntimeConfig.html +75 -69
  13. data/doc/String.html +69 -63
  14. data/doc/TaskJuggler.html +350 -291
  15. data/doc/TaskJuggler/Account.html +26 -20
  16. data/doc/TaskJuggler/AccountAttribute.html +24 -18
  17. data/doc/TaskJuggler/AccountScenario.html +24 -18
  18. data/doc/TaskJuggler/Allocation.html +74 -68
  19. data/doc/TaskJuggler/AllocationAttribute.html +54 -48
  20. data/doc/TaskJuggler/AttributeBase.html +172 -93
  21. data/doc/TaskJuggler/AttributeDefinition.html +22 -16
  22. data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
  23. data/doc/TaskJuggler/BatchProcessor.html +263 -257
  24. data/doc/TaskJuggler/Booking.html +44 -38
  25. data/doc/TaskJuggler/BookingListAttribute.html +25 -21
  26. data/doc/TaskJuggler/BooleanAttribute.html +24 -18
  27. data/doc/TaskJuggler/CSVFile.html +193 -187
  28. data/doc/TaskJuggler/CellSettingPattern.html +13 -7
  29. data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
  30. data/doc/TaskJuggler/Charge.html +49 -43
  31. data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
  32. data/doc/TaskJuggler/ChargeSet.html +94 -88
  33. data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
  34. data/doc/TaskJuggler/CollisionDetector.html +142 -136
  35. data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
  36. data/doc/TaskJuggler/ColumnTable.html +50 -44
  37. data/doc/TaskJuggler/Daemon.html +71 -50
  38. data/doc/TaskJuggler/DataCache.html +110 -58
  39. data/doc/TaskJuggler/DataCacheEntry.html +22 -16
  40. data/doc/TaskJuggler/DateAttribute.html +24 -18
  41. data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
  42. data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
  43. data/doc/TaskJuggler/DurationAttribute.html +25 -19
  44. data/doc/TaskJuggler/FileList.html +25 -19
  45. data/doc/TaskJuggler/FileRecord.html +17 -11
  46. data/doc/TaskJuggler/FixnumAttribute.html +16 -10
  47. data/doc/TaskJuggler/FlagListAttribute.html +25 -21
  48. data/doc/TaskJuggler/FloatAttribute.html +20 -14
  49. data/doc/TaskJuggler/FormatListAttribute.html +17 -11
  50. data/doc/TaskJuggler/GanttChart.html +242 -236
  51. data/doc/TaskJuggler/GanttContainer.html +71 -67
  52. data/doc/TaskJuggler/GanttHeader.html +113 -107
  53. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
  54. data/doc/TaskJuggler/GanttLine.html +217 -210
  55. data/doc/TaskJuggler/GanttLoadStack.html +89 -83
  56. data/doc/TaskJuggler/GanttMilestone.html +11 -6
  57. data/doc/TaskJuggler/GanttRouter.html +194 -186
  58. data/doc/TaskJuggler/GanttTaskBar.html +41 -34
  59. data/doc/TaskJuggler/HTMLDocument.html +52 -46
  60. data/doc/TaskJuggler/HTMLGraphics.html +58 -52
  61. data/doc/TaskJuggler/Interval.html +90 -84
  62. data/doc/TaskJuggler/IntervalList.html +777 -0
  63. data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
  64. data/doc/TaskJuggler/JobInfo.html +36 -30
  65. data/doc/TaskJuggler/Journal.html +188 -177
  66. data/doc/TaskJuggler/JournalEntry.html +36 -30
  67. data/doc/TaskJuggler/JournalEntryList.html +88 -82
  68. data/doc/TaskJuggler/KeywordArray.html +12 -6
  69. data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
  70. data/doc/TaskJuggler/Limits.html +111 -105
  71. data/doc/TaskJuggler/Limits/Limit.html +71 -65
  72. data/doc/TaskJuggler/LimitsAttribute.html +21 -15
  73. data/doc/TaskJuggler/ListAttributeBase.html +16 -10
  74. data/doc/TaskJuggler/Log.html +111 -105
  75. data/doc/TaskJuggler/LogFile.html +54 -48
  76. data/doc/TaskJuggler/LogicalAttribute.html +35 -29
  77. data/doc/TaskJuggler/LogicalExpression.html +32 -26
  78. data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
  79. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
  80. data/doc/TaskJuggler/LogicalFlag.html +24 -18
  81. data/doc/TaskJuggler/LogicalFunction.html +164 -158
  82. data/doc/TaskJuggler/LogicalOperation.html +138 -132
  83. data/doc/TaskJuggler/Macro.html +14 -8
  84. data/doc/TaskJuggler/MacroTable.html +42 -36
  85. data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
  86. data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
  87. data/doc/TaskJuggler/Message.html +56 -50
  88. data/doc/TaskJuggler/MessageHandler.html +73 -67
  89. data/doc/TaskJuggler/Navigator.html +92 -86
  90. data/doc/TaskJuggler/NavigatorElement.html +88 -82
  91. data/doc/TaskJuggler/NikuProject.html +15 -9
  92. data/doc/TaskJuggler/NikuReport.html +405 -370
  93. data/doc/TaskJuggler/NikuResource.html +13 -7
  94. data/doc/TaskJuggler/NodeListAttribute.html +13 -9
  95. data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
  96. data/doc/TaskJuggler/ProcessIntercom.html +116 -110
  97. data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
  98. data/doc/TaskJuggler/Project.html +1064 -895
  99. data/doc/TaskJuggler/ProjectBroker.html +439 -366
  100. data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
  101. data/doc/TaskJuggler/ProjectFileParser.html +329 -319
  102. data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
  103. data/doc/TaskJuggler/ProjectRecord.html +66 -60
  104. data/doc/TaskJuggler/ProjectServer.html +287 -280
  105. data/doc/TaskJuggler/ProjectServerIface.html +43 -37
  106. data/doc/TaskJuggler/PropertyAttribute.html +16 -10
  107. data/doc/TaskJuggler/PropertyList.html +205 -199
  108. data/doc/TaskJuggler/PropertySet.html +264 -296
  109. data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
  110. data/doc/TaskJuggler/Query.html +309 -524
  111. data/doc/TaskJuggler/RTFHandlers.html +17 -11
  112. data/doc/TaskJuggler/RTFNavigator.html +33 -27
  113. data/doc/TaskJuggler/RTFQuery.html +135 -129
  114. data/doc/TaskJuggler/RTFReport.html +63 -57
  115. data/doc/TaskJuggler/RTFReportLink.html +55 -49
  116. data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
  117. data/doc/TaskJuggler/RealFormat.html +64 -58
  118. data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
  119. data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
  120. data/doc/TaskJuggler/Report.html +294 -249
  121. data/doc/TaskJuggler/ReportBase.html +229 -223
  122. data/doc/TaskJuggler/ReportContext.html +52 -46
  123. data/doc/TaskJuggler/ReportServer.html +143 -137
  124. data/doc/TaskJuggler/ReportServerIface.html +51 -43
  125. data/doc/TaskJuggler/ReportServerRecord.html +36 -30
  126. data/doc/TaskJuggler/ReportServlet.html +167 -140
  127. data/doc/TaskJuggler/ReportTable.html +137 -131
  128. data/doc/TaskJuggler/ReportTableCell.html +332 -292
  129. data/doc/TaskJuggler/ReportTableColumn.html +46 -40
  130. data/doc/TaskJuggler/ReportTableLegend.html +43 -38
  131. data/doc/TaskJuggler/ReportTableLine.html +66 -60
  132. data/doc/TaskJuggler/Resource.html +166 -160
  133. data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
  134. data/doc/TaskJuggler/ResourceListRE.html +47 -41
  135. data/doc/TaskJuggler/ResourceScenario.html +671 -644
  136. data/doc/TaskJuggler/RichText.html +51 -45
  137. data/doc/TaskJuggler/RichTextAttribute.html +28 -22
  138. data/doc/TaskJuggler/RichTextDocument.html +96 -90
  139. data/doc/TaskJuggler/RichTextElement.html +503 -497
  140. data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
  141. data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
  142. data/doc/TaskJuggler/RichTextImage.html +14 -8
  143. data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
  144. data/doc/TaskJuggler/RichTextParser.html +59 -53
  145. data/doc/TaskJuggler/RichTextScanner.html +184 -178
  146. data/doc/TaskJuggler/RichTextSnip.html +69 -63
  147. data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
  148. data/doc/TaskJuggler/Scenario.html +13 -7
  149. data/doc/TaskJuggler/ScenarioData.html +40 -34
  150. data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
  151. data/doc/TaskJuggler/Scoreboard.html +129 -107
  152. data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
  153. data/doc/TaskJuggler/SheetReceiver.html +333 -327
  154. data/doc/TaskJuggler/SheetSender.html +227 -221
  155. data/doc/TaskJuggler/Shift.html +26 -20
  156. data/doc/TaskJuggler/ShiftAssignment.html +45 -39
  157. data/doc/TaskJuggler/ShiftAssignments.html +178 -172
  158. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
  159. data/doc/TaskJuggler/ShiftScenario.html +29 -23
  160. data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
  161. data/doc/TaskJuggler/SortListAttribute.html +17 -13
  162. data/doc/TaskJuggler/SourceFileInfo.html +19 -13
  163. data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
  164. data/doc/TaskJuggler/StatusSheetReport.html +166 -159
  165. data/doc/TaskJuggler/StatusSheetSender.html +80 -74
  166. data/doc/TaskJuggler/StringAttribute.html +20 -14
  167. data/doc/TaskJuggler/SymbolAttribute.html +16 -10
  168. data/doc/TaskJuggler/SyntaxReference.html +231 -225
  169. data/doc/TaskJuggler/TOCEntry.html +46 -40
  170. data/doc/TaskJuggler/TSResourceRecord.html +15 -9
  171. data/doc/TaskJuggler/TSTaskRecord.html +16 -10
  172. data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
  173. data/doc/TaskJuggler/TableOfContents.html +28 -22
  174. data/doc/TaskJuggler/TableReport.html +906 -866
  175. data/doc/TaskJuggler/Task.html +99 -93
  176. data/doc/TaskJuggler/TaskDependency.html +24 -18
  177. data/doc/TaskJuggler/TaskListAttribute.html +29 -25
  178. data/doc/TaskJuggler/TaskListRE.html +46 -39
  179. data/doc/TaskJuggler/TaskScenario.html +2218 -1965
  180. data/doc/TaskJuggler/TextFormatter.html +154 -148
  181. data/doc/TaskJuggler/TextParser.html +362 -348
  182. data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
  183. data/doc/TaskJuggler/TextParser/Rule.html +147 -141
  184. data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
  185. data/doc/TaskJuggler/TextParser/State.html +88 -82
  186. data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
  187. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
  188. data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
  189. data/doc/TaskJuggler/TextReport.html +80 -74
  190. data/doc/TaskJuggler/TextScanner.html +284 -272
  191. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
  192. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
  193. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
  194. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  195. data/doc/TaskJuggler/TimeSheet.html +123 -117
  196. data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
  197. data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
  198. data/doc/TaskJuggler/TimeSheetReport.html +206 -199
  199. data/doc/TaskJuggler/TimeSheetSender.html +27 -21
  200. data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
  201. data/doc/TaskJuggler/TimeSheets.html +20 -14
  202. data/doc/TaskJuggler/Tj3AppBase.html +100 -94
  203. data/doc/TaskJuggler/Tj3Client.html +407 -483
  204. data/doc/TaskJuggler/Tj3Daemon.html +116 -107
  205. data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
  206. data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
  207. data/doc/TaskJuggler/Tj3SsSender.html +64 -58
  208. data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
  209. data/doc/TaskJuggler/Tj3TsSender.html +51 -45
  210. data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
  211. data/doc/TaskJuggler/TjException.html +13 -7
  212. data/doc/TaskJuggler/TjTime.html +444 -438
  213. data/doc/TaskJuggler/TjpExample.html +84 -78
  214. data/doc/TaskJuggler/TjpExportRE.html +356 -349
  215. data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
  216. data/doc/TaskJuggler/URLParameter.html +16 -10
  217. data/doc/TaskJuggler/UserManual.html +185 -179
  218. data/doc/TaskJuggler/VimSyntax.html +144 -138
  219. data/doc/TaskJuggler/WebServer.html +46 -39
  220. data/doc/TaskJuggler/WelcomePage.html +769 -0
  221. data/doc/TaskJuggler/WorkingHours.html +185 -179
  222. data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
  223. data/doc/TaskJuggler/XMLBlob.html +21 -15
  224. data/doc/TaskJuggler/XMLComment.html +17 -11
  225. data/doc/TaskJuggler/XMLDocument.html +33 -27
  226. data/doc/TaskJuggler/XMLElement.html +97 -91
  227. data/doc/TaskJuggler/XMLNamedText.html +13 -7
  228. data/doc/TaskJuggler/XMLText.html +32 -26
  229. data/doc/index.html +601 -563
  230. data/doc/lib/AccountScenario_rb.html +5 -3
  231. data/doc/lib/Account_rb.html +5 -3
  232. data/doc/lib/Allocation_rb.html +5 -3
  233. data/doc/lib/AppConfig_rb.html +5 -3
  234. data/doc/lib/AttributeBase_rb.html +5 -3
  235. data/doc/lib/AttributeDefinition_rb.html +5 -3
  236. data/doc/lib/Attributes_rb.html +5 -3
  237. data/doc/lib/BatchProcessor_rb.html +5 -3
  238. data/doc/lib/Booking_rb.html +5 -3
  239. data/doc/lib/ChargeSet_rb.html +5 -3
  240. data/doc/lib/Charge_rb.html +5 -3
  241. data/doc/lib/DataCache_rb.html +5 -3
  242. data/doc/lib/FileList_rb.html +5 -3
  243. data/doc/lib/HTMLDocument_rb.html +5 -3
  244. data/doc/lib/IntervalList_rb.html +69 -0
  245. data/doc/lib/Interval_rb.html +5 -3
  246. data/doc/lib/Journal_rb.html +5 -3
  247. data/doc/lib/KeywordArray_rb.html +5 -3
  248. data/doc/lib/KeywordDocumentation_rb.html +5 -3
  249. data/doc/lib/Limits_rb.html +5 -3
  250. data/doc/lib/LogFile_rb.html +5 -3
  251. data/doc/lib/Log_rb.html +5 -3
  252. data/doc/lib/LogicalExpression_rb.html +5 -3
  253. data/doc/lib/LogicalFunction_rb.html +5 -3
  254. data/doc/lib/LogicalOperation_rb.html +5 -3
  255. data/doc/lib/MacroTable_rb.html +5 -3
  256. data/doc/lib/MessageHandler_rb.html +5 -3
  257. data/doc/lib/ProjectFileParser_rb.html +5 -3
  258. data/doc/lib/ProjectFileScanner_rb.html +5 -3
  259. data/doc/lib/Project_rb.html +5 -3
  260. data/doc/lib/PropertyList_rb.html +5 -3
  261. data/doc/lib/PropertySet_rb.html +5 -3
  262. data/doc/lib/PropertyTreeNode_rb.html +5 -3
  263. data/doc/lib/Query_rb.html +5 -3
  264. data/doc/lib/RTFHandlers_rb.html +5 -3
  265. data/doc/lib/RTFNavigator_rb.html +5 -3
  266. data/doc/lib/RTFQuery_rb.html +5 -3
  267. data/doc/lib/RTFReportLink_rb.html +5 -3
  268. data/doc/lib/RTFReport_rb.html +5 -3
  269. data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
  270. data/doc/lib/RealFormat_rb.html +5 -3
  271. data/doc/lib/ResourceScenario_rb.html +5 -3
  272. data/doc/lib/Resource_rb.html +5 -3
  273. data/doc/lib/RichTextDocument_rb.html +5 -3
  274. data/doc/lib/RichTextElement_rb.html +5 -3
  275. data/doc/lib/RichTextFunctionExample_rb.html +5 -3
  276. data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
  277. data/doc/lib/RichTextParser_rb.html +5 -3
  278. data/doc/lib/RichTextScanner_rb.html +5 -3
  279. data/doc/lib/RichTextSnip_rb.html +5 -3
  280. data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
  281. data/doc/lib/RichText_rb.html +5 -3
  282. data/doc/lib/RuntimeConfig_rb.html +5 -3
  283. data/doc/lib/ScenarioData_rb.html +5 -3
  284. data/doc/lib/Scenario_rb.html +5 -3
  285. data/doc/lib/Scoreboard_rb.html +7 -3
  286. data/doc/lib/SheetHandlerBase_rb.html +5 -3
  287. data/doc/lib/SheetReceiver_rb.html +5 -3
  288. data/doc/lib/SheetSender_rb.html +5 -3
  289. data/doc/lib/ShiftAssignments_rb.html +5 -3
  290. data/doc/lib/ShiftScenario_rb.html +5 -3
  291. data/doc/lib/Shift_rb.html +5 -3
  292. data/doc/lib/SimpleQueryExpander_rb.html +5 -3
  293. data/doc/lib/SourceFileInfo_rb.html +5 -3
  294. data/doc/lib/StatusSheetReceiver_rb.html +5 -3
  295. data/doc/lib/StatusSheetSender_rb.html +5 -3
  296. data/doc/lib/SyntaxReference_rb.html +5 -3
  297. data/doc/lib/TOCEntry_rb.html +5 -3
  298. data/doc/lib/TableColumnDefinition_rb.html +5 -3
  299. data/doc/lib/TableOfContents_rb.html +5 -3
  300. data/doc/lib/TaskDependency_rb.html +5 -3
  301. data/doc/lib/TaskJuggler_rb.html +5 -3
  302. data/doc/lib/TaskScenario_rb.html +5 -3
  303. data/doc/lib/Task_rb.html +5 -3
  304. data/doc/lib/TextFormatter_rb.html +6 -4
  305. data/doc/lib/TextParser/Pattern_rb.html +5 -3
  306. data/doc/lib/TextParser/Rule_rb.html +5 -3
  307. data/doc/lib/TextParser/StackElement_rb.html +5 -3
  308. data/doc/lib/TextParser/State_rb.html +6 -4
  309. data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
  310. data/doc/lib/TextParser_rb.html +5 -3
  311. data/doc/lib/TextScanner_rb.html +5 -3
  312. data/doc/lib/TimeSheetReceiver_rb.html +5 -3
  313. data/doc/lib/TimeSheetSender_rb.html +5 -3
  314. data/doc/lib/TimeSheetSummary_rb.html +6 -4
  315. data/doc/lib/TimeSheets_rb.html +5 -3
  316. data/doc/lib/Tj3AppBase_rb.html +5 -3
  317. data/doc/lib/Tj3Config_rb.html +5 -3
  318. data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
  319. data/doc/lib/TjException_rb.html +5 -3
  320. data/doc/lib/TjTime_rb.html +5 -3
  321. data/doc/lib/TjpExample_rb.html +5 -3
  322. data/doc/lib/TjpSyntaxRules_rb.html +5 -3
  323. data/doc/lib/URLParameter_rb.html +5 -3
  324. data/doc/lib/UTF8String_rb.html +5 -3
  325. data/doc/lib/UserManual_rb.html +5 -3
  326. data/doc/lib/VimSyntax_rb.html +6 -4
  327. data/doc/lib/WorkingHours_rb.html +5 -3
  328. data/doc/lib/XMLDocument_rb.html +5 -3
  329. data/doc/lib/XMLElement_rb.html +5 -3
  330. data/doc/lib/daemon/Daemon_rb.html +5 -3
  331. data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
  332. data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
  333. data/doc/lib/daemon/ProjectServer_rb.html +5 -3
  334. data/doc/lib/daemon/ReportServer_rb.html +5 -3
  335. data/doc/lib/daemon/ReportServlet_rb.html +69 -0
  336. data/doc/lib/daemon/WebServer_rb.html +9 -3
  337. data/doc/lib/daemon/WelcomePage_rb.html +71 -0
  338. data/doc/lib/deep_copy_rb.html +5 -3
  339. data/doc/lib/reports/CSVFile_rb.html +5 -3
  340. data/doc/lib/reports/CollisionDetector_rb.html +5 -3
  341. data/doc/lib/reports/ColumnTable_rb.html +5 -3
  342. data/doc/lib/reports/GanttChart_rb.html +5 -3
  343. data/doc/lib/reports/GanttContainer_rb.html +5 -3
  344. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
  345. data/doc/lib/reports/GanttHeader_rb.html +5 -3
  346. data/doc/lib/reports/GanttLine_rb.html +5 -3
  347. data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
  348. data/doc/lib/reports/GanttMilestone_rb.html +5 -3
  349. data/doc/lib/reports/GanttRouter_rb.html +5 -3
  350. data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
  351. data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
  352. data/doc/lib/reports/Navigator_rb.html +5 -3
  353. data/doc/lib/reports/NikuReport_rb.html +5 -3
  354. data/doc/lib/reports/ReportBase_rb.html +5 -3
  355. data/doc/lib/reports/ReportContext_rb.html +5 -3
  356. data/doc/lib/reports/ReportTableCell_rb.html +5 -3
  357. data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
  358. data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
  359. data/doc/lib/reports/ReportTableLine_rb.html +5 -3
  360. data/doc/lib/reports/ReportTable_rb.html +5 -3
  361. data/doc/lib/reports/Report_rb.html +5 -3
  362. data/doc/lib/reports/ResourceListRE_rb.html +5 -3
  363. data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
  364. data/doc/lib/reports/TableReport_rb.html +5 -3
  365. data/doc/lib/reports/TaskListRE_rb.html +5 -3
  366. data/doc/lib/reports/TextReport_rb.html +5 -3
  367. data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
  368. data/doc/lib/reports/TjpExportRE_rb.html +5 -3
  369. data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
  370. data/doc/lib/tj3client_rb.html +5 -3
  371. data/doc/lib/tj3d_rb.html +6 -4
  372. data/doc/lib/tj3man_rb.html +5 -3
  373. data/doc/lib/tj3ss_receiver_rb.html +5 -3
  374. data/doc/lib/tj3ss_sender_rb.html +5 -3
  375. data/doc/lib/tj3ts_receiver_rb.html +5 -3
  376. data/doc/lib/tj3ts_sender_rb.html +5 -3
  377. data/doc/lib/tj3ts_summary_rb.html +5 -3
  378. data/examples/tutorial.tjp +13 -5
  379. data/gem_spec.rb +3 -0
  380. data/lib/Account.rb +2 -1
  381. data/lib/AccountScenario.rb +2 -1
  382. data/lib/Allocation.rb +2 -1
  383. data/lib/AppConfig.rb +2 -1
  384. data/lib/AttributeBase.rb +19 -5
  385. data/lib/AttributeDefinition.rb +2 -1
  386. data/lib/Attributes.rb +49 -38
  387. data/lib/BatchProcessor.rb +2 -1
  388. data/lib/Booking.rb +2 -1
  389. data/lib/Charge.rb +2 -1
  390. data/lib/ChargeSet.rb +2 -1
  391. data/lib/DataCache.rb +15 -1
  392. data/lib/FileList.rb +2 -1
  393. data/lib/HTMLDocument.rb +2 -1
  394. data/lib/Interval.rb +2 -1
  395. data/lib/IntervalList.rb +100 -0
  396. data/lib/Journal.rb +8 -2
  397. data/lib/KeywordArray.rb +2 -1
  398. data/lib/KeywordDocumentation.rb +10 -6
  399. data/lib/Limits.rb +2 -1
  400. data/lib/Log.rb +3 -2
  401. data/lib/LogFile.rb +2 -1
  402. data/lib/LogicalExpression.rb +2 -1
  403. data/lib/LogicalFunction.rb +2 -1
  404. data/lib/LogicalOperation.rb +2 -1
  405. data/lib/MacroTable.rb +2 -1
  406. data/lib/MessageHandler.rb +2 -1
  407. data/lib/Project.rb +92 -25
  408. data/lib/ProjectFileParser.rb +7 -2
  409. data/lib/ProjectFileScanner.rb +2 -1
  410. data/lib/PropertyList.rb +2 -1
  411. data/lib/PropertySet.rb +2 -6
  412. data/lib/PropertyTreeNode.rb +22 -44
  413. data/lib/Query.rb +32 -13
  414. data/lib/RTFHandlers.rb +2 -1
  415. data/lib/RTFNavigator.rb +2 -1
  416. data/lib/RTFQuery.rb +3 -2
  417. data/lib/RTFReport.rb +2 -1
  418. data/lib/RTFReportLink.rb +2 -1
  419. data/lib/RTFWithQuerySupport.rb +2 -1
  420. data/lib/RealFormat.rb +2 -1
  421. data/lib/Resource.rb +2 -1
  422. data/lib/ResourceScenario.rb +35 -14
  423. data/lib/RichText.rb +2 -1
  424. data/lib/RichTextDocument.rb +2 -1
  425. data/lib/RichTextElement.rb +2 -1
  426. data/lib/RichTextFunctionExample.rb +2 -1
  427. data/lib/RichTextFunctionHandler.rb +2 -1
  428. data/lib/RichTextParser.rb +2 -1
  429. data/lib/RichTextScanner.rb +2 -1
  430. data/lib/RichTextSnip.rb +2 -1
  431. data/lib/RichTextSyntaxRules.rb +2 -1
  432. data/lib/RuntimeConfig.rb +2 -1
  433. data/lib/Scenario.rb +2 -1
  434. data/lib/ScenarioData.rb +2 -1
  435. data/lib/Scoreboard.rb +27 -8
  436. data/lib/SheetHandlerBase.rb +2 -1
  437. data/lib/SheetReceiver.rb +2 -1
  438. data/lib/SheetSender.rb +2 -1
  439. data/lib/Shift.rb +2 -1
  440. data/lib/ShiftAssignments.rb +2 -1
  441. data/lib/ShiftScenario.rb +2 -1
  442. data/lib/SimpleQueryExpander.rb +2 -1
  443. data/lib/SourceFileInfo.rb +2 -1
  444. data/lib/StatusSheetReceiver.rb +2 -1
  445. data/lib/StatusSheetSender.rb +2 -1
  446. data/lib/SyntaxReference.rb +2 -1
  447. data/lib/TOCEntry.rb +2 -1
  448. data/lib/TableColumnDefinition.rb +9 -2
  449. data/lib/TableOfContents.rb +2 -1
  450. data/lib/Task.rb +2 -1
  451. data/lib/TaskDependency.rb +2 -1
  452. data/lib/TaskJuggler.rb +8 -6
  453. data/lib/TaskScenario.rb +337 -153
  454. data/lib/TextFormatter.rb +3 -2
  455. data/lib/TextParser.rb +7 -2
  456. data/lib/TextParser/Pattern.rb +2 -1
  457. data/lib/TextParser/Rule.rb +2 -1
  458. data/lib/TextParser/StackElement.rb +2 -1
  459. data/lib/TextParser/State.rb +3 -2
  460. data/lib/TextParser/TokenDoc.rb +2 -1
  461. data/lib/TextScanner.rb +12 -5
  462. data/lib/TimeSheetReceiver.rb +2 -1
  463. data/lib/TimeSheetSender.rb +2 -1
  464. data/lib/TimeSheetSummary.rb +3 -2
  465. data/lib/TimeSheets.rb +2 -1
  466. data/lib/Tj3AppBase.rb +6 -5
  467. data/lib/Tj3Config.rb +5 -4
  468. data/lib/Tj3SheetAppBase.rb +2 -1
  469. data/lib/TjException.rb +2 -1
  470. data/lib/TjTime.rb +2 -1
  471. data/lib/TjpExample.rb +2 -1
  472. data/lib/TjpSyntaxRules.rb +264 -65
  473. data/lib/URLParameter.rb +2 -1
  474. data/lib/UTF8String.rb +2 -1
  475. data/lib/UserManual.rb +2 -1
  476. data/lib/VimSyntax.rb +3 -2
  477. data/lib/WorkingHours.rb +2 -1
  478. data/lib/XMLDocument.rb +2 -1
  479. data/lib/XMLElement.rb +2 -1
  480. data/lib/daemon/Daemon.rb +3 -1
  481. data/lib/daemon/ProcessIntercom.rb +3 -1
  482. data/lib/daemon/ProjectBroker.rb +84 -32
  483. data/lib/daemon/ProjectServer.rb +5 -3
  484. data/lib/daemon/ReportServer.rb +8 -5
  485. data/lib/daemon/ReportServlet.rb +166 -0
  486. data/lib/daemon/WebServer.rb +6 -150
  487. data/lib/daemon/WelcomePage.rb +80 -0
  488. data/lib/deep_copy.rb +2 -1
  489. data/lib/reports/CSVFile.rb +2 -1
  490. data/lib/reports/CollisionDetector.rb +2 -1
  491. data/lib/reports/ColumnTable.rb +2 -1
  492. data/lib/reports/GanttChart.rb +2 -1
  493. data/lib/reports/GanttContainer.rb +3 -4
  494. data/lib/reports/GanttHeader.rb +2 -1
  495. data/lib/reports/GanttHeaderScaleItem.rb +2 -1
  496. data/lib/reports/GanttLine.rb +12 -10
  497. data/lib/reports/GanttLoadStack.rb +2 -1
  498. data/lib/reports/GanttMilestone.rb +3 -3
  499. data/lib/reports/GanttRouter.rb +4 -1
  500. data/lib/reports/GanttTaskBar.rb +9 -7
  501. data/lib/reports/HTMLGraphics.rb +2 -1
  502. data/lib/reports/Navigator.rb +2 -1
  503. data/lib/reports/NikuReport.rb +79 -49
  504. data/lib/reports/Report.rb +42 -10
  505. data/lib/reports/ReportBase.rb +2 -1
  506. data/lib/reports/ReportContext.rb +2 -1
  507. data/lib/reports/ReportTable.rb +2 -1
  508. data/lib/reports/ReportTableCell.rb +63 -28
  509. data/lib/reports/ReportTableColumn.rb +2 -1
  510. data/lib/reports/ReportTableLegend.rb +5 -5
  511. data/lib/reports/ReportTableLine.rb +2 -1
  512. data/lib/reports/ResourceListRE.rb +2 -1
  513. data/lib/reports/StatusSheetReport.rb +4 -2
  514. data/lib/reports/TableReport.rb +42 -38
  515. data/lib/reports/TaskListRE.rb +4 -2
  516. data/lib/reports/TextReport.rb +2 -1
  517. data/lib/reports/TimeSheetReport.rb +4 -2
  518. data/lib/reports/TjpExportRE.rb +4 -2
  519. data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
  520. data/lib/tj3client.rb +19 -36
  521. data/lib/tj3d.rb +6 -2
  522. data/lib/tj3man.rb +4 -3
  523. data/lib/tj3ss_receiver.rb +2 -1
  524. data/lib/tj3ss_sender.rb +2 -1
  525. data/lib/tj3ts_receiver.rb +2 -1
  526. data/lib/tj3ts_sender.rb +2 -1
  527. data/lib/tj3ts_summary.rb +2 -1
  528. data/manual/Day_To_Day_Juggling +36 -0
  529. data/manual/How_To_Contribute +9 -4
  530. data/manual/Installation +10 -3
  531. data/manual/TaskJuggler_Internals +0 -2
  532. data/manual/Tutorial +25 -3
  533. data/prj_cfg.rb +4 -2
  534. data/spec/IntervalList_spec.rb +138 -0
  535. data/spec/ProjectBroker_spec.rb +133 -0
  536. data/tasks/changelog.rake +41 -24
  537. data/tasks/csts.rake +1 -0
  538. data/tasks/gem.rake +1 -0
  539. data/tasks/rcov.rake +1 -1
  540. data/tasks/spec.rake +7 -0
  541. data/tasks/test.rake +1 -0
  542. data/test/MessageChecker.rb +2 -1
  543. data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
  544. data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
  545. data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
  546. data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
  547. data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
  548. data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
  549. data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
  550. data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
  551. data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
  552. data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
  553. data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
  554. data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
  555. data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
  556. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
  557. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
  558. data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
  559. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
  560. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
  561. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
  562. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
  563. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
  564. data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
  565. data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
  566. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
  567. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
  568. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
  569. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
  570. data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
  571. data/test/TestSuite/StatusSheets/sender.log +256 -0
  572. data/test/TestSuite/StatusSheets/statussheets.log +9 -0
  573. data/test/TestSuite/StatusSheets/tj3d.log +395 -0
  574. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
  575. data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
  576. data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
  577. data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
  578. data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
  579. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
  580. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
  581. data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
  582. data/test/all.rb +2 -4
  583. data/test/test_BatchProcessor.rb +2 -1
  584. data/test/test_CSV-Reports.rb +34 -23
  585. data/test/test_CSVFile.rb +2 -1
  586. data/test/test_CollisionDetector.rb +3 -2
  587. data/test/test_Journal.rb +2 -1
  588. data/test/test_Limits.rb +2 -1
  589. data/test/test_LogicalExpression.rb +2 -1
  590. data/test/test_MacroTable.rb +2 -1
  591. data/test/test_Project.rb +3 -2
  592. data/test/test_ProjectFileScanner.rb +2 -1
  593. data/test/test_PropertySet.rb +2 -1
  594. data/test/test_Query.rb +2 -1
  595. data/test/test_RealFormat.rb +2 -1
  596. data/test/test_ReportGenerator.rb +2 -1
  597. data/test/test_RichText.rb +2 -1
  598. data/test/test_Scheduler.rb +2 -1
  599. data/test/test_ShiftAssignments.rb +2 -1
  600. data/test/test_SimpleQueryExpander.rb +2 -1
  601. data/test/test_Syntax.rb +2 -1
  602. data/test/test_TextFormatter.rb +3 -2
  603. data/test/test_TjTime.rb +2 -1
  604. data/test/test_TjpExample.rb +2 -1
  605. data/test/test_URLParameter.rb +2 -1
  606. data/test/test_UTF8String.rb +2 -1
  607. data/test/test_WorkingHours.rb +2 -1
  608. data/test/test_deep_copy.rb +2 -1
  609. metadata +74 -20
  610. data/doc/StringIO.html +0 -595
  611. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
  612. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
  613. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
@@ -127,6 +127,8 @@
127
127
 
128
128
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
129
129
 
130
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
131
+
130
132
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
131
133
 
132
134
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -205,6 +207,8 @@
205
207
 
206
208
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
207
209
 
210
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
211
+
208
212
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
209
213
 
210
214
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -237,6 +241,8 @@
237
241
 
238
242
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
239
243
 
244
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
245
+
240
246
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
241
247
 
242
248
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -517,6 +523,8 @@
517
523
 
518
524
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
519
525
 
526
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
527
+
520
528
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
521
529
 
522
530
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -543,8 +551,6 @@
543
551
 
544
552
  <li><a href="../String.html">String</a></li>
545
553
 
546
- <li><a href="../StringIO.html">StringIO</a></li>
547
-
548
554
  </ul>
549
555
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
550
556
  </div>
@@ -592,10 +598,10 @@
592
598
  <div class="method-source-code"
593
599
  id="new-source">
594
600
  <pre>
595
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 393</span>
596
- 393: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">property</span>, <span class="ruby-identifier">type</span>)
597
- 394: <span class="ruby-keyword kw">super</span>
598
- 395: <span class="ruby-keyword kw">end</span></pre>
601
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 392</span>
602
+ 392: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">property</span>, <span class="ruby-identifier">type</span>)
603
+ 393: <span class="ruby-keyword kw">super</span>
604
+ 394: <span class="ruby-keyword kw">end</span></pre>
599
605
  </div>
600
606
 
601
607
  </div>
@@ -137,6 +137,8 @@
137
137
 
138
138
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
139
139
 
140
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
141
+
140
142
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
141
143
 
142
144
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -215,6 +217,8 @@
215
217
 
216
218
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
217
219
 
220
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
221
+
218
222
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
219
223
 
220
224
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -247,6 +251,8 @@
247
251
 
248
252
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
249
253
 
254
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
255
+
250
256
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
251
257
 
252
258
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -527,6 +533,8 @@
527
533
 
528
534
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
529
535
 
536
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
537
+
530
538
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
531
539
 
532
540
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -553,8 +561,6 @@
553
561
 
554
562
  <li><a href="../String.html">String</a></li>
555
563
 
556
- <li><a href="../StringIO.html">StringIO</a></li>
557
-
558
564
  </ul>
559
565
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
560
566
  </div>
@@ -602,10 +608,10 @@
602
608
  <div class="method-source-code"
603
609
  id="new-source">
604
610
  <pre>
605
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 400</span>
606
- 400: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">property</span>, <span class="ruby-identifier">type</span>)
607
- 401: <span class="ruby-keyword kw">super</span>
608
- 402: <span class="ruby-keyword kw">end</span></pre>
611
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 399</span>
612
+ 399: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">property</span>, <span class="ruby-identifier">type</span>)
613
+ 400: <span class="ruby-keyword kw">super</span>
614
+ 401: <span class="ruby-keyword kw">end</span></pre>
609
615
  </div>
610
616
 
611
617
  </div>
@@ -636,10 +642,10 @@
636
642
  <div class="method-source-code"
637
643
  id="tjp-d-source">
638
644
  <pre>
639
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 404</span>
640
- 404: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">ReferenceAttribute</span><span class="ruby-operator">::</span><span class="ruby-identifier">tjpId</span>
641
- 405: <span class="ruby-value str">'reference'</span>
642
- 406: <span class="ruby-keyword kw">end</span></pre>
645
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 403</span>
646
+ 403: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">ReferenceAttribute</span><span class="ruby-operator">::</span><span class="ruby-identifier">tjpId</span>
647
+ 404: <span class="ruby-value str">'reference'</span>
648
+ 405: <span class="ruby-keyword kw">end</span></pre>
643
649
  </div>
644
650
 
645
651
  </div>
@@ -676,10 +682,10 @@
676
682
  <div class="method-source-code"
677
683
  id="label-source">
678
684
  <pre>
679
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 423</span>
680
- 423: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">label</span>
681
- 424: <span class="ruby-ivar">@value</span> <span class="ruby-operator">?</span> (<span class="ruby-ivar">@value</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">?</span> <span class="ruby-ivar">@value</span>[<span class="ruby-value">1</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-ivar">@value</span>[<span class="ruby-value">0</span>]) <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
682
- 425: <span class="ruby-keyword kw">end</span></pre>
685
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 422</span>
686
+ 422: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">label</span>
687
+ 423: <span class="ruby-ivar">@value</span> <span class="ruby-operator">?</span> (<span class="ruby-ivar">@value</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">?</span> <span class="ruby-ivar">@value</span>[<span class="ruby-value">1</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-ivar">@value</span>[<span class="ruby-value">0</span>]) <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
688
+ 424: <span class="ruby-keyword kw">end</span></pre>
683
689
  </div>
684
690
 
685
691
  </div>
@@ -710,13 +716,13 @@
710
716
  <div class="method-source-code"
711
717
  id="to-rti-source">
712
718
  <pre>
713
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 412</span>
714
- 412: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_rti</span>(<span class="ruby-identifier">query</span>)
715
- 413: <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">@value</span>
716
- 414:
717
- 415: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;[#{url} #{label}]&quot;</span>)
718
- 416: <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
719
- 417: <span class="ruby-keyword kw">end</span></pre>
719
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 411</span>
720
+ 411: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_rti</span>(<span class="ruby-identifier">query</span>)
721
+ 412: <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">@value</span>
722
+ 413:
723
+ 414: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;[#{url} #{label}]&quot;</span>)
724
+ 415: <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
725
+ 416: <span class="ruby-keyword kw">end</span></pre>
720
726
  </div>
721
727
 
722
728
  </div>
@@ -747,10 +753,10 @@
747
753
  <div class="method-source-code"
748
754
  id="to-s-source">
749
755
  <pre>
750
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 408</span>
751
- 408: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>)
752
- 409: <span class="ruby-identifier">url</span> <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>
753
- 410: <span class="ruby-keyword kw">end</span></pre>
756
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 407</span>
757
+ 407: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>)
758
+ 408: <span class="ruby-identifier">url</span> <span class="ruby-operator">||</span> <span class="ruby-value str">''</span>
759
+ 409: <span class="ruby-keyword kw">end</span></pre>
754
760
  </div>
755
761
 
756
762
  </div>
@@ -781,10 +787,10 @@
781
787
  <div class="method-source-code"
782
788
  id="url-source">
783
789
  <pre>
784
- <span class="ruby-comment cmt"># File lib/Attributes.rb, line 419</span>
785
- 419: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">url</span>
786
- 420: <span class="ruby-ivar">@value</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@value</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
787
- 421: <span class="ruby-keyword kw">end</span></pre>
790
+ <span class="ruby-comment cmt"># File lib/Attributes.rb, line 418</span>
791
+ 418: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">url</span>
792
+ 419: <span class="ruby-ivar">@value</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@value</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
793
+ 420: <span class="ruby-keyword kw">end</span></pre>
788
794
  </div>
789
795
 
790
796
  </div>
@@ -157,6 +157,8 @@
157
157
 
158
158
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
159
159
 
160
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
161
+
160
162
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
161
163
 
162
164
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -235,6 +237,8 @@
235
237
 
236
238
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
237
239
 
240
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
241
+
238
242
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
239
243
 
240
244
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -267,6 +271,8 @@
267
271
 
268
272
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
269
273
 
274
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
275
+
270
276
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
271
277
 
272
278
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -547,6 +553,8 @@
547
553
 
548
554
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
549
555
 
556
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
557
+
550
558
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
551
559
 
552
560
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -573,8 +581,6 @@
573
581
 
574
582
  <li><a href="../String.html">String</a></li>
575
583
 
576
- <li><a href="../StringIO.html">StringIO</a></li>
577
-
578
584
  </ul>
579
585
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
580
586
  </div>
@@ -669,15 +675,15 @@ Create a new report object.
669
675
  <div class="method-source-code"
670
676
  id="new-source">
671
677
  <pre>
672
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 37</span>
673
- 37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">project</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">parent</span>)
674
- 38: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">reports</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">parent</span>)
675
- 39: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">addReport</span>(<span class="ruby-keyword kw">self</span>)
676
- 40:
677
- 41: <span class="ruby-comment cmt"># The type specifier must be set for every report. It tells whether this</span>
678
- 42: <span class="ruby-comment cmt"># is a task, resource, text or other report.</span>
679
- 43: <span class="ruby-ivar">@typeSpec</span> = <span class="ruby-keyword kw">nil</span>
680
- 44: <span class="ruby-keyword kw">end</span></pre>
678
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 38</span>
679
+ 38: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">project</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">parent</span>)
680
+ 39: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">reports</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">parent</span>)
681
+ 40: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">addReport</span>(<span class="ruby-keyword kw">self</span>)
682
+ 41:
683
+ 42: <span class="ruby-comment cmt"># The type specifier must be set for every report. It tells whether this</span>
684
+ 43: <span class="ruby-comment cmt"># is a task, resource, text or other report.</span>
685
+ 44: <span class="ruby-ivar">@typeSpec</span> = <span class="ruby-keyword kw">nil</span>
686
+ 45: <span class="ruby-keyword kw">end</span></pre>
681
687
  </div>
682
688
 
683
689
  </div>
@@ -714,16 +720,16 @@ Create a new report object.
714
720
  <div class="method-source-code"
715
721
  id="error-source">
716
722
  <pre>
717
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 111</span>
718
- 111: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>)
719
- 112: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">message</span>.<span class="ruby-identifier">empty?</span>
720
- 113: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>, <span class="ruby-ivar">@sourceFileInfo</span>)
721
- 114: <span class="ruby-keyword kw">else</span>
722
- 115: <span class="ruby-comment cmt"># We have no message, so the error has already been reported to the</span>
723
- 116: <span class="ruby-comment cmt"># MessageHandler. Just trigger another exception to signal the error.</span>
724
- 117: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>
725
- 118: <span class="ruby-keyword kw">end</span>
726
- 119: <span class="ruby-keyword kw">end</span></pre>
723
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 121</span>
724
+ 121: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>)
725
+ 122: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">message</span>.<span class="ruby-identifier">empty?</span>
726
+ 123: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>, <span class="ruby-ivar">@sourceFileInfo</span>)
727
+ 124: <span class="ruby-keyword kw">else</span>
728
+ 125: <span class="ruby-comment cmt"># We have no message, so the error has already been reported to the</span>
729
+ 126: <span class="ruby-comment cmt"># MessageHandler. Just trigger another exception to signal the error.</span>
730
+ 127: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>
731
+ 128: <span class="ruby-keyword kw">end</span>
732
+ 129: <span class="ruby-keyword kw">end</span></pre>
727
733
  </div>
728
734
 
729
735
  </div>
@@ -740,7 +746,7 @@ Create a new report object.
740
746
  <div class="method-heading">
741
747
 
742
748
  <span class="method-name">generate</span><span
743
- class="method-args">()</span>
749
+ class="method-args">(requestedFormats = nil)</span>
744
750
  <span class="method-click-advice">click to toggle source</span>
745
751
 
746
752
  </div>
@@ -750,36 +756,50 @@ Create a new report object.
750
756
  <p>
751
757
  The generate function is where the action happens in this class. The report
752
758
  defined by all the class attributes and report elements is generated
753
- according the the requested output format(s).
759
+ according the the requested output format(s). <em>requestedFormats</em> can
760
+ be a list of formats that should be generated (e.
761
+ </p>
762
+ <ol style="display: lower-alpha">
763
+ <li><p>
764
+ :html, :csv, etc.).
754
765
  </p>
766
+ </li>
767
+ </ol>
755
768
 
756
769
 
757
770
 
758
771
  <div class="method-source-code"
759
772
  id="generate-source">
760
773
  <pre>
761
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 49</span>
762
- 49: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate</span>
763
- 50: <span class="ruby-identifier">generateIntermediateFormat</span>
764
- 51:
765
- 52: <span class="ruby-comment cmt"># Then generate the actual output format.</span>
766
- 53: <span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
767
- 54: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">format</span>
768
- 55: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:html</span>
769
- 56: <span class="ruby-identifier">generateHTML</span>
770
- 57: <span class="ruby-identifier">copyAuxiliaryFiles</span>
771
- 58: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:csv</span>
772
- 59: <span class="ruby-identifier">generateCSV</span>
773
- 60: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
774
- 61: <span class="ruby-identifier">generateNiku</span>
775
- 62: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:tjp</span>
776
- 63: <span class="ruby-identifier">generateTJP</span>
777
- 64: <span class="ruby-keyword kw">else</span>
778
- 65: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Unknown report output format #{format}.'</span>
779
- 66: <span class="ruby-keyword kw">end</span>
780
- 67: <span class="ruby-keyword kw">end</span>
781
- 68: <span class="ruby-keyword kw">true</span>
782
- 69: <span class="ruby-keyword kw">end</span></pre>
774
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 52</span>
775
+ 52: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate</span>(<span class="ruby-identifier">requestedFormats</span> = <span class="ruby-keyword kw">nil</span>)
776
+ 53: <span class="ruby-identifier">generateIntermediateFormat</span>
777
+ 54:
778
+ 55: <span class="ruby-comment cmt"># We either generate the requested formats or the list of formats that</span>
779
+ 56: <span class="ruby-comment cmt"># was specified in the report definition.</span>
780
+ 57: (<span class="ruby-identifier">requestedFormats</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>)).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
781
+ 58: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span>.<span class="ruby-identifier">empty?</span>
782
+ 59: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'empty_report_file_name'</span>,
783
+ 60: <span class="ruby-node">&quot;Report #{@id} has output formats requested, but the &quot;</span> <span class="ruby-operator">+</span>
784
+ 61: <span class="ruby-value str">&quot;file name is empty.&quot;</span>)
785
+ 62: <span class="ruby-keyword kw">end</span>
786
+ 63:
787
+ 64: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">format</span>
788
+ 65: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:html</span>
789
+ 66: <span class="ruby-identifier">generateHTML</span>
790
+ 67: <span class="ruby-identifier">copyAuxiliaryFiles</span>
791
+ 68: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:csv</span>
792
+ 69: <span class="ruby-identifier">generateCSV</span>
793
+ 70: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
794
+ 71: <span class="ruby-identifier">generateNiku</span>
795
+ 72: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:tjp</span>
796
+ 73: <span class="ruby-identifier">generateTJP</span>
797
+ 74: <span class="ruby-keyword kw">else</span>
798
+ 75: <span class="ruby-identifier">raise</span> <span class="ruby-value str">'Unknown report output format #{format}.'</span>
799
+ 76: <span class="ruby-keyword kw">end</span>
800
+ 77: <span class="ruby-keyword kw">end</span>
801
+ 78: <span class="ruby-keyword kw">true</span>
802
+ 79: <span class="ruby-keyword kw">end</span></pre>
783
803
  </div>
784
804
 
785
805
  </div>
@@ -813,32 +833,32 @@ the respective output formats.
813
833
  <div class="method-source-code"
814
834
  id="generate-ntermediate-ormat-source">
815
835
  <pre>
816
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 73</span>
817
- 73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateIntermediateFormat</span>
818
- 74: <span class="ruby-ivar">@content</span> = <span class="ruby-keyword kw">nil</span>
819
- 75: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@typeSpec</span>
820
- 76: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:export</span>
821
- 77: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TjpExportRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
822
- 78: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
823
- 79: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">NikuReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
824
- 80: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:resourcereport</span>
825
- 81: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">ResourceListRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
826
- 82: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:textreport</span>
827
- 83: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TextReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
828
- 84: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:taskreport</span>
829
- 85: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TaskListRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
830
- 86: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:statusSheet</span>
831
- 87: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">StatusSheetReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
832
- 88: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:timeSheet</span>
833
- 89: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TimeSheetReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
834
- 90: <span class="ruby-keyword kw">else</span>
835
- 91: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Unknown report type&quot;</span>
836
- 92: <span class="ruby-keyword kw">end</span>
837
- 93:
838
- 94: <span class="ruby-comment cmt"># Most output format can be generated from a common intermediate</span>
839
- 95: <span class="ruby-comment cmt"># representation of the elements. We generate that IR first.</span>
840
- 96: <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">generateIntermediateFormat</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@content</span>
841
- 97: <span class="ruby-keyword kw">end</span></pre>
836
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 83</span>
837
+ 83: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateIntermediateFormat</span>
838
+ 84: <span class="ruby-ivar">@content</span> = <span class="ruby-keyword kw">nil</span>
839
+ 85: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@typeSpec</span>
840
+ 86: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:export</span>
841
+ 87: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TjpExportRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
842
+ 88: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:niku</span>
843
+ 89: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">NikuReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
844
+ 90: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:resourcereport</span>
845
+ 91: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">ResourceListRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
846
+ 92: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:textreport</span>
847
+ 93: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TextReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
848
+ 94: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:taskreport</span>
849
+ 95: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TaskListRE</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
850
+ 96: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:statusSheet</span>
851
+ 97: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">StatusSheetReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
852
+ 98: <span class="ruby-keyword kw">when</span> <span class="ruby-value">:timeSheet</span>
853
+ 99: <span class="ruby-ivar">@content</span> = <span class="ruby-constant">TimeSheetReport</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)
854
+ 100: <span class="ruby-keyword kw">else</span>
855
+ 101: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Unknown report type&quot;</span>
856
+ 102: <span class="ruby-keyword kw">end</span>
857
+ 103:
858
+ 104: <span class="ruby-comment cmt"># Most output format can be generated from a common intermediate</span>
859
+ 105: <span class="ruby-comment cmt"># representation of the elements. We generate that IR first.</span>
860
+ 106: <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">generateIntermediateFormat</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@content</span>
861
+ 107: <span class="ruby-keyword kw">end</span></pre>
842
862
  </div>
843
863
 
844
864
  </div>
@@ -873,10 +893,10 @@ interactive setting.
873
893
  <div class="method-source-code"
874
894
  id="interactive--source">
875
895
  <pre>
876
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 107</span>
877
- 107: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">interactive?</span>
878
- 108: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">reportContexts</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'interactive'</span>)
879
- 109: <span class="ruby-keyword kw">end</span></pre>
896
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 117</span>
897
+ 117: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">interactive?</span>
898
+ 118: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">reportContexts</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'interactive'</span>)
899
+ 119: <span class="ruby-keyword kw">end</span></pre>
880
900
  </div>
881
901
 
882
902
  </div>
@@ -909,10 +929,10 @@ Render the content of the report as HTML (without the framing).
909
929
  <div class="method-source-code"
910
930
  id="to-html-source">
911
931
  <pre>
912
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 100</span>
913
- 100: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
914
- 101: <span class="ruby-ivar">@content</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_html</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
915
- 102: <span class="ruby-keyword kw">end</span></pre>
932
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 110</span>
933
+ 110: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
934
+ 111: <span class="ruby-ivar">@content</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_html</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>
935
+ 112: <span class="ruby-keyword kw">end</span></pre>
916
936
  </div>
917
937
 
918
938
  </div>
@@ -943,12 +963,12 @@ Render the content of the report as HTML (without the framing).
943
963
  <div class="method-source-code"
944
964
  id="warning-source">
945
965
  <pre>
946
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 121</span>
947
- 121: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>)
948
- 122: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">message</span>.<span class="ruby-identifier">empty?</span>
949
- 123: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>, <span class="ruby-ivar">@sourceFileInfo</span>)
950
- 124: <span class="ruby-keyword kw">end</span>
951
- 125: <span class="ruby-keyword kw">end</span></pre>
966
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 131</span>
967
+ 131: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>)
968
+ 132: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">message</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">message</span>.<span class="ruby-identifier">empty?</span>
969
+ 133: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">message</span>, <span class="ruby-ivar">@sourceFileInfo</span>)
970
+ 134: <span class="ruby-keyword kw">end</span>
971
+ 135: <span class="ruby-keyword kw">end</span></pre>
952
972
  </div>
953
973
 
954
974
  </div>
@@ -987,10 +1007,10 @@ Convenience function to access a report attribute
987
1007
  <div class="method-source-code"
988
1008
  id="a-source">
989
1009
  <pre>
990
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 129</span>
991
- 129: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">attribute</span>)
992
- 130: <span class="ruby-identifier">get</span>(<span class="ruby-identifier">attribute</span>)
993
- 131: <span class="ruby-keyword kw">end</span></pre>
1010
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 139</span>
1011
+ 139: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">attribute</span>)
1012
+ 140: <span class="ruby-identifier">get</span>(<span class="ruby-identifier">attribute</span>)
1013
+ 141: <span class="ruby-keyword kw">end</span></pre>
994
1014
  </div>
995
1015
 
996
1016
  </div>
@@ -1021,15 +1041,15 @@ Convenience function to access a report attribute
1021
1041
  <div class="method-source-code"
1022
1042
  id="copy-uxiliary-iles-source">
1023
1043
  <pre>
1024
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 258</span>
1025
- 258: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyAuxiliaryFiles</span>
1026
- 259: <span class="ruby-comment cmt"># Don't copy files if output is stdout.</span>
1027
- 260: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'interactive'</span>)
1028
- 261:
1029
- 262: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'css'</span>)
1030
- 263: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'icons'</span>)
1031
- 264: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'scripts'</span>)
1032
- 265: <span class="ruby-keyword kw">end</span></pre>
1044
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 290</span>
1045
+ 290: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyAuxiliaryFiles</span>
1046
+ 291: <span class="ruby-comment cmt"># Don't copy files if output is stdout.</span>
1047
+ 292: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'interactive'</span>)
1048
+ 293:
1049
+ 294: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'css'</span>)
1050
+ 295: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'icons'</span>)
1051
+ 296: <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-value str">'scripts'</span>)
1052
+ 297: <span class="ruby-keyword kw">end</span></pre>
1033
1053
  </div>
1034
1054
 
1035
1055
  </div>
@@ -1060,23 +1080,23 @@ Convenience function to access a report attribute
1060
1080
  <div class="method-source-code"
1061
1081
  id="copy-irectory-source">
1062
1082
  <pre>
1063
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 267</span>
1064
- 267: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-identifier">dirName</span>)
1065
- 268: <span class="ruby-comment cmt"># The directory needs to be in the same directory as the HTML report.</span>
1066
- 269: <span class="ruby-identifier">auxDstDir</span> = (<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1067
- 270: <span class="ruby-ivar">@name</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>).<span class="ruby-identifier">untaint</span>
1068
- 271: <span class="ruby-comment cmt"># Find the data directory that came with the TaskJuggler installation.</span>
1069
- 272: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>)[<span class="ruby-value">0</span>].<span class="ruby-identifier">untaint</span>
1070
- 273: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1071
- 274: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">auxSrcDir</span>)
1072
- 275: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>))
1073
- 276: <span class="ruby-keyword kw">end</span>
1074
- 277: <span class="ruby-comment cmt"># Don't copy directory if all files are up-to-date.</span>
1075
- 278: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">directoryUpToDate?</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">dirName</span>)
1076
- 279:
1077
- 280: <span class="ruby-comment cmt"># Recursively copy the directory and all content.</span>
1078
- 281: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">cp_r</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span>)
1079
- 282: <span class="ruby-keyword kw">end</span></pre>
1083
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 299</span>
1084
+ 299: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">copyDirectory</span>(<span class="ruby-identifier">dirName</span>)
1085
+ 300: <span class="ruby-comment cmt"># The directory needs to be in the same directory as the HTML report.</span>
1086
+ 301: <span class="ruby-identifier">auxDstDir</span> = (<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1087
+ 302: <span class="ruby-ivar">@name</span>) <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span>).<span class="ruby-identifier">untaint</span>
1088
+ 303: <span class="ruby-comment cmt"># Find the data directory that came with the TaskJuggler installation.</span>
1089
+ 304: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>)[<span class="ruby-value">0</span>].<span class="ruby-identifier">untaint</span>
1090
+ 305: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1091
+ 306: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">auxSrcDir</span>)
1092
+ 307: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-node">&quot;data/#{dirName}&quot;</span>))
1093
+ 308: <span class="ruby-keyword kw">end</span>
1094
+ 309: <span class="ruby-comment cmt"># Don't copy directory if all files are up-to-date.</span>
1095
+ 310: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">directoryUpToDate?</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">dirName</span>)
1096
+ 311:
1097
+ 312: <span class="ruby-comment cmt"># Recursively copy the directory and all content.</span>
1098
+ 313: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">cp_r</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span>)
1099
+ 314: <span class="ruby-keyword kw">end</span></pre>
1080
1100
  </div>
1081
1101
 
1082
1102
  </div>
@@ -1107,11 +1127,11 @@ Convenience function to access a report attribute
1107
1127
  <div class="method-source-code"
1108
1128
  id="data-ir-rror-source">
1109
1129
  <pre>
1110
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 298</span>
1111
- 298: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-identifier">dirs</span>)
1112
- 299: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'data_dir_error'</span>, <span class="ruby-value str">Cannot find the #{dirName} directory. This is usually the result of animproper TaskJuggler installation. If you know the directory, you can use theTASKJUGGLER_DATA_PATH environment variable to specify the location. Thevariable should be set to the path without the /data at the end. Multipledirectories must be separated by colons. The following directories have beentried:#{dirs.join(&quot;\n&quot;)}</span>
1113
- 300: )
1114
- 301: <span class="ruby-keyword kw">end</span></pre>
1130
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 330</span>
1131
+ 330: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">dirName</span>, <span class="ruby-identifier">dirs</span>)
1132
+ 331: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'data_dir_error'</span>, <span class="ruby-value str">Cannot find the #{dirName} directory. This is usually the result of animproper TaskJuggler installation. If you know the directory, you can use theTASKJUGGLER_DATA_PATH environment variable to specify the location. Thevariable should be set to the path without the /data at the end. Multipledirectories must be separated by colons. The following directories have beentried:#{dirs.join(&quot;\n&quot;)}</span>
1133
+ 332: )
1134
+ 333: <span class="ruby-keyword kw">end</span></pre>
1115
1135
  </div>
1116
1136
 
1117
1137
  </div>
@@ -1142,20 +1162,20 @@ Convenience function to access a report attribute
1142
1162
  <div class="method-source-code"
1143
1163
  id="directory-p-o-ate--source">
1144
1164
  <pre>
1145
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 284</span>
1146
- 284: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">directoryUpToDate?</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span>)
1147
- 285: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">auxDstDir</span>.<span class="ruby-identifier">untaint</span>)
1148
- 286:
1149
- 287: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">auxSrcDir</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
1150
- 288: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'..'</span>
1151
- 289:
1152
- 290: <span class="ruby-identifier">srcFile</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">file</span>).<span class="ruby-identifier">untaint</span>
1153
- 291: <span class="ruby-identifier">dstFile</span> = (<span class="ruby-identifier">auxDstDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">file</span>).<span class="ruby-identifier">untaint</span>
1154
- 292: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">dstFile</span>) <span class="ruby-operator">||</span>
1155
- 293: <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">srcFile</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">dstFile</span>)
1156
- 294: <span class="ruby-keyword kw">end</span>
1157
- 295: <span class="ruby-keyword kw">true</span>
1158
- 296: <span class="ruby-keyword kw">end</span></pre>
1165
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 316</span>
1166
+ 316: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">directoryUpToDate?</span>(<span class="ruby-identifier">auxSrcDir</span>, <span class="ruby-identifier">auxDstDir</span>)
1167
+ 317: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">auxDstDir</span>.<span class="ruby-identifier">untaint</span>)
1168
+ 318:
1169
+ 319: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">auxSrcDir</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
1170
+ 320: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'..'</span>
1171
+ 321:
1172
+ 322: <span class="ruby-identifier">srcFile</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">file</span>).<span class="ruby-identifier">untaint</span>
1173
+ 323: <span class="ruby-identifier">dstFile</span> = (<span class="ruby-identifier">auxDstDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">file</span>).<span class="ruby-identifier">untaint</span>
1174
+ 324: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">dstFile</span>) <span class="ruby-operator">||</span>
1175
+ 325: <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">srcFile</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>(<span class="ruby-identifier">dstFile</span>)
1176
+ 326: <span class="ruby-keyword kw">end</span>
1177
+ 327: <span class="ruby-keyword kw">true</span>
1178
+ 328: <span class="ruby-keyword kw">end</span></pre>
1159
1179
  </div>
1160
1180
 
1161
1181
  </div>
@@ -1188,24 +1208,31 @@ Generate a CSV version of the report.
1188
1208
  <div class="method-source-code"
1189
1209
  id="generate--source">
1190
1210
  <pre>
1191
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 211</span>
1192
- 211: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateCSV</span>
1193
- 212: <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">@content</span>
1194
- 213:
1195
- 214: <span class="ruby-comment cmt"># CSV format can only handle the first element.</span>
1196
- 215: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">csv</span> = <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_csv</span>)
1197
- 216:
1198
- 217: <span class="ruby-comment cmt"># Use the CSVFile class to write the Array of Arrays to a colon</span>
1199
- 218: <span class="ruby-comment cmt"># separated file. Write to $stdout if the filename was set to '.'.</span>
1200
- 219: <span class="ruby-keyword kw">begin</span>
1201
- 220: <span class="ruby-identifier">fileName</span> = (<span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">:</span>
1202
- 221: (<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1203
- 222: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.csv'</span>).<span class="ruby-identifier">untaint</span>
1204
- 223: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">csv</span>, <span class="ruby-value str">';'</span>).<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1205
- 224: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1206
- 225: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_csv'</span>, <span class="ruby-node">&quot;Cannot write to file #{fileName}.\n#{$!}&quot;</span>)
1207
- 226: <span class="ruby-keyword kw">end</span>
1208
- 227: <span class="ruby-keyword kw">end</span></pre>
1211
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 229</span>
1212
+ 229: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateCSV</span>
1213
+ 230: <span class="ruby-comment cmt"># The CSV format can only handle the first element of a report.</span>
1214
+ 231: <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">@content</span>
1215
+ 232:
1216
+ 233: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_csv'</span>)
1217
+ 234: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'csv_not_supported'</span>,
1218
+ 235: <span class="ruby-node">&quot;CSV format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1219
+ 236: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1220
+ 237: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1221
+ 238: <span class="ruby-keyword kw">end</span>
1222
+ 239:
1223
+ 240: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">csv</span> = <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_csv</span>)
1224
+ 241:
1225
+ 242: <span class="ruby-comment cmt"># Use the CSVFile class to write the Array of Arrays to a colon</span>
1226
+ 243: <span class="ruby-comment cmt"># separated file. Write to $stdout if the filename was set to '.'.</span>
1227
+ 244: <span class="ruby-keyword kw">begin</span>
1228
+ 245: <span class="ruby-identifier">fileName</span> = (<span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">:</span>
1229
+ 246: (<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1230
+ 247: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.csv'</span>).<span class="ruby-identifier">untaint</span>
1231
+ 248: <span class="ruby-constant">CSVFile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">csv</span>, <span class="ruby-value str">';'</span>).<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1232
+ 249: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1233
+ 250: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_csv'</span>, <span class="ruby-node">&quot;Cannot write to file #{fileName}.\n#{$!}&quot;</span>)
1234
+ 251: <span class="ruby-keyword kw">end</span>
1235
+ 252: <span class="ruby-keyword kw">end</span></pre>
1209
1236
  </div>
1210
1237
 
1211
1238
  </div>
@@ -1238,76 +1265,87 @@ Generate an HTML version of the report.
1238
1265
  <div class="method-source-code"
1239
1266
  id="generate--source">
1240
1267
  <pre>
1241
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 134</span>
1242
- 134: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHTML</span>
1243
- 135: <span class="ruby-identifier">html</span> = <span class="ruby-constant">HTMLDocument</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:strict</span>)
1244
- 136: <span class="ruby-identifier">head</span> = <span class="ruby-identifier">html</span>.<span class="ruby-identifier">generateHead</span>(<span class="ruby-node">&quot;TaskJuggler Report - #{@name}&quot;</span>,
1245
- 137: <span class="ruby-value str">'description'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'TaskJuggler Report'</span>,
1246
- 138: <span class="ruby-value str">'keywords'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'taskjuggler, project, management'</span>)
1247
- 139: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1248
- 140: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-value str">'data/css'</span>)[<span class="ruby-value">0</span>]
1249
- 141: <span class="ruby-identifier">cssFileName</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/tjreport.css'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
1250
- 142: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1251
- 143: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">cssFileName</span>)
1252
- 144: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-value str">'data/css'</span>))
1253
- 145: <span class="ruby-keyword kw">end</span>
1254
- 146: <span class="ruby-identifier">cssFile</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cssFileName</span>)
1255
- 147: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
1256
- 148: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>, <span class="ruby-value str">Cannot read '#{cssFileName}'. Make sure the file is not empty and you haveread access permission.</span>
1257
- 149: <span class="ruby-keyword kw">end</span>
1258
- 150: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'meta'</span>, <span class="ruby-value str">'http-equiv'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Content-Style-Type'</span>,
1259
- 151: <span class="ruby-value str">'content'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css; charset=utf-8'</span>)
1260
- 152: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">style</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'style'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>))
1261
- 153: <span class="ruby-identifier">style</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLBlob</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cssFile</span>)
1262
- 154: <span class="ruby-keyword kw">else</span>
1263
- 155: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'link'</span>, <span class="ruby-value str">'rel'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'stylesheet'</span>,
1264
- 156: <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>,
1265
- 157: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'css/tjreport.css'</span>)
1266
- 158: <span class="ruby-keyword kw">end</span>
1267
- 159: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLComment</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;Dynamic Report ID: &quot;</span> <span class="ruby-operator">+</span>
1268
- 160: <span class="ruby-node">&quot;#{@project.reportContexts.last.dynamicReportId}&quot;</span>)
1269
- 161: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">body</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'body'</span>))
1270
- 162:
1271
- 163: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1272
- 164: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'script'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/javascript'</span>,
1273
- 165: <span class="ruby-value str">'src'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'scripts/wz_tooltip.js'</span>)
1274
- 166: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">noscript</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'noscript'</span>))
1275
- 167: <span class="ruby-identifier">noscript</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">nsdiv</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>,
1276
- 168: <span class="ruby-value str">'style'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text-align:center; '</span> <span class="ruby-operator">+</span>
1277
- 169: <span class="ruby-value str">'color:#FF0000'</span>))
1278
- 170: <span class="ruby-identifier">nsdiv</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">This page requires Javascript for full functionality. Please enable itin your browser settings!</span>
1279
- 171: )
1280
- 172: <span class="ruby-keyword kw">end</span>
1281
- 173:
1282
- 174:
1283
- 175: <span class="ruby-comment cmt"># Make sure we have some margins around the report.</span>
1284
- 176: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">frame</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'tj_page'</span>))
1285
- 177:
1286
- 178: <span class="ruby-identifier">frame</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_html</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@content</span>
1287
- 179:
1288
- 180: <span class="ruby-comment cmt"># The footer with some administrative information.</span>
1289
- 181: <span class="ruby-identifier">frame</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">div</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'copyright'</span>))
1290
- 182: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'copyright'</span>] <span class="ruby-operator">+</span> <span class="ruby-value str">&quot; - &quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'copyright'</span>]
1291
- 183: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;Project: #{@project['name']} &quot;</span> <span class="ruby-operator">+</span>
1292
- 184: <span class="ruby-node">&quot;Version: #{@project['version']} - &quot;</span> <span class="ruby-operator">+</span>
1293
- 185: <span class="ruby-node">&quot;Created on #{TjTime.now.to_s(&quot;%Y-%m-%d %H:%M:%S&quot;)} &quot;</span> <span class="ruby-operator">+</span>
1294
- 186: <span class="ruby-value str">&quot;with &quot;</span>)
1295
- 187: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLNamedText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{AppConfig.softwareName}&quot;</span>, <span class="ruby-value str">'a'</span>,
1296
- 188: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{AppConfig.contact}&quot;</span>)
1297
- 189: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot; v#{AppConfig.version}&quot;</span>)
1298
- 190:
1299
- 191: <span class="ruby-identifier">fileName</span> =
1300
- 192: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'interactive'</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1301
- 193: <span class="ruby-comment cmt"># Interactive HTML reports are always sent to stdout.</span>
1302
- 194: <span class="ruby-value str">'.'</span>
1303
- 195: <span class="ruby-keyword kw">else</span>
1304
- 196: <span class="ruby-comment cmt"># Prepend the specified output directory unless the provided file</span>
1305
- 197: <span class="ruby-comment cmt"># name is an absolute file name.</span>
1306
- 198: ((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1307
- 199: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.html'</span>).<span class="ruby-identifier">untaint</span>
1308
- 200: <span class="ruby-keyword kw">end</span>
1309
- 201: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1310
- 202: <span class="ruby-keyword kw">end</span></pre>
1268
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 144</span>
1269
+ 144: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateHTML</span>
1270
+ 145: <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">@content</span>
1271
+ 146:
1272
+ 147: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_html'</span>)
1273
+ 148: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'html_not_supported'</span>,
1274
+ 149: <span class="ruby-node">&quot;HTML format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1275
+ 150: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1276
+ 151: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1277
+ 152: <span class="ruby-keyword kw">end</span>
1278
+ 153:
1279
+ 154: <span class="ruby-identifier">html</span> = <span class="ruby-constant">HTMLDocument</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:strict</span>)
1280
+ 155: <span class="ruby-identifier">head</span> = <span class="ruby-identifier">html</span>.<span class="ruby-identifier">generateHead</span>(<span class="ruby-node">&quot;TaskJuggler Report - #{@name}&quot;</span>,
1281
+ 156: <span class="ruby-value str">'description'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'TaskJuggler Report'</span>,
1282
+ 157: <span class="ruby-value str">'keywords'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'taskjuggler, project, management'</span>)
1283
+ 158: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1284
+ 159: <span class="ruby-identifier">auxSrcDir</span> = <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataDirs</span>(<span class="ruby-value str">'data/css'</span>)[<span class="ruby-value">0</span>]
1285
+ 160: <span class="ruby-identifier">cssFileName</span> = (<span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">auxSrcDir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'/tjreport.css'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
1286
+ 161: <span class="ruby-comment cmt"># Raise an error if we haven't found the data directory</span>
1287
+ 162: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">auxSrcDir</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">cssFileName</span>)
1288
+ 163: <span class="ruby-identifier">dataDirError</span>(<span class="ruby-identifier">cssFileName</span>, <span class="ruby-constant">AppConfig</span>.<span class="ruby-identifier">dataSearchDirs</span>(<span class="ruby-value str">'data/css'</span>))
1289
+ 164: <span class="ruby-keyword kw">end</span>
1290
+ 165: <span class="ruby-identifier">cssFile</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cssFileName</span>)
1291
+ 166: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cssFile</span>.<span class="ruby-identifier">empty?</span>
1292
+ 167: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'css_file_error'</span>,
1293
+ 168: <span class="ruby-node">&quot;Cannot read '#{cssFileName}'. Make sure the file is not &quot;</span> <span class="ruby-operator">+</span>
1294
+ 169: <span class="ruby-value str">&quot;empty and you have read access permission.&quot;</span>)
1295
+ 170: <span class="ruby-keyword kw">end</span>
1296
+ 171: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'meta'</span>, <span class="ruby-value str">'http-equiv'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'Content-Style-Type'</span>,
1297
+ 172: <span class="ruby-value str">'content'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css; charset=utf-8'</span>)
1298
+ 173: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">style</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'style'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>))
1299
+ 174: <span class="ruby-identifier">style</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLBlob</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cssFile</span>)
1300
+ 175: <span class="ruby-keyword kw">else</span>
1301
+ 176: <span class="ruby-identifier">head</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'link'</span>, <span class="ruby-value str">'rel'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'stylesheet'</span>,
1302
+ 177: <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/css'</span>,
1303
+ 178: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'css/tjreport.css'</span>)
1304
+ 179: <span class="ruby-keyword kw">end</span>
1305
+ 180: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLComment</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">&quot;Dynamic Report ID: &quot;</span> <span class="ruby-operator">+</span>
1306
+ 181: <span class="ruby-node">&quot;#{@project.reportContexts.last.dynamicReportId}&quot;</span>)
1307
+ 182: <span class="ruby-identifier">html</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">body</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'body'</span>))
1308
+ 183:
1309
+ 184: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'selfcontained'</span>)
1310
+ 185: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'script'</span>, <span class="ruby-value str">'type'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text/javascript'</span>,
1311
+ 186: <span class="ruby-value str">'src'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'scripts/wz_tooltip.js'</span>)
1312
+ 187: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">noscript</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'noscript'</span>))
1313
+ 188: <span class="ruby-identifier">noscript</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">nsdiv</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>,
1314
+ 189: <span class="ruby-value str">'style'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'text-align:center; '</span> <span class="ruby-operator">+</span>
1315
+ 190: <span class="ruby-value str">'color:#FF0000'</span>))
1316
+ 191: <span class="ruby-identifier">nsdiv</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">This page requires Javascript for full functionality. Please enable itin your browser settings!</span>
1317
+ 192: )
1318
+ 193: <span class="ruby-keyword kw">end</span>
1319
+ 194:
1320
+ 195:
1321
+ 196: <span class="ruby-comment cmt"># Make sure we have some margins around the report.</span>
1322
+ 197: <span class="ruby-identifier">body</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">frame</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'tj_page'</span>))
1323
+ 198:
1324
+ 199: <span class="ruby-identifier">frame</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_html</span>
1325
+ 200:
1326
+ 201: <span class="ruby-comment cmt"># The footer with some administrative information.</span>
1327
+ 202: <span class="ruby-identifier">frame</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">div</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'div'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'copyright'</span>))
1328
+ 203: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'copyright'</span>] <span class="ruby-operator">+</span> <span class="ruby-value str">&quot; - &quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'copyright'</span>]
1329
+ 204: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;Project: #{@project['name']} &quot;</span> <span class="ruby-operator">+</span>
1330
+ 205: <span class="ruby-node">&quot;Version: #{@project['version']} - &quot;</span> <span class="ruby-operator">+</span>
1331
+ 206: <span class="ruby-node">&quot;Created on #{TjTime.now.to_s(&quot;%Y-%m-%d %H:%M:%S&quot;)} &quot;</span> <span class="ruby-operator">+</span>
1332
+ 207: <span class="ruby-value str">&quot;with &quot;</span>)
1333
+ 208: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLNamedText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{AppConfig.softwareName}&quot;</span>, <span class="ruby-value str">'a'</span>,
1334
+ 209: <span class="ruby-value str">'href'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{AppConfig.contact}&quot;</span>)
1335
+ 210: <span class="ruby-identifier">div</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">XMLText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot; v#{AppConfig.version}&quot;</span>)
1336
+ 211:
1337
+ 212: <span class="ruby-identifier">fileName</span> =
1338
+ 213: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'interactive'</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1339
+ 214: <span class="ruby-comment cmt"># Interactive HTML reports are always sent to stdout.</span>
1340
+ 215: <span class="ruby-value str">'.'</span>
1341
+ 216: <span class="ruby-keyword kw">else</span>
1342
+ 217: <span class="ruby-comment cmt"># Prepend the specified output directory unless the provided file</span>
1343
+ 218: <span class="ruby-comment cmt"># name is an absolute file name.</span>
1344
+ 219: ((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1345
+ 220: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.html'</span>).<span class="ruby-identifier">untaint</span>
1346
+ 221: <span class="ruby-keyword kw">end</span>
1347
+ 222: <span class="ruby-identifier">html</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">fileName</span>)
1348
+ 223: <span class="ruby-keyword kw">end</span></pre>
1311
1349
  </div>
1312
1350
 
1313
1351
  </div>
@@ -1340,17 +1378,24 @@ Generate Niku report
1340
1378
  <div class="method-source-code"
1341
1379
  id="generate-iku-source">
1342
1380
  <pre>
1343
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 247</span>
1344
- 247: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateNiku</span>
1345
- 248: <span class="ruby-keyword kw">begin</span>
1346
- 249: <span class="ruby-identifier">f</span> = <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">$stdout</span> <span class="ruby-operator">:</span>
1347
- 250: <span class="ruby-constant">File</span>.<span class="ruby-identifier">new</span>(((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1348
- 251: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.xml'</span>).<span class="ruby-identifier">untaint</span>, <span class="ruby-value str">'w'</span>)
1349
- 252: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_niku}&quot;</span>
1350
- 253: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1351
- 254: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_niku'</span>, <span class="ruby-node">&quot;Cannot write to file #{@name}.\n#{$!}&quot;</span>)
1352
- 255: <span class="ruby-keyword kw">end</span>
1353
- 256: <span class="ruby-keyword kw">end</span></pre>
1381
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 272</span>
1382
+ 272: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateNiku</span>
1383
+ 273: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@content</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value str">'to_niku'</span>)
1384
+ 274: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'niku_not_supported'</span>,
1385
+ 275: <span class="ruby-node">&quot;niku format is not supported for report #{@id} of &quot;</span> <span class="ruby-operator">+</span>
1386
+ 276: <span class="ruby-node">&quot;type #{@typeSpec}.&quot;</span>)
1387
+ 277: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1388
+ 278: <span class="ruby-keyword kw">end</span>
1389
+ 279:
1390
+ 280: <span class="ruby-keyword kw">begin</span>
1391
+ 281: <span class="ruby-identifier">f</span> = <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">$stdout</span> <span class="ruby-operator">:</span>
1392
+ 282: <span class="ruby-constant">File</span>.<span class="ruby-identifier">new</span>(((<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span>
1393
+ 283: <span class="ruby-ivar">@name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'.xml'</span>).<span class="ruby-identifier">untaint</span>, <span class="ruby-value str">'w'</span>)
1394
+ 284: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{@content.to_niku}&quot;</span>
1395
+ 285: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1396
+ 286: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_niku'</span>, <span class="ruby-node">&quot;Cannot write to file #{@name}.\n#{$!}&quot;</span>)
1397
+ 287: <span class="ruby-keyword kw">end</span>
1398
+ 288: <span class="ruby-keyword kw">end</span></pre>
1354
1399
  </div>
1355
1400
 
1356
1401
  </div>
@@ -1383,22 +1428,22 @@ Generate time sheet drafts.
1383
1428
  <div class="method-source-code"
1384
1429
  id="generate--source">
1385
1430
  <pre>
1386
- <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 230</span>
1387
- 230: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateTJP</span>
1388
- 231: <span class="ruby-keyword kw">begin</span>
1389
- 232: <span class="ruby-identifier">fileName</span> = <span class="ruby-value str">'.'</span>
1390
- 233: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1391
- 234: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_tjp</span>)
1392
- 235: <span class="ruby-keyword kw">else</span>
1393
- 236: <span class="ruby-identifier">fileName</span> = (<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span> <span class="ruby-ivar">@name</span>
1394
- 237: <span class="ruby-identifier">fileName</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'definitions'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-value str">'project'</span>) <span class="ruby-operator">?</span> <span class="ruby-value str">'.tjp'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'.tji'</span>
1395
- 238: <span class="ruby-identifier">fileName</span>.<span class="ruby-identifier">untaint</span>
1396
- 239: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_tjp</span>) }
1397
- 240: <span class="ruby-keyword kw">end</span>
1398
- 241: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1399
- 242: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_tjp'</span>, <span class="ruby-node">&quot;Cannot write to file #{fileName}.\n#{$!}&quot;</span>)
1400
- 243: <span class="ruby-keyword kw">end</span>
1401
- 244: <span class="ruby-keyword kw">end</span></pre>
1431
+ <span class="ruby-comment cmt"># File lib/reports/Report.rb, line 255</span>
1432
+ 255: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateTJP</span>
1433
+ 256: <span class="ruby-keyword kw">begin</span>
1434
+ 257: <span class="ruby-identifier">fileName</span> = <span class="ruby-value str">'.'</span>
1435
+ 258: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>
1436
+ 259: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_tjp</span>)
1437
+ 260: <span class="ruby-keyword kw">else</span>
1438
+ 261: <span class="ruby-identifier">fileName</span> = (<span class="ruby-ivar">@name</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value str">'/'</span> <span class="ruby-operator">?</span> <span class="ruby-value str">''</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">outputDir</span>) <span class="ruby-operator">+</span> <span class="ruby-ivar">@name</span>
1439
+ 262: <span class="ruby-identifier">fileName</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'definitions'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-value str">'project'</span>) <span class="ruby-operator">?</span> <span class="ruby-value str">'.tjp'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'.tji'</span>
1440
+ 263: <span class="ruby-identifier">fileName</span>.<span class="ruby-identifier">untaint</span>
1441
+ 264: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">fileName</span>, <span class="ruby-value str">'w'</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>(<span class="ruby-ivar">@content</span>.<span class="ruby-identifier">to_tjp</span>) }
1442
+ 265: <span class="ruby-keyword kw">end</span>
1443
+ 266: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">IOError</span>
1444
+ 267: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'write_tjp'</span>, <span class="ruby-node">&quot;Cannot write to file #{fileName}.\n#{$!}&quot;</span>)
1445
+ 268: <span class="ruby-keyword kw">end</span>
1446
+ 269: <span class="ruby-keyword kw">end</span></pre>
1402
1447
  </div>
1403
1448
 
1404
1449
  </div>