taskjuggler 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (571) hide show
  1. data/COPYING +280 -0
  2. data/README +31 -0
  3. data/Rakefile +20 -0
  4. data/benchmarks/UTF-8-Strings.rb +58 -0
  5. data/benchmarks/allocate.tjp +30 -0
  6. data/benchmarks/booking.tjp +62 -0
  7. data/benchmarks/depends.tjp +112 -0
  8. data/benchmarks/htmltaskreport.tjp +45 -0
  9. data/benchmarks/runbench.rb +24 -0
  10. data/bin/tj3 +3 -0
  11. data/bin/tj3man +3 -0
  12. data/doc/classes/AppConfig.html +808 -0
  13. data/doc/classes/Arguments.html +226 -0
  14. data/doc/classes/String.html +395 -0
  15. data/doc/classes/TaskJuggler.html +1358 -0
  16. data/doc/classes/TaskJuggler/Account.html +257 -0
  17. data/doc/classes/TaskJuggler/AccountScenario.html +218 -0
  18. data/doc/classes/TaskJuggler/Allocation.html +419 -0
  19. data/doc/classes/TaskJuggler/AllocationAttribute.html +291 -0
  20. data/doc/classes/TaskJuggler/AttributeBase.html +608 -0
  21. data/doc/classes/TaskJuggler/AttributeDefinition.html +259 -0
  22. data/doc/classes/TaskJuggler/Booking.html +307 -0
  23. data/doc/classes/TaskJuggler/BookingListAttribute.html +263 -0
  24. data/doc/classes/TaskJuggler/BooleanAttribute.html +261 -0
  25. data/doc/classes/TaskJuggler/CSVFile.html +325 -0
  26. data/doc/classes/TaskJuggler/Charge.html +279 -0
  27. data/doc/classes/TaskJuggler/ChargeListAttribute.html +229 -0
  28. data/doc/classes/TaskJuggler/ChargeSet.html +440 -0
  29. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +276 -0
  30. data/doc/classes/TaskJuggler/ColumnTable.html +260 -0
  31. data/doc/classes/TaskJuggler/DateAttribute.html +194 -0
  32. data/doc/classes/TaskJuggler/DependencyListAttribute.html +267 -0
  33. data/doc/classes/TaskJuggler/DurationAttribute.html +229 -0
  34. data/doc/classes/TaskJuggler/FixnumAttribute.html +194 -0
  35. data/doc/classes/TaskJuggler/FlagListAttribute.html +263 -0
  36. data/doc/classes/TaskJuggler/FloatAttribute.html +229 -0
  37. data/doc/classes/TaskJuggler/GanttChart.html +667 -0
  38. data/doc/classes/TaskJuggler/GanttContainer.html +441 -0
  39. data/doc/classes/TaskJuggler/GanttHeader.html +280 -0
  40. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +245 -0
  41. data/doc/classes/TaskJuggler/GanttLine.html +398 -0
  42. data/doc/classes/TaskJuggler/GanttLoadStack.html +327 -0
  43. data/doc/classes/TaskJuggler/GanttMilestone.html +415 -0
  44. data/doc/classes/TaskJuggler/GanttRouter.html +425 -0
  45. data/doc/classes/TaskJuggler/GanttTaskBar.html +429 -0
  46. data/doc/classes/TaskJuggler/HTMLDocument.html +240 -0
  47. data/doc/classes/TaskJuggler/HTMLGraphics.html +231 -0
  48. data/doc/classes/TaskJuggler/Interval.html +552 -0
  49. data/doc/classes/TaskJuggler/IntervalListAttribute.html +267 -0
  50. data/doc/classes/TaskJuggler/KeywordDocumentation.html +796 -0
  51. data/doc/classes/TaskJuggler/Limits.html +416 -0
  52. data/doc/classes/TaskJuggler/Limits/Limit.html +381 -0
  53. data/doc/classes/TaskJuggler/LimitsAttribute.html +261 -0
  54. data/doc/classes/TaskJuggler/Log.html +613 -0
  55. data/doc/classes/TaskJuggler/LogicalAttribute.html +226 -0
  56. data/doc/classes/TaskJuggler/LogicalExpression.html +251 -0
  57. data/doc/classes/TaskJuggler/LogicalFlag.html +229 -0
  58. data/doc/classes/TaskJuggler/LogicalFunction.html +324 -0
  59. data/doc/classes/TaskJuggler/LogicalOperation.html +299 -0
  60. data/doc/classes/TaskJuggler/Macro.html +194 -0
  61. data/doc/classes/TaskJuggler/MacroParser.html +360 -0
  62. data/doc/classes/TaskJuggler/MacroTable.html +366 -0
  63. data/doc/classes/TaskJuggler/Message.html +281 -0
  64. data/doc/classes/TaskJuggler/MessageHandler.html +215 -0
  65. data/doc/classes/TaskJuggler/Project.html +1606 -0
  66. data/doc/classes/TaskJuggler/ProjectFileParser.html +412 -0
  67. data/doc/classes/TaskJuggler/PropertyList.html +597 -0
  68. data/doc/classes/TaskJuggler/PropertySet.html +1200 -0
  69. data/doc/classes/TaskJuggler/PropertyTreeNode.html +1449 -0
  70. data/doc/classes/TaskJuggler/Query.html +600 -0
  71. data/doc/classes/TaskJuggler/RealFormat.html +252 -0
  72. data/doc/classes/TaskJuggler/ReferenceAttribute.html +194 -0
  73. data/doc/classes/TaskJuggler/Report.html +528 -0
  74. data/doc/classes/TaskJuggler/ReportElement.html +1070 -0
  75. data/doc/classes/TaskJuggler/ReportTable.html +497 -0
  76. data/doc/classes/TaskJuggler/ReportTableCell.html +518 -0
  77. data/doc/classes/TaskJuggler/ReportTableColumn.html +364 -0
  78. data/doc/classes/TaskJuggler/ReportTableElement.html +644 -0
  79. data/doc/classes/TaskJuggler/ReportTableLegend.html +343 -0
  80. data/doc/classes/TaskJuggler/ReportTableLine.html +431 -0
  81. data/doc/classes/TaskJuggler/Resource.html +211 -0
  82. data/doc/classes/TaskJuggler/ResourceListAttribute.html +267 -0
  83. data/doc/classes/TaskJuggler/ResourceListRE.html +249 -0
  84. data/doc/classes/TaskJuggler/ResourceScenario.html +1137 -0
  85. data/doc/classes/TaskJuggler/RichText.html +537 -0
  86. data/doc/classes/TaskJuggler/RichTextAttribute.html +229 -0
  87. data/doc/classes/TaskJuggler/RichTextDocument.html +418 -0
  88. data/doc/classes/TaskJuggler/RichTextElement.html +829 -0
  89. data/doc/classes/TaskJuggler/RichTextException.html +212 -0
  90. data/doc/classes/TaskJuggler/RichTextParser.html +317 -0
  91. data/doc/classes/TaskJuggler/RichTextProtocolExample.html +303 -0
  92. data/doc/classes/TaskJuggler/RichTextProtocolHandler.html +194 -0
  93. data/doc/classes/TaskJuggler/RichTextScanner.html +561 -0
  94. data/doc/classes/TaskJuggler/RichTextSnip.html +364 -0
  95. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +883 -0
  96. data/doc/classes/TaskJuggler/Scenario.html +163 -0
  97. data/doc/classes/TaskJuggler/ScenarioData.html +354 -0
  98. data/doc/classes/TaskJuggler/Scoreboard.html +638 -0
  99. data/doc/classes/TaskJuggler/Shift.html +255 -0
  100. data/doc/classes/TaskJuggler/ShiftAssignment.html +488 -0
  101. data/doc/classes/TaskJuggler/ShiftAssignments.html +715 -0
  102. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +261 -0
  103. data/doc/classes/TaskJuggler/ShiftScenario.html +282 -0
  104. data/doc/classes/TaskJuggler/SourceFileInfo.html +247 -0
  105. data/doc/classes/TaskJuggler/StringAttribute.html +229 -0
  106. data/doc/classes/TaskJuggler/SymbolAttribute.html +194 -0
  107. data/doc/classes/TaskJuggler/SyntaxReference.html +516 -0
  108. data/doc/classes/TaskJuggler/TOCEntry.html +242 -0
  109. data/doc/classes/TaskJuggler/TableColumnDefinition.html +273 -0
  110. data/doc/classes/TaskJuggler/TableOfContents.html +256 -0
  111. data/doc/classes/TaskJuggler/Task.html +203 -0
  112. data/doc/classes/TaskJuggler/TaskDependency.html +251 -0
  113. data/doc/classes/TaskJuggler/TaskListAttribute.html +267 -0
  114. data/doc/classes/TaskJuggler/TaskListRE.html +250 -0
  115. data/doc/classes/TaskJuggler/TaskScenario.html +2206 -0
  116. data/doc/classes/TaskJuggler/TextParser.html +670 -0
  117. data/doc/classes/TaskJuggler/TextParser/Pattern.html +923 -0
  118. data/doc/classes/TaskJuggler/TextParser/Rule.html +779 -0
  119. data/doc/classes/TaskJuggler/TextParser/StackElement.html +267 -0
  120. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +212 -0
  121. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +221 -0
  122. data/doc/classes/TaskJuggler/TextScanner.html +708 -0
  123. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +355 -0
  124. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +341 -0
  125. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +260 -0
  126. data/doc/classes/TaskJuggler/TjException.html +185 -0
  127. data/doc/classes/TaskJuggler/TjTime.html +1845 -0
  128. data/doc/classes/TaskJuggler/TjpExample.html +310 -0
  129. data/doc/classes/TaskJuggler/TjpExportRE.html +329 -0
  130. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +8928 -0
  131. data/doc/classes/TaskJuggler/UserManual.html +606 -0
  132. data/doc/classes/TaskJuggler/WorkingHours.html +582 -0
  133. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +284 -0
  134. data/doc/classes/TaskJuggler/XMLBlob.html +207 -0
  135. data/doc/classes/TaskJuggler/XMLComment.html +206 -0
  136. data/doc/classes/TaskJuggler/XMLDocument.html +293 -0
  137. data/doc/classes/TaskJuggler/XMLElement.html +341 -0
  138. data/doc/classes/TaskJuggler/XMLNamedText.html +174 -0
  139. data/doc/classes/TaskJuggler/XMLText.html +221 -0
  140. data/doc/files/COPYING.html +448 -0
  141. data/doc/files/README.html +134 -0
  142. data/doc/files/lib/AccountScenario_rb.html +116 -0
  143. data/doc/files/lib/Account_rb.html +118 -0
  144. data/doc/files/lib/Allocation_rb.html +118 -0
  145. data/doc/files/lib/AppConfig_rb.html +116 -0
  146. data/doc/files/lib/AttributeBase_rb.html +106 -0
  147. data/doc/files/lib/AttributeDefinition_rb.html +106 -0
  148. data/doc/files/lib/Attributes_rb.html +130 -0
  149. data/doc/files/lib/Booking_rb.html +106 -0
  150. data/doc/files/lib/ChargeSet_rb.html +116 -0
  151. data/doc/files/lib/Charge_rb.html +116 -0
  152. data/doc/files/lib/HTMLDocument_rb.html +116 -0
  153. data/doc/files/lib/Interval_rb.html +116 -0
  154. data/doc/files/lib/KeywordDocumentation_rb.html +122 -0
  155. data/doc/files/lib/Limits_rb.html +116 -0
  156. data/doc/files/lib/Log_rb.html +116 -0
  157. data/doc/files/lib/LogicalExpression_rb.html +122 -0
  158. data/doc/files/lib/LogicalFlag_rb.html +116 -0
  159. data/doc/files/lib/LogicalFunction_rb.html +116 -0
  160. data/doc/files/lib/LogicalOperation_rb.html +116 -0
  161. data/doc/files/lib/MacroParser_rb.html +118 -0
  162. data/doc/files/lib/MacroTable_rb.html +122 -0
  163. data/doc/files/lib/MessageHandler_rb.html +106 -0
  164. data/doc/files/lib/Message_rb.html +116 -0
  165. data/doc/files/lib/ProjectFileParser_rb.html +122 -0
  166. data/doc/files/lib/Project_rb.html +148 -0
  167. data/doc/files/lib/PropertyList_rb.html +106 -0
  168. data/doc/files/lib/PropertySet_rb.html +118 -0
  169. data/doc/files/lib/PropertyTreeNode_rb.html +106 -0
  170. data/doc/files/lib/Query_rb.html +116 -0
  171. data/doc/files/lib/RealFormat_rb.html +106 -0
  172. data/doc/files/lib/ResourceScenario_rb.html +116 -0
  173. data/doc/files/lib/Resource_rb.html +118 -0
  174. data/doc/files/lib/RichTextDocument_rb.html +120 -0
  175. data/doc/files/lib/RichTextElement_rb.html +120 -0
  176. data/doc/files/lib/RichTextParser_rb.html +120 -0
  177. data/doc/files/lib/RichTextProtocolExample_rb.html +120 -0
  178. data/doc/files/lib/RichTextProtocolHandler_rb.html +106 -0
  179. data/doc/files/lib/RichTextScanner_rb.html +116 -0
  180. data/doc/files/lib/RichTextSnip_rb.html +118 -0
  181. data/doc/files/lib/RichTextSyntaxRules_rb.html +106 -0
  182. data/doc/files/lib/RichText_rb.html +118 -0
  183. data/doc/files/lib/ScenarioData_rb.html +118 -0
  184. data/doc/files/lib/Scenario_rb.html +116 -0
  185. data/doc/files/lib/Scoreboard_rb.html +106 -0
  186. data/doc/files/lib/ShiftAssignments_rb.html +116 -0
  187. data/doc/files/lib/ShiftScenario_rb.html +116 -0
  188. data/doc/files/lib/Shift_rb.html +118 -0
  189. data/doc/files/lib/SourceFileInfo_rb.html +106 -0
  190. data/doc/files/lib/SyntaxReference_rb.html +122 -0
  191. data/doc/files/lib/TOCEntry_rb.html +118 -0
  192. data/doc/files/lib/TableColumnDefinition_rb.html +106 -0
  193. data/doc/files/lib/TableOfContents_rb.html +118 -0
  194. data/doc/files/lib/TaskDependency_rb.html +106 -0
  195. data/doc/files/lib/TaskJuggler_rb.html +120 -0
  196. data/doc/files/lib/TaskScenario_rb.html +116 -0
  197. data/doc/files/lib/Task_rb.html +118 -0
  198. data/doc/files/lib/TextParser/Pattern_rb.html +116 -0
  199. data/doc/files/lib/TextParser/Rule_rb.html +106 -0
  200. data/doc/files/lib/TextParser/StackElement_rb.html +106 -0
  201. data/doc/files/lib/TextParser/TokenDoc_rb.html +106 -0
  202. data/doc/files/lib/TextParser_rb.html +124 -0
  203. data/doc/files/lib/TextScanner_rb.html +128 -0
  204. data/doc/files/lib/Tj3Config_rb.html +118 -0
  205. data/doc/files/lib/TjException_rb.html +106 -0
  206. data/doc/files/lib/TjTime_rb.html +118 -0
  207. data/doc/files/lib/TjpExample_rb.html +116 -0
  208. data/doc/files/lib/TjpSyntaxRules_rb.html +106 -0
  209. data/doc/files/lib/UTF8String_rb.html +132 -0
  210. data/doc/files/lib/UserManual_rb.html +124 -0
  211. data/doc/files/lib/WorkingHours_rb.html +116 -0
  212. data/doc/files/lib/XMLDocument_rb.html +116 -0
  213. data/doc/files/lib/XMLElement_rb.html +116 -0
  214. data/doc/files/lib/reports/CSVFile_rb.html +116 -0
  215. data/doc/files/lib/reports/ColumnTable_rb.html +116 -0
  216. data/doc/files/lib/reports/GanttChart_rb.html +122 -0
  217. data/doc/files/lib/reports/GanttContainer_rb.html +116 -0
  218. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +106 -0
  219. data/doc/files/lib/reports/GanttHeader_rb.html +116 -0
  220. data/doc/files/lib/reports/GanttLine_rb.html +126 -0
  221. data/doc/files/lib/reports/GanttLoadStack_rb.html +116 -0
  222. data/doc/files/lib/reports/GanttMilestone_rb.html +116 -0
  223. data/doc/files/lib/reports/GanttRouter_rb.html +106 -0
  224. data/doc/files/lib/reports/GanttTaskBar_rb.html +116 -0
  225. data/doc/files/lib/reports/HTMLGraphics_rb.html +106 -0
  226. data/doc/files/lib/reports/ReportElement_rb.html +118 -0
  227. data/doc/files/lib/reports/ReportTableCell_rb.html +106 -0
  228. data/doc/files/lib/reports/ReportTableColumn_rb.html +106 -0
  229. data/doc/files/lib/reports/ReportTableElement_rb.html +122 -0
  230. data/doc/files/lib/reports/ReportTableLegend_rb.html +106 -0
  231. data/doc/files/lib/reports/ReportTableLine_rb.html +116 -0
  232. data/doc/files/lib/reports/ReportTable_rb.html +118 -0
  233. data/doc/files/lib/reports/Report_rb.html +126 -0
  234. data/doc/files/lib/reports/ResourceListRE_rb.html +122 -0
  235. data/doc/files/lib/reports/TaskListRE_rb.html +122 -0
  236. data/doc/files/lib/reports/TjpExportRE_rb.html +116 -0
  237. data/doc/files/lib/taskjuggler3_rb.html +276 -0
  238. data/doc/files/lib/tj3man_rb.html +189 -0
  239. data/doc/fr_class_index.html +285 -0
  240. data/doc/fr_file_index.html +223 -0
  241. data/doc/fr_method_index.html +1953 -0
  242. data/doc/index.html +21 -0
  243. data/doc/rdoc-style.css +299 -0
  244. data/examples/tutorial.tjp +361 -0
  245. data/gem_spec.rb +30 -0
  246. data/lib/Account.rb +50 -0
  247. data/lib/AccountScenario.rb +39 -0
  248. data/lib/Allocation.rb +102 -0
  249. data/lib/AppConfig.rb +134 -0
  250. data/lib/AttributeBase.rb +131 -0
  251. data/lib/AttributeDefinition.rb +47 -0
  252. data/lib/Attributes.rb +478 -0
  253. data/lib/BatchProcessor.rb +209 -0
  254. data/lib/Booking.rb +59 -0
  255. data/lib/Charge.rb +71 -0
  256. data/lib/ChargeSet.rb +126 -0
  257. data/lib/HTMLDocument.rb +59 -0
  258. data/lib/Interval.rb +127 -0
  259. data/lib/KeywordDocumentation.rb +560 -0
  260. data/lib/Limits.rb +219 -0
  261. data/lib/Log.rb +160 -0
  262. data/lib/LogicalExpression.rb +71 -0
  263. data/lib/LogicalFlag.rb +34 -0
  264. data/lib/LogicalFunction.rb +102 -0
  265. data/lib/LogicalOperation.rb +118 -0
  266. data/lib/MacroParser.rb +77 -0
  267. data/lib/MacroTable.rb +84 -0
  268. data/lib/Message.rb +56 -0
  269. data/lib/MessageHandler.rb +34 -0
  270. data/lib/Project.rb +662 -0
  271. data/lib/ProjectFileParser.rb +333 -0
  272. data/lib/PropertyList.rb +181 -0
  273. data/lib/PropertySet.rb +304 -0
  274. data/lib/PropertyTreeNode.rb +461 -0
  275. data/lib/Query.rb +227 -0
  276. data/lib/RealFormat.rb +73 -0
  277. data/lib/Resource.rb +42 -0
  278. data/lib/ResourceScenario.rb +511 -0
  279. data/lib/RichText.rb +147 -0
  280. data/lib/RichTextDocument.rb +139 -0
  281. data/lib/RichTextElement.rb +391 -0
  282. data/lib/RichTextParser.rb +66 -0
  283. data/lib/RichTextProtocolExample.rb +65 -0
  284. data/lib/RichTextProtocolHandler.rb +35 -0
  285. data/lib/RichTextScanner.rb +390 -0
  286. data/lib/RichTextSnip.rb +104 -0
  287. data/lib/RichTextSyntaxRules.rb +265 -0
  288. data/lib/Scenario.rb +27 -0
  289. data/lib/ScenarioData.rb +65 -0
  290. data/lib/Scoreboard.rb +141 -0
  291. data/lib/Shift.rb +48 -0
  292. data/lib/ShiftAssignments.rb +291 -0
  293. data/lib/ShiftScenario.rb +46 -0
  294. data/lib/SourceFileInfo.rb +37 -0
  295. data/lib/SyntaxReference.rb +284 -0
  296. data/lib/TOCEntry.rb +76 -0
  297. data/lib/TableColumnDefinition.rb +54 -0
  298. data/lib/TableOfContents.rb +46 -0
  299. data/lib/Task.rb +37 -0
  300. data/lib/TaskDependency.rb +39 -0
  301. data/lib/TaskJuggler.rb +84 -0
  302. data/lib/TaskScenario.rb +1622 -0
  303. data/lib/TextParser.rb +416 -0
  304. data/lib/TextParser/Pattern.rb +263 -0
  305. data/lib/TextParser/Rule.rb +171 -0
  306. data/lib/TextParser/StackElement.rb +45 -0
  307. data/lib/TextParser/TokenDoc.rb +38 -0
  308. data/lib/TextScanner.rb +682 -0
  309. data/lib/Tj3Config.rb +27 -0
  310. data/lib/TjException.rb +27 -0
  311. data/lib/TjTime.rb +395 -0
  312. data/lib/TjpExample.rb +119 -0
  313. data/lib/TjpSyntaxRules.rb +4022 -0
  314. data/lib/UTF8String.rb +100 -0
  315. data/lib/UserManual.rb +282 -0
  316. data/lib/WorkingHours.rb +323 -0
  317. data/lib/XMLDocument.rb +54 -0
  318. data/lib/XMLElement.rb +175 -0
  319. data/lib/reports/CSVFile.rb +146 -0
  320. data/lib/reports/ColumnTable.rb +66 -0
  321. data/lib/reports/GanttChart.rb +308 -0
  322. data/lib/reports/GanttContainer.rb +107 -0
  323. data/lib/reports/GanttHeader.rb +141 -0
  324. data/lib/reports/GanttHeaderScaleItem.rb +42 -0
  325. data/lib/reports/GanttLine.rb +329 -0
  326. data/lib/reports/GanttLoadStack.rb +113 -0
  327. data/lib/reports/GanttMilestone.rb +80 -0
  328. data/lib/reports/GanttRouter.rb +375 -0
  329. data/lib/reports/GanttTaskBar.rb +95 -0
  330. data/lib/reports/HTMLGraphics.rb +65 -0
  331. data/lib/reports/Report.rb +344 -0
  332. data/lib/reports/ReportElement.rb +427 -0
  333. data/lib/reports/ReportTable.rb +144 -0
  334. data/lib/reports/ReportTableCell.rb +142 -0
  335. data/lib/reports/ReportTableColumn.rb +82 -0
  336. data/lib/reports/ReportTableElement.rb +852 -0
  337. data/lib/reports/ReportTableLegend.rb +167 -0
  338. data/lib/reports/ReportTableLine.rb +87 -0
  339. data/lib/reports/ResourceListRE.rb +72 -0
  340. data/lib/reports/TaskListRE.rb +73 -0
  341. data/lib/reports/TjpExportRE.rb +394 -0
  342. data/lib/taskjuggler3.rb +106 -0
  343. data/lib/tj3man.rb +88 -0
  344. data/manual/Day_To_Day_Juggling +168 -0
  345. data/manual/Getting_Started +61 -0
  346. data/manual/How_To_Contribute +185 -0
  347. data/manual/Installation +68 -0
  348. data/manual/Intro +102 -0
  349. data/manual/Reporting_Bugs +26 -0
  350. data/manual/Rich_Text_Attributes +90 -0
  351. data/manual/TaskJuggler_2x_Migration +40 -0
  352. data/manual/Tutorial +579 -0
  353. data/manual/fdl +450 -0
  354. data/prj_cfg.rb +43 -0
  355. data/setup.rb +1585 -0
  356. data/tasks/csts.rake +72 -0
  357. data/tasks/gem.rake +14 -0
  358. data/tasks/manual.rake +10 -0
  359. data/tasks/missing.rake +21 -0
  360. data/tasks/rcov.rake +14 -0
  361. data/tasks/rdoc.rake +17 -0
  362. data/tasks/rexml_fix.rb +16 -0
  363. data/tasks/rexml_fix_19.rb +49 -0
  364. data/tasks/show.rake +21 -0
  365. data/tasks/stats.rake +25 -0
  366. data/tasks/test.rake +11 -0
  367. data/test/MessageChecker.rb +53 -0
  368. data/test/TestSuite/CSV-Reports/celltext-Reference.csv +14 -0
  369. data/test/TestSuite/CSV-Reports/celltext.tjp +7 -0
  370. data/test/TestSuite/CSV-Reports/genrefs +6 -0
  371. data/test/TestSuite/CSV-Reports/project-1.tji +57 -0
  372. data/test/TestSuite/CSV-Reports/resourcereport-Reference.csv +4 -0
  373. data/test/TestSuite/CSV-Reports/resourcereport.tjp +10 -0
  374. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks-Reference.csv +22 -0
  375. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +11 -0
  376. data/test/TestSuite/CSV-Reports/sortByTree-Reference.csv +14 -0
  377. data/test/TestSuite/CSV-Reports/sortByTree.tjp +8 -0
  378. data/test/TestSuite/CSV-Reports/sortBy_duration.down-Reference.csv +14 -0
  379. data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +10 -0
  380. data/test/TestSuite/CSV-Reports/sortBy_effort.up-Reference.csv +14 -0
  381. data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +10 -0
  382. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down-Reference.csv +14 -0
  383. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +10 -0
  384. data/test/TestSuite/CSV-Reports/taskreport-Reference.csv +14 -0
  385. data/test/TestSuite/CSV-Reports/taskreport.tjp +10 -0
  386. data/test/TestSuite/CSV-Reports/taskreport_with_resources-Reference.csv +24 -0
  387. data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +11 -0
  388. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +86 -0
  389. data/test/TestSuite/Scheduler/Correct/AutomaticMilestones.tjp +63 -0
  390. data/test/TestSuite/Scheduler/Correct/Booking.tjp +161 -0
  391. data/test/TestSuite/Scheduler/Correct/Depends.tjp +50 -0
  392. data/test/TestSuite/Scheduler/Correct/Duration.tjp +34 -0
  393. data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +129 -0
  394. data/test/TestSuite/Scheduler/Correct/Limits.tjp +81 -0
  395. data/test/TestSuite/Scheduler/Correct/MultipleMandatories.tjp +43 -0
  396. data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +28 -0
  397. data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +33 -0
  398. data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +33 -0
  399. data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +34 -0
  400. data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +62 -0
  401. data/test/TestSuite/Scheduler/Correct/Precedes.tjp +50 -0
  402. data/test/TestSuite/Scheduler/Correct/Shift.tjp +102 -0
  403. data/test/TestSuite/Scheduler/Errors/account_no_leaf.tjp +13 -0
  404. data/test/TestSuite/Scheduler/Errors/booking_conflict.tjp +10 -0
  405. data/test/TestSuite/Scheduler/Errors/booking_no_duty.tjp +9 -0
  406. data/test/TestSuite/Scheduler/Errors/booking_on_vacation.tjp +9 -0
  407. data/test/TestSuite/Scheduler/Errors/container_booking.tjp +14 -0
  408. data/test/TestSuite/Scheduler/Errors/container_duration.tjp +11 -0
  409. data/test/TestSuite/Scheduler/Errors/effort_no_allocations.tjp +7 -0
  410. data/test/TestSuite/Scheduler/Errors/loop_detected_1.tjp +19 -0
  411. data/test/TestSuite/Scheduler/Errors/loop_detected_10.tjp +36 -0
  412. data/test/TestSuite/Scheduler/Errors/loop_detected_11.tjp +27 -0
  413. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +20 -0
  414. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +27 -0
  415. data/test/TestSuite/Scheduler/Errors/loop_detected_14.tjp +26 -0
  416. data/test/TestSuite/Scheduler/Errors/loop_detected_2.tjp +24 -0
  417. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +18 -0
  418. data/test/TestSuite/Scheduler/Errors/loop_detected_4.tjp +36 -0
  419. data/test/TestSuite/Scheduler/Errors/loop_detected_5.tjp +37 -0
  420. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +35 -0
  421. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +46 -0
  422. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +51 -0
  423. data/test/TestSuite/Scheduler/Errors/loop_detected_9.tjp +20 -0
  424. data/test/TestSuite/Scheduler/Errors/maxend.tjp +8 -0
  425. data/test/TestSuite/Scheduler/Errors/maxstart.tjp +8 -0
  426. data/test/TestSuite/Scheduler/Errors/milestone_booking.tjp +10 -0
  427. data/test/TestSuite/Scheduler/Errors/milestone_duration.tjp +8 -0
  428. data/test/TestSuite/Scheduler/Errors/milestone_start_end.tjp +8 -0
  429. data/test/TestSuite/Scheduler/Errors/minend.tjp +8 -0
  430. data/test/TestSuite/Scheduler/Errors/minstart.tjp +8 -0
  431. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +11 -0
  432. data/test/TestSuite/Scheduler/Errors/no_tasks.tjp +6 -0
  433. data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +8 -0
  434. data/test/TestSuite/Scheduler/Errors/task_depend_child.tjp +10 -0
  435. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +13 -0
  436. data/test/TestSuite/Scheduler/Errors/task_depend_parent.tjp +11 -0
  437. data/test/TestSuite/Scheduler/Errors/task_depend_self.tjp +10 -0
  438. data/test/TestSuite/Scheduler/Errors/task_depend_unknown.tjp +10 -0
  439. data/test/TestSuite/Scheduler/Errors/task_overspecified_1.tjp +9 -0
  440. data/test/TestSuite/Scheduler/Errors/task_overspecified_2.tjp +14 -0
  441. data/test/TestSuite/Scheduler/Errors/task_overspecified_3.tjp +14 -0
  442. data/test/TestSuite/Scheduler/Errors/task_underspecified_1.tjp +8 -0
  443. data/test/TestSuite/Scheduler/Errors/task_underspecified_2.tjp +8 -0
  444. data/test/TestSuite/Scheduler/Errors/task_underspecified_3.tjp +9 -0
  445. data/test/TestSuite/Syntax/Correct/Account.tjp +53 -0
  446. data/test/TestSuite/Syntax/Correct/Allocate-1.tjp +24 -0
  447. data/test/TestSuite/Syntax/Correct/Alternative.tjp +13 -0
  448. data/test/TestSuite/Syntax/Correct/AutoMacros.tjp +14 -0
  449. data/test/TestSuite/Syntax/Correct/Booking.tjp +26 -0
  450. data/test/TestSuite/Syntax/Correct/Caption.tjp +33 -0
  451. data/test/TestSuite/Syntax/Correct/Celltext.tjp +28 -0
  452. data/test/TestSuite/Syntax/Correct/Comments.tjp +29 -0
  453. data/test/TestSuite/Syntax/Correct/Complete.tjp +16 -0
  454. data/test/TestSuite/Syntax/Correct/CompletedWork.tji +20 -0
  455. data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +31 -0
  456. data/test/TestSuite/Syntax/Correct/Currencyformat.tjp +12 -0
  457. data/test/TestSuite/Syntax/Correct/CustomAttributes.tjp +14 -0
  458. data/test/TestSuite/Syntax/Correct/Depends1.tjp +22 -0
  459. data/test/TestSuite/Syntax/Correct/Durations.tjp +29 -0
  460. data/test/TestSuite/Syntax/Correct/Efficiency.tjp +19 -0
  461. data/test/TestSuite/Syntax/Correct/Export.tjp +40 -0
  462. data/test/TestSuite/Syntax/Correct/Flags.tjp +32 -0
  463. data/test/TestSuite/Syntax/Correct/Freeze.tjp +28 -0
  464. data/test/TestSuite/Syntax/Correct/Gap.tjp +15 -0
  465. data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +33 -0
  466. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +71 -0
  467. data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +31 -0
  468. data/test/TestSuite/Syntax/Correct/Macro-1.tjp +19 -0
  469. data/test/TestSuite/Syntax/Correct/Mandatory.tjp +17 -0
  470. data/test/TestSuite/Syntax/Correct/Milestone.tjp +12 -0
  471. data/test/TestSuite/Syntax/Correct/MinMax.tjp +17 -0
  472. data/test/TestSuite/Syntax/Correct/Numberformat.tjp +12 -0
  473. data/test/TestSuite/Syntax/Correct/Period.tjp +16 -0
  474. data/test/TestSuite/Syntax/Correct/Persistent.tjp +11 -0
  475. data/test/TestSuite/Syntax/Correct/Precedes1.tjp +17 -0
  476. data/test/TestSuite/Syntax/Correct/Priority.tjp +30 -0
  477. data/test/TestSuite/Syntax/Correct/Project.tjp +21 -0
  478. data/test/TestSuite/Syntax/Correct/ProjectIDs.tjp +23 -0
  479. data/test/TestSuite/Syntax/Correct/RawHTML.tjp +29 -0
  480. data/test/TestSuite/Syntax/Correct/Reports.tjp +54 -0
  481. data/test/TestSuite/Syntax/Correct/Resource.tjp +20 -0
  482. data/test/TestSuite/Syntax/Correct/Responsible.tjp +16 -0
  483. data/test/TestSuite/Syntax/Correct/Scenario.tjp +15 -0
  484. data/test/TestSuite/Syntax/Correct/Scheduling.tjp +26 -0
  485. data/test/TestSuite/Syntax/Correct/Select.tjp +27 -0
  486. data/test/TestSuite/Syntax/Correct/Shift.tjp +55 -0
  487. data/test/TestSuite/Syntax/Correct/Simple.tjp +25 -0
  488. data/test/TestSuite/Syntax/Correct/String.tjp +12 -0
  489. data/test/TestSuite/Syntax/Correct/Supplement.tjp +24 -0
  490. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +34 -0
  491. data/test/TestSuite/Syntax/Correct/TimeFrame.tjp +19 -0
  492. data/test/TestSuite/Syntax/Correct/Timezone.tjp +8 -0
  493. data/test/TestSuite/Syntax/Correct/Vacation.tjp +33 -0
  494. data/test/TestSuite/Syntax/Correct/csvtest +16 -0
  495. data/test/TestSuite/Syntax/Correct/manual2example.rb +24 -0
  496. data/test/TestSuite/Syntax/Correct/tutorial.tjp +485 -0
  497. data/test/TestSuite/Syntax/Errors/bad_include.tjp +11 -0
  498. data/test/TestSuite/Syntax/Errors/booking_group.tjp +14 -0
  499. data/test/TestSuite/Syntax/Errors/booking_milestone.tjp +13 -0
  500. data/test/TestSuite/Syntax/Errors/booking_no_leaf.tjp +13 -0
  501. data/test/TestSuite/Syntax/Errors/chargeset.tjp +14 -0
  502. data/test/TestSuite/Syntax/Errors/chargeset_master.tjp +15 -0
  503. data/test/TestSuite/Syntax/Errors/container_attribute.tjp +13 -0
  504. data/test/TestSuite/Syntax/Errors/cost_acct_no_top.tjp +24 -0
  505. data/test/TestSuite/Syntax/Errors/cost_rev_same.tjp +24 -0
  506. data/test/TestSuite/Syntax/Errors/date_in_range.tjp +7 -0
  507. data/test/TestSuite/Syntax/Errors/effort_zero.tjp +8 -0
  508. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -0
  509. data/test/TestSuite/Syntax/Errors/export_bad_extn.tjp +9 -0
  510. data/test/TestSuite/Syntax/Errors/extend_id_cap.tjp +7 -0
  511. data/test/TestSuite/Syntax/Errors/interval_end_in_range.tjp +7 -0
  512. data/test/TestSuite/Syntax/Errors/interval_start_in_range.tjp +7 -0
  513. data/test/TestSuite/Syntax/Errors/leaf_resource_id_expected.tjp +12 -0
  514. data/test/TestSuite/Syntax/Errors/misaligned_date.tjp +7 -0
  515. data/test/TestSuite/Syntax/Errors/no_csv_suffix.tjp +10 -0
  516. data/test/TestSuite/Syntax/Errors/no_html_suffix.tjp +10 -0
  517. data/test/TestSuite/Syntax/Errors/operand_attribute.tjp +11 -0
  518. data/test/TestSuite/Syntax/Errors/operand_unkn_flag.tjp +11 -0
  519. data/test/TestSuite/Syntax/Errors/operand_unkn_scen.tjp +11 -0
  520. data/test/TestSuite/Syntax/Errors/overtime_range.tjp +13 -0
  521. data/test/TestSuite/Syntax/Errors/purge_no_list.tjp +8 -0
  522. data/test/TestSuite/Syntax/Errors/purge_unknown_id.tjp +8 -0
  523. data/test/TestSuite/Syntax/Errors/report_end.tjp +10 -0
  524. data/test/TestSuite/Syntax/Errors/report_redifinition.tjp +10 -0
  525. data/test/TestSuite/Syntax/Errors/report_start.tjp +10 -0
  526. data/test/TestSuite/Syntax/Errors/resource_exists.tjp +7 -0
  527. data/test/TestSuite/Syntax/Errors/resource_id_expected.tjp +8 -0
  528. data/test/TestSuite/Syntax/Errors/rev_acct_no_top.tjp +24 -0
  529. data/test/TestSuite/Syntax/Errors/scenario_exists.tjp +7 -0
  530. data/test/TestSuite/Syntax/Errors/shift_assignment_overlap.tjp +15 -0
  531. data/test/TestSuite/Syntax/Errors/shift_exists.tjp +7 -0
  532. data/test/TestSuite/Syntax/Errors/shift_id_expected.tjp +7 -0
  533. data/test/TestSuite/Syntax/Errors/sloppy_range.tjp +13 -0
  534. data/test/TestSuite/Syntax/Errors/sort_direction.tjp +11 -0
  535. data/test/TestSuite/Syntax/Errors/sort_unknown_scen.tjp +11 -0
  536. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +11 -0
  537. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd2.tjp +11 -0
  538. data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +11 -0
  539. data/test/TestSuite/Syntax/Errors/start_before_end1.tjp +7 -0
  540. data/test/TestSuite/Syntax/Errors/start_before_end2.tjp +6 -0
  541. data/test/TestSuite/Syntax/Errors/task_complete.tjp +8 -0
  542. data/test/TestSuite/Syntax/Errors/task_exists.tjp +7 -0
  543. data/test/TestSuite/Syntax/Errors/task_priority.tjp +8 -0
  544. data/test/TestSuite/Syntax/Errors/task_without_chargeset.tjp +9 -0
  545. data/test/TestSuite/Syntax/Errors/time_interval.tjp +12 -0
  546. data/test/TestSuite/Syntax/Errors/too_many_bangs.tjp +10 -0
  547. data/test/TestSuite/Syntax/Errors/undecl_flag.tjp +6 -0
  548. data/test/TestSuite/Syntax/Errors/unknown_projectid.tjp +7 -0
  549. data/test/TestSuite/Syntax/Errors/unknown_scenario_id.tjp +6 -0
  550. data/test/TestSuite/Syntax/Errors/unknown_scenario_idx.tjp +11 -0
  551. data/test/TestSuite/Syntax/Errors/unknown_task.tjp +10 -0
  552. data/test/all.rb +31 -0
  553. data/test/test_BatchProcessor.rb +54 -0
  554. data/test/test_CSV-Reports.rb +101 -0
  555. data/test/test_Limits.rb +104 -0
  556. data/test/test_LogicalExpression.rb +110 -0
  557. data/test/test_MacroTable.rb +51 -0
  558. data/test/test_Project.rb +57 -0
  559. data/test/test_PropertySet.rb +71 -0
  560. data/test/test_Query.rb +83 -0
  561. data/test/test_RealFormat.rb +83 -0
  562. data/test/test_RichText.rb +869 -0
  563. data/test/test_Scheduler.rb +42 -0
  564. data/test/test_ShiftAssignments.rb +77 -0
  565. data/test/test_Syntax.rb +41 -0
  566. data/test/test_TextScanner.rb +95 -0
  567. data/test/test_TjTime.rb +114 -0
  568. data/test/test_TjpExample.rb +169 -0
  569. data/test/test_UTF8String.rb +84 -0
  570. data/test/test_WorkingHours.rb +56 -0
  571. metadata +649 -0
@@ -0,0 +1,1606 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <title>Class: TaskJuggler::Project [TaskJuggler III API documentation]</title>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
8
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
9
+ <script type="text/javascript">
10
+ // <![CDATA[
11
+
12
+ function popupCode( url ) {
13
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
14
+ }
15
+
16
+ function toggleCode( id ) {
17
+ if ( document.getElementById )
18
+ elem = document.getElementById( id );
19
+ else if ( document.all )
20
+ elem = eval( "document.all." + id );
21
+ else
22
+ return false;
23
+
24
+ elemStyle = elem.style;
25
+
26
+ if ( elemStyle.display != "block" ) {
27
+ elemStyle.display = "block"
28
+ } else {
29
+ elemStyle.display = "none"
30
+ }
31
+
32
+ return true;
33
+ }
34
+
35
+ // Make codeblocks hidden by default
36
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }<\/style>" )
37
+
38
+ // ]]>
39
+ </script>
40
+
41
+ </head>
42
+ <body>
43
+
44
+
45
+ <div id="classHeader">
46
+ <table class="header-table">
47
+ <tr class="top-aligned-row">
48
+ <td><strong>Class</strong></td>
49
+ <td class="class-name-in-header">TaskJuggler::Project</td>
50
+ </tr>
51
+ <tr class="top-aligned-row">
52
+ <td><strong>In:</strong></td>
53
+ <td>
54
+
55
+
56
+ <a href="../../files/lib/Project_rb.html">
57
+
58
+ lib/Project.rb
59
+
60
+ </a>
61
+
62
+
63
+ <br />
64
+
65
+ </td>
66
+ </tr>
67
+
68
+
69
+ <tr class="top-aligned-row">
70
+ <td><strong>Parent:</strong></td>
71
+ <td>
72
+
73
+ Object
74
+
75
+ </td>
76
+ </tr>
77
+
78
+ </table>
79
+ </div>
80
+ <!-- banner header -->
81
+
82
+ <div id="bodyContent">
83
+
84
+ <div id="contextContent">
85
+
86
+ <div id="description">
87
+ <p>
88
+ This class implements objects that hold all project properties. <a
89
+ href="Project.html">Project</a> generally consist of resources, tasks and a
90
+ number of other optional properties. Tasks, Resources, Accounts and Shifts
91
+ are all build on the same underlying storage class <a
92
+ href="PropertyTreeNode.html">PropertyTreeNode</a>. Properties of the same
93
+ kind are kept in <a href="PropertySet.html">PropertySet</a> objects. There
94
+ is only one <a href="PropertySet.html">PropertySet</a> for each type of
95
+ property. Additionally, each property may belong to various <a
96
+ href="PropertyList.html">PropertyList</a> objects. In contrast to <a
97
+ href="PropertySet.html">PropertySet</a> objects, <a
98
+ href="PropertyList.html">PropertyList</a> object have well defined sorting
99
+ order and no information about the attributes of each type of property. The
100
+ <a href="PropertySet.html">PropertySet</a> holds the blueprints for the
101
+ data construction inside the <a
102
+ href="PropertyTreeNode.html">PropertyTreeNode</a> objects. It contains the
103
+ list of known Attributes.
104
+ </p>
105
+
106
+ </div>
107
+
108
+ </div>
109
+
110
+
111
+ <div id="method-list">
112
+ <h3 class="section-bar">Methods</h3>
113
+
114
+ <div class="name-list">
115
+
116
+ <a href="#M000633">[]</a>&nbsp;&nbsp;
117
+
118
+ <a href="#M000634">[]=</a>&nbsp;&nbsp;
119
+
120
+ <a href="#M000643">account</a>&nbsp;&nbsp;
121
+
122
+ <a href="#M000649">convertToDailyLoad</a>&nbsp;&nbsp;
123
+
124
+ <a href="#M000636">dailyWorkingHours</a>&nbsp;&nbsp;
125
+
126
+ <a href="#M000652">dateToIdx</a>&nbsp;&nbsp;
127
+
128
+ <a href="#M000655">finishScenario</a>&nbsp;&nbsp;
129
+
130
+ <a href="#M000647">generateReports</a>&nbsp;&nbsp;
131
+
132
+ <a href="#M000651">idxToDate</a>&nbsp;&nbsp;
133
+
134
+ <a href="#M000648">isWorkingTime</a>&nbsp;&nbsp;
135
+
136
+ <a href="#M000638">monthlyWorkingDays</a>&nbsp;&nbsp;
137
+
138
+ <a href="#M000631">new</a>&nbsp;&nbsp;
139
+
140
+ <a href="#M000654">prepareScenario</a>&nbsp;&nbsp;
141
+
142
+ <a href="#M000645">resource</a>&nbsp;&nbsp;
143
+
144
+ <a href="#M000640">scenario</a>&nbsp;&nbsp;
145
+
146
+ <a href="#M000635">scenarioCount</a>&nbsp;&nbsp;
147
+
148
+ <a href="#M000641">scenarioIdx</a>&nbsp;&nbsp;
149
+
150
+ <a href="#M000646">schedule</a>&nbsp;&nbsp;
151
+
152
+ <a href="#M000656">scheduleScenario</a>&nbsp;&nbsp;
153
+
154
+ <a href="#M000650">scoreboardSize</a>&nbsp;&nbsp;
155
+
156
+ <a href="#M000632">sendMessage</a>&nbsp;&nbsp;
157
+
158
+ <a href="#M000642">shift</a>&nbsp;&nbsp;
159
+
160
+ <a href="#M000644">task</a>&nbsp;&nbsp;
161
+
162
+ <a href="#M000653">to_s</a>&nbsp;&nbsp;
163
+
164
+ <a href="#M000637">weeklyWorkingDays</a>&nbsp;&nbsp;
165
+
166
+ <a href="#M000639">yearlyWorkingDays</a>&nbsp;&nbsp;
167
+
168
+ </div>
169
+ </div>
170
+
171
+ </div>
172
+
173
+ <!-- if includes -->
174
+
175
+ <div id="section">
176
+
177
+
178
+
179
+ <div id="attribute-list">
180
+ <h3 class="section-bar">Attributes</h3>
181
+
182
+ <div class="name-list">
183
+ <table>
184
+
185
+ <tr class="top-aligned-row context-row">
186
+ <td class="context-item-name">accounts</td>
187
+
188
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
189
+
190
+ <td class="context-item-desc"></td>
191
+ </tr>
192
+
193
+ <tr class="top-aligned-row context-row">
194
+ <td class="context-item-name">messageHandler</td>
195
+
196
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
197
+
198
+ <td class="context-item-desc"></td>
199
+ </tr>
200
+
201
+ <tr class="top-aligned-row context-row">
202
+ <td class="context-item-name">reports</td>
203
+
204
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
205
+
206
+ <td class="context-item-desc"></td>
207
+ </tr>
208
+
209
+ <tr class="top-aligned-row context-row">
210
+ <td class="context-item-name">resources</td>
211
+
212
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
213
+
214
+ <td class="context-item-desc"></td>
215
+ </tr>
216
+
217
+ <tr class="top-aligned-row context-row">
218
+ <td class="context-item-name">scenarios</td>
219
+
220
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
221
+
222
+ <td class="context-item-desc"></td>
223
+ </tr>
224
+
225
+ <tr class="top-aligned-row context-row">
226
+ <td class="context-item-name">shifts</td>
227
+
228
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
229
+
230
+ <td class="context-item-desc"></td>
231
+ </tr>
232
+
233
+ <tr class="top-aligned-row context-row">
234
+ <td class="context-item-name">tasks</td>
235
+
236
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
237
+
238
+ <td class="context-item-desc"></td>
239
+ </tr>
240
+
241
+ </table>
242
+ </div>
243
+ </div>
244
+
245
+
246
+ <!-- if method_list -->
247
+
248
+ <div id="methods">
249
+
250
+ <h3 class="section-bar">Public Class methods</h3>
251
+
252
+
253
+ <div id="method-M000631" class="method-detail">
254
+ <a name="M000631"></a>
255
+
256
+ <div class="method-heading">
257
+
258
+ <a href="#M000631" class="method-signature">
259
+
260
+ <span class="method-name">new</span><span class="method-args">(id, name, version, messageHandler)</span>
261
+
262
+ </a>
263
+
264
+ </div>
265
+
266
+ <div class="method-description">
267
+
268
+ <p>
269
+ Create a project with the specified <tt>id</tt>, <tt>name</tt> and
270
+ <tt>version</tt>. <tt>messageHandler</tt> is a <a
271
+ href="MessageHandler.html">MessageHandler</a> reference that is used to
272
+ handle all error and warning messages that might occur during processing.
273
+ The constructor will set default values for all project attributes.
274
+ </p>
275
+
276
+ <p><a class="source-toggle" href="#"
277
+ onclick="toggleCode('M000631-source');return false;">[Source]</a></p>
278
+ <div class="method-source-code" id="M000631-source">
279
+ <pre>
280
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 53</span>
281
+ 53: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">version</span>, <span class="ruby-identifier">messageHandler</span>)
282
+ 54: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
283
+ 55: <span class="ruby-ivar">@attributes</span> = {
284
+ 56: <span class="ruby-value str">'projectid'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">id</span>,
285
+ 57: <span class="ruby-value str">'projectids'</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-identifier">id</span> ],
286
+ 58: <span class="ruby-value str">'name'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">name</span>,
287
+ 59: <span class="ruby-value str">'version'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">version</span>,
288
+ 60: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
289
+ 61: <span class="ruby-value str">'copyright'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
290
+ 62: <span class="ruby-value str">'currency'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;EUR&quot;</span>,
291
+ 63: <span class="ruby-value str">'currencyformat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">RealFormat</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'-'</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">','</span>, <span class="ruby-value">2</span> ]),
292
+ 64: <span class="ruby-value str">'dailyworkinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">8.0</span>,
293
+ 65: <span class="ruby-value str">'end'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
294
+ 66: <span class="ruby-value str">'flags'</span> =<span class="ruby-operator">&gt;</span> [],
295
+ 67: <span class="ruby-value str">'limits'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
296
+ 68: <span class="ruby-value str">'loadunit'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:shortauto</span>,
297
+ 69: <span class="ruby-value str">'now'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">align</span>(<span class="ruby-value">3600</span>),
298
+ 70: <span class="ruby-value str">'numberformat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">RealFormat</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'-'</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">'.'</span>, <span class="ruby-value">1</span>]),
299
+ 71: <span class="ruby-value str">'priority'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>,
300
+ 72: <span class="ruby-value str">'rate'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span><span class="ruby-value">.0</span>,
301
+ 73: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
302
+ 74: <span class="ruby-value str">'scheduleGranularity'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">3600</span>,
303
+ 75: <span class="ruby-value str">'shorttimeformat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%H:%M&quot;</span>,
304
+ 76: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
305
+ 77: <span class="ruby-value str">'timeformat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%Y-%m-%d&quot;</span>,
306
+ 78: <span class="ruby-value str">'timezone'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
307
+ 79: <span class="ruby-value str">'vacations'</span> =<span class="ruby-operator">&gt;</span> [],
308
+ 80: <span class="ruby-value str">'weekstartsmonday'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>,
309
+ 81: <span class="ruby-value str">'workinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">WorkingHours</span>.<span class="ruby-identifier">new</span>,
310
+ 82: <span class="ruby-value str">'yearlyworkingdays'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">260.714</span>
311
+ 83: }
312
+ 84:
313
+ 85: <span class="ruby-comment cmt"># Before we can add any properties to this project, we need to define the</span>
314
+ 86: <span class="ruby-comment cmt"># attributes that each of the property types will be using. In TaskJuggler</span>
315
+ 87: <span class="ruby-comment cmt"># lingo, properties of a project are resources, tasks, accounts, shifts</span>
316
+ 88: <span class="ruby-comment cmt"># and scenarios. Each of these properties can have lots of further</span>
317
+ 89: <span class="ruby-comment cmt"># information attached to it. These bits of information are called</span>
318
+ 90: <span class="ruby-comment cmt"># attributes. An attribute is defined by the AttributeDefinition class.</span>
319
+ 91: <span class="ruby-comment cmt"># The PropertySet objects need to be fed with a list of such attribute</span>
320
+ 92: <span class="ruby-comment cmt"># definitions to register the attributes with the properties.</span>
321
+ 93: <span class="ruby-ivar">@scenarios</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
322
+ 94: <span class="ruby-identifier">attrs</span> = [
323
+ 95: <span class="ruby-comment cmt"># ID Name Type Inh. Scen. Default</span>
324
+ 96: [ <span class="ruby-value str">'enabled'</span>, <span class="ruby-value str">'Enabled'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span> ],
325
+ 97: [ <span class="ruby-value str">'minslackrate'</span>, <span class="ruby-value str">'Min. Slack Rate'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
326
+ 98: [ <span class="ruby-value str">'projection'</span>, <span class="ruby-value str">'Projection Mode'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span> ],
327
+ 99: [ <span class="ruby-value str">'strict'</span>, <span class="ruby-value str">'Strict Bookings'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span> ]
328
+ 100: ]
329
+ 101: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
330
+ 102:
331
+ 103: <span class="ruby-ivar">@shifts</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
332
+ 104: <span class="ruby-identifier">attrs</span> = [
333
+ 105: <span class="ruby-comment cmt"># ID Name Type Inher. Scen. Default</span>
334
+ 106: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
335
+ 107: [ <span class="ruby-value str">'replace'</span>, <span class="ruby-value str">'Replace'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
336
+ 108: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
337
+ 109: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
338
+ 110: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
339
+ 111: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
340
+ 112: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>,
341
+ 113: <span class="ruby-keyword kw">nil</span> ]
342
+ 114: ]
343
+ 115: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
344
+ 116:
345
+ 117: <span class="ruby-ivar">@accounts</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
346
+ 118: <span class="ruby-identifier">attrs</span> = [
347
+ 119: <span class="ruby-comment cmt"># ID Name Type Inher. Scen. Default</span>
348
+ 120: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
349
+ 121: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
350
+ 122: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ]
351
+ 123: ]
352
+ 124: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@accounts</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
353
+ 125:
354
+ 126: <span class="ruby-ivar">@resources</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
355
+ 127: <span class="ruby-identifier">attrs</span> = [
356
+ 128: <span class="ruby-comment cmt"># ID Name Type Inher. Scen. Default</span>
357
+ 129: [ <span class="ruby-value str">'alloctdeffort'</span>, <span class="ruby-value str">'Alloctd. Effort'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
358
+ 130: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
359
+ 131: [ <span class="ruby-value str">'duties'</span>, <span class="ruby-value str">'Duties'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
360
+ 132: [ <span class="ruby-value str">'efficiency'</span>,<span class="ruby-value str">'Efficiency'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1.0</span> ],
361
+ 133: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Total Effort'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
362
+ 134: [ <span class="ruby-value str">'email'</span>, <span class="ruby-value str">'Email'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
363
+ 135: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
364
+ 136: [ <span class="ruby-value str">'fte'</span>, <span class="ruby-value str">'FTE'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1.0</span> ],
365
+ 137: [ <span class="ruby-value str">'headcount'</span>, <span class="ruby-value str">'Headcount'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1</span> ],
366
+ 138: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
367
+ 139: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
368
+ 140: [ <span class="ruby-value str">'rate'</span>, <span class="ruby-value str">'Rate'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
369
+ 141: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>,
370
+ 142: <span class="ruby-keyword kw">nil</span> ],
371
+ 143: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
372
+ 144: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
373
+ 145: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
374
+ 146: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
375
+ 147: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>,
376
+ 148: <span class="ruby-keyword kw">nil</span> ]
377
+ 149: ]
378
+ 150: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@resources</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
379
+ 151:
380
+ 152: <span class="ruby-ivar">@tasks</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">false</span>)
381
+ 153: <span class="ruby-identifier">attrs</span> = [
382
+ 154: <span class="ruby-comment cmt"># ID Name Type Inher. Scen. Default</span>
383
+ 155: [ <span class="ruby-value str">'allocate'</span>, <span class="ruby-value str">'Allocations'</span>, <span class="ruby-constant">AllocationAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
384
+ 156: [ <span class="ruby-value str">'assignedresources'</span>, <span class="ruby-value str">'Assigned Resources'</span>, <span class="ruby-constant">ResourceListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
385
+ 157: [ <span class="ruby-value str">'booking'</span>, <span class="ruby-value str">'Bookings'</span>, <span class="ruby-constant">BookingListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
386
+ 158: [ <span class="ruby-value str">'charge'</span>, <span class="ruby-value str">'Charges'</span>, <span class="ruby-constant">ChargeListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
387
+ 159: [ <span class="ruby-value str">'chargeset'</span>, <span class="ruby-value str">'Charge Sets'</span>, <span class="ruby-constant">ChargeSetListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
388
+ 160: [ <span class="ruby-value str">'complete'</span>, <span class="ruby-value str">'Completion'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
389
+ 161: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
390
+ 162: [ <span class="ruby-value str">'depends'</span>, <span class="ruby-value str">'-'</span>, <span class="ruby-constant">DependencyListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
391
+ 163: [ <span class="ruby-value str">'duration'</span>, <span class="ruby-value str">'Duration'</span>, <span class="ruby-constant">DurationAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
392
+ 164: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Effort'</span>, <span class="ruby-constant">DurationAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
393
+ 165: [ <span class="ruby-value str">'end'</span>, <span class="ruby-value str">'End'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
394
+ 166: [ <span class="ruby-value str">'endpreds'</span>, <span class="ruby-value str">'End Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
395
+ 167: [ <span class="ruby-value str">'endsuccs'</span>, <span class="ruby-value str">'End Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
396
+ 168: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
397
+ 169: [ <span class="ruby-value str">'forward'</span>, <span class="ruby-value str">'Scheduling'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span> ],
398
+ 170: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
399
+ 171: [ <span class="ruby-value str">'length'</span>, <span class="ruby-value str">'Length'</span>, <span class="ruby-constant">DurationAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
400
+ 172: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
401
+ 173: [ <span class="ruby-value str">'maxend'</span>, <span class="ruby-value str">'Max. End'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
402
+ 174: [ <span class="ruby-value str">'maxstart'</span>, <span class="ruby-value str">'Max. Start'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
403
+ 175: [ <span class="ruby-value str">'milestone'</span>, <span class="ruby-value str">'Milestone'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
404
+ 176: [ <span class="ruby-value str">'minend'</span>, <span class="ruby-value str">'Min. End'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
405
+ 177: [ <span class="ruby-value str">'minstart'</span>, <span class="ruby-value str">'Min. Start'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
406
+ 178: [ <span class="ruby-value str">'note'</span>, <span class="ruby-value str">'Note'</span>, <span class="ruby-constant">RichTextAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
407
+ 179: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-value str">'Path Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
408
+ 180: [ <span class="ruby-value str">'precedes'</span>, <span class="ruby-value str">'-'</span>, <span class="ruby-constant">DependencyListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
409
+ 181: [ <span class="ruby-value str">'priority'</span>, <span class="ruby-value str">'Priority'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">500</span> ],
410
+ 182: [ <span class="ruby-value str">'projectid'</span>, <span class="ruby-value str">'Project ID'</span>, <span class="ruby-constant">SymbolAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
411
+ 183: [ <span class="ruby-value str">'responsible'</span>, <span class="ruby-value str">'Responsible'</span>, <span class="ruby-constant">ResourceListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
412
+ 184: [ <span class="ruby-value str">'scheduled'</span>, <span class="ruby-value str">'Scheduled'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
413
+ 185: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>,
414
+ 186: <span class="ruby-keyword kw">nil</span> ],
415
+ 187: [ <span class="ruby-value str">'start'</span>, <span class="ruby-value str">'Start'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
416
+ 188: [ <span class="ruby-value str">'startpreds'</span>, <span class="ruby-value str">'Start Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
417
+ 189: [ <span class="ruby-value str">'startsuccs'</span>, <span class="ruby-value str">'Start Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
418
+ 190: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
419
+ 191: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ]
420
+ 192: ]
421
+ 193: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
422
+ 194:
423
+ 195: <span class="ruby-constant">Scenario</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-value str">'plan'</span>, <span class="ruby-value str">'Plan Scenario'</span>, <span class="ruby-keyword kw">nil</span>)
424
+ 196:
425
+ 197: <span class="ruby-ivar">@reports</span> = { }
426
+ 198: <span class="ruby-keyword kw">end</span>
427
+ </pre>
428
+ </div>
429
+
430
+ </div>
431
+ </div>
432
+
433
+
434
+ <h3 class="section-bar">Public Instance methods</h3>
435
+
436
+
437
+ <div id="method-M000633" class="method-detail">
438
+ <a name="M000633"></a>
439
+
440
+ <div class="method-heading">
441
+
442
+ <a href="#M000633" class="method-signature">
443
+
444
+ <span class="method-name">[]</span><span class="method-args">(name)</span>
445
+
446
+ </a>
447
+
448
+ </div>
449
+
450
+ <div class="method-description">
451
+
452
+ <p>
453
+ <a href="Query.html">Query</a> the value of a <a
454
+ href="Project.html">Project</a> attribute. <em>name</em> is the ID of the
455
+ attribute.
456
+ </p>
457
+
458
+ <p><a class="source-toggle" href="#"
459
+ onclick="toggleCode('M000633-source');return false;">[Source]</a></p>
460
+ <div class="method-source-code" id="M000633-source">
461
+ <pre>
462
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 207</span>
463
+ 207: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">name</span>)
464
+ 208: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)
465
+ 209: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
466
+ 210: <span class="ruby-keyword kw">end</span>
467
+ 211: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>]
468
+ 212: <span class="ruby-keyword kw">end</span>
469
+ </pre>
470
+ </div>
471
+
472
+ </div>
473
+ </div>
474
+
475
+
476
+ <div id="method-M000634" class="method-detail">
477
+ <a name="M000634"></a>
478
+
479
+ <div class="method-heading">
480
+
481
+ <a href="#M000634" class="method-signature">
482
+
483
+ <span class="method-name">[]=</span><span class="method-args">(name, value)</span>
484
+
485
+ </a>
486
+
487
+ </div>
488
+
489
+ <div class="method-description">
490
+
491
+ <p>
492
+ Set the <a href="Project.html">Project</a> attribute with ID <em>name</em>
493
+ to <em>value</em>.
494
+ </p>
495
+
496
+ <p><a class="source-toggle" href="#"
497
+ onclick="toggleCode('M000634-source');return false;">[Source]</a></p>
498
+ <div class="method-source-code" id="M000634-source">
499
+ <pre>
500
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 215</span>
501
+ 215: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>)
502
+ 216: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)
503
+ 217: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
504
+ 218: <span class="ruby-keyword kw">end</span>
505
+ 219: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">value</span>
506
+ 220: <span class="ruby-keyword kw">end</span>
507
+ </pre>
508
+ </div>
509
+
510
+ </div>
511
+ </div>
512
+
513
+
514
+ <div id="method-M000643" class="method-detail">
515
+ <a name="M000643"></a>
516
+
517
+ <div class="method-heading">
518
+
519
+ <a href="#M000643" class="method-signature">
520
+
521
+ <span class="method-name">account</span><span class="method-args">(id)</span>
522
+
523
+ </a>
524
+
525
+ </div>
526
+
527
+ <div class="method-description">
528
+
529
+ <p>
530
+ Return the <a href="Account.html">Account</a> with the ID <em>id</em> or
531
+ return nil if it does not exist.
532
+ </p>
533
+
534
+ <p><a class="source-toggle" href="#"
535
+ onclick="toggleCode('M000643-source');return false;">[Source]</a></p>
536
+ <div class="method-source-code" id="M000643-source">
537
+ <pre>
538
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 291</span>
539
+ 291: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">account</span>(<span class="ruby-identifier">id</span>)
540
+ 292: <span class="ruby-ivar">@accounts</span>[<span class="ruby-identifier">id</span>]
541
+ 293: <span class="ruby-keyword kw">end</span>
542
+ </pre>
543
+ </div>
544
+
545
+ </div>
546
+ </div>
547
+
548
+
549
+ <div id="method-M000649" class="method-detail">
550
+ <a name="M000649"></a>
551
+
552
+ <div class="method-heading">
553
+
554
+ <a href="#M000649" class="method-signature">
555
+
556
+ <span class="method-name">convertToDailyLoad</span><span class="method-args">(seconds)</span>
557
+
558
+ </a>
559
+
560
+ </div>
561
+
562
+ <div class="method-description">
563
+
564
+ <p>
565
+ Convert working <em>seconds</em> to working days. The result depends on the
566
+ setting of the global &#8216;dailyworkinghours&#8217; attribute.
567
+ </p>
568
+
569
+ <p><a class="source-toggle" href="#"
570
+ onclick="toggleCode('M000649-source');return false;">[Source]</a></p>
571
+ <div class="method-source-code" id="M000649-source">
572
+ <pre>
573
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 444</span>
574
+ 444: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convertToDailyLoad</span>(<span class="ruby-identifier">seconds</span>)
575
+ 445: <span class="ruby-identifier">seconds</span> <span class="ruby-operator">/</span> (<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'dailyworkinghours'</span>] <span class="ruby-operator">*</span> <span class="ruby-value">3600.0</span>)
576
+ 446: <span class="ruby-keyword kw">end</span>
577
+ </pre>
578
+ </div>
579
+
580
+ </div>
581
+ </div>
582
+
583
+
584
+ <div id="method-M000636" class="method-detail">
585
+ <a name="M000636"></a>
586
+
587
+ <div class="method-heading">
588
+
589
+ <a href="#M000636" class="method-signature">
590
+
591
+ <span class="method-name">dailyWorkingHours</span><span class="method-args">()</span>
592
+
593
+ </a>
594
+
595
+ </div>
596
+
597
+ <div class="method-description">
598
+
599
+ <p>
600
+ Return the average number of working hours per day. This defaults to 8 but
601
+ can be set to other values by the user.
602
+ </p>
603
+
604
+ <p><a class="source-toggle" href="#"
605
+ onclick="toggleCode('M000636-source');return false;">[Source]</a></p>
606
+ <div class="method-source-code" id="M000636-source">
607
+ <pre>
608
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 229</span>
609
+ 229: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dailyWorkingHours</span>
610
+ 230: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'dailyworkinghours'</span>].<span class="ruby-identifier">to_f</span>
611
+ 231: <span class="ruby-keyword kw">end</span>
612
+ </pre>
613
+ </div>
614
+
615
+ </div>
616
+ </div>
617
+
618
+
619
+ <div id="method-M000652" class="method-detail">
620
+ <a name="M000652"></a>
621
+
622
+ <div class="method-heading">
623
+
624
+ <a href="#M000652" class="method-signature">
625
+
626
+ <span class="method-name">dateToIdx</span><span class="method-args">(date, forceIntoProject = false)</span>
627
+
628
+ </a>
629
+
630
+ </div>
631
+
632
+ <div class="method-description">
633
+
634
+ <p>
635
+ Convert a <em>date</em> (<a href="TjTime.html">TjTime</a>) to the
636
+ equivalent <a href="Scoreboard.html">Scoreboard</a> index. If
637
+ <em>forceIntoProject</em> is true, the date will be pushed into the project
638
+ time frame.
639
+ </p>
640
+
641
+ <p><a class="source-toggle" href="#"
642
+ onclick="toggleCode('M000652-source');return false;">[Source]</a></p>
643
+ <div class="method-source-code" id="M000652-source">
644
+ <pre>
645
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 470</span>
646
+ 470: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">forceIntoProject</span> = <span class="ruby-keyword kw">false</span>)
647
+ 471: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>])
648
+ 472: <span class="ruby-comment cmt"># Date is out of range.</span>
649
+ 473: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">forceIntoProject</span>
650
+ 474: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]
651
+ 475: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">scoreboardSize</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>]
652
+ 476: <span class="ruby-keyword kw">else</span>
653
+ 477: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Date #{date} is out of project time range &quot;</span> <span class="ruby-operator">+</span>
654
+ 478: <span class="ruby-node">&quot;(#{@attributes['start']} - #{@attributes['end']})&quot;</span>
655
+ 479: <span class="ruby-keyword kw">end</span>
656
+ 480: <span class="ruby-keyword kw">end</span>
657
+ 481: <span class="ruby-comment cmt"># Calculate the corresponding index.</span>
658
+ 482: ((<span class="ruby-identifier">date</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]) <span class="ruby-operator">/</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
659
+ 483: <span class="ruby-keyword kw">end</span>
660
+ </pre>
661
+ </div>
662
+
663
+ </div>
664
+ </div>
665
+
666
+
667
+ <div id="method-M000647" class="method-detail">
668
+ <a name="M000647"></a>
669
+
670
+ <div class="method-heading">
671
+
672
+ <a href="#M000647" class="method-signature">
673
+
674
+ <span class="method-name">generateReports</span><span class="method-args">(maxCpuCores)</span>
675
+
676
+ </a>
677
+
678
+ </div>
679
+
680
+ <div class="method-description">
681
+
682
+ <p>
683
+ Call this function to generate the reports based on the scheduling result.
684
+ This function may only be called after <a
685
+ href="Project.html#M000646">Project#schedule</a> has been called.
686
+ </p>
687
+
688
+ <p><a class="source-toggle" href="#"
689
+ onclick="toggleCode('M000647-source');return false;">[Source]</a></p>
690
+ <div class="method-source-code" id="M000647-source">
691
+ <pre>
692
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 353</span>
693
+ 353: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateReports</span>(<span class="ruby-identifier">maxCpuCores</span>)
694
+ 354: <span class="ruby-keyword kw">begin</span>
695
+ 355: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">maxCpuCores</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
696
+ 356: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
697
+ 357: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.name}&quot;</span>)
698
+ 358: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>
699
+ 359: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
700
+ 360: <span class="ruby-keyword kw">end</span>
701
+ 361: <span class="ruby-keyword kw">else</span>
702
+ 362: <span class="ruby-identifier">bp</span> = <span class="ruby-constant">BatchProcessor</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">maxCpuCores</span>)
703
+ 363: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">each_value</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span> <span class="ruby-identifier">bp</span>.<span class="ruby-identifier">queue</span>(<span class="ruby-identifier">report</span>) { <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span> } }
704
+ 364: <span class="ruby-identifier">bp</span>.<span class="ruby-identifier">wait</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
705
+ 365: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stdout</span>)
706
+ 366: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stderr</span>)
707
+ 367: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.tag.name}&quot;</span>)
708
+ 368: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
709
+ 369: <span class="ruby-keyword kw">end</span>
710
+ 370: <span class="ruby-keyword kw">end</span>
711
+ 371: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
712
+ 372: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Report Generation Error: #{$!}&quot;</span>
713
+ 373: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
714
+ 374: <span class="ruby-keyword kw">end</span>
715
+ 375:
716
+ 376: <span class="ruby-keyword kw">true</span>
717
+ 377: <span class="ruby-keyword kw">end</span>
718
+ </pre>
719
+ </div>
720
+
721
+ </div>
722
+ </div>
723
+
724
+
725
+ <div id="method-M000651" class="method-detail">
726
+ <a name="M000651"></a>
727
+
728
+ <div class="method-heading">
729
+
730
+ <a href="#M000651" class="method-signature">
731
+
732
+ <span class="method-name">idxToDate</span><span class="method-args">(idx)</span>
733
+
734
+ </a>
735
+
736
+ </div>
737
+
738
+ <div class="method-description">
739
+
740
+ <p>
741
+ Convert a <a href="Scoreboard.html">Scoreboard</a> index to the equivalent
742
+ date. <em>idx</em> is the index and it must be within the range of the <a
743
+ href="Scoreboard.html">Scoreboard</a> objects. If not, an exception is
744
+ raised.
745
+ </p>
746
+
747
+ <p><a class="source-toggle" href="#"
748
+ onclick="toggleCode('M000651-source');return false;">[Source]</a></p>
749
+ <div class="method-source-code" id="M000651-source">
750
+ <pre>
751
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 460</span>
752
+ 460: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
753
+ 461: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">idx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">idx</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">scoreboardSize</span>)
754
+ 462: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Scoreboard index out of range&quot;</span>
755
+ 463: <span class="ruby-keyword kw">end</span>
756
+ 464: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">idx</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
757
+ 465: <span class="ruby-keyword kw">end</span>
758
+ </pre>
759
+ </div>
760
+
761
+ </div>
762
+ </div>
763
+
764
+
765
+ <div id="method-M000648" class="method-detail">
766
+ <a name="M000648"></a>
767
+
768
+ <div class="method-heading">
769
+
770
+ <a href="#M000648" class="method-signature">
771
+
772
+ <span class="method-name">isWorkingTime(slot) &rarr; true or false<br />
773
+ isWorkingTime(startTime, endTime) &rarr; true or false<br />
774
+ isWorkingTime(interval) &rarr; true or false<br />
775
+ </span>
776
+
777
+ </a>
778
+
779
+ </div>
780
+
781
+ <div class="method-description">
782
+
783
+ <p>
784
+ Return true if the <em>slot</em> (<a href="TjTime.html">TjTime</a>) is
785
+ withing globally defined working time or false if not. If the argument is
786
+ an <a href="Interval.html">Interval</a>, all slots of the interval must be
787
+ working time to return true as result. Global work time means, no vacation
788
+ defined and the slot lies within a defined working time period.
789
+ </p>
790
+
791
+ <p><a class="source-toggle" href="#"
792
+ onclick="toggleCode('M000648-source');return false;">[Source]</a></p>
793
+ <div class="method-source-code" id="M000648-source">
794
+ <pre>
795
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 419</span>
796
+ 419: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
797
+ 420: <span class="ruby-comment cmt"># Normalize argument(s) to Interval</span>
798
+ 421: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
799
+ 422: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Interval</span>)
800
+ 423: <span class="ruby-identifier">iv</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]
801
+ 424: <span class="ruby-keyword kw">else</span>
802
+ 425: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">+</span>
803
+ 426: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
804
+ 427: <span class="ruby-keyword kw">end</span>
805
+ 428: <span class="ruby-keyword kw">else</span>
806
+ 429: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>])
807
+ 430: <span class="ruby-keyword kw">end</span>
808
+ 431:
809
+ 432: <span class="ruby-comment cmt"># Check if the interval has overlap with any of the global vacations.</span>
810
+ 433: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'vacations'</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vacation</span><span class="ruby-operator">|</span>
811
+ 434: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">iv</span>)
812
+ 435: <span class="ruby-keyword kw">end</span>
813
+ 436:
814
+ 437: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'workinghours'</span>].<span class="ruby-identifier">timeOff?</span>(<span class="ruby-identifier">iv</span>)
815
+ 438:
816
+ 439: <span class="ruby-keyword kw">true</span>
817
+ 440: <span class="ruby-keyword kw">end</span>
818
+ </pre>
819
+ </div>
820
+
821
+ </div>
822
+ </div>
823
+
824
+
825
+ <div id="method-M000638" class="method-detail">
826
+ <a name="M000638"></a>
827
+
828
+ <div class="method-heading">
829
+
830
+ <a href="#M000638" class="method-signature">
831
+
832
+ <span class="method-name">monthlyWorkingDays</span><span class="method-args">()</span>
833
+
834
+ </a>
835
+
836
+ </div>
837
+
838
+ <div class="method-description">
839
+
840
+ <p>
841
+ Return the average number of working days per month.
842
+ </p>
843
+
844
+ <p><a class="source-toggle" href="#"
845
+ onclick="toggleCode('M000638-source');return false;">[Source]</a></p>
846
+ <div class="method-source-code" id="M000638-source">
847
+ <pre>
848
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 239</span>
849
+ 239: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">monthlyWorkingDays</span>
850
+ 240: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>] <span class="ruby-operator">/</span> <span class="ruby-value">12.0</span>
851
+ 241: <span class="ruby-keyword kw">end</span>
852
+ </pre>
853
+ </div>
854
+
855
+ </div>
856
+ </div>
857
+
858
+
859
+ <div id="method-M000645" class="method-detail">
860
+ <a name="M000645"></a>
861
+
862
+ <div class="method-heading">
863
+
864
+ <a href="#M000645" class="method-signature">
865
+
866
+ <span class="method-name">resource</span><span class="method-args">(id)</span>
867
+
868
+ </a>
869
+
870
+ </div>
871
+
872
+ <div class="method-description">
873
+
874
+ <p>
875
+ Return the <a href="Resource.html">Resource</a> with the ID <em>id</em> or
876
+ return nil if it does not exist.
877
+ </p>
878
+
879
+ <p><a class="source-toggle" href="#"
880
+ onclick="toggleCode('M000645-source');return false;">[Source]</a></p>
881
+ <div class="method-source-code" id="M000645-source">
882
+ <pre>
883
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 301</span>
884
+ 301: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resource</span>(<span class="ruby-identifier">id</span>)
885
+ 302: <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">id</span>]
886
+ 303: <span class="ruby-keyword kw">end</span>
887
+ </pre>
888
+ </div>
889
+
890
+ </div>
891
+ </div>
892
+
893
+
894
+ <div id="method-M000640" class="method-detail">
895
+ <a name="M000640"></a>
896
+
897
+ <div class="method-heading">
898
+
899
+ <a href="#M000640" class="method-signature">
900
+
901
+ <span class="method-name">scenario(index) &rarr; Scenario<br />
902
+ scenario(id) &rarr; Scenario<br />
903
+ </span>
904
+
905
+ </a>
906
+
907
+ </div>
908
+
909
+ <div class="method-description">
910
+
911
+ <p>
912
+ Return the <a href="Scenario.html">Scenario</a> with the given <em>id</em>
913
+ or <em>index</em>.
914
+ </p>
915
+
916
+ <p><a class="source-toggle" href="#"
917
+ onclick="toggleCode('M000640-source');return false;">[Source]</a></p>
918
+ <div class="method-source-code" id="M000640-source">
919
+ <pre>
920
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 253</span>
921
+ 253: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">arg</span>)
922
+ 254: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>)
923
+ 255: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">arg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">arg</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">items</span>)
924
+ 256: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Scenario index out of range: #{arg}&quot;</span>
925
+ 257: <span class="ruby-keyword kw">end</span>
926
+ 258: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sc</span><span class="ruby-operator">|</span>
927
+ 259: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">sc</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">arg</span>
928
+ 260: <span class="ruby-keyword kw">end</span>
929
+ 261: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;No scenario with index #{arg}&quot;</span>
930
+ 262: <span class="ruby-keyword kw">else</span>
931
+ 263: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">arg</span>].<span class="ruby-identifier">nil?</span>
932
+ 264: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;No scenario with id '#{arg}'&quot;</span>
933
+ 265: <span class="ruby-keyword kw">end</span>
934
+ 266: <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">arg</span>]
935
+ 267: <span class="ruby-keyword kw">end</span>
936
+ 268: <span class="ruby-keyword kw">end</span>
937
+ </pre>
938
+ </div>
939
+
940
+ </div>
941
+ </div>
942
+
943
+
944
+ <div id="method-M000635" class="method-detail">
945
+ <a name="M000635"></a>
946
+
947
+ <div class="method-heading">
948
+
949
+ <a href="#M000635" class="method-signature">
950
+
951
+ <span class="method-name">scenarioCount</span><span class="method-args">()</span>
952
+
953
+ </a>
954
+
955
+ </div>
956
+
957
+ <div class="method-description">
958
+
959
+ <p>
960
+ Return the number of defined scenarios for the project.
961
+ </p>
962
+
963
+ <p><a class="source-toggle" href="#"
964
+ onclick="toggleCode('M000635-source');return false;">[Source]</a></p>
965
+ <div class="method-source-code" id="M000635-source">
966
+ <pre>
967
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 223</span>
968
+ 223: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioCount</span>
969
+ 224: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">items</span>
970
+ 225: <span class="ruby-keyword kw">end</span>
971
+ </pre>
972
+ </div>
973
+
974
+ </div>
975
+ </div>
976
+
977
+
978
+ <div id="method-M000641" class="method-detail">
979
+ <a name="M000641"></a>
980
+
981
+ <div class="method-heading">
982
+
983
+ <a href="#M000641" class="method-signature">
984
+
985
+ <span class="method-name">scenarioIdx(scenario)<br />
986
+ scenarioIdx(id)<br />
987
+ </span>
988
+
989
+ </a>
990
+
991
+ </div>
992
+
993
+ <div class="method-description">
994
+
995
+ <p>
996
+ Return the index of the given <a href="Scenario.html">Scenario</a>
997
+ specified by <em>scenario</em> or <em>id</em>.
998
+ </p>
999
+
1000
+ <p><a class="source-toggle" href="#"
1001
+ onclick="toggleCode('M000641-source');return false;">[Source]</a></p>
1002
+ <div class="method-source-code" id="M000641-source">
1003
+ <pre>
1004
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 275</span>
1005
+ 275: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
1006
+ 276: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Scenario</span>)
1007
+ 277: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1008
+ 278: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">sc</span>].<span class="ruby-identifier">nil?</span>
1009
+ 279: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1010
+ 280: <span class="ruby-keyword kw">else</span>
1011
+ 281: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">sc</span>].<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1012
+ 282: <span class="ruby-keyword kw">end</span>
1013
+ 283: <span class="ruby-keyword kw">end</span>
1014
+ </pre>
1015
+ </div>
1016
+
1017
+ </div>
1018
+ </div>
1019
+
1020
+
1021
+ <div id="method-M000646" class="method-detail">
1022
+ <a name="M000646"></a>
1023
+
1024
+ <div class="method-heading">
1025
+
1026
+ <a href="#M000646" class="method-signature">
1027
+
1028
+ <span class="method-name">schedule</span><span class="method-args">()</span>
1029
+
1030
+ </a>
1031
+
1032
+ </div>
1033
+
1034
+ <div class="method-description">
1035
+
1036
+ <p>
1037
+ This function must be called after the <a href="Project.html">Project</a>
1038
+ data structures have been filled with data. It schedules all scenario and
1039
+ stores the result in the data structures again.
1040
+ </p>
1041
+
1042
+ <p><a class="source-toggle" href="#"
1043
+ onclick="toggleCode('M000646-source');return false;">[Source]</a></p>
1044
+ <div class="method-source-code" id="M000646-source">
1045
+ <pre>
1046
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 308</span>
1047
+ 308: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">schedule</span>
1048
+ 309: [ <span class="ruby-ivar">@shifts</span>, <span class="ruby-ivar">@resources</span>, <span class="ruby-ivar">@tasks</span> ].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1049
+ 310: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">inheritAttributesFromScenario</span>
1050
+ 311: <span class="ruby-comment cmt"># Set all index counters to their proper values.</span>
1051
+ 312: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">index</span>
1052
+ 313: <span class="ruby-keyword kw">end</span>
1053
+ 314:
1054
+ 315: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">empty?</span>
1055
+ 316: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'no_tasks'</span>, <span class="ruby-value str">'error'</span>, <span class="ruby-value str">&quot;No tasks defined&quot;</span>)
1056
+ 317: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1057
+ 318: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1058
+ 319: <span class="ruby-keyword kw">end</span>
1059
+ 320:
1060
+ 321: <span class="ruby-keyword kw">begin</span>
1061
+ 322: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sc</span><span class="ruby-operator">|</span>
1062
+ 323: <span class="ruby-comment cmt"># Skip disabled scenarios</span>
1063
+ 324: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'enabled'</span>)
1064
+ 325:
1065
+ 326: <span class="ruby-identifier">scIdx</span> = <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
1066
+ 327:
1067
+ 328: <span class="ruby-comment cmt"># All user provided values are set now. The next step is to</span>
1068
+ 329: <span class="ruby-comment cmt"># propagate inherited values. These values must be marked as</span>
1069
+ 330: <span class="ruby-comment cmt"># inherited by setting the mode to 1. As we always call</span>
1070
+ 331: <span class="ruby-comment cmt"># PropertyTreeNode#inherit this is just a safeguard.</span>
1071
+ 332: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">1</span>)
1072
+ 333: <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
1073
+ 334:
1074
+ 335: <span class="ruby-comment cmt"># Now change to mode 2 so all values that are modified are marked</span>
1075
+ 336: <span class="ruby-comment cmt"># as computed.</span>
1076
+ 337: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">2</span>)
1077
+ 338: <span class="ruby-comment cmt"># Schedule the scenario.</span>
1078
+ 339: <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
1079
+ 340:
1080
+ 341: <span class="ruby-comment cmt"># Complete the data sets, and check the result.</span>
1081
+ 342: <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
1082
+ 343: <span class="ruby-keyword kw">end</span>
1083
+ 344: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
1084
+ 345: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1085
+ 346: <span class="ruby-keyword kw">end</span>
1086
+ 347:
1087
+ 348: <span class="ruby-keyword kw">true</span>
1088
+ 349: <span class="ruby-keyword kw">end</span>
1089
+ </pre>
1090
+ </div>
1091
+
1092
+ </div>
1093
+ </div>
1094
+
1095
+
1096
+ <div id="method-M000650" class="method-detail">
1097
+ <a name="M000650"></a>
1098
+
1099
+ <div class="method-heading">
1100
+
1101
+ <a href="#M000650" class="method-signature">
1102
+
1103
+ <span class="method-name">scoreboardSize</span><span class="method-args">()</span>
1104
+
1105
+ </a>
1106
+
1107
+ </div>
1108
+
1109
+ <div class="method-description">
1110
+
1111
+ <p>
1112
+ Many internal data structures use <a href="Scoreboard.html">Scoreboard</a>
1113
+ objects to keep track of scheduling data. These have one entry for every
1114
+ schedulable time slot in the project time frame. This functions returns the
1115
+ number of entries in the scoreboards.
1116
+ </p>
1117
+
1118
+ <p><a class="source-toggle" href="#"
1119
+ onclick="toggleCode('M000650-source');return false;">[Source]</a></p>
1120
+ <div class="method-source-code" id="M000650-source">
1121
+ <pre>
1122
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 452</span>
1123
+ 452: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scoreboardSize</span>
1124
+ 453: ((<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>] <span class="ruby-operator">-</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]) <span class="ruby-operator">/</span>
1125
+ 454: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
1126
+ 455: <span class="ruby-keyword kw">end</span>
1127
+ </pre>
1128
+ </div>
1129
+
1130
+ </div>
1131
+ </div>
1132
+
1133
+
1134
+ <div id="method-M000632" class="method-detail">
1135
+ <a name="M000632"></a>
1136
+
1137
+ <div class="method-heading">
1138
+
1139
+ <a href="#M000632" class="method-signature">
1140
+
1141
+ <span class="method-name">sendMessage</span><span class="method-args">(message)</span>
1142
+
1143
+ </a>
1144
+
1145
+ </div>
1146
+
1147
+ <div class="method-description">
1148
+
1149
+ <p>
1150
+ Pass a message (error or warning) to the message handler. <em>message</em>
1151
+ is a <a href="../String.html">String</a> that contains the message.
1152
+ </p>
1153
+
1154
+ <p><a class="source-toggle" href="#"
1155
+ onclick="toggleCode('M000632-source');return false;">[Source]</a></p>
1156
+ <div class="method-source-code" id="M000632-source">
1157
+ <pre>
1158
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 202</span>
1159
+ 202: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1160
+ 203: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
1161
+ 204: <span class="ruby-keyword kw">end</span>
1162
+ </pre>
1163
+ </div>
1164
+
1165
+ </div>
1166
+ </div>
1167
+
1168
+
1169
+ <div id="method-M000642" class="method-detail">
1170
+ <a name="M000642"></a>
1171
+
1172
+ <div class="method-heading">
1173
+
1174
+ <a href="#M000642" class="method-signature">
1175
+
1176
+ <span class="method-name">shift</span><span class="method-args">(id)</span>
1177
+
1178
+ </a>
1179
+
1180
+ </div>
1181
+
1182
+ <div class="method-description">
1183
+
1184
+ <p>
1185
+ Return the <a href="Shift.html">Shift</a> with the ID <em>id</em> or return
1186
+ nil if it does not exist.
1187
+ </p>
1188
+
1189
+ <p><a class="source-toggle" href="#"
1190
+ onclick="toggleCode('M000642-source');return false;">[Source]</a></p>
1191
+ <div class="method-source-code" id="M000642-source">
1192
+ <pre>
1193
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 286</span>
1194
+ 286: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">shift</span>(<span class="ruby-identifier">id</span>)
1195
+ 287: <span class="ruby-ivar">@shifts</span>[<span class="ruby-identifier">id</span>]
1196
+ 288: <span class="ruby-keyword kw">end</span>
1197
+ </pre>
1198
+ </div>
1199
+
1200
+ </div>
1201
+ </div>
1202
+
1203
+
1204
+ <div id="method-M000644" class="method-detail">
1205
+ <a name="M000644"></a>
1206
+
1207
+ <div class="method-heading">
1208
+
1209
+ <a href="#M000644" class="method-signature">
1210
+
1211
+ <span class="method-name">task</span><span class="method-args">(id)</span>
1212
+
1213
+ </a>
1214
+
1215
+ </div>
1216
+
1217
+ <div class="method-description">
1218
+
1219
+ <p>
1220
+ Return the <a href="Task.html">Task</a> with the ID <em>id</em> or return
1221
+ nil if it does not exist.
1222
+ </p>
1223
+
1224
+ <p><a class="source-toggle" href="#"
1225
+ onclick="toggleCode('M000644-source');return false;">[Source]</a></p>
1226
+ <div class="method-source-code" id="M000644-source">
1227
+ <pre>
1228
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 296</span>
1229
+ 296: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">task</span>(<span class="ruby-identifier">id</span>)
1230
+ 297: <span class="ruby-ivar">@tasks</span>[<span class="ruby-identifier">id</span>]
1231
+ 298: <span class="ruby-keyword kw">end</span>
1232
+ </pre>
1233
+ </div>
1234
+
1235
+ </div>
1236
+ </div>
1237
+
1238
+
1239
+ <div id="method-M000653" class="method-detail">
1240
+ <a name="M000653"></a>
1241
+
1242
+ <div class="method-heading">
1243
+
1244
+ <a href="#M000653" class="method-signature">
1245
+
1246
+ <span class="method-name">to_s</span><span class="method-args">()</span>
1247
+
1248
+ </a>
1249
+
1250
+ </div>
1251
+
1252
+ <div class="method-description">
1253
+
1254
+ <p>
1255
+ Print the attribute values. It&#8217;s used for debugging only.
1256
+ </p>
1257
+
1258
+ <p><a class="source-toggle" href="#"
1259
+ onclick="toggleCode('M000653-source');return false;">[Source]</a></p>
1260
+ <div class="method-source-code" id="M000653-source">
1261
+ <pre>
1262
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 486</span>
1263
+ 486: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1264
+ 487: <span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attribute</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
1265
+ 488: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span>
1266
+ 489: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{attribute}: &quot;</span> <span class="ruby-operator">+</span>
1267
+ 490: <span class="ruby-node">&quot;#{value.is_a?(PropertyTreeNode) ? value.fullId : value}&quot;</span>
1268
+ 491: <span class="ruby-keyword kw">end</span>
1269
+ 492: <span class="ruby-keyword kw">end</span>
1270
+ 493: <span class="ruby-keyword kw">end</span>
1271
+ </pre>
1272
+ </div>
1273
+
1274
+ </div>
1275
+ </div>
1276
+
1277
+
1278
+ <div id="method-M000637" class="method-detail">
1279
+ <a name="M000637"></a>
1280
+
1281
+ <div class="method-heading">
1282
+
1283
+ <a href="#M000637" class="method-signature">
1284
+
1285
+ <span class="method-name">weeklyWorkingDays</span><span class="method-args">()</span>
1286
+
1287
+ </a>
1288
+
1289
+ </div>
1290
+
1291
+ <div class="method-description">
1292
+
1293
+ <p>
1294
+ Return the average number of working days per week.
1295
+ </p>
1296
+
1297
+ <p><a class="source-toggle" href="#"
1298
+ onclick="toggleCode('M000637-source');return false;">[Source]</a></p>
1299
+ <div class="method-source-code" id="M000637-source">
1300
+ <pre>
1301
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 234</span>
1302
+ 234: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">weeklyWorkingDays</span>
1303
+ 235: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>] <span class="ruby-operator">/</span> <span class="ruby-value">52.1429</span>
1304
+ 236: <span class="ruby-keyword kw">end</span>
1305
+ </pre>
1306
+ </div>
1307
+
1308
+ </div>
1309
+ </div>
1310
+
1311
+
1312
+ <div id="method-M000639" class="method-detail">
1313
+ <a name="M000639"></a>
1314
+
1315
+ <div class="method-heading">
1316
+
1317
+ <a href="#M000639" class="method-signature">
1318
+
1319
+ <span class="method-name">yearlyWorkingDays</span><span class="method-args">()</span>
1320
+
1321
+ </a>
1322
+
1323
+ </div>
1324
+
1325
+ <div class="method-description">
1326
+
1327
+ <p>
1328
+ Return the average number of working days per year.
1329
+ </p>
1330
+
1331
+ <p><a class="source-toggle" href="#"
1332
+ onclick="toggleCode('M000639-source');return false;">[Source]</a></p>
1333
+ <div class="method-source-code" id="M000639-source">
1334
+ <pre>
1335
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 244</span>
1336
+ 244: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">yearlyWorkingDays</span>
1337
+ 245: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>].<span class="ruby-identifier">to_f</span>
1338
+ 246: <span class="ruby-keyword kw">end</span>
1339
+ </pre>
1340
+ </div>
1341
+
1342
+ </div>
1343
+ </div>
1344
+
1345
+
1346
+ <h3 class="section-bar">Protected Instance methods</h3>
1347
+
1348
+
1349
+ <div id="method-M000655" class="method-detail">
1350
+ <a name="M000655"></a>
1351
+
1352
+ <div class="method-heading">
1353
+
1354
+ <a href="#M000655" class="method-signature">
1355
+
1356
+ <span class="method-name">finishScenario</span><span class="method-args">(scIdx)</span>
1357
+
1358
+ </a>
1359
+
1360
+ </div>
1361
+
1362
+ <div class="method-description">
1363
+
1364
+ <p><a class="source-toggle" href="#"
1365
+ onclick="toggleCode('M000655-source');return false;">[Source]</a></p>
1366
+ <div class="method-source-code" id="M000655-source">
1367
+ <pre>
1368
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 558</span>
1369
+ 558: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
1370
+ 559: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Checking scenario #{scenario(scIdx).get('name')}&quot;</span>)
1371
+ 560: <span class="ruby-identifier">total</span> = <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">items</span>
1372
+ 561: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1373
+ 562: <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1374
+ 563: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-identifier">scIdx</span>)
1375
+ 564: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1376
+ 565: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>((<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.5</span>)
1377
+ 566: <span class="ruby-keyword kw">end</span>
1378
+ 567:
1379
+ 568: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1380
+ 569: <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1381
+ 570: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">postScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1382
+ 571: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1383
+ 572: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.5</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.5</span>)
1384
+ 573: <span class="ruby-keyword kw">end</span>
1385
+ 574: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1386
+ 575: <span class="ruby-keyword kw">end</span>
1387
+ </pre>
1388
+ </div>
1389
+
1390
+ </div>
1391
+ </div>
1392
+
1393
+
1394
+ <div id="method-M000654" class="method-detail">
1395
+ <a name="M000654"></a>
1396
+
1397
+ <div class="method-heading">
1398
+
1399
+ <a href="#M000654" class="method-signature">
1400
+
1401
+ <span class="method-name">prepareScenario</span><span class="method-args">(scIdx)</span>
1402
+
1403
+ </a>
1404
+
1405
+ </div>
1406
+
1407
+ <div class="method-description">
1408
+
1409
+ <p><a class="source-toggle" href="#"
1410
+ onclick="toggleCode('M000654-source');return false;">[Source]</a></p>
1411
+ <div class="method-source-code" id="M000654-source">
1412
+ <pre>
1413
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 497</span>
1414
+ 497: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
1415
+ 498: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Preparing scenario #{scenario(scIdx).get('name')}&quot;</span>)
1416
+ 499: <span class="ruby-identifier">resources</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@resources</span>)
1417
+ 500: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
1418
+ 501:
1419
+ 502: <span class="ruby-comment cmt"># Compile a list of leaf resources that are actually used in this</span>
1420
+ 503: <span class="ruby-comment cmt"># project.</span>
1421
+ 504: <span class="ruby-identifier">usedResources</span> = []
1422
+ 505: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1423
+ 506: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">candidates</span>(<span class="ruby-identifier">scIdx</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1424
+ 507: <span class="ruby-identifier">usedResources</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">resource</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">resource</span>)
1425
+ 508: <span class="ruby-keyword kw">end</span>
1426
+ 509: <span class="ruby-keyword kw">end</span>
1427
+ 510: <span class="ruby-identifier">total</span> = <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">length</span>
1428
+ 511: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1429
+ 512: <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1430
+ 513: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">prepareScheduling</span>(<span class="ruby-identifier">scIdx</span>)
1431
+ 514: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1432
+ 515: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>((<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.8</span>)
1433
+ 516: <span class="ruby-keyword kw">end</span>
1434
+ 517:
1435
+ 518: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">prepareScheduling</span>(<span class="ruby-identifier">scIdx</span>) }
1436
+ 519:
1437
+ 520: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-constant">Xref</span>(<span class="ruby-identifier">scIdx</span>) }
1438
+ 521: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">propagateInitialValues</span>(<span class="ruby-identifier">scIdx</span>) }
1439
+ 522: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">preScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>) }
1440
+ 523:
1441
+ 524: <span class="ruby-comment cmt"># Check for dependency loops in the task graph.</span>
1442
+ 525: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">resetLoopFlags</span>(<span class="ruby-identifier">scIdx</span>) }
1443
+ 526: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1444
+ 527: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">checkForLoops</span>(<span class="ruby-identifier">scIdx</span>, [], <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1445
+ 528: <span class="ruby-keyword kw">end</span>
1446
+ 529: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.85</span>)
1447
+ 530: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">resetLoopFlags</span>(<span class="ruby-identifier">scIdx</span>) }
1448
+ 531: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1449
+ 532: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">checkForLoops</span>(<span class="ruby-identifier">scIdx</span>, [], <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1450
+ 533: <span class="ruby-keyword kw">end</span>
1451
+ 534: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.87</span>)
1452
+ 535:
1453
+ 536: <span class="ruby-comment cmt"># Compute the criticalness of the tasks and their pathes.</span>
1454
+ 537: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">countResourceAllocations</span>(<span class="ruby-identifier">scIdx</span>) }
1455
+ 538: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.88</span>)
1456
+ 539: <span class="ruby-identifier">resources</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">calcCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1457
+ 540: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.9</span>)
1458
+ 541: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">calcCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1459
+ 542: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.95</span>)
1460
+ 543: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">calcPathCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1461
+ 544: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">1.0</span>)
1462
+ 545:
1463
+ 546: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1464
+ 547: <span class="ruby-comment cmt"># This is used for debugging only</span>
1465
+ 548: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">false</span>
1466
+ 549: <span class="ruby-identifier">resources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1467
+ 550: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">resource</span>
1468
+ 551: <span class="ruby-keyword kw">end</span>
1469
+ 552: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1470
+ 553: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">task</span>
1471
+ 554: <span class="ruby-keyword kw">end</span>
1472
+ 555: <span class="ruby-keyword kw">end</span>
1473
+ 556: <span class="ruby-keyword kw">end</span>
1474
+ </pre>
1475
+ </div>
1476
+
1477
+ </div>
1478
+ </div>
1479
+
1480
+
1481
+ <div id="method-M000656" class="method-detail">
1482
+ <a name="M000656"></a>
1483
+
1484
+ <div class="method-heading">
1485
+
1486
+ <a href="#M000656" class="method-signature">
1487
+
1488
+ <span class="method-name">scheduleScenario</span><span class="method-args">(scIdx)</span>
1489
+
1490
+ </a>
1491
+
1492
+ </div>
1493
+
1494
+ <div class="method-description">
1495
+
1496
+ <p>
1497
+ Schedule all tasks for the given <a href="Scenario.html">Scenario</a> with
1498
+ index <tt>scIdx</tt>.
1499
+ </p>
1500
+
1501
+ <p><a class="source-toggle" href="#"
1502
+ onclick="toggleCode('M000656-source');return false;">[Source]</a></p>
1503
+ <div class="method-source-code" id="M000656-source">
1504
+ <pre>
1505
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 578</span>
1506
+ 578: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
1507
+ 579: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
1508
+ 580: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">task</span>.<span class="ruby-identifier">leaf?</span> }
1509
+ 581:
1510
+ 582: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">enter</span>(<span class="ruby-value str">'scheduleScenario'</span>, <span class="ruby-node">&quot;#{tasks.length} leaf tasks&quot;</span>)
1511
+ 583: <span class="ruby-comment cmt"># The sorting of the work item list determines which tasks will get their</span>
1512
+ 584: <span class="ruby-comment cmt"># resources first. The first sorting criterium is the user specified task</span>
1513
+ 585: <span class="ruby-comment cmt"># priority. The second criterium is the scheduler determined priority</span>
1514
+ 586: <span class="ruby-comment cmt"># stored in the pathcriticalness attribute. That way, the user can always</span>
1515
+ 587: <span class="ruby-comment cmt"># override the scheduler determined priority. To always have a defined</span>
1516
+ 588: <span class="ruby-comment cmt"># order, the third criterium is the sequence number.</span>
1517
+ 589: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">setSorting</span>([ [ <span class="ruby-value str">'priority'</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">scIdx</span> ],
1518
+ 590: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">scIdx</span> ],
1519
+ 591: [ <span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">-1</span> ] ])
1520
+ 592: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">sort!</span>
1521
+ 593: <span class="ruby-identifier">totalTasks</span> = <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">length</span>
1522
+ 594:
1523
+ 595: <span class="ruby-comment cmt"># Enter the main scheduling loop. This loop is only terminated when all</span>
1524
+ 596: <span class="ruby-comment cmt"># tasks have been scheduled or another thread has set the breakFlag to</span>
1525
+ 597: <span class="ruby-comment cmt"># true.</span>
1526
+ 598: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-value str">&quot;Scheduling scenario &quot;</span> <span class="ruby-operator">+</span>
1527
+ 599: <span class="ruby-node">&quot;#{scenario(scIdx).get('name')}&quot;</span>)
1528
+ 600: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1529
+ 601: <span class="ruby-comment cmt"># The main scheduler loop only needs to look at the first task that is</span>
1530
+ 602: <span class="ruby-comment cmt"># ready to be scheduled.</span>
1531
+ 603: <span class="ruby-identifier">workItems</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tasks</span>)
1532
+ 604:
1533
+ 605: <span class="ruby-comment cmt"># Count the already completed tasks.</span>
1534
+ 606: <span class="ruby-identifier">completedTasks</span> = <span class="ruby-value">0</span>
1535
+ 607: <span class="ruby-identifier">workItems</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1536
+ 608: <span class="ruby-identifier">completedTasks</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-identifier">scIdx</span>]
1537
+ 609: <span class="ruby-keyword kw">end</span>
1538
+ 610:
1539
+ 611: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-identifier">completedTasks</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">totalTasks</span>)
1540
+ 612: <span class="ruby-comment cmt"># Remove all tasks that are not ready for scheduling yet.</span>
1541
+ 613: <span class="ruby-identifier">workItems</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">task</span>.<span class="ruby-identifier">readyForScheduling?</span>(<span class="ruby-identifier">scIdx</span>) }
1542
+ 614:
1543
+ 615: <span class="ruby-comment cmt"># Check if we are done.</span>
1544
+ 616: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">workItems</span>.<span class="ruby-identifier">empty?</span>
1545
+ 617:
1546
+ 618: <span class="ruby-comment cmt"># The first task in the list is the one with the highes priority and</span>
1547
+ 619: <span class="ruby-comment cmt"># the largest path criticalness that is ready to be scheduled.</span>
1548
+ 620: <span class="ruby-identifier">task</span> = <span class="ruby-identifier">workItems</span>[<span class="ruby-value">0</span>]
1549
+ 621: <span class="ruby-comment cmt"># Schedule it.</span>
1550
+ 622: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">schedule</span>(<span class="ruby-identifier">scIdx</span>)
1551
+ 623: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Task #{task.fullId}: #{task['start', scIdx]} -&gt; &quot;</span> <span class="ruby-operator">+</span>
1552
+ 624: <span class="ruby-node">&quot;#{task['end', scIdx]}&quot;</span>
1553
+ 625: <span class="ruby-keyword kw">end</span>
1554
+ 626: <span class="ruby-keyword kw">end</span>
1555
+ 627: <span class="ruby-identifier">unscheduledTasks</span> = []
1556
+ 628: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span> <span class="ruby-identifier">unscheduledTasks</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">t</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">t</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-identifier">scIdx</span>] }
1557
+ 629:
1558
+ 630: <span class="ruby-comment cmt"># Check for unscheduled tasks and report the first 10 of them as</span>
1559
+ 631: <span class="ruby-comment cmt"># warnings.</span>
1560
+ 632: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">unscheduledTasks</span>.<span class="ruby-identifier">empty?</span>
1561
+ 633: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'unscheduled_tasks'</span>, <span class="ruby-value str">'warning'</span>,
1562
+ 634: <span class="ruby-node">&quot;#{unscheduledTasks.length} tasks could not be &quot;</span> <span class="ruby-operator">+</span>
1563
+ 635: <span class="ruby-value str">&quot;scheduled&quot;</span>)
1564
+ 636: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1565
+ 637: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1566
+ 638: <span class="ruby-identifier">unscheduledTasks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span>
1567
+ 639: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(
1568
+ 640: <span class="ruby-value str">'unscheduled_task'</span>, <span class="ruby-value str">'warning'</span>,
1569
+ 641: <span class="ruby-node">&quot;Task #{t.fullId}: &quot;</span> <span class="ruby-operator">+</span>
1570
+ 642: <span class="ruby-node">&quot;#{t['start', scIdx] ? t['start', scIdx] : '&lt;?&gt;'} -&gt; &quot;</span> <span class="ruby-operator">+</span>
1571
+ 643: <span class="ruby-node">&quot;#{t['end', scIdx] ? t['end', scIdx] : '&lt;?&gt;'}&quot;</span>, <span class="ruby-identifier">t</span>,
1572
+ 644: <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">scIdx</span>))
1573
+ 645: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1574
+ 646:
1575
+ 647: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1576
+ 648: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">10</span>
1577
+ 649: <span class="ruby-keyword kw">end</span>
1578
+ 650: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1579
+ 651: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1580
+ 652: <span class="ruby-keyword kw">end</span>
1581
+ 653:
1582
+ 654: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1583
+ 655: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">exit</span>(<span class="ruby-value str">'scheduleScenario'</span>, <span class="ruby-node">&quot;Scheduling of scenario #{scIdx} finished&quot;</span>)
1584
+ 656: <span class="ruby-keyword kw">true</span>
1585
+ 657: <span class="ruby-keyword kw">end</span>
1586
+ </pre>
1587
+ </div>
1588
+
1589
+ </div>
1590
+ </div>
1591
+
1592
+
1593
+
1594
+ </div>
1595
+
1596
+
1597
+
1598
+
1599
+ </div>
1600
+
1601
+ <div id="validator-badges">
1602
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
1603
+ </div>
1604
+
1605
+ </body>
1606
+ </html>