taskjuggler 0.0.10 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (787) hide show
  1. data/CHANGELOG +115 -0
  2. data/README.rdoc +105 -0
  3. data/examples/tutorial.tjp +21 -16
  4. data/gem_spec.rb +1 -1
  5. data/lib/{Account.rb → taskjuggler/Account.rb} +2 -3
  6. data/lib/{AccountScenario.rb → taskjuggler/AccountScenario.rb} +1 -1
  7. data/lib/taskjuggler/AlgorithmDiff.rb +311 -0
  8. data/lib/{Allocation.rb → taskjuggler/Allocation.rb} +3 -3
  9. data/lib/{AppConfig.rb → taskjuggler/AppConfig.rb} +0 -1
  10. data/lib/{AttributeBase.rb → taskjuggler/AttributeBase.rb} +1 -1
  11. data/lib/{AttributeDefinition.rb → taskjuggler/AttributeDefinition.rb} +0 -0
  12. data/lib/{Attributes.rb → taskjuggler/Attributes.rb} +19 -9
  13. data/lib/{BatchProcessor.rb → taskjuggler/BatchProcessor.rb} +0 -0
  14. data/lib/{Booking.rb → taskjuggler/Booking.rb} +0 -0
  15. data/lib/{Charge.rb → taskjuggler/Charge.rb} +1 -1
  16. data/lib/{ChargeSet.rb → taskjuggler/ChargeSet.rb} +1 -1
  17. data/lib/{DataCache.rb → taskjuggler/DataCache.rb} +0 -0
  18. data/lib/{FileList.rb → taskjuggler/FileList.rb} +0 -0
  19. data/lib/{HTMLDocument.rb → taskjuggler/HTMLDocument.rb} +1 -1
  20. data/lib/{Interval.rb → taskjuggler/Interval.rb} +1 -1
  21. data/lib/{IntervalList.rb → taskjuggler/IntervalList.rb} +1 -1
  22. data/lib/{Journal.rb → taskjuggler/Journal.rb} +2 -2
  23. data/lib/{KeywordArray.rb → taskjuggler/KeywordArray.rb} +0 -0
  24. data/lib/{KeywordDocumentation.rb → taskjuggler/KeywordDocumentation.rb} +5 -5
  25. data/lib/{Limits.rb → taskjuggler/Limits.rb} +1 -1
  26. data/lib/{Log.rb → taskjuggler/Log.rb} +0 -0
  27. data/lib/{LogFile.rb → taskjuggler/LogFile.rb} +0 -0
  28. data/lib/{LogicalExpression.rb → taskjuggler/LogicalExpression.rb} +3 -3
  29. data/lib/{LogicalFunction.rb → taskjuggler/LogicalFunction.rb} +1 -1
  30. data/lib/{LogicalOperation.rb → taskjuggler/LogicalOperation.rb} +1 -1
  31. data/lib/{MessageHandler.rb → taskjuggler/MessageHandler.rb} +3 -1
  32. data/lib/{Project.rb → taskjuggler/Project.rb} +51 -48
  33. data/lib/{ProjectFileParser.rb → taskjuggler/ProjectFileParser.rb} +25 -9
  34. data/lib/{ProjectFileScanner.rb → taskjuggler/ProjectFileScanner.rb} +5 -5
  35. data/lib/{PropertyList.rb → taskjuggler/PropertyList.rb} +0 -0
  36. data/lib/{PropertySet.rb → taskjuggler/PropertySet.rb} +3 -4
  37. data/lib/{PropertyTreeNode.rb → taskjuggler/PropertyTreeNode.rb} +157 -11
  38. data/lib/{Query.rb → taskjuggler/Query.rb} +17 -7
  39. data/lib/{RealFormat.rb → taskjuggler/RealFormat.rb} +0 -0
  40. data/lib/{Resource.rb → taskjuggler/Resource.rb} +8 -6
  41. data/lib/{ResourceScenario.rb → taskjuggler/ResourceScenario.rb} +26 -65
  42. data/lib/{RichText.rb → taskjuggler/RichText.rb} +3 -3
  43. data/lib/{RichTextDocument.rb → taskjuggler/RichText/Document.rb} +3 -3
  44. data/lib/{RichTextElement.rb → taskjuggler/RichText/Element.rb} +10 -4
  45. data/lib/{RichTextFunctionExample.rb → taskjuggler/RichText/FunctionExample.rb} +3 -3
  46. data/lib/{RichTextFunctionHandler.rb → taskjuggler/RichText/FunctionHandler.rb} +0 -0
  47. data/lib/{RichTextParser.rb → taskjuggler/RichText/Parser.rb} +6 -4
  48. data/lib/{RTFHandlers.rb → taskjuggler/RichText/RTFHandlers.rb} +4 -4
  49. data/lib/{RTFNavigator.rb → taskjuggler/RichText/RTFNavigator.rb} +3 -3
  50. data/lib/{RTFQuery.rb → taskjuggler/RichText/RTFQuery.rb} +62 -39
  51. data/lib/{RTFReport.rb → taskjuggler/RichText/RTFReport.rb} +2 -2
  52. data/lib/{RTFReportLink.rb → taskjuggler/RichText/RTFReportLink.rb} +4 -4
  53. data/lib/{RTFWithQuerySupport.rb → taskjuggler/RichText/RTFWithQuerySupport.rb} +1 -1
  54. data/lib/{RichTextScanner.rb → taskjuggler/RichText/Scanner.rb} +18 -5
  55. data/lib/{RichTextSnip.rb → taskjuggler/RichText/Snip.rb} +2 -2
  56. data/lib/{RichTextSyntaxRules.rb → taskjuggler/RichText/SyntaxRules.rb} +14 -0
  57. data/lib/{TOCEntry.rb → taskjuggler/RichText/TOCEntry.rb} +2 -2
  58. data/lib/{TableOfContents.rb → taskjuggler/RichText/TableOfContents.rb} +2 -2
  59. data/lib/{RuntimeConfig.rb → taskjuggler/RuntimeConfig.rb} +18 -18
  60. data/lib/{Scenario.rb → taskjuggler/Scenario.rb} +1 -1
  61. data/lib/{ScenarioData.rb → taskjuggler/ScenarioData.rb} +2 -3
  62. data/lib/{Scoreboard.rb → taskjuggler/Scoreboard.rb} +4 -4
  63. data/lib/{SheetHandlerBase.rb → taskjuggler/SheetHandlerBase.rb} +3 -3
  64. data/lib/{SheetReceiver.rb → taskjuggler/SheetReceiver.rb} +2 -2
  65. data/lib/{SheetSender.rb → taskjuggler/SheetSender.rb} +5 -5
  66. data/lib/{Shift.rb → taskjuggler/Shift.rb} +2 -3
  67. data/lib/{ShiftAssignments.rb → taskjuggler/ShiftAssignments.rb} +1 -1
  68. data/lib/{ShiftScenario.rb → taskjuggler/ShiftScenario.rb} +1 -1
  69. data/lib/{SimpleQueryExpander.rb → taskjuggler/SimpleQueryExpander.rb} +0 -0
  70. data/lib/{StatusSheetReceiver.rb → taskjuggler/StatusSheetReceiver.rb} +1 -1
  71. data/lib/{StatusSheetSender.rb → taskjuggler/StatusSheetSender.rb} +1 -1
  72. data/lib/{SyntaxReference.rb → taskjuggler/SyntaxReference.rb} +4 -4
  73. data/lib/{TableColumnDefinition.rb → taskjuggler/TableColumnDefinition.rb} +0 -0
  74. data/lib/{Task.rb → taskjuggler/Task.rb} +2 -2
  75. data/lib/{TaskDependency.rb → taskjuggler/TaskDependency.rb} +8 -0
  76. data/lib/{TaskJuggler.rb → taskjuggler/TaskJuggler.rb} +6 -4
  77. data/lib/{TaskScenario.rb → taskjuggler/TaskScenario.rb} +211 -150
  78. data/lib/taskjuggler/TernarySearchTree.rb +203 -0
  79. data/lib/{TextFormatter.rb → taskjuggler/TextFormatter.rb} +1 -1
  80. data/lib/{TextParser.rb → taskjuggler/TextParser.rb} +6 -6
  81. data/lib/{MacroTable.rb → taskjuggler/TextParser/MacroTable.rb} +2 -12
  82. data/lib/{TextParser → taskjuggler/TextParser}/Pattern.rb +5 -2
  83. data/lib/{TextParser → taskjuggler/TextParser}/Rule.rb +1 -1
  84. data/lib/{TextScanner.rb → taskjuggler/TextParser/Scanner.rb} +34 -32
  85. data/lib/{SourceFileInfo.rb → taskjuggler/TextParser/SourceFileInfo.rb} +1 -1
  86. data/lib/{TextParser → taskjuggler/TextParser}/StackElement.rb +0 -2
  87. data/lib/{TextParser → taskjuggler/TextParser}/State.rb +0 -0
  88. data/lib/{TextParser → taskjuggler/TextParser}/TokenDoc.rb +0 -0
  89. data/lib/{TimeSheetReceiver.rb → taskjuggler/TimeSheetReceiver.rb} +1 -1
  90. data/lib/{TimeSheetSender.rb → taskjuggler/TimeSheetSender.rb} +1 -1
  91. data/lib/{TimeSheetSummary.rb → taskjuggler/TimeSheetSummary.rb} +1 -1
  92. data/lib/{TimeSheets.rb → taskjuggler/TimeSheets.rb} +23 -16
  93. data/lib/{Tj3AppBase.rb → taskjuggler/Tj3AppBase.rb} +19 -12
  94. data/lib/{Tj3Config.rb → taskjuggler/Tj3Config.rb} +3 -3
  95. data/lib/taskjuggler/Tj3Man.rb +78 -0
  96. data/lib/{Tj3SheetAppBase.rb → taskjuggler/Tj3SheetAppBase.rb} +2 -2
  97. data/lib/{TjException.rb → taskjuggler/TjException.rb} +0 -0
  98. data/lib/{TjTime.rb → taskjuggler/TjTime.rb} +279 -234
  99. data/lib/{TjpExample.rb → taskjuggler/TjpExample.rb} +0 -0
  100. data/lib/{TjpSyntaxRules.rb → taskjuggler/TjpSyntaxRules.rb} +253 -95
  101. data/lib/{URLParameter.rb → taskjuggler/URLParameter.rb} +0 -0
  102. data/lib/{UTF8String.rb → taskjuggler/UTF8String.rb} +0 -0
  103. data/lib/{UserManual.rb → taskjuggler/UserManual.rb} +6 -6
  104. data/lib/{VimSyntax.rb → taskjuggler/VimSyntax.rb} +6 -2
  105. data/lib/{WorkingHours.rb → taskjuggler/WorkingHours.rb} +14 -22
  106. data/lib/{XMLDocument.rb → taskjuggler/XMLDocument.rb} +1 -1
  107. data/lib/{XMLElement.rb → taskjuggler/XMLElement.rb} +1 -1
  108. data/lib/taskjuggler/apps/Tj3.rb +134 -0
  109. data/lib/taskjuggler/apps/Tj3Client.rb +467 -0
  110. data/lib/taskjuggler/apps/Tj3Daemon.rb +142 -0
  111. data/lib/taskjuggler/apps/Tj3SsReceiver.rb +56 -0
  112. data/lib/taskjuggler/apps/Tj3SsSender.rb +90 -0
  113. data/lib/taskjuggler/apps/Tj3TsReceiver.rb +59 -0
  114. data/lib/taskjuggler/apps/Tj3TsSender.rb +77 -0
  115. data/lib/taskjuggler/apps/Tj3TsSummary.rb +86 -0
  116. data/lib/{daemon → taskjuggler/daemon}/Daemon.rb +4 -3
  117. data/lib/{daemon → taskjuggler/daemon}/ProcessIntercom.rb +2 -2
  118. data/lib/{daemon → taskjuggler/daemon}/ProjectBroker.rb +5 -5
  119. data/lib/{daemon → taskjuggler/daemon}/ProjectServer.rb +16 -16
  120. data/lib/{daemon → taskjuggler/daemon}/ReportServer.rb +6 -6
  121. data/lib/{daemon → taskjuggler/daemon}/ReportServlet.rb +2 -2
  122. data/lib/{daemon → taskjuggler/daemon}/WebServer.rb +4 -4
  123. data/lib/{daemon → taskjuggler/daemon}/WelcomePage.rb +2 -1
  124. data/lib/{deep_copy.rb → taskjuggler/deep_copy.rb} +0 -0
  125. data/lib/{reports → taskjuggler/reports}/CSVFile.rb +2 -2
  126. data/lib/{reports → taskjuggler/reports}/CollisionDetector.rb +1 -1
  127. data/lib/{reports → taskjuggler/reports}/ColumnTable.rb +1 -1
  128. data/lib/{reports → taskjuggler/reports}/GanttChart.rb +4 -4
  129. data/lib/{reports → taskjuggler/reports}/GanttContainer.rb +1 -1
  130. data/lib/{reports → taskjuggler/reports}/GanttHeader.rb +1 -1
  131. data/lib/{reports → taskjuggler/reports}/GanttHeaderScaleItem.rb +0 -0
  132. data/lib/{reports → taskjuggler/reports}/GanttLine.rb +6 -6
  133. data/lib/{reports → taskjuggler/reports}/GanttLoadStack.rb +1 -1
  134. data/lib/{reports → taskjuggler/reports}/GanttMilestone.rb +1 -1
  135. data/lib/{reports → taskjuggler/reports}/GanttRouter.rb +1 -1
  136. data/lib/{reports → taskjuggler/reports}/GanttTaskBar.rb +1 -1
  137. data/lib/{reports → taskjuggler/reports}/HTMLGraphics.rb +0 -0
  138. data/lib/{reports → taskjuggler/reports}/Navigator.rb +1 -1
  139. data/lib/{reports → taskjuggler/reports}/NikuReport.rb +3 -6
  140. data/lib/{reports → taskjuggler/reports}/Report.rb +19 -14
  141. data/lib/{reports → taskjuggler/reports}/ReportBase.rb +0 -0
  142. data/lib/{reports → taskjuggler/reports}/ReportContext.rb +0 -0
  143. data/lib/{reports → taskjuggler/reports}/ReportTable.rb +2 -2
  144. data/lib/{reports → taskjuggler/reports}/ReportTableCell.rb +0 -0
  145. data/lib/{reports → taskjuggler/reports}/ReportTableColumn.rb +0 -0
  146. data/lib/{reports → taskjuggler/reports}/ReportTableLegend.rb +0 -0
  147. data/lib/{reports → taskjuggler/reports}/ReportTableLine.rb +1 -1
  148. data/lib/{reports → taskjuggler/reports}/ResourceListRE.rb +4 -4
  149. data/lib/{reports → taskjuggler/reports}/StatusSheetReport.rb +1 -1
  150. data/lib/{reports → taskjuggler/reports}/TableReport.rb +8 -7
  151. data/lib/{reports → taskjuggler/reports}/TaskListRE.rb +4 -4
  152. data/lib/{reports → taskjuggler/reports}/TextReport.rb +1 -1
  153. data/lib/{reports → taskjuggler/reports}/TimeSheetReport.rb +1 -1
  154. data/lib/{reports → taskjuggler/reports}/TjpExportRE.rb +87 -29
  155. data/lib/tj3.rb +2 -144
  156. data/lib/tj3client.rb +2 -442
  157. data/lib/tj3d.rb +1 -133
  158. data/lib/tj3man.rb +2 -75
  159. data/lib/tj3ss_receiver.rb +2 -42
  160. data/lib/tj3ss_sender.rb +1 -76
  161. data/lib/tj3ts_receiver.rb +1 -45
  162. data/lib/tj3ts_sender.rb +1 -63
  163. data/lib/tj3ts_summary.rb +1 -72
  164. data/manual/How_To_Contribute +19 -49
  165. data/manual/Installation +65 -6
  166. data/manual/Reporting_Bugs +6 -20
  167. data/manual/TaskJuggler_Internals +8 -1
  168. data/manual/Tutorial +16 -0
  169. data/prj_cfg.rb +2 -3
  170. data/spec/IntervalList_spec.rb +2 -1
  171. data/spec/ProjectBroker_spec.rb +1 -1
  172. data/spec/TernarySearchTree_spec.rb +131 -0
  173. data/spec/TimeSheets_spec.rb +129 -0
  174. data/spec/Tj3Daemon_spec.rb +51 -0
  175. data/spec/Tj3_spec.rb +36 -0
  176. data/spec/support/DaemonControl.rb +78 -0
  177. data/spec/support/StdIoWrapper.rb +43 -0
  178. data/spec/tj3client.log +23 -0
  179. data/tasks/changelog.rake +17 -2
  180. data/tasks/csts.rake +2 -2
  181. data/tasks/manual.rake +9 -5
  182. data/tasks/missing.rake +0 -4
  183. data/tasks/rdoc.rake +2 -2
  184. data/tasks/vim.rake +9 -0
  185. data/test/TestSuite/CSV-Reports/alert.tjp +9 -0
  186. data/test/TestSuite/CSV-Reports/celltext.tjp +1 -0
  187. data/test/TestSuite/CSV-Reports/inputs.tjp +19 -0
  188. data/test/TestSuite/CSV-Reports/project-1.tji +9 -0
  189. data/test/TestSuite/CSV-Reports/refs/alert.csv +15 -0
  190. data/test/TestSuite/CSV-Reports/refs/celltext.csv +1 -0
  191. data/test/TestSuite/CSV-Reports/refs/inputs.csv +6 -0
  192. data/test/TestSuite/CSV-Reports/refs/resourcereport.csv +4 -4
  193. data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +22 -22
  194. data/test/TestSuite/CSV-Reports/refs/sortByTree.csv +1 -0
  195. data/test/TestSuite/CSV-Reports/refs/sortBy_duration.down.csv +1 -0
  196. data/test/TestSuite/CSV-Reports/refs/sortBy_effort.up.csv +1 -0
  197. data/test/TestSuite/CSV-Reports/refs/sortBy_plan.start.down.csv +14 -13
  198. data/test/TestSuite/CSV-Reports/refs/targets.csv +5 -0
  199. data/test/TestSuite/CSV-Reports/refs/taskreport.csv +15 -14
  200. data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +33 -32
  201. data/test/TestSuite/CSV-Reports/resourcereport.tjp +1 -0
  202. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +1 -0
  203. data/test/TestSuite/CSV-Reports/sortByTree.tjp +1 -0
  204. data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +1 -0
  205. data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +1 -0
  206. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
  207. data/test/TestSuite/CSV-Reports/targets.tjp +20 -0
  208. data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
  209. data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
  210. data/test/TestSuite/CSV-Reports/weekly.tjp +5 -2
  211. data/test/TestSuite/Export-Reports/export.tji +6 -0
  212. data/test/TestSuite/Export-Reports/refs/Account.tjp +92 -0
  213. data/test/TestSuite/Export-Reports/refs/AdoptedTasks.tjp +38 -0
  214. data/test/TestSuite/Export-Reports/refs/Allocate-1.tjp +124 -0
  215. data/test/TestSuite/Export-Reports/refs/Alternative.tjp +50 -0
  216. data/test/TestSuite/Export-Reports/refs/AutoID.tjp +45 -0
  217. data/test/TestSuite/Export-Reports/refs/AutoMacros.tjp +18 -0
  218. data/test/TestSuite/Export-Reports/refs/Booking.tjp +48 -0
  219. data/test/TestSuite/Export-Reports/refs/Caption.tjp +65 -0
  220. data/test/TestSuite/Export-Reports/refs/Celltext.tjp +45 -0
  221. data/test/TestSuite/Export-Reports/refs/Comments.tjp +67 -0
  222. data/test/TestSuite/Export-Reports/refs/Complete.tjp +50 -0
  223. data/test/TestSuite/Export-Reports/refs/CriticalPath.tjp +41 -0
  224. data/test/TestSuite/Export-Reports/refs/Currencyformat.tjp +18 -0
  225. data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +24 -0
  226. data/test/TestSuite/Export-Reports/refs/DST.tjp +89 -0
  227. data/test/TestSuite/Export-Reports/refs/Depends1.tjp +57 -0
  228. data/test/TestSuite/Export-Reports/refs/Durations.tjp +84 -0
  229. data/test/TestSuite/Export-Reports/refs/Efficiency.tjp +58 -0
  230. data/test/TestSuite/Export-Reports/refs/Flags.tjp +51 -0
  231. data/test/TestSuite/Export-Reports/refs/Gap.tjp +38 -0
  232. data/test/TestSuite/Export-Reports/refs/HtmlTaskReport.tjp +67 -0
  233. data/test/TestSuite/Export-Reports/refs/Include.tjp +58 -0
  234. data/test/TestSuite/Export-Reports/refs/Journal.tjp +28 -0
  235. data/test/TestSuite/Export-Reports/refs/Limits-1.tjp +283 -0
  236. data/test/TestSuite/Export-Reports/refs/LoadUnits.tjp +617 -0
  237. data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +18 -0
  238. data/test/TestSuite/Export-Reports/refs/LogicalFunction.tjp +57 -0
  239. data/test/TestSuite/Export-Reports/refs/Macro-1.tjp +91 -0
  240. data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +18 -0
  241. data/test/TestSuite/Export-Reports/refs/Macro-3.tjp +18 -0
  242. data/test/TestSuite/Export-Reports/refs/Manager.tjp +121 -0
  243. data/test/TestSuite/Export-Reports/refs/Mandatory.tjp +59 -0
  244. data/test/TestSuite/Export-Reports/refs/Milestone.tjp +27 -0
  245. data/test/TestSuite/Export-Reports/refs/MinMax.tjp +30 -0
  246. data/test/TestSuite/Export-Reports/refs/Niku.tjp +218 -0
  247. data/test/TestSuite/Export-Reports/refs/Numberformat.tjp +18 -0
  248. data/test/TestSuite/Export-Reports/refs/Period.tjp +25 -0
  249. data/test/TestSuite/Export-Reports/refs/Persistent.tjp +49 -0
  250. data/test/TestSuite/Export-Reports/refs/Precedes1.tjp +46 -0
  251. data/test/TestSuite/Export-Reports/refs/Priority.tjp +141 -0
  252. data/test/TestSuite/Export-Reports/refs/Project.tjp +18 -0
  253. data/test/TestSuite/Export-Reports/refs/ProjectIDs.tjp +36 -0
  254. data/test/TestSuite/Export-Reports/refs/Query.tjp +49 -0
  255. data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +79 -0
  256. data/test/TestSuite/Export-Reports/refs/Reports.tjp +130 -0
  257. data/test/TestSuite/Export-Reports/refs/Resource.tjp +59 -0
  258. data/test/TestSuite/Export-Reports/refs/ResourcePrefix.tjp +67 -0
  259. data/test/TestSuite/Export-Reports/refs/ResourceRoot.tjp +90 -0
  260. data/test/TestSuite/Export-Reports/refs/Responsible.tjp +50 -0
  261. data/test/TestSuite/Export-Reports/refs/RollupResource.tjp +90 -0
  262. data/test/TestSuite/Export-Reports/refs/Scenario.tjp +25 -0
  263. data/test/TestSuite/Export-Reports/refs/Scheduling.tjp +55 -0
  264. data/test/TestSuite/Export-Reports/refs/Select.tjp +89 -0
  265. data/test/TestSuite/Export-Reports/refs/Shift.tjp +39 -0
  266. data/test/TestSuite/Export-Reports/refs/Simple.tjp +67 -0
  267. data/test/TestSuite/Export-Reports/refs/StatusSheet.tjp +95 -0
  268. data/test/TestSuite/Export-Reports/refs/String.tjp +33 -0
  269. data/test/TestSuite/Export-Reports/refs/Supplement.tjp +41 -0
  270. data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +49 -0
  271. data/test/TestSuite/Export-Reports/refs/TaskRoot.tjp +75 -0
  272. data/test/TestSuite/Export-Reports/refs/TimeFrame.tjp +51 -0
  273. data/test/TestSuite/Export-Reports/refs/TimeSheet1.tjp +81 -0
  274. data/test/TestSuite/Export-Reports/refs/Timezone.tjp +18 -0
  275. data/test/TestSuite/Export-Reports/refs/Vacation.tjp +69 -0
  276. data/test/TestSuite/Export-Reports/refs/tutorial.tjp +1061 -0
  277. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +3 -1
  278. data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +5 -3
  279. data/test/TestSuite/Scheduler/Correct/Precedes.tjp +19 -19
  280. data/test/TestSuite/Scheduler/Correct/PriorityInversion.tjp +32 -0
  281. data/test/TestSuite/Scheduler/Correct/Scenarios.tjp +19 -0
  282. data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +11 -0
  283. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +14 -14
  284. data/test/TestSuite/Scheduler/Correct/checks.tji +5 -0
  285. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +20 -0
  286. data/test/TestSuite/StatusSheets/boss_mail +1 -1
  287. data/test/TestSuite/StatusSheets/dev2_mail +1 -1
  288. data/test/TestSuite/StatusSheets/run +2 -3
  289. data/test/TestSuite/Syntax/Correct/Account.tjp +1 -0
  290. data/test/TestSuite/Syntax/Correct/AdoptedTasks.tjp +9 -0
  291. data/test/TestSuite/Syntax/Correct/Allocate-1.tjp +3 -1
  292. data/test/TestSuite/Syntax/Correct/Alternative.tjp +3 -1
  293. data/test/TestSuite/Syntax/Correct/AutoID.tjp +3 -1
  294. data/test/TestSuite/Syntax/Correct/Booking.tjp +1 -0
  295. data/test/TestSuite/Syntax/Correct/Caption.tjp +3 -1
  296. data/test/TestSuite/Syntax/Correct/Celltext.tjp +3 -1
  297. data/test/TestSuite/Syntax/Correct/Comments.tjp +3 -1
  298. data/test/TestSuite/Syntax/Correct/Complete.tjp +1 -0
  299. data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +2 -1
  300. data/test/TestSuite/Syntax/Correct/Currencyformat.tjp +2 -1
  301. data/test/TestSuite/Syntax/Correct/CustomAttributes.tjp +3 -2
  302. data/test/TestSuite/Syntax/Correct/DST.tjp +11 -0
  303. data/test/TestSuite/Syntax/Correct/Depends1.tjp +6 -4
  304. data/test/TestSuite/Syntax/Correct/Durations.tjp +3 -1
  305. data/test/TestSuite/Syntax/Correct/Efficiency.tjp +4 -2
  306. data/test/TestSuite/Syntax/Correct/Export.tjp +6 -4
  307. data/test/TestSuite/Syntax/Correct/Flags.tjp +3 -1
  308. data/test/TestSuite/Syntax/Correct/Freeze.tjp +2 -2
  309. data/test/TestSuite/Syntax/Correct/Gap.tjp +3 -1
  310. data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +4 -2
  311. data/test/TestSuite/Syntax/Correct/Include.tjp +3 -1
  312. data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -1
  313. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +13 -9
  314. data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +1 -0
  315. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +3 -1
  316. data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +3 -1
  317. data/test/TestSuite/Syntax/Correct/Macro-1.tjp +3 -1
  318. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +3 -1
  319. data/test/TestSuite/Syntax/Correct/Macro-3.tjp +1 -0
  320. data/test/TestSuite/Syntax/Correct/Manager.tjp +4 -2
  321. data/test/TestSuite/Syntax/Correct/Mandatory.tjp +3 -1
  322. data/test/TestSuite/Syntax/Correct/Milestone.tjp +3 -1
  323. data/test/TestSuite/Syntax/Correct/MinMax.tjp +3 -1
  324. data/test/TestSuite/Syntax/Correct/Niku.tjp +1 -0
  325. data/test/TestSuite/Syntax/Correct/Numberformat.tjp +3 -2
  326. data/test/TestSuite/Syntax/Correct/Period.tjp +1 -0
  327. data/test/TestSuite/Syntax/Correct/Persistent.tjp +3 -1
  328. data/test/TestSuite/Syntax/Correct/Precedes1.tjp +6 -4
  329. data/test/TestSuite/Syntax/Correct/Priority.tjp +4 -2
  330. data/test/TestSuite/Syntax/Correct/Project.tjp +5 -4
  331. data/test/TestSuite/Syntax/Correct/ProjectIDs.tjp +3 -2
  332. data/test/TestSuite/Syntax/Correct/Query.tjp +1 -0
  333. data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +3 -1
  334. data/test/TestSuite/Syntax/Correct/Reports.tjp +7 -5
  335. data/test/TestSuite/Syntax/Correct/Resource.tjp +4 -2
  336. data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +4 -2
  337. data/test/TestSuite/Syntax/Correct/ResourceRoot.tjp +3 -1
  338. data/test/TestSuite/Syntax/Correct/Responsible.tjp +3 -1
  339. data/test/TestSuite/Syntax/Correct/RollupResource.tjp +3 -1
  340. data/test/TestSuite/Syntax/Correct/Scenario.tjp +2 -1
  341. data/test/TestSuite/Syntax/Correct/Scheduling.tjp +3 -1
  342. data/test/TestSuite/Syntax/Correct/Select.tjp +3 -1
  343. data/test/TestSuite/Syntax/Correct/Shift.tjp +4 -2
  344. data/test/TestSuite/Syntax/Correct/Simple.tjp +3 -1
  345. data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +4 -2
  346. data/test/TestSuite/Syntax/Correct/String.tjp +3 -1
  347. data/test/TestSuite/Syntax/Correct/Supplement.tjp +3 -1
  348. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +3 -2
  349. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +3 -1
  350. data/test/TestSuite/Syntax/Correct/TimeFrame.tjp +3 -1
  351. data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +4 -2
  352. data/test/TestSuite/Syntax/Correct/Vacation.tjp +5 -3
  353. data/test/TestSuite/Syntax/Correct/tutorial.tjp +23 -16
  354. data/test/TestSuite/Syntax/Errors/adopt_common_root.tjp +10 -0
  355. data/test/TestSuite/Syntax/Errors/adopt_duplicate_child.tjp +10 -0
  356. data/test/TestSuite/Syntax/Errors/adopt_duplicate_parent.tjp +10 -0
  357. data/test/TestSuite/{Scheduler/Errors/milestone_duration.tjp → Syntax/Errors/multiple_durations.tjp} +1 -1
  358. data/test/TestSuite/Syntax/Errors/operand_unkn_scen.tjp +6 -4
  359. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +5 -3
  360. data/test/TestSuite/TimeSheets/dev2_mail1 +1 -1
  361. data/test/TestSuite/TimeSheets/dev2_mail2 +1 -1
  362. data/test/TestSuite/TimeSheets/run +2 -2
  363. data/test/TestSuite/TimeSheets/uu.txt +29 -0
  364. data/test/test_AlgorithmDiff.rb +139 -0
  365. data/test/test_BatchProcessor.rb +2 -1
  366. data/test/test_CSV-Reports.rb +30 -19
  367. data/test/test_CSVFile.rb +2 -1
  368. data/test/test_CollisionDetector.rb +2 -1
  369. data/test/test_Export-Reports.rb +128 -0
  370. data/test/test_Journal.rb +2 -1
  371. data/test/test_Limits.rb +4 -3
  372. data/test/test_LogicalExpression.rb +2 -1
  373. data/test/test_MacroTable.rb +8 -6
  374. data/test/test_Project.rb +2 -1
  375. data/test/test_ProjectFileScanner.rb +4 -3
  376. data/test/test_PropertySet.rb +2 -1
  377. data/test/test_Query.rb +3 -2
  378. data/test/test_RealFormat.rb +2 -1
  379. data/test/test_ReportGenerator.rb +3 -2
  380. data/test/test_RichText.rb +14 -3
  381. data/test/test_Scheduler.rb +2 -1
  382. data/test/test_ShiftAssignments.rb +3 -1
  383. data/test/test_SimpleQueryExpander.rb +3 -2
  384. data/test/test_Syntax.rb +2 -1
  385. data/test/test_TextFormatter.rb +2 -1
  386. data/test/test_TjTime.rb +15 -14
  387. data/test/test_TjpExample.rb +2 -1
  388. data/test/test_URLParameter.rb +2 -1
  389. data/test/test_UTF8String.rb +2 -1
  390. data/test/test_WorkingHours.rb +3 -2
  391. data/test/test_deep_copy.rb +2 -1
  392. metadata +250 -541
  393. data/README +0 -31
  394. data/benchmarks/allocatedSlots.csv +0 -334
  395. data/benchmarks/profile.clt +0 -42974
  396. data/benchmarks/profile.html +0 -61128
  397. data/doc/AppConfig.html +0 -1471
  398. data/doc/Arguments.html +0 -720
  399. data/doc/CHANGELOG.html +0 -1987
  400. data/doc/COPYING.html +0 -879
  401. data/doc/Object.html +0 -1056
  402. data/doc/README.html +0 -565
  403. data/doc/RuntimeConfig.html +0 -804
  404. data/doc/String.html +0 -913
  405. data/doc/TaskJuggler.html +0 -2512
  406. data/doc/TaskJuggler/Account.html +0 -733
  407. data/doc/TaskJuggler/AccountAttribute.html +0 -749
  408. data/doc/TaskJuggler/AccountScenario.html +0 -692
  409. data/doc/TaskJuggler/Allocation.html +0 -943
  410. data/doc/TaskJuggler/AllocationAttribute.html +0 -779
  411. data/doc/TaskJuggler/AttributeBase.html +0 -1308
  412. data/doc/TaskJuggler/AttributeDefinition.html +0 -795
  413. data/doc/TaskJuggler/AttributeOverwrite.html +0 -586
  414. data/doc/TaskJuggler/BatchProcessor.html +0 -1158
  415. data/doc/TaskJuggler/Booking.html +0 -839
  416. data/doc/TaskJuggler/BookingListAttribute.html +0 -749
  417. data/doc/TaskJuggler/BooleanAttribute.html +0 -749
  418. data/doc/TaskJuggler/CSVFile.html +0 -1108
  419. data/doc/TaskJuggler/CellSettingPattern.html +0 -680
  420. data/doc/TaskJuggler/CellSettingPatternList.html +0 -729
  421. data/doc/TaskJuggler/Charge.html +0 -757
  422. data/doc/TaskJuggler/ChargeListAttribute.html +0 -713
  423. data/doc/TaskJuggler/ChargeSet.html +0 -929
  424. data/doc/TaskJuggler/ChargeSetListAttribute.html +0 -758
  425. data/doc/TaskJuggler/CollisionDetector.html +0 -1069
  426. data/doc/TaskJuggler/ColumnListAttribute.html +0 -713
  427. data/doc/TaskJuggler/ColumnTable.html +0 -743
  428. data/doc/TaskJuggler/Daemon.html +0 -798
  429. data/doc/TaskJuggler/DataCache.html +0 -930
  430. data/doc/TaskJuggler/DataCacheEntry.html +0 -717
  431. data/doc/TaskJuggler/DateAttribute.html +0 -717
  432. data/doc/TaskJuggler/DefinitionListAttribute.html +0 -635
  433. data/doc/TaskJuggler/DependencyListAttribute.html +0 -753
  434. data/doc/TaskJuggler/DurationAttribute.html +0 -750
  435. data/doc/TaskJuggler/FileList.html +0 -731
  436. data/doc/TaskJuggler/FileRecord.html +0 -682
  437. data/doc/TaskJuggler/FixnumAttribute.html +0 -671
  438. data/doc/TaskJuggler/FlagListAttribute.html +0 -749
  439. data/doc/TaskJuggler/FloatAttribute.html +0 -713
  440. data/doc/TaskJuggler/FormatListAttribute.html +0 -677
  441. data/doc/TaskJuggler/GanttChart.html +0 -1467
  442. data/doc/TaskJuggler/GanttContainer.html +0 -925
  443. data/doc/TaskJuggler/GanttHeader.html +0 -928
  444. data/doc/TaskJuggler/GanttHeaderScaleItem.html +0 -742
  445. data/doc/TaskJuggler/GanttLine.html +0 -1305
  446. data/doc/TaskJuggler/GanttLoadStack.html +0 -808
  447. data/doc/TaskJuggler/GanttMilestone.html +0 -906
  448. data/doc/TaskJuggler/GanttRouter.html +0 -1118
  449. data/doc/TaskJuggler/GanttTaskBar.html +0 -927
  450. data/doc/TaskJuggler/HTMLDocument.html +0 -761
  451. data/doc/TaskJuggler/HTMLGraphics.html +0 -817
  452. data/doc/TaskJuggler/Interval.html +0 -1056
  453. data/doc/TaskJuggler/IntervalList.html +0 -777
  454. data/doc/TaskJuggler/IntervalListAttribute.html +0 -753
  455. data/doc/TaskJuggler/JobInfo.html +0 -923
  456. data/doc/TaskJuggler/Journal.html +0 -1158
  457. data/doc/TaskJuggler/JournalEntry.html +0 -821
  458. data/doc/TaskJuggler/JournalEntryList.html +0 -1071
  459. data/doc/TaskJuggler/KeywordArray.html +0 -676
  460. data/doc/TaskJuggler/KeywordDocumentation.html +0 -1838
  461. data/doc/TaskJuggler/Limits.html +0 -1016
  462. data/doc/TaskJuggler/Limits/Limit.html +0 -927
  463. data/doc/TaskJuggler/LimitsAttribute.html +0 -714
  464. data/doc/TaskJuggler/ListAttributeBase.html +0 -683
  465. data/doc/TaskJuggler/Log.html +0 -1143
  466. data/doc/TaskJuggler/LogFile.html +0 -960
  467. data/doc/TaskJuggler/LogicalAttribute.html +0 -740
  468. data/doc/TaskJuggler/LogicalExpression.html +0 -781
  469. data/doc/TaskJuggler/LogicalExpressionAttribute.html +0 -671
  470. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +0 -671
  471. data/doc/TaskJuggler/LogicalFlag.html +0 -723
  472. data/doc/TaskJuggler/LogicalFunction.html +0 -1306
  473. data/doc/TaskJuggler/LogicalOperation.html +0 -1124
  474. data/doc/TaskJuggler/Macro.html +0 -688
  475. data/doc/TaskJuggler/MacroTable.html +0 -852
  476. data/doc/TaskJuggler/ManagerResponsibilities.html +0 -716
  477. data/doc/TaskJuggler/ManagerStatusRecord.html +0 -720
  478. data/doc/TaskJuggler/Message.html +0 -817
  479. data/doc/TaskJuggler/MessageHandler.html +0 -1036
  480. data/doc/TaskJuggler/Navigator.html +0 -922
  481. data/doc/TaskJuggler/NavigatorElement.html +0 -974
  482. data/doc/TaskJuggler/NikuProject.html +0 -704
  483. data/doc/TaskJuggler/NikuReport.html +0 -1449
  484. data/doc/TaskJuggler/NikuResource.html +0 -674
  485. data/doc/TaskJuggler/NodeListAttribute.html +0 -635
  486. data/doc/TaskJuggler/PlaceHolderCell.html +0 -728
  487. data/doc/TaskJuggler/ProcessIntercom.html +0 -997
  488. data/doc/TaskJuggler/ProcessIntercomIface.html +0 -753
  489. data/doc/TaskJuggler/Project.html +0 -3333
  490. data/doc/TaskJuggler/ProjectBroker.html +0 -1656
  491. data/doc/TaskJuggler/ProjectBrokerIface.html +0 -831
  492. data/doc/TaskJuggler/ProjectFileParser.html +0 -2033
  493. data/doc/TaskJuggler/ProjectFileScanner.html +0 -1816
  494. data/doc/TaskJuggler/ProjectRecord.html +0 -958
  495. data/doc/TaskJuggler/ProjectServer.html +0 -1229
  496. data/doc/TaskJuggler/ProjectServerIface.html +0 -848
  497. data/doc/TaskJuggler/PropertyAttribute.html +0 -671
  498. data/doc/TaskJuggler/PropertyList.html +0 -1379
  499. data/doc/TaskJuggler/PropertySet.html +0 -1799
  500. data/doc/TaskJuggler/PropertyTreeNode.html +0 -2579
  501. data/doc/TaskJuggler/Query.html +0 -1663
  502. data/doc/TaskJuggler/RTFHandlers.html +0 -644
  503. data/doc/TaskJuggler/RTFNavigator.html +0 -772
  504. data/doc/TaskJuggler/RTFQuery.html +0 -1040
  505. data/doc/TaskJuggler/RTFReport.html +0 -800
  506. data/doc/TaskJuggler/RTFReportLink.html +0 -792
  507. data/doc/TaskJuggler/RTFWithQuerySupport.html +0 -682
  508. data/doc/TaskJuggler/RealFormat.html +0 -785
  509. data/doc/TaskJuggler/RealFormatAttribute.html +0 -635
  510. data/doc/TaskJuggler/ReferenceAttribute.html +0 -824
  511. data/doc/TaskJuggler/Report.html +0 -1477
  512. data/doc/TaskJuggler/ReportBase.html +0 -1246
  513. data/doc/TaskJuggler/ReportContext.html +0 -816
  514. data/doc/TaskJuggler/ReportServer.html +0 -1048
  515. data/doc/TaskJuggler/ReportServerIface.html +0 -882
  516. data/doc/TaskJuggler/ReportServerRecord.html +0 -761
  517. data/doc/TaskJuggler/ReportServlet.html +0 -1024
  518. data/doc/TaskJuggler/ReportTable.html +0 -1159
  519. data/doc/TaskJuggler/ReportTableCell.html +0 -1646
  520. data/doc/TaskJuggler/ReportTableColumn.html +0 -870
  521. data/doc/TaskJuggler/ReportTableLegend.html +0 -1040
  522. data/doc/TaskJuggler/ReportTableLine.html +0 -1047
  523. data/doc/TaskJuggler/Resource.html +0 -972
  524. data/doc/TaskJuggler/ResourceListAttribute.html +0 -810
  525. data/doc/TaskJuggler/ResourceListRE.html +0 -717
  526. data/doc/TaskJuggler/ResourceScenario.html +0 -2599
  527. data/doc/TaskJuggler/RichText.html +0 -859
  528. data/doc/TaskJuggler/RichTextAttribute.html +0 -785
  529. data/doc/TaskJuggler/RichTextDocument.html +0 -1018
  530. data/doc/TaskJuggler/RichTextElement.html +0 -1754
  531. data/doc/TaskJuggler/RichTextFunctionExample.html +0 -779
  532. data/doc/TaskJuggler/RichTextFunctionHandler.html +0 -730
  533. data/doc/TaskJuggler/RichTextImage.html +0 -692
  534. data/doc/TaskJuggler/RichTextIntermediate.html +0 -1265
  535. data/doc/TaskJuggler/RichTextParser.html +0 -847
  536. data/doc/TaskJuggler/RichTextScanner.html +0 -1469
  537. data/doc/TaskJuggler/RichTextSnip.html +0 -980
  538. data/doc/TaskJuggler/RichTextSyntaxRules.html +0 -2018
  539. data/doc/TaskJuggler/Scenario.html +0 -636
  540. data/doc/TaskJuggler/ScenarioData.html +0 -818
  541. data/doc/TaskJuggler/ScenarioListAttribute.html +0 -713
  542. data/doc/TaskJuggler/Scoreboard.html +0 -1181
  543. data/doc/TaskJuggler/SheetHandlerBase.html +0 -1275
  544. data/doc/TaskJuggler/SheetReceiver.html +0 -1368
  545. data/doc/TaskJuggler/SheetSender.html +0 -1134
  546. data/doc/TaskJuggler/Shift.html +0 -731
  547. data/doc/TaskJuggler/ShiftAssignment.html +0 -988
  548. data/doc/TaskJuggler/ShiftAssignments.html +0 -1393
  549. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +0 -714
  550. data/doc/TaskJuggler/ShiftScenario.html +0 -762
  551. data/doc/TaskJuggler/SimpleQueryExpander.html +0 -713
  552. data/doc/TaskJuggler/SortListAttribute.html +0 -671
  553. data/doc/TaskJuggler/SourceFileInfo.html +0 -740
  554. data/doc/TaskJuggler/StatusSheetReceiver.html +0 -658
  555. data/doc/TaskJuggler/StatusSheetReport.html +0 -910
  556. data/doc/TaskJuggler/StatusSheetSender.html +0 -788
  557. data/doc/TaskJuggler/StringAttribute.html +0 -713
  558. data/doc/TaskJuggler/SymbolAttribute.html +0 -671
  559. data/doc/TaskJuggler/SyntaxReference.html +0 -1220
  560. data/doc/TaskJuggler/TOCEntry.html +0 -816
  561. data/doc/TaskJuggler/TSResourceRecord.html +0 -712
  562. data/doc/TaskJuggler/TSTaskRecord.html +0 -724
  563. data/doc/TaskJuggler/TableColumnDefinition.html +0 -928
  564. data/doc/TaskJuggler/TableOfContents.html +0 -770
  565. data/doc/TaskJuggler/TableReport.html +0 -2533
  566. data/doc/TaskJuggler/Task.html +0 -865
  567. data/doc/TaskJuggler/TaskDependency.html +0 -772
  568. data/doc/TaskJuggler/TaskListAttribute.html +0 -753
  569. data/doc/TaskJuggler/TaskListRE.html +0 -716
  570. data/doc/TaskJuggler/TaskScenario.html +0 -4959
  571. data/doc/TaskJuggler/TextFormatter.html +0 -953
  572. data/doc/TaskJuggler/TextParser.html +0 -1773
  573. data/doc/TaskJuggler/TextParser/Pattern.html +0 -1717
  574. data/doc/TaskJuggler/TextParser/Rule.html +0 -1399
  575. data/doc/TaskJuggler/TextParser/StackElement.html +0 -922
  576. data/doc/TaskJuggler/TextParser/State.html +0 -995
  577. data/doc/TaskJuggler/TextParser/StateTransition.html +0 -788
  578. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +0 -691
  579. data/doc/TaskJuggler/TextParser/TokenDoc.html +0 -722
  580. data/doc/TaskJuggler/TextReport.html +0 -901
  581. data/doc/TaskJuggler/TextScanner.html +0 -1482
  582. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +0 -641
  583. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +0 -707
  584. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +0 -704
  585. data/doc/TaskJuggler/TextScanner/StreamHandle.html +0 -1036
  586. data/doc/TaskJuggler/TimeSheet.html +0 -1232
  587. data/doc/TaskJuggler/TimeSheetReceiver.html +0 -655
  588. data/doc/TaskJuggler/TimeSheetRecord.html +0 -1395
  589. data/doc/TaskJuggler/TimeSheetReport.html +0 -991
  590. data/doc/TaskJuggler/TimeSheetSender.html +0 -680
  591. data/doc/TaskJuggler/TimeSheetSummary.html +0 -935
  592. data/doc/TaskJuggler/TimeSheets.html +0 -716
  593. data/doc/TaskJuggler/Tj3AppBase.html +0 -831
  594. data/doc/TaskJuggler/Tj3Client.html +0 -1477
  595. data/doc/TaskJuggler/Tj3Daemon.html +0 -884
  596. data/doc/TaskJuggler/Tj3SheetAppBase.html +0 -738
  597. data/doc/TaskJuggler/Tj3SsReceiver.html +0 -724
  598. data/doc/TaskJuggler/Tj3SsSender.html +0 -757
  599. data/doc/TaskJuggler/Tj3TsReceiver.html +0 -724
  600. data/doc/TaskJuggler/Tj3TsSender.html +0 -744
  601. data/doc/TaskJuggler/Tj3TsSummary.html +0 -752
  602. data/doc/TaskJuggler/TjException.html +0 -672
  603. data/doc/TaskJuggler/TjTime.html +0 -2807
  604. data/doc/TaskJuggler/TjpExample.html +0 -877
  605. data/doc/TaskJuggler/TjpExportRE.html +0 -1598
  606. data/doc/TaskJuggler/TjpSyntaxRules.html +0 -13611
  607. data/doc/TaskJuggler/URLParameter.html +0 -671
  608. data/doc/TaskJuggler/UserManual.html +0 -1188
  609. data/doc/TaskJuggler/VimSyntax.html +0 -1044
  610. data/doc/TaskJuggler/WebServer.html +0 -737
  611. data/doc/TaskJuggler/WelcomePage.html +0 -769
  612. data/doc/TaskJuggler/WorkingHours.html +0 -1207
  613. data/doc/TaskJuggler/WorkingHoursAttribute.html +0 -736
  614. data/doc/TaskJuggler/XMLBlob.html +0 -687
  615. data/doc/TaskJuggler/XMLComment.html +0 -682
  616. data/doc/TaskJuggler/XMLDocument.html +0 -774
  617. data/doc/TaskJuggler/XMLElement.html +0 -942
  618. data/doc/TaskJuggler/XMLNamedText.html +0 -643
  619. data/doc/TaskJuggler/XMLText.html +0 -697
  620. data/doc/index.html +0 -4127
  621. data/doc/lib/AccountScenario_rb.html +0 -69
  622. data/doc/lib/Account_rb.html +0 -71
  623. data/doc/lib/Allocation_rb.html +0 -71
  624. data/doc/lib/AppConfig_rb.html +0 -71
  625. data/doc/lib/AttributeBase_rb.html +0 -69
  626. data/doc/lib/AttributeDefinition_rb.html +0 -67
  627. data/doc/lib/Attributes_rb.html +0 -83
  628. data/doc/lib/BatchProcessor_rb.html +0 -71
  629. data/doc/lib/Booking_rb.html +0 -67
  630. data/doc/lib/ChargeSet_rb.html +0 -69
  631. data/doc/lib/Charge_rb.html +0 -69
  632. data/doc/lib/DataCache_rb.html +0 -71
  633. data/doc/lib/FileList_rb.html +0 -67
  634. data/doc/lib/HTMLDocument_rb.html +0 -69
  635. data/doc/lib/IntervalList_rb.html +0 -69
  636. data/doc/lib/Interval_rb.html +0 -69
  637. data/doc/lib/Journal_rb.html +0 -67
  638. data/doc/lib/KeywordArray_rb.html +0 -67
  639. data/doc/lib/KeywordDocumentation_rb.html +0 -77
  640. data/doc/lib/Limits_rb.html +0 -69
  641. data/doc/lib/LogFile_rb.html +0 -69
  642. data/doc/lib/Log_rb.html +0 -71
  643. data/doc/lib/LogicalExpression_rb.html +0 -73
  644. data/doc/lib/LogicalFunction_rb.html +0 -69
  645. data/doc/lib/LogicalOperation_rb.html +0 -69
  646. data/doc/lib/MacroTable_rb.html +0 -73
  647. data/doc/lib/MessageHandler_rb.html +0 -67
  648. data/doc/lib/ProjectFileParser_rb.html +0 -77
  649. data/doc/lib/ProjectFileScanner_rb.html +0 -69
  650. data/doc/lib/Project_rb.html +0 -113
  651. data/doc/lib/PropertyList_rb.html +0 -67
  652. data/doc/lib/PropertySet_rb.html +0 -71
  653. data/doc/lib/PropertyTreeNode_rb.html +0 -67
  654. data/doc/lib/Query_rb.html +0 -69
  655. data/doc/lib/RTFHandlers_rb.html +0 -75
  656. data/doc/lib/RTFNavigator_rb.html +0 -73
  657. data/doc/lib/RTFQuery_rb.html +0 -73
  658. data/doc/lib/RTFReportLink_rb.html +0 -75
  659. data/doc/lib/RTFReport_rb.html +0 -71
  660. data/doc/lib/RTFWithQuerySupport_rb.html +0 -69
  661. data/doc/lib/RealFormat_rb.html +0 -67
  662. data/doc/lib/ResourceScenario_rb.html +0 -69
  663. data/doc/lib/Resource_rb.html +0 -71
  664. data/doc/lib/RichTextDocument_rb.html +0 -73
  665. data/doc/lib/RichTextElement_rb.html +0 -75
  666. data/doc/lib/RichTextFunctionExample_rb.html +0 -73
  667. data/doc/lib/RichTextFunctionHandler_rb.html +0 -67
  668. data/doc/lib/RichTextParser_rb.html +0 -73
  669. data/doc/lib/RichTextScanner_rb.html +0 -71
  670. data/doc/lib/RichTextSnip_rb.html +0 -71
  671. data/doc/lib/RichTextSyntaxRules_rb.html +0 -67
  672. data/doc/lib/RichText_rb.html +0 -73
  673. data/doc/lib/RuntimeConfig_rb.html +0 -69
  674. data/doc/lib/ScenarioData_rb.html +0 -71
  675. data/doc/lib/Scenario_rb.html +0 -69
  676. data/doc/lib/Scoreboard_rb.html +0 -69
  677. data/doc/lib/SheetHandlerBase_rb.html +0 -75
  678. data/doc/lib/SheetReceiver_rb.html +0 -79
  679. data/doc/lib/SheetSender_rb.html +0 -77
  680. data/doc/lib/ShiftAssignments_rb.html +0 -71
  681. data/doc/lib/ShiftScenario_rb.html +0 -69
  682. data/doc/lib/Shift_rb.html +0 -71
  683. data/doc/lib/SimpleQueryExpander_rb.html +0 -69
  684. data/doc/lib/SourceFileInfo_rb.html +0 -67
  685. data/doc/lib/StatusSheetReceiver_rb.html +0 -69
  686. data/doc/lib/StatusSheetSender_rb.html +0 -69
  687. data/doc/lib/SyntaxReference_rb.html +0 -75
  688. data/doc/lib/TOCEntry_rb.html +0 -71
  689. data/doc/lib/TableColumnDefinition_rb.html +0 -67
  690. data/doc/lib/TableOfContents_rb.html +0 -71
  691. data/doc/lib/TaskDependency_rb.html +0 -67
  692. data/doc/lib/TaskJuggler_rb.html +0 -75
  693. data/doc/lib/TaskScenario_rb.html +0 -71
  694. data/doc/lib/Task_rb.html +0 -71
  695. data/doc/lib/TextFormatter_rb.html +0 -69
  696. data/doc/lib/TextParser/Pattern_rb.html +0 -71
  697. data/doc/lib/TextParser/Rule_rb.html +0 -69
  698. data/doc/lib/TextParser/StackElement_rb.html +0 -69
  699. data/doc/lib/TextParser/State_rb.html +0 -67
  700. data/doc/lib/TextParser/TokenDoc_rb.html +0 -67
  701. data/doc/lib/TextParser_rb.html +0 -79
  702. data/doc/lib/TextScanner_rb.html +0 -83
  703. data/doc/lib/TimeSheetReceiver_rb.html +0 -69
  704. data/doc/lib/TimeSheetSender_rb.html +0 -69
  705. data/doc/lib/TimeSheetSummary_rb.html +0 -69
  706. data/doc/lib/TimeSheets_rb.html +0 -67
  707. data/doc/lib/Tj3AppBase_rb.html +0 -79
  708. data/doc/lib/Tj3Config_rb.html +0 -71
  709. data/doc/lib/Tj3SheetAppBase_rb.html +0 -69
  710. data/doc/lib/TjException_rb.html +0 -67
  711. data/doc/lib/TjTime_rb.html +0 -71
  712. data/doc/lib/TjpExample_rb.html +0 -69
  713. data/doc/lib/TjpSyntaxRules_rb.html +0 -67
  714. data/doc/lib/URLParameter_rb.html +0 -69
  715. data/doc/lib/UTF8String_rb.html +0 -67
  716. data/doc/lib/UserManual_rb.html +0 -79
  717. data/doc/lib/VimSyntax_rb.html +0 -69
  718. data/doc/lib/WorkingHours_rb.html +0 -71
  719. data/doc/lib/XMLDocument_rb.html +0 -69
  720. data/doc/lib/XMLElement_rb.html +0 -69
  721. data/doc/lib/daemon/Daemon_rb.html +0 -69
  722. data/doc/lib/daemon/ProcessIntercom_rb.html +0 -71
  723. data/doc/lib/daemon/ProjectBroker_rb.html +0 -83
  724. data/doc/lib/daemon/ProjectServer_rb.html +0 -85
  725. data/doc/lib/daemon/ReportServer_rb.html +0 -73
  726. data/doc/lib/daemon/ReportServlet_rb.html +0 -69
  727. data/doc/lib/daemon/WebServer_rb.html +0 -81
  728. data/doc/lib/daemon/WelcomePage_rb.html +0 -71
  729. data/doc/lib/deep_copy_rb.html +0 -67
  730. data/doc/lib/exchangebug_rb.html +0 -69
  731. data/doc/lib/reports/CSVFile_rb.html +0 -69
  732. data/doc/lib/reports/CollisionDetector_rb.html +0 -69
  733. data/doc/lib/reports/ColumnTable_rb.html +0 -69
  734. data/doc/lib/reports/GanttChart_rb.html +0 -75
  735. data/doc/lib/reports/GanttContainer_rb.html +0 -69
  736. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +0 -67
  737. data/doc/lib/reports/GanttHeader_rb.html +0 -69
  738. data/doc/lib/reports/GanttLine_rb.html +0 -79
  739. data/doc/lib/reports/GanttLoadStack_rb.html +0 -69
  740. data/doc/lib/reports/GanttMilestone_rb.html +0 -69
  741. data/doc/lib/reports/GanttRouter_rb.html +0 -69
  742. data/doc/lib/reports/GanttTaskBar_rb.html +0 -69
  743. data/doc/lib/reports/HTMLGraphics_rb.html +0 -67
  744. data/doc/lib/reports/Navigator_rb.html +0 -69
  745. data/doc/lib/reports/NikuReport_rb.html +0 -71
  746. data/doc/lib/reports/ReportBase_rb.html +0 -67
  747. data/doc/lib/reports/ReportContext_rb.html +0 -67
  748. data/doc/lib/reports/ReportTableCell_rb.html +0 -67
  749. data/doc/lib/reports/ReportTableColumn_rb.html +0 -67
  750. data/doc/lib/reports/ReportTableLegend_rb.html +0 -67
  751. data/doc/lib/reports/ReportTableLine_rb.html +0 -69
  752. data/doc/lib/reports/ReportTable_rb.html +0 -71
  753. data/doc/lib/reports/Report_rb.html +0 -93
  754. data/doc/lib/reports/ResourceListRE_rb.html +0 -75
  755. data/doc/lib/reports/StatusSheetReport_rb.html +0 -69
  756. data/doc/lib/reports/TableReport_rb.html +0 -77
  757. data/doc/lib/reports/TaskListRE_rb.html +0 -75
  758. data/doc/lib/reports/TextReport_rb.html +0 -69
  759. data/doc/lib/reports/TimeSheetReport_rb.html +0 -69
  760. data/doc/lib/reports/TjpExportRE_rb.html +0 -69
  761. data/doc/lib/ruby-signal-bug_rb.html +0 -69
  762. data/doc/lib/test_rb.html +0 -73
  763. data/doc/lib/tj3_rb.html +0 -75
  764. data/doc/lib/tj3client_rb.html +0 -75
  765. data/doc/lib/tj3d_rb.html +0 -75
  766. data/doc/lib/tj3man_rb.html +0 -75
  767. data/doc/lib/tj3ss_receiver_rb.html +0 -71
  768. data/doc/lib/tj3ss_sender_rb.html +0 -71
  769. data/doc/lib/tj3ts_receiver_rb.html +0 -71
  770. data/doc/lib/tj3ts_sender_rb.html +0 -71
  771. data/doc/lib/tj3ts_summary_rb.html +0 -71
  772. data/doc/rdoc.css +0 -706
  773. data/lib/test.rb +0 -19
  774. data/setup.rb +0 -1585
  775. data/test/TestSuite/CSV-Reports/genrefs +0 -6
  776. data/test/TestSuite/Scheduler/Correct/Allocate.html +0 -2922
  777. data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
  778. data/test/TestSuite/Scheduler/Correct/Container.html +0 -513
  779. data/test/TestSuite/Scheduler/Correct/Precedes.html +0 -834
  780. data/test/TestSuite/Scheduler/Correct/Shift.html +0 -429
  781. data/test/TestSuite/Scheduler/Correct/Shift2.html +0 -476
  782. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
  783. data/test/TestSuite/Scheduler/Errors/task_underspecified_2.tjp +0 -8
  784. data/test/TestSuite/Syntax/Correct/ReleasePlan.html +0 -160
  785. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
  786. data/test/TestSuite/Syntax/Correct/ResourceRoot.html +0 -108
  787. data/test/TestSuite/Syntax/Correct/niku.html +0 -67
@@ -11,8 +11,8 @@
11
11
  # published by the Free Software Foundation.
12
12
  #
13
13
 
14
- require 'ScenarioData'
15
- require 'DataCache'
14
+ require 'taskjuggler/ScenarioData'
15
+ require 'taskjuggler/DataCache'
16
16
 
17
17
  class TaskJuggler
18
18
 
@@ -56,23 +56,13 @@ class TaskJuggler
56
56
  @startPropagated = false
57
57
  @endPropagated = false
58
58
 
59
- # Inheriting start or end values is a bit tricky. This should really only
60
- # happen if the task is a leaf task and scheduled away from the specified
61
- # date. Since the default meachanism inherites all values, we have to
62
- # delete the wrong ones again.
63
- unless @property.provided('start', @scenarioIdx)
64
- @property['start', @scenarioIdx] = nil
65
- end
66
- unless @property.provided('end', @scenarioIdx)
67
- @property['end', @scenarioIdx] = nil
68
- end
69
-
70
59
  # Milestones may only have start or end date even when the 'scheduled'
71
60
  # attribute is set. For further processing, we need to add the missing
72
61
  # date.
73
62
  if a('milestone') && a('scheduled')
74
63
  @property['end', @scenarioIdx] = a('start') if a('start') && !a('end')
75
64
  @property['start', @scenarioIdx] = a('end') if !a('start') && a('end')
65
+ Log << "Milestone #{@property.fullId}: #{a('start')} -> #{a('end')}"
76
66
  end
77
67
 
78
68
  # Collect the limits of this task and all parent tasks into a single
@@ -136,7 +126,7 @@ class TaskJuggler
136
126
  if a('start')
137
127
  propagateDate(a('start'), false)
138
128
  elsif @property.parent.nil? &&
139
- @property.canInheritDate?(@scenarioIdx, false)
129
+ @property.canInheritDate?(@scenarioIdx, false)
140
130
  propagateDate(@project['start'], false)
141
131
  end
142
132
  end
@@ -145,7 +135,7 @@ class TaskJuggler
145
135
  if a('end')
146
136
  propagateDate(a('end'), true)
147
137
  elsif @property.parent.nil? &&
148
- @property.canInheritDate?(@scenarioIdx, true)
138
+ @property.canInheritDate?(@scenarioIdx, true)
149
139
  propagateDate(@project['end'], true)
150
140
  end
151
141
  end
@@ -325,14 +315,16 @@ class TaskJuggler
325
315
 
326
316
  a('startsuccs').each do |task, onEnd|
327
317
  unless task['forward', @scenarioIdx]
328
- task.error(@scenarioIdx, 'onstart_wrong_direction',
329
- 'Tasks with on-start dependencies must be ASAP scheduled')
318
+ task.data[@scenarioIdx].error(
319
+ 'onstart_wrong_direction',
320
+ 'Tasks with on-start dependencies must be ASAP scheduled')
330
321
  end
331
322
  end
332
323
  a('endpreds').each do |task, onEnd|
333
324
  if task['forward', @scenarioIdx]
334
- task.error(@scenarioIdx, 'onend_wrong_direction',
335
- 'Tasks with on-end dependencies must be ALAP scheduled')
325
+ task.data[@scenarioIdx].error(
326
+ 'onend_wrong_direction',
327
+ 'Tasks with on-end dependencies must be ALAP scheduled')
336
328
  end
337
329
  end
338
330
  end
@@ -536,37 +528,6 @@ class TaskJuggler
536
528
  "end date.")
537
529
  end
538
530
 
539
- if !a('fail').empty? || !a('warn').empty?
540
- queryAttrs = { 'project' => @project,
541
- 'scenarioIdx' => @scenarioIdx,
542
- 'property' => @property,
543
- 'scopeProperty' => nil,
544
- 'start' => @project['start'],
545
- 'end' => @project['end'],
546
- 'loadUnit' => :days,
547
- 'numberFormat' => @project['numberFormat'],
548
- 'timeFormat' => @project['timeFormat'],
549
- 'currencyFormat' => @project['currencyFormat'] }
550
- query = Query.new(queryAttrs)
551
- a('fail').each do |expr|
552
- if expr.eval(query)
553
- error('task_fail_check',
554
- "User defined check failed for task #{@property.fullId} \n" +
555
- "Condition: #{expr.to_s}\n" +
556
- "Result: #{expr.to_s(query)}")
557
- end
558
- end
559
- a('warn').each do |expr|
560
- if expr.eval(query)
561
- warning('task_warn_check',
562
- "User defined warning triggered for task " +
563
- "#{@property.fullId} \n" +
564
- "Condition: #{expr.to_s}\n" +
565
- "Result: #{expr.to_s(query)}")
566
- end
567
- end
568
- end
569
-
570
531
  @errors == 0
571
532
  end
572
533
 
@@ -918,9 +879,11 @@ class TaskJuggler
918
879
 
919
880
  # Set a new start or end date and propagate the value to all other
920
881
  # task ends that have a direct dependency to this end of the task.
921
- def propagateDate(date, atEnd)
882
+ def propagateDate(date, atEnd, ignoreEffort = false)
922
883
  thisEnd = atEnd ? 'end' : 'start'
923
884
  otherEnd = atEnd ? 'start' : 'end'
885
+ #puts "Propagating #{thisEnd} date #{date} of #{@property.fullId} " +
886
+ # "#{ignoreEffort ? "ignoring effort" : "" }"
924
887
 
925
888
  # These flags are just used to avoid duplicate calls of this function
926
889
  # during propagateInitialValues().
@@ -948,20 +911,30 @@ class TaskJuggler
948
911
  !(a('length') == 0 && a('duration') == 0 && a('effort') == 0 &&
949
912
  !a('allocate').empty?)
950
913
  @property['scheduled', @scenarioIdx] = true
914
+ Log << "Task #{@property.fullId} has been scheduled"
951
915
  end
952
916
 
953
917
  # Propagate date to all dependent tasks. Don't do this for start
954
918
  # successors or end predecessors if this task is effort based. In this
955
919
  # case, the date might still change to align with the first/last
956
- # allocation. In these cases, bookResoruce() has to propagate the final
920
+ # allocation. In these cases, bookResource() has to propagate the final
957
921
  # date.
958
- unless atEnd && a('effort') > 0
959
- a(thisEnd + 'preds').each do |task, onEnd|
922
+ if atEnd
923
+ if ignoreEffort || a('effort') == 0
924
+ a('endpreds').each do |task, onEnd|
925
+ propagateDateToDep(task, onEnd)
926
+ end
927
+ end
928
+ a('endsuccs').each do |task, onEnd|
960
929
  propagateDateToDep(task, onEnd)
961
930
  end
962
- end
963
- unless !atEnd && a('effort') > 0
964
- a(thisEnd + 'succs').each do |task, onEnd|
931
+ else
932
+ if ignoreEffort || a('effort') == 0
933
+ a('startsuccs').each do |task, onEnd|
934
+ propagateDateToDep(task, onEnd)
935
+ end
936
+ end
937
+ a('startpreds').each do |task, onEnd|
965
938
  propagateDateToDep(task, onEnd)
966
939
  end
967
940
  end
@@ -977,9 +950,12 @@ class TaskJuggler
977
950
 
978
951
  # The date propagation might have completed the date set of the enclosing
979
952
  # containter task. If so, we can schedule it as well.
980
- @property.parent.scheduleContainer(@scenarioIdx) if !@property.parent.nil?
953
+ @property.parents.each do |parent|
954
+ parent.scheduleContainer(@scenarioIdx)
955
+ end
981
956
  end
982
957
 
958
+
983
959
  # This function determines if a task can inherit the start or end date
984
960
  # from a parent task or the project time frame. +atEnd+ specifies whether
985
961
  # the check should be done for the task end (true) or task start (false).
@@ -1001,13 +977,13 @@ class TaskJuggler
1001
977
  thisEnd, thatEnd = atEnd ? [ 'end', 'start' ] : [ 'start', 'end' ]
1002
978
  # Return false if we already have a date for this end or if we have a
1003
979
  # strong dependency for this end.
1004
- return false if a(thisEnd) || hasStrongDeps(thisEnd)
980
+ return false if a(thisEnd) || hasStrongDeps(atEnd)
1005
981
 
1006
982
  # Containter task can inherit the date if they have no dependencies at
1007
983
  # this end.
1008
984
  return true if @property.container?
1009
985
 
1010
- hasThatSpec = a(thatEnd) || hasStrongDeps(thatEnd)
986
+ hasThatSpec = a(thatEnd) || hasStrongDeps(!atEnd)
1011
987
  hasDurationSpec = hasDurationSpec?
1012
988
 
1013
989
  # Check for tasks that have no start and end spec, no duration spec but
@@ -1034,9 +1010,13 @@ class TaskJuggler
1034
1010
  nStart = nil
1035
1011
  nEnd = nil
1036
1012
 
1037
- @property.children.each do |task|
1038
- # Abort if a child has not yet been scheduled.
1039
- return unless task['scheduled', @scenarioIdx]
1013
+ @property.kids.each do |task|
1014
+ # Abort if a child has not yet been scheduled. Since we haven't done
1015
+ # the consistency check yet, we can't rely on start and end being set
1016
+ # if 'scheduled' is set.
1017
+ return if (!task['scheduled', @scenarioIdx] ||
1018
+ task['start', @scenarioIdx].nil? ||
1019
+ task['end', @scenarioIdx].nil?)
1040
1020
 
1041
1021
  if nStart.nil? || task['start', @scenarioIdx] < nStart
1042
1022
  nStart = task['start', @scenarioIdx]
@@ -1060,7 +1040,7 @@ class TaskJuggler
1060
1040
  raise "Start (#{a('start')}) and end (#{a('end')}) must be set"
1061
1041
  end
1062
1042
  @property['scheduled', @scenarioIdx] = true
1063
- Log << "Container task #{@property.fullId}: #{a('start')} -> #{a('end')}"
1043
+ Log << "Container task #{@property.fullId} completed: #{a('start')} -> #{a('end')}"
1064
1044
 
1065
1045
  # If we have modified the start or end date, we need to communicate this
1066
1046
  # new date to surrounding tasks.
@@ -1178,7 +1158,7 @@ class TaskJuggler
1178
1158
  # task A precedes B and they are specified this way:
1179
1159
  # task A: | --> D-
1180
1160
  # task B: -D <-- |
1181
- if a('start') && endDate > a('start')
1161
+ if a('start') && (endDate.nil? || endDate > a('start'))
1182
1162
  error('weak_end_dep',
1183
1163
  "Task #{@property.fullId} has a too weak end dependencies " +
1184
1164
  "to be scheduled properly.")
@@ -1188,13 +1168,9 @@ class TaskJuggler
1188
1168
  end
1189
1169
 
1190
1170
  def addBooking(booking)
1191
- if a('booking').empty?
1192
- # For the first item use the assignment form so that the 'provided'
1193
- # attribute is set properly.
1194
- @property['booking', @scenarioIdx] = [ booking ]
1195
- else
1196
- @property['booking', @scenarioIdx] << booking
1197
- end
1171
+ # This append operation will not trigger a copy to sub-scenarios.
1172
+ # Bookings are only valid for the scenario they are defined in.
1173
+ @property['booking', @scenarioIdx] << booking
1198
1174
  end
1199
1175
 
1200
1176
  def query_complete(query)
@@ -1237,7 +1213,7 @@ class TaskJuggler
1237
1213
  def query_effortdone(query)
1238
1214
  # For this query, we always override the query period.
1239
1215
  query.sortable = query.numerical = effort =
1240
- getEffectiveWork(@project.dateToIdx(@project['start']),
1216
+ getEffectiveWork(@project.dateToIdx(@project['start'], false),
1241
1217
  @project.dateToIdx(@project['now']),
1242
1218
  query.scopeProperty)
1243
1219
  query.string = query.scaleLoad(effort)
@@ -1249,11 +1225,9 @@ class TaskJuggler
1249
1225
  # the effort allocated for this resource is taken into account.
1250
1226
  def query_effortleft(query)
1251
1227
  # For this query, we always override the query period.
1252
- query.start = @project['now']
1253
- query.end = @project['end']
1254
1228
  query.sortable = query.numerical = effort =
1255
1229
  getEffectiveWork(@project.dateToIdx(@project['now']),
1256
- @project.dateToIdx(@project['end']),
1230
+ @project.dateToIdx(@project['end'], false),
1257
1231
  query.scopeProperty)
1258
1232
  query.string = query.scaleLoad(effort)
1259
1233
  end
@@ -1377,6 +1351,17 @@ class TaskJuggler
1377
1351
  query.string = status
1378
1352
  end
1379
1353
 
1354
+ def query_inputs(query)
1355
+ inputList = PropertyList.new(@project.tasks, false)
1356
+ inputs(inputList, true)
1357
+ inputList.delete(@property)
1358
+ inputList.setSorting([['start', true, @scenarioIdx],
1359
+ ['seqno', true, -1 ]])
1360
+ inputList.sort!
1361
+
1362
+ query.assignList(generateTaskList(inputList, query.listMode))
1363
+ end
1364
+
1380
1365
  def query_targets(query)
1381
1366
  targetList = PropertyList.new(@project.tasks, false)
1382
1367
  targets(targetList, true)
@@ -1385,32 +1370,7 @@ class TaskJuggler
1385
1370
  ['seqno', true, -1 ]])
1386
1371
  targetList.sort!
1387
1372
 
1388
- list = []
1389
- targetList.each do |task|
1390
- date = task['start', @scenarioIdx].to_s(@property.project['timeFormat'])
1391
- case query.listMode
1392
- when 1
1393
- list << "#{task.fullId}"
1394
- when 2
1395
- list << "#{task.name}"
1396
- when 3
1397
- list << "#{task.name} (#{task.fullId})"
1398
- when 4
1399
- list << "#{task.fullId}: #{task.name}"
1400
- when 5
1401
- list << "#{task.fullId} (#{date})"
1402
- when 6
1403
- list << "#{task.name} (#{date})"
1404
- when 7, nil
1405
- list << "#{task.name} (#{task.fullId}) #{date}"
1406
- when 8
1407
- list << "#{task.fullId}: #{task.name} #{date}"
1408
- else
1409
- error('bad_listmode_qt',
1410
- "Bad listmode #{query.listMode}. Use 1 - 8.")
1411
- end
1412
- end
1413
- query.assignList(list)
1373
+ query.assignList(generateTaskList(targetList, query.listMode))
1414
1374
  end
1415
1375
 
1416
1376
 
@@ -1424,7 +1384,7 @@ class TaskJuggler
1424
1384
  @dCache.cached(key) do
1425
1385
  allocatedTime = 0.0
1426
1386
  if @property.container?
1427
- @property.children.each do |task|
1387
+ @property.kids.each do |task|
1428
1388
  allocatedTime += task.getAllocatedTime(@scenarioIdx,
1429
1389
  startIdx, endIdx, resource)
1430
1390
  end
@@ -1455,7 +1415,7 @@ class TaskJuggler
1455
1415
  @dCache.cached(key) do
1456
1416
  workLoad = 0.0
1457
1417
  if @property.container?
1458
- @property.children.each do |task|
1418
+ @property.kids.each do |task|
1459
1419
  workLoad += task.getEffectiveWork(@scenarioIdx, startIdx, endIdx,
1460
1420
  resource)
1461
1421
  end
@@ -1499,7 +1459,7 @@ class TaskJuggler
1499
1459
  il &= @project.collectTimeOffIntervals(iv, minDuration)
1500
1460
  end
1501
1461
  else
1502
- @property.children.each do |task|
1462
+ @property.kids.each do |task|
1503
1463
  il &= task.collectTimeOffIntervals(@scenarioIdx, iv, minDuration)
1504
1464
  end
1505
1465
  end
@@ -1565,7 +1525,7 @@ class TaskJuggler
1565
1525
  if @property.leaf?
1566
1526
  return resource.allocated?(@scenarioIdx, interval, @property)
1567
1527
  else
1568
- @property.children.each do |t|
1528
+ @property.kids.each do |t|
1569
1529
  return true if t.hasResourceAllocated?(@scenarioIdx, interval,
1570
1530
  resource)
1571
1531
  end
@@ -1629,9 +1589,9 @@ class TaskJuggler
1629
1589
  # The specified effort has been reached. The task has been fully
1630
1590
  # scheduled now.
1631
1591
  if a('forward')
1632
- propagateDate(@tentativeEnd, true)
1592
+ propagateDate(@tentativeEnd, true, true)
1633
1593
  else
1634
- propagateDate(@tentativeStart, false)
1594
+ propagateDate(@tentativeStart, false, true)
1635
1595
  end
1636
1596
  return true
1637
1597
  end
@@ -1648,7 +1608,9 @@ class TaskJuggler
1648
1608
  # For start-end-tasks without allocation, we don't have to do
1649
1609
  # anything but to set the 'scheduled' flag.
1650
1610
  @property['scheduled', @scenarioIdx] = true
1651
- @property.parent.scheduleContainer(@scenarioIdx) if @property.parent
1611
+ @property.parents.each do |parent|
1612
+ parent.scheduleContainer(@scenarioIdx)
1613
+ end
1652
1614
  return true
1653
1615
  end
1654
1616
 
@@ -1659,7 +1621,9 @@ class TaskJuggler
1659
1621
  if (a('forward') && slot + slotDuration >= a('end')) ||
1660
1622
  (!a('forward') && slot <= a('start'))
1661
1623
  @property['scheduled', @scenarioIdx] = true
1662
- @property.parent.scheduleContainer(@scenarioIdx) if @property.parent
1624
+ @property.parents.each do |parent|
1625
+ parent.scheduleContainer(@scenarioIdx)
1626
+ end
1663
1627
  return true
1664
1628
  end
1665
1629
  end
@@ -1705,7 +1669,7 @@ class TaskJuggler
1705
1669
  # sure that none of them is already exceeded.
1706
1670
  return unless limitsOk?(date)
1707
1671
 
1708
- sbIdx = @project.dateToIdx(date)
1672
+ sbIdx = @project.dateToIdx(date, false)
1709
1673
 
1710
1674
  # We first have to make sure that if there are mandatory resources
1711
1675
  # that these are all available for the time slot.
@@ -1772,17 +1736,23 @@ class TaskJuggler
1772
1736
  !limitsOk?(date, resource)
1773
1737
 
1774
1738
  if r.book(@scenarioIdx, sbIdx, @property)
1775
-
1739
+ # For effort based task we adjust the the start end (as defined by
1740
+ # the scheduling direction) to align with the first booked time
1741
+ # slot.
1776
1742
  if a('effort') > 0 && a('assignedresources').empty?
1777
1743
  if a('forward')
1778
1744
  @property['start', @scenarioIdx] = @project.idxToDate(sbIdx)
1745
+ Log << "Task #{@property.fullId} first assignment: " +
1746
+ "#{a('start')} -> #{a('end')}"
1779
1747
  a('startsuccs').each do |task, onEnd|
1780
- task.propagateDate(@scenarioIdx, a('start'), false)
1748
+ task.propagateDate(@scenarioIdx, a('start'), false, true)
1781
1749
  end
1782
1750
  else
1783
1751
  @property['end', @scenarioIdx] = @project.idxToDate(sbIdx + 1)
1752
+ Log << "Task #{@property.fullId} last assignment: " +
1753
+ "#{a('start')} -> #{a('end')}"
1784
1754
  a('endpreds').each do |task, onEnd|
1785
- task.propagateDate(@scenarioIdx, a('end'), true)
1755
+ task.propagateDate(@scenarioIdx, a('end'), true, true)
1786
1756
  end
1787
1757
  end
1788
1758
  end
@@ -1846,9 +1816,9 @@ class TaskJuggler
1846
1816
  "Only forward scheduled tasks may have booking statements.")
1847
1817
  end
1848
1818
  booking.intervals.each do |interval|
1849
- startIdx = @project.dateToIdx(interval.start)
1819
+ startIdx = @project.dateToIdx(interval.start, false)
1850
1820
  date = interval.start
1851
- endIdx = @project.dateToIdx(interval.end)
1821
+ endIdx = @project.dateToIdx(interval.end, false)
1852
1822
  tEnd = nil
1853
1823
  startIdx.upto(endIdx - 1) do |idx|
1854
1824
  tEnd = date + slotDuration
@@ -1863,6 +1833,8 @@ class TaskJuggler
1863
1833
  @tentativeEnd = tEnd if @tentativeEnd.nil? || @tentativeEnd < tEnd
1864
1834
  if !scheduled && (a('start').nil? || date < a('start'))
1865
1835
  @property['start', @scenarioIdx] = date
1836
+ Log << "Task #{@property.fullId} first booking: " +
1837
+ "#{a('start')} -> #{a('end')}"
1866
1838
  end
1867
1839
 
1868
1840
  unless a('assignedresources').include?(booking.resource)
@@ -1900,6 +1872,18 @@ class TaskJuggler
1900
1872
  !a(thisEnd + 'succs').empty? || !a(thisEnd + 'preds').empty?
1901
1873
  end
1902
1874
 
1875
+ # Return true if this task or any of its parent tasks has at least one
1876
+ # predecessor task.
1877
+ def hasPredecessors
1878
+ t = @property
1879
+ while t
1880
+ return true unless t['startpreds', @scenarioIdx].empty?
1881
+ t = t.parent
1882
+ end
1883
+
1884
+ false
1885
+ end
1886
+
1903
1887
  # Return true if this task or any of its parent tasks has at least one
1904
1888
  # sucessor task.
1905
1889
  def hasSuccessors
@@ -1912,61 +1896,76 @@ class TaskJuggler
1912
1896
  false
1913
1897
  end
1914
1898
 
1915
- def hasStrongDeps(thisEnd)
1899
+ def hasStrongDeps(atEnd)
1916
1900
  # A dependency that could determine the date on this side of the
1917
1901
  # dependency is a strong dependency. If the scheduling direction of the
1918
1902
  # task on the other side leads away from the dependency point, then the
1919
1903
  # dependency is weak. This date will influence the other date for weak
1920
- # dependencies.
1904
+ # dependencies. > means ASAP task, < means ALAP task.
1921
1905
  #
1922
- # +--- SS -> SP> : Weak
1923
- # |-+ SS -> SP< : Illegal
1924
- # +-|- SP -> SS> : Strong
1925
- # | +--- SP -> SS< : Illegal
1906
+ #
1907
+ # T2 depends on T1 start
1908
+ #
1909
+ # +--- SS -> S> : Weak
1910
+ # |-+ SS -> S< : Weak
1911
+ # +-|- SP -> S> : Strong
1912
+ # | +--- SP -> S< : Strong
1926
1913
  # +-|
1927
1914
  # +---
1928
1915
  #
1929
1916
  #
1930
- # ---+ ES -> SP> : Weak
1931
- # |-+ ES -> SP< : Strong
1932
- # ---+ | SP -> ES> : Strong
1933
- # | +--- SP -> ES< : Weak
1917
+ # T2 depends on T1 end
1918
+ # T1 precedes T2 start
1919
+ #
1920
+ # ---+ ES -> S> : Weak
1921
+ # |-+ ES -> S< : Strong
1922
+ # ---+ | SP -> E> : Strong
1923
+ # | +--- SP -> E< : Weak
1934
1924
  # +-|
1935
1925
  # +---
1936
1926
  #
1937
1927
  #
1938
- # ---+ ES -> EP> : Illegal
1939
- # |-+ ES -> EP< : Strong
1940
- # ---+ | EP -> ES> : Illegal
1941
- # -|-+ EP -> ES< : Weak
1942
- # +-|
1943
- # ---+
1928
+ # T1 precedes T2 end
1929
+ #
1930
+ # ---+ ES -> E> : Strong
1931
+ # +-| ES -> E< : Strong
1932
+ # -|-+ EP -> E> : Weak
1933
+ # ---+ | EP -> E< : Weak
1934
+ # |-+
1935
+ # ---+
1944
1936
  #
1945
1937
  # All other combinations are illegal and should be caught earlier. So,
1946
1938
  # illegal values can be considered don't care values.
1947
1939
  #
1948
- # f/t SP> SP< SS> SS< EP> EP< ES> ES<
1949
- # SP x x S x x x S W Row 1
1950
- # SS W x x x x x x x Row 2
1951
- # EP x x x x x x x W Row 3
1952
- # ES W S x x x S x x Row 4
1953
- if thisEnd == 'start'
1940
+ # f/t S> S< E> E<
1941
+ # SP S S S W Row 1
1942
+ # SS W W x x Row 2
1943
+ # EP x x W W Row 3
1944
+ # ES W S S S Row 4
1945
+ #
1946
+ # If the other end of the dependency already has a date, it's a strong
1947
+ # dependency no matter how it was set.
1948
+ unless atEnd
1954
1949
  # Row 1
1955
1950
  a('startpreds').each do |task, onEnd|
1956
1951
  if (onEnd && (task['forward', @scenarioIdx] ||
1957
- task['end', @scenarioIdx])) ||
1958
- (!onEnd && (task['forward', @scenarioIdx] ||
1959
- task['start']))
1952
+ task['end', @scenarioIdx])) || !onEnd
1960
1953
  return true
1961
1954
  end
1962
1955
  end
1956
+ # Row 2
1957
+ a('startsuccs').each do |task, onEnd|
1958
+ return true if task[onEnd ? 'end' : 'start', @scenarioIdx]
1959
+ end
1963
1960
  else
1961
+ # Row 3
1962
+ a('endpreds').each do |task, onEnd|
1963
+ return true if task[onEnd ? 'end' : 'start', @scenarioIdx]
1964
+ end
1964
1965
  # Row 4
1965
1966
  a('endsuccs').each do |task, onEnd|
1966
- if (onEnd && (!task['forward', @scenarioIdx] ||
1967
- task['end', @scenarioIdx])) ||
1968
- (!onEnd && (!task['forward', @scenarioIdx] ||
1969
- task['start', @scenarioIdx]))
1967
+ if (!onEnd && (!task['forward', @scenarioIdx] ||
1968
+ task['start', @scenarioIdx])) || onEnd
1970
1969
  return true
1971
1970
  end
1972
1971
  end
@@ -2039,7 +2038,7 @@ class TaskJuggler
2039
2038
  end
2040
2039
 
2041
2040
  @property[depType, @scenarioIdx].each do |dep|
2042
- if dep.task == depTask && dep != dependency
2041
+ if dep.task == depTask && !dep.equal?(dependency)
2043
2042
  # Remove the broken dependency. It could cause trouble later on.
2044
2043
  @property[depType, @scenarioIdx].delete(dependency)
2045
2044
  error('task_depend_multi',
@@ -2140,7 +2139,7 @@ class TaskJuggler
2140
2139
  # For container task the completion degree is the average of the
2141
2140
  # sub tasks.
2142
2141
  completion = 0.0
2143
- @property.children.each do |child|
2142
+ @property.kids.each do |child|
2144
2143
  return nil unless (comp = child.calcCompletion(@scenarioIdx))
2145
2144
  completion += comp
2146
2145
  end
@@ -2154,7 +2153,7 @@ class TaskJuggler
2154
2153
  elsif a('effort') > 0
2155
2154
  # Effort based leaf tasks. The completion degree is the percentage
2156
2155
  # of effort that has been done already.
2157
- done = getEffectiveWork(@project.dateToIdx(a('start')),
2156
+ done = getEffectiveWork(@project.dateToIdx(a('start'), false),
2158
2157
  @project.dateToIdx(@project['now']))
2159
2158
  total = @project.convertToDailyLoad(
2160
2159
  a('effort') * @project['scheduleGranularity'])
@@ -2183,6 +2182,39 @@ class TaskJuggler
2183
2182
  end
2184
2183
  end
2185
2184
 
2185
+ # Recursively compile a list of Task properties which depend on the
2186
+ # current task.
2187
+ def inputs(list, includeChildren)
2188
+ # Ignore tasks that we have already included in the list.
2189
+ return if list.include?(@property)
2190
+
2191
+ # A target must be a leaf function that has no direct or indirect
2192
+ # (through parent) following tasks. Only milestones are recognized as
2193
+ # targets.
2194
+ if @property.leaf? && !hasPredecessors && a('milestone')
2195
+ list << @property
2196
+ return
2197
+ end
2198
+
2199
+ a('startpreds').each do |t, onEnd|
2200
+ t.inputs(@scenarioIdx, list, false)
2201
+ end
2202
+
2203
+ # Check for indirect predecessors.
2204
+ if @property.parent
2205
+ @property.parent.inputs(@scenarioIdx, list, false)
2206
+ end
2207
+
2208
+ # Also include targets of child tasks. The recursive iteration of child
2209
+ # tasks is limited to the tested task only. The predecessors are not
2210
+ # iterated.
2211
+ if includeChildren
2212
+ @property.kids.each do |child|
2213
+ child.inputs(@scenarioIdx, list, true)
2214
+ end
2215
+ end
2216
+ end
2217
+
2186
2218
  # Recursively compile a list of Task properties which depend on the
2187
2219
  # current task.
2188
2220
  def targets(list, includeChildren)
@@ -2210,7 +2242,7 @@ class TaskJuggler
2210
2242
  # tasks is limited to the tested task only. The followers are not
2211
2243
  # iterated.
2212
2244
  if includeChildren
2213
- @property.children.each do |child|
2245
+ @property.kids.each do |child|
2214
2246
  child.targets(@scenarioIdx, list, true)
2215
2247
  end
2216
2248
  end
@@ -2224,7 +2256,7 @@ class TaskJuggler
2224
2256
  def turnover(startIdx, endIdx, account, resource = nil)
2225
2257
  amount = 0.0
2226
2258
  if @property.container?
2227
- @property.children.each do |child|
2259
+ @property.kids.each do |child|
2228
2260
  amount += child.turnover(@scenarioIdx, startIdx, endIdx, account,
2229
2261
  resource)
2230
2262
  end
@@ -2310,6 +2342,35 @@ class TaskJuggler
2310
2342
  "* <nowiki>#{str}</nowiki>"
2311
2343
  end
2312
2344
 
2345
+ def generateTaskList(taskList, mode)
2346
+ list = []
2347
+ taskList.each do |task|
2348
+ date = task['start', @scenarioIdx].to_s(@property.project['timeFormat'])
2349
+ case mode
2350
+ when 1
2351
+ list << "#{task.fullId}"
2352
+ when 2
2353
+ list << "#{task.name}"
2354
+ when 3
2355
+ list << "#{task.name} (#{task.fullId})"
2356
+ when 4
2357
+ list << "#{task.fullId}: #{task.name}"
2358
+ when 5
2359
+ list << "#{task.fullId} (#{date})"
2360
+ when 6
2361
+ list << "#{task.name} (#{date})"
2362
+ when 7, nil
2363
+ list << "#{task.name} (#{task.fullId}) #{date}"
2364
+ when 8
2365
+ list << "#{task.fullId}: #{task.name} #{date}"
2366
+ else
2367
+ error('bad_listmode_qt',
2368
+ "Bad listmode #{mode}. Use 1 - 8.")
2369
+ end
2370
+ end
2371
+ list
2372
+ end
2373
+
2313
2374
  end
2314
2375
 
2315
2376
  end