taskjuggler 3.4.0 → 3.5.0

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 (530) hide show
  1. data/CHANGELOG +41 -0
  2. data/data/css/tjreport.css +4 -1
  3. data/data/tjp.vim +22 -11
  4. data/examples/ToDo-List/todolist.tjp +1 -1
  5. data/lib/header.tmpl +1 -1
  6. data/lib/taskjuggler/Account.rb +1 -1
  7. data/lib/taskjuggler/AccountCredit.rb +1 -1
  8. data/lib/taskjuggler/AccountScenario.rb +1 -1
  9. data/lib/taskjuggler/AlertLevelDefinitions.rb +1 -1
  10. data/lib/taskjuggler/AlgorithmDiff.rb +1 -1
  11. data/lib/taskjuggler/Allocation.rb +1 -1
  12. data/lib/taskjuggler/AppConfig.rb +1 -1
  13. data/lib/taskjuggler/AttributeBase.rb +11 -1
  14. data/lib/taskjuggler/AttributeDefinition.rb +1 -1
  15. data/lib/taskjuggler/Attributes.rb +3 -3
  16. data/lib/taskjuggler/BatchProcessor.rb +1 -1
  17. data/lib/taskjuggler/Booking.rb +1 -1
  18. data/lib/taskjuggler/Charge.rb +1 -1
  19. data/lib/taskjuggler/ChargeSet.rb +1 -1
  20. data/lib/taskjuggler/DataCache.rb +1 -1
  21. data/lib/taskjuggler/FileList.rb +1 -1
  22. data/lib/taskjuggler/HTMLDocument.rb +2 -2
  23. data/lib/taskjuggler/HTMLElements.rb +1 -1
  24. data/lib/taskjuggler/ICalendar.rb +2 -2
  25. data/lib/taskjuggler/Interval.rb +1 -1
  26. data/lib/taskjuggler/IntervalList.rb +1 -1
  27. data/lib/taskjuggler/Journal.rb +1 -1
  28. data/lib/taskjuggler/KateSyntax.rb +1 -1
  29. data/lib/taskjuggler/KeywordArray.rb +1 -1
  30. data/lib/taskjuggler/KeywordDocumentation.rb +3 -2
  31. data/lib/taskjuggler/LeaveList.rb +1 -1
  32. data/lib/taskjuggler/Limits.rb +1 -1
  33. data/lib/taskjuggler/Log.rb +1 -1
  34. data/lib/taskjuggler/LogicalExpression.rb +1 -1
  35. data/lib/taskjuggler/LogicalFunction.rb +23 -1
  36. data/lib/taskjuggler/LogicalOperation.rb +5 -2
  37. data/lib/taskjuggler/MessageHandler.rb +9 -3
  38. data/lib/taskjuggler/PTNProxy.rb +1 -1
  39. data/lib/taskjuggler/Painter.rb +1 -1
  40. data/lib/taskjuggler/Project.rb +4 -3
  41. data/lib/taskjuggler/ProjectFileParser.rb +15 -4
  42. data/lib/taskjuggler/ProjectFileScanner.rb +1 -1
  43. data/lib/taskjuggler/PropertyList.rb +2 -2
  44. data/lib/taskjuggler/PropertySet.rb +2 -2
  45. data/lib/taskjuggler/PropertyTreeNode.rb +44 -16
  46. data/lib/taskjuggler/Query.rb +23 -10
  47. data/lib/taskjuggler/RealFormat.rb +1 -1
  48. data/lib/taskjuggler/Resource.rb +1 -1
  49. data/lib/taskjuggler/ResourceScenario.rb +6 -1
  50. data/lib/taskjuggler/RichText.rb +1 -1
  51. data/lib/taskjuggler/RichText/Document.rb +1 -1
  52. data/lib/taskjuggler/RichText/Element.rb +1 -1
  53. data/lib/taskjuggler/RichText/FunctionExample.rb +3 -3
  54. data/lib/taskjuggler/RichText/FunctionHandler.rb +1 -1
  55. data/lib/taskjuggler/RichText/Parser.rb +1 -1
  56. data/lib/taskjuggler/RichText/RTFHandlers.rb +1 -1
  57. data/lib/taskjuggler/RichText/RTFNavigator.rb +1 -1
  58. data/lib/taskjuggler/RichText/RTFQuery.rb +4 -3
  59. data/lib/taskjuggler/RichText/RTFReport.rb +1 -1
  60. data/lib/taskjuggler/RichText/RTFReportLink.rb +1 -1
  61. data/lib/taskjuggler/RichText/RTFWithQuerySupport.rb +1 -1
  62. data/lib/taskjuggler/RichText/Scanner.rb +2 -1
  63. data/lib/taskjuggler/RichText/Snip.rb +1 -1
  64. data/lib/taskjuggler/RichText/SyntaxRules.rb +1 -1
  65. data/lib/taskjuggler/RichText/TOCEntry.rb +1 -1
  66. data/lib/taskjuggler/RichText/TableOfContents.rb +1 -1
  67. data/lib/taskjuggler/RuntimeConfig.rb +1 -1
  68. data/lib/taskjuggler/Scenario.rb +1 -1
  69. data/lib/taskjuggler/ScenarioData.rb +1 -1
  70. data/lib/taskjuggler/Scoreboard.rb +10 -6
  71. data/lib/taskjuggler/SheetHandlerBase.rb +1 -1
  72. data/lib/taskjuggler/SheetReceiver.rb +1 -1
  73. data/lib/taskjuggler/SheetSender.rb +1 -1
  74. data/lib/taskjuggler/Shift.rb +1 -1
  75. data/lib/taskjuggler/ShiftAssignments.rb +1 -1
  76. data/lib/taskjuggler/ShiftScenario.rb +1 -1
  77. data/lib/taskjuggler/SimpleQueryExpander.rb +1 -1
  78. data/lib/taskjuggler/StatusSheetReceiver.rb +1 -1
  79. data/lib/taskjuggler/StatusSheetSender.rb +1 -1
  80. data/lib/taskjuggler/StdIoWrapper.rb +1 -1
  81. data/lib/taskjuggler/SyntaxReference.rb +15 -1
  82. data/lib/taskjuggler/TableColumnDefinition.rb +1 -1
  83. data/lib/taskjuggler/TableColumnSorter.rb +1 -1
  84. data/lib/taskjuggler/Task.rb +1 -1
  85. data/lib/taskjuggler/TaskDependency.rb +1 -1
  86. data/lib/taskjuggler/TaskJuggler.rb +7 -4
  87. data/lib/taskjuggler/TaskScenario.rb +95 -72
  88. data/lib/taskjuggler/TernarySearchTree.rb +1 -1
  89. data/lib/taskjuggler/TextFormatter.rb +1 -1
  90. data/lib/taskjuggler/TextParser.rb +1 -1
  91. data/lib/taskjuggler/TextParser/MacroTable.rb +1 -1
  92. data/lib/taskjuggler/TextParser/Pattern.rb +1 -1
  93. data/lib/taskjuggler/TextParser/Rule.rb +6 -1
  94. data/lib/taskjuggler/TextParser/Scanner.rb +1 -1
  95. data/lib/taskjuggler/TextParser/SourceFileInfo.rb +1 -1
  96. data/lib/taskjuggler/TextParser/StackElement.rb +1 -1
  97. data/lib/taskjuggler/TextParser/State.rb +1 -1
  98. data/lib/taskjuggler/TextParser/TokenDoc.rb +1 -1
  99. data/lib/taskjuggler/TimeSheetReceiver.rb +1 -1
  100. data/lib/taskjuggler/TimeSheetSender.rb +1 -1
  101. data/lib/taskjuggler/TimeSheetSummary.rb +1 -1
  102. data/lib/taskjuggler/TimeSheets.rb +1 -1
  103. data/lib/taskjuggler/Tj3AppBase.rb +3 -2
  104. data/lib/taskjuggler/Tj3Config.rb +3 -3
  105. data/lib/taskjuggler/Tj3SheetAppBase.rb +1 -1
  106. data/lib/taskjuggler/TjException.rb +1 -1
  107. data/lib/taskjuggler/TjTime.rb +17 -12
  108. data/lib/taskjuggler/TjpExample.rb +1 -1
  109. data/lib/taskjuggler/TjpSyntaxRules.rb +378 -303
  110. data/lib/taskjuggler/URLParameter.rb +1 -1
  111. data/lib/taskjuggler/UTF8String.rb +1 -1
  112. data/lib/taskjuggler/UserManual.rb +3 -3
  113. data/lib/taskjuggler/VimSyntax.rb +1 -1
  114. data/lib/taskjuggler/WorkingHours.rb +1 -1
  115. data/lib/taskjuggler/XMLDocument.rb +1 -1
  116. data/lib/taskjuggler/XMLElement.rb +1 -1
  117. data/lib/taskjuggler/apps/Tj3.rb +20 -6
  118. data/lib/taskjuggler/apps/Tj3Client.rb +1 -1
  119. data/lib/taskjuggler/apps/Tj3Daemon.rb +1 -1
  120. data/lib/taskjuggler/apps/Tj3Man.rb +2 -2
  121. data/lib/taskjuggler/apps/Tj3SsReceiver.rb +1 -1
  122. data/lib/taskjuggler/apps/Tj3SsSender.rb +1 -1
  123. data/lib/taskjuggler/apps/Tj3TsReceiver.rb +1 -1
  124. data/lib/taskjuggler/apps/Tj3TsSender.rb +1 -1
  125. data/lib/taskjuggler/apps/Tj3TsSummary.rb +1 -1
  126. data/lib/taskjuggler/apps/Tj3WebD.rb +2 -2
  127. data/lib/taskjuggler/daemon/Daemon.rb +1 -1
  128. data/lib/taskjuggler/daemon/DaemonConnector.rb +1 -1
  129. data/lib/taskjuggler/daemon/ProcessIntercom.rb +1 -1
  130. data/lib/taskjuggler/daemon/ProjectBroker.rb +1 -1
  131. data/lib/taskjuggler/daemon/ProjectServer.rb +1 -1
  132. data/lib/taskjuggler/daemon/ReportServer.rb +1 -1
  133. data/lib/taskjuggler/daemon/ReportServlet.rb +1 -1
  134. data/lib/taskjuggler/daemon/WebServer.rb +1 -1
  135. data/lib/taskjuggler/daemon/WelcomePage.rb +1 -1
  136. data/lib/taskjuggler/deep_copy.rb +1 -1
  137. data/lib/taskjuggler/reports/AccountListRE.rb +1 -1
  138. data/lib/taskjuggler/reports/CSVFile.rb +1 -1
  139. data/lib/taskjuggler/reports/ChartPlotter.rb +1 -1
  140. data/lib/taskjuggler/reports/CollisionDetector.rb +1 -1
  141. data/lib/taskjuggler/reports/ColumnTable.rb +1 -1
  142. data/lib/taskjuggler/reports/ExportRE.rb +1 -1
  143. data/lib/taskjuggler/reports/GanttChart.rb +1 -1
  144. data/lib/taskjuggler/reports/GanttContainer.rb +1 -1
  145. data/lib/taskjuggler/reports/GanttHeader.rb +1 -1
  146. data/lib/taskjuggler/reports/GanttHeaderScaleItem.rb +1 -1
  147. data/lib/taskjuggler/reports/GanttLine.rb +1 -1
  148. data/lib/taskjuggler/reports/GanttLoadStack.rb +1 -1
  149. data/lib/taskjuggler/reports/GanttMilestone.rb +1 -1
  150. data/lib/taskjuggler/reports/GanttRouter.rb +1 -1
  151. data/lib/taskjuggler/reports/GanttTaskBar.rb +1 -1
  152. data/lib/taskjuggler/reports/HTMLGraphics.rb +1 -1
  153. data/lib/taskjuggler/reports/ICalReport.rb +1 -1
  154. data/lib/taskjuggler/reports/MspXmlRE.rb +1 -1
  155. data/lib/taskjuggler/reports/Navigator.rb +1 -1
  156. data/lib/taskjuggler/reports/NikuReport.rb +1 -1
  157. data/lib/taskjuggler/reports/Report.rb +31 -19
  158. data/lib/taskjuggler/reports/ReportBase.rb +1 -1
  159. data/lib/taskjuggler/reports/ReportContext.rb +1 -1
  160. data/lib/taskjuggler/reports/ReportTable.rb +1 -1
  161. data/lib/taskjuggler/reports/ReportTableCell.rb +1 -1
  162. data/lib/taskjuggler/reports/ReportTableColumn.rb +1 -1
  163. data/lib/taskjuggler/reports/ReportTableLegend.rb +1 -1
  164. data/lib/taskjuggler/reports/ReportTableLine.rb +1 -1
  165. data/lib/taskjuggler/reports/ResourceListRE.rb +1 -1
  166. data/lib/taskjuggler/reports/StatusSheetReport.rb +1 -1
  167. data/lib/taskjuggler/reports/TableReport.rb +4 -5
  168. data/lib/taskjuggler/reports/TableReportColumn.rb +1 -1
  169. data/lib/taskjuggler/reports/TagFile.rb +1 -1
  170. data/lib/taskjuggler/reports/TaskListRE.rb +1 -1
  171. data/lib/taskjuggler/reports/TextReport.rb +1 -1
  172. data/lib/taskjuggler/reports/TimeSheetReport.rb +1 -1
  173. data/lib/taskjuggler/reports/TjpExportRE.rb +9 -2
  174. data/lib/taskjuggler/reports/TraceReport.rb +1 -1
  175. data/lib/tj3.rb +1 -1
  176. data/lib/tj3client.rb +1 -1
  177. data/lib/tj3d.rb +1 -1
  178. data/lib/tj3man.rb +1 -1
  179. data/lib/tj3ss_receiver.rb +1 -1
  180. data/lib/tj3ss_sender.rb +1 -1
  181. data/lib/tj3ts_receiver.rb +1 -1
  182. data/lib/tj3ts_sender.rb +1 -1
  183. data/lib/tj3ts_summary.rb +1 -1
  184. data/lib/tj3webd.rb +1 -1
  185. data/manual/How_To_Contribute +5 -6
  186. data/manual/Installation +3 -3
  187. data/manual/Rich_Text_Attributes +8 -3
  188. data/manual/html/Day_To_Day_Juggling.html +3 -3
  189. data/manual/html/Getting_Started.html +3 -3
  190. data/manual/html/How_To_Contribute.html +6 -7
  191. data/manual/html/Installation.html +6 -6
  192. data/manual/html/Intro.html +3 -3
  193. data/manual/html/Reporting_Bugs.html +3 -3
  194. data/manual/html/Rich_Text_Attributes.html +5 -4
  195. data/manual/html/Software.html +3 -3
  196. data/manual/html/TaskJuggler_2x_Migration.html +3 -3
  197. data/manual/html/TaskJuggler_Internals.html +3 -3
  198. data/manual/html/The_TaskJuggler_Syntax.html +3 -3
  199. data/manual/html/Tutorial.html +3 -3
  200. data/manual/html/account.html +3 -3
  201. data/manual/html/account.task.html +3 -3
  202. data/manual/html/accountprefix.html +3 -3
  203. data/manual/html/accountreport.html +5 -5
  204. data/manual/html/accountroot.html +3 -3
  205. data/manual/html/active.html +3 -3
  206. data/manual/html/adopt.task.html +3 -3
  207. data/manual/html/aggregate.html +3 -3
  208. data/manual/html/alert.html +3 -3
  209. data/manual/html/alertlevels.html +3 -3
  210. data/manual/html/allocate.html +3 -3
  211. data/manual/html/alphabet.html +11 -4
  212. data/manual/html/alternative.html +3 -3
  213. data/manual/html/author.html +3 -3
  214. data/manual/html/auxdir.html +7 -9
  215. data/manual/html/auxdir.report.html +69 -0
  216. data/manual/html/balance.html +5 -5
  217. data/manual/html/booking.resource.html +3 -3
  218. data/manual/html/booking.task.html +3 -3
  219. data/manual/html/caption.html +3 -3
  220. data/manual/html/cellcolor.column.html +4 -4
  221. data/manual/html/celltext.column.html +3 -3
  222. data/manual/html/center.html +3 -3
  223. data/manual/html/charge.html +3 -3
  224. data/manual/html/chargeset.html +3 -3
  225. data/manual/html/columnid.html +10 -6
  226. data/manual/html/columns.html +3 -3
  227. data/manual/html/complete.html +3 -3
  228. data/manual/html/copyright.html +3 -3
  229. data/manual/html/credits.html +3 -3
  230. data/manual/html/css/tjreport.css +4 -1
  231. data/manual/html/currency.html +3 -3
  232. data/manual/html/currencyformat.html +3 -3
  233. data/manual/html/dailymax.html +3 -3
  234. data/manual/html/dailymin.html +3 -3
  235. data/manual/html/dailyworkinghours.html +3 -3
  236. data/manual/html/date.extend.html +3 -3
  237. data/manual/html/date.html +4 -3
  238. data/manual/html/definitions.html +3 -3
  239. data/manual/html/depends.html +3 -3
  240. data/manual/html/details.html +3 -3
  241. data/manual/html/disabled.html +3 -3
  242. data/manual/html/duration.html +3 -3
  243. data/manual/html/efficiency.html +3 -3
  244. data/manual/html/effort.html +3 -3
  245. data/manual/html/email.html +3 -3
  246. data/manual/html/enabled.html +3 -3
  247. data/manual/html/end.column.html +3 -3
  248. data/manual/html/end.html +3 -3
  249. data/manual/html/end.limit.html +3 -3
  250. data/manual/html/end.report.html +3 -3
  251. data/manual/html/end.timesheet.html +3 -3
  252. data/manual/html/endcredit.html +3 -3
  253. data/manual/html/epilog.html +3 -3
  254. data/manual/html/export.html +3 -3
  255. data/manual/html/extend.html +58 -13
  256. data/manual/html/fail.html +4 -4
  257. data/manual/html/fdl.html +3 -3
  258. data/manual/html/flags.account.html +3 -3
  259. data/manual/html/flags.html +3 -3
  260. data/manual/html/flags.journalentry.html +3 -3
  261. data/manual/html/flags.report.html +3 -3
  262. data/manual/html/flags.resource.html +3 -3
  263. data/manual/html/flags.statussheet.html +3 -3
  264. data/manual/html/flags.task.html +3 -3
  265. data/manual/html/flags.timesheet.html +3 -3
  266. data/manual/html/fontcolor.column.html +4 -4
  267. data/manual/html/footer.html +3 -3
  268. data/manual/html/formats.export.html +3 -3
  269. data/manual/html/formats.html +3 -3
  270. data/manual/html/functions.html +4 -4
  271. data/manual/html/gapduration.html +3 -3
  272. data/manual/html/gaplength.html +3 -3
  273. data/manual/html/halign.center.html +3 -3
  274. data/manual/html/halign.column.html +4 -4
  275. data/manual/html/halign.left.html +3 -3
  276. data/manual/html/halign.right.html +3 -3
  277. data/manual/html/hasalert.html +3 -3
  278. data/manual/html/header.html +3 -3
  279. data/manual/html/headline.html +3 -3
  280. data/manual/html/height.html +3 -3
  281. data/manual/html/hideaccount.html +5 -4
  282. data/manual/html/hidejournalentry.html +3 -3
  283. data/manual/html/hidereport.html +4 -4
  284. data/manual/html/hideresource.html +5 -4
  285. data/manual/html/hidetask.html +5 -4
  286. data/manual/html/icalreport.html +3 -3
  287. data/manual/html/include.macro.html +3 -3
  288. data/manual/html/include.project.html +3 -3
  289. data/manual/html/include.properties.html +3 -3
  290. data/manual/html/index.html +2 -2
  291. data/manual/html/inherit.extend.html +4 -4
  292. data/manual/html/interval1.html +3 -3
  293. data/manual/html/interval2.html +3 -3
  294. data/manual/html/interval3.html +3 -3
  295. data/manual/html/interval4.html +3 -3
  296. data/manual/html/isactive.html +3 -3
  297. data/manual/html/ischildof.html +3 -3
  298. data/manual/html/isdependencyof.html +3 -3
  299. data/manual/html/isdutyof.html +3 -3
  300. data/manual/html/isfeatureof.html +3 -3
  301. data/manual/html/isleaf.html +3 -3
  302. data/manual/html/ismilestone.html +3 -3
  303. data/manual/html/isongoing.html +3 -3
  304. data/manual/html/isresource.html +3 -3
  305. data/manual/html/isresponsibilityof.html +3 -3
  306. data/manual/html/istask.html +5 -5
  307. data/manual/html/isvalid.html +66 -0
  308. data/manual/html/journalattributes.html +5 -5
  309. data/manual/html/journalentry.html +3 -3
  310. data/manual/html/journalmode.html +3 -3
  311. data/manual/html/leaveallowance.html +3 -3
  312. data/manual/html/leaves.html +3 -3
  313. data/manual/html/left.html +3 -3
  314. data/manual/html/length.html +5 -5
  315. data/manual/html/limits.allocate.html +3 -3
  316. data/manual/html/limits.html +3 -3
  317. data/manual/html/limits.resource.html +3 -3
  318. data/manual/html/limits.task.html +3 -3
  319. data/manual/html/listitem.column.html +3 -3
  320. data/manual/html/listtype.column.html +3 -3
  321. data/manual/html/loadunit.html +3 -3
  322. data/manual/html/logicalexpression.html +14 -4
  323. data/manual/html/logicalflagexpression.html +3 -3
  324. data/manual/html/macro.html +3 -3
  325. data/manual/html/managers.html +3 -3
  326. data/manual/html/mandatory.html +3 -3
  327. data/manual/html/maxend.html +3 -3
  328. data/manual/html/maximum.html +3 -3
  329. data/manual/html/maxstart.html +3 -3
  330. data/manual/html/milestone.html +3 -3
  331. data/manual/html/minend.html +3 -3
  332. data/manual/html/minimum.html +3 -3
  333. data/manual/html/minstart.html +3 -3
  334. data/manual/html/monthlymax.html +3 -3
  335. data/manual/html/monthlymin.html +3 -3
  336. data/manual/html/navbar.html +10 -2
  337. data/manual/html/navigator.html +3 -3
  338. data/manual/html/newtask.html +4 -4
  339. data/manual/html/nikureport.html +3 -3
  340. data/manual/html/note.task.html +3 -3
  341. data/manual/html/now.html +5 -5
  342. data/manual/html/number.extend.html +77 -0
  343. data/manual/html/numberformat.html +5 -5
  344. data/manual/html/onend.html +3 -3
  345. data/manual/html/onstart.html +3 -3
  346. data/manual/html/opennodes.html +5 -5
  347. data/manual/html/outputdir.html +67 -0
  348. data/manual/html/overtime.booking.html +5 -5
  349. data/manual/html/period.column.html +3 -3
  350. data/manual/html/period.limit.html +3 -3
  351. data/manual/html/period.report.html +3 -3
  352. data/manual/html/period.task.html +3 -3
  353. data/manual/html/persistent.html +3 -3
  354. data/manual/html/precedes.html +3 -3
  355. data/manual/html/priority.html +3 -3
  356. data/manual/html/priority.timesheet.html +3 -3
  357. data/manual/html/project.html +4 -4
  358. data/manual/html/projectid.html +3 -3
  359. data/manual/html/projectid.task.html +3 -3
  360. data/manual/html/projectids.html +3 -3
  361. data/manual/html/projection.html +3 -3
  362. data/manual/html/prolog.html +3 -3
  363. data/manual/html/properties.html +10 -4
  364. data/manual/html/purge.html +3 -3
  365. data/manual/html/rate.html +3 -3
  366. data/manual/html/rate.resource.html +3 -3
  367. data/manual/html/rawhtmlhead.html +3 -3
  368. data/manual/html/reference.extend.html +3 -3
  369. data/manual/html/remaining.html +3 -3
  370. data/manual/html/replace.html +3 -3
  371. data/manual/html/reportprefix.html +3 -3
  372. data/manual/html/resource.html +3 -3
  373. data/manual/html/resourceattributes.html +3 -3
  374. data/manual/html/resourceprefix.html +3 -3
  375. data/manual/html/resourcereport.html +5 -5
  376. data/manual/html/resourceroot.html +3 -3
  377. data/manual/html/resources.limit.html +3 -3
  378. data/manual/html/responsible.html +3 -3
  379. data/manual/html/richtext.extend.html +3 -3
  380. data/manual/html/right.html +3 -3
  381. data/manual/html/rollupaccount.html +4 -4
  382. data/manual/html/rollupresource.html +4 -4
  383. data/manual/html/rolluptask.html +4 -4
  384. data/manual/html/scale.column.html +3 -3
  385. data/manual/html/scenario.html +3 -3
  386. data/manual/html/scenario.ical.html +3 -3
  387. data/manual/html/scenarios.export.html +3 -3
  388. data/manual/html/scenarios.html +3 -3
  389. data/manual/html/scenariospecific.extend.html +4 -4
  390. data/manual/html/scheduled.html +3 -3
  391. data/manual/html/scheduling.html +3 -3
  392. data/manual/html/select.html +3 -3
  393. data/manual/html/selfcontained.html +3 -3
  394. data/manual/html/shift.allocate.html +3 -3
  395. data/manual/html/shift.html +4 -4
  396. data/manual/html/shift.resource.html +3 -3
  397. data/manual/html/shift.task.html +3 -3
  398. data/manual/html/shift.timesheet.html +3 -3
  399. data/manual/html/shifts.allocate.html +3 -3
  400. data/manual/html/shifts.resource.html +3 -3
  401. data/manual/html/shifts.task.html +3 -3
  402. data/manual/html/shorttimeformat.html +3 -3
  403. data/manual/html/sloppy.booking.html +3 -3
  404. data/manual/html/sloppy.projection.html +3 -3
  405. data/manual/html/sortaccounts.html +3 -3
  406. data/manual/html/sortjournalentries.html +3 -3
  407. data/manual/html/sortresources.html +3 -3
  408. data/manual/html/sorttasks.html +3 -3
  409. data/manual/html/start.column.html +3 -3
  410. data/manual/html/start.html +3 -3
  411. data/manual/html/start.limit.html +3 -3
  412. data/manual/html/start.report.html +3 -3
  413. data/manual/html/startcredit.html +3 -3
  414. data/manual/html/status.statussheet.html +3 -3
  415. data/manual/html/status.timesheet.html +3 -3
  416. data/manual/html/statussheet.html +3 -3
  417. data/manual/html/statussheetreport.html +3 -3
  418. data/manual/html/strict.projection.html +3 -3
  419. data/manual/html/summary.html +3 -3
  420. data/manual/html/supplement.html +3 -3
  421. data/manual/html/supplement.resource.html +3 -3
  422. data/manual/html/supplement.task.html +3 -3
  423. data/manual/html/tagfile.html +3 -3
  424. data/manual/html/task.html +3 -3
  425. data/manual/html/task.statussheet.html +3 -3
  426. data/manual/html/task.timesheet.html +3 -3
  427. data/manual/html/taskattributes.html +3 -3
  428. data/manual/html/taskprefix.html +3 -3
  429. data/manual/html/taskreport.html +5 -5
  430. data/manual/html/taskroot.export.html +3 -3
  431. data/manual/html/taskroot.html +3 -3
  432. data/manual/html/text.extend.html +3 -3
  433. data/manual/html/textreport.html +5 -5
  434. data/manual/html/timeformat.html +3 -3
  435. data/manual/html/timeformat1.html +3 -3
  436. data/manual/html/timeformat2.html +3 -3
  437. data/manual/html/timeoff.nikureport.html +3 -3
  438. data/manual/html/timesheet.html +3 -3
  439. data/manual/html/timesheetreport.html +3 -3
  440. data/manual/html/timezone.export.html +3 -3
  441. data/manual/html/timezone.html +3 -3
  442. data/manual/html/timezone.report.html +3 -3
  443. data/manual/html/timezone.shift.html +3 -3
  444. data/manual/html/timingresolution.html +3 -3
  445. data/manual/html/title.column.html +3 -3
  446. data/manual/html/title.html +3 -3
  447. data/manual/html/toc.html +276 -248
  448. data/manual/html/tooltip.column.html +4 -4
  449. data/manual/html/tracereport.html +5 -5
  450. data/manual/html/trackingscenario.html +3 -3
  451. data/manual/html/treelevel.html +3 -3
  452. data/manual/html/vacation.html +3 -3
  453. data/manual/html/vacation.resource.html +3 -3
  454. data/manual/html/vacation.shift.html +3 -3
  455. data/manual/html/warn.html +4 -4
  456. data/manual/html/weeklymax.html +3 -3
  457. data/manual/html/weeklymin.html +3 -3
  458. data/manual/html/weekstartsmonday.html +3 -3
  459. data/manual/html/weekstartssunday.html +3 -3
  460. data/manual/html/width.column.html +4 -4
  461. data/manual/html/width.html +3 -3
  462. data/manual/html/work.html +3 -3
  463. data/manual/html/workinghours.project.html +3 -3
  464. data/manual/html/workinghours.resource.html +3 -3
  465. data/manual/html/workinghours.shift.html +3 -3
  466. data/manual/html/yearlyworkingdays.html +3 -3
  467. data/spec/Color_spec.rb +2 -2
  468. data/spec/ICalendar_spec.rb +1 -1
  469. data/spec/IntervalList_spec.rb +1 -1
  470. data/spec/ProjectBroker_spec.rb +1 -1
  471. data/spec/StatusSheets_spec.rb +1 -1
  472. data/spec/TableColumnSorter_spec.rb +2 -2
  473. data/spec/TernarySearchTree_spec.rb +1 -1
  474. data/spec/TimeSheets_spec.rb +1 -1
  475. data/spec/Tj3Daemon_spec.rb +1 -1
  476. data/spec/Tj3_spec.rb +1 -1
  477. data/spec/TraceReport_spec.rb +2 -2
  478. data/spec/support/DaemonControl.rb +1 -1
  479. data/spec/support/spec_helper.rb +1 -1
  480. data/tasks/gem.rake +7 -1
  481. data/tasks/rdoc.rake +5 -1
  482. data/test/MessageChecker.rb +1 -1
  483. data/test/ReferenceGenerator.rb +1 -1
  484. data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +14 -14
  485. data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +1 -1
  486. data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +62 -10
  487. data/test/TestSuite/Export-Reports/refs/Shift.tjp +1 -1
  488. data/test/TestSuite/Scheduler/Correct/DateAndDep.tjp +25 -0
  489. data/test/TestSuite/Scheduler/Correct/hammock.tjp +27 -0
  490. data/test/TestSuite/Scheduler/Errors/container_milestone.tjp +13 -0
  491. data/test/TestSuite/Scheduler/Errors/{weak_end_dep.tjp → impossible_end_dep.tjp} +2 -2
  492. data/test/TestSuite/Scheduler/Errors/{weak_start_dep.tjp → impossible_start_dep.tjp} +2 -2
  493. data/test/TestSuite/Scheduler/Errors/sched_runaway.tjp +20 -0
  494. data/test/TestSuite/Scheduler/Errors/{task_pred_before_gl.tjp → task_pred_before_1.tjp} +1 -1
  495. data/test/TestSuite/Scheduler/Errors/{task_pred_before_gd.tjp → task_pred_before_2.tjp} +1 -1
  496. data/test/TestSuite/Scheduler/Errors/{task_succ_after_gl.tjp → task_succ_after_1.tjp} +1 -1
  497. data/test/TestSuite/Scheduler/Errors/{task_succ_after_gd.tjp → task_succ_after_2.tjp} +1 -1
  498. data/test/TestSuite/Syntax/Correct/CustomAttributes.tjp +53 -9
  499. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +11 -0
  500. data/test/TjpGen.rb +1 -1
  501. data/test/all.rb +1 -1
  502. data/test/test_AlgorithmDiff.rb +1 -1
  503. data/test/test_BatchProcessor.rb +1 -1
  504. data/test/test_CSV-Reports.rb +1 -1
  505. data/test/test_CSVFile.rb +1 -1
  506. data/test/test_CollisionDetector.rb +1 -1
  507. data/test/test_Export-Reports.rb +1 -1
  508. data/test/test_Journal.rb +1 -1
  509. data/test/test_Limits.rb +1 -1
  510. data/test/test_LogicalExpression.rb +1 -1
  511. data/test/test_MacroTable.rb +1 -1
  512. data/test/test_Project.rb +1 -1
  513. data/test/test_ProjectFileScanner.rb +1 -1
  514. data/test/test_PropertySet.rb +1 -1
  515. data/test/test_Query.rb +1 -1
  516. data/test/test_RealFormat.rb +1 -1
  517. data/test/test_ReportGenerator.rb +1 -1
  518. data/test/test_RichText.rb +1 -1
  519. data/test/test_Scheduler.rb +1 -1
  520. data/test/test_ShiftAssignments.rb +1 -1
  521. data/test/test_SimpleQueryExpander.rb +1 -1
  522. data/test/test_Syntax.rb +1 -1
  523. data/test/test_TextFormatter.rb +1 -1
  524. data/test/test_TjTime.rb +1 -1
  525. data/test/test_TjpExample.rb +1 -1
  526. data/test/test_URLParameter.rb +1 -1
  527. data/test/test_UTF8String.rb +1 -1
  528. data/test/test_WorkingHours.rb +1 -1
  529. data/test/test_deep_copy.rb +1 -1
  530. metadata +26 -14
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = Interval.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = IntervalList.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = Journal.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = KateSyntax.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = KeywordArray.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = KeywordDocumentation.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -688,7 +688,8 @@ class TaskJuggler
688
688
  return nil if @pattern.supportLevel == :removed
689
689
 
690
690
  if @pattern.exampleFile
691
- exampleDir = AppConfig.dataDirs('test')[0] + "TestSuite/Syntax/Correct/"
691
+ exampleDir = File.join(AppConfig.dataDirs('test')[0], 'TestSuite',
692
+ 'Syntax', 'Correct')
692
693
  example = TjpExample.new
693
694
  fileName = "#{exampleDir}/#{@pattern.exampleFile}.tjp"
694
695
  example.open(fileName)
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = LeaveList.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = Limits.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = Log.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = LogicalExpression.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = LogicalFunction.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -36,6 +36,7 @@ class TaskJuggler
36
36
  'isresource' => 0,
37
37
  'isresponsibilityof' => 2,
38
38
  'istask' => 0,
39
+ 'isvalid' => 1,
39
40
  'treelevel' => 0
40
41
  }
41
42
 
@@ -231,6 +232,27 @@ class TaskJuggler
231
232
  property.is_a?(Task)
232
233
  end
233
234
 
235
+ def isvalid(expr, args)
236
+ property = properties(expr)[0]
237
+ project = property.project
238
+ attr = args[0]
239
+ scenario, attr = args[0].split('.')
240
+ if attr.nil?
241
+ attr = scenario
242
+ scenario = nil
243
+ end
244
+ expr.error("Argument must not be empty") unless attr
245
+ if scenario && (scenarioIdx = project.scenarioIdx(scenario)).nil?
246
+ expr.error("Unknown scenario '#{scenario}' used for function " +
247
+ "isvalid()")
248
+ end
249
+ unless property.propertySet.knownAttribute?(attr)
250
+ expr.error("Unknown attribute '#{attr}' used for function " +
251
+ "isvalid()")
252
+ end
253
+ !property[attr, scenarioIdx].nil?
254
+ end
255
+
234
256
  def treelevel(expr, args)
235
257
  property = properties(expr)[0]
236
258
  return 0 unless property
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = LogicalOperation.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -191,7 +191,7 @@ class TaskJuggler
191
191
  # To evaluate a property attribute we use the Query mechanism to retrieve
192
192
  # the value.
193
193
  def eval(expr)
194
- query = expr.query
194
+ query = expr.query.dup
195
195
  query.scenarioIdx = @scenario.sequenceNo - 1
196
196
  query.attributeId = @operand1
197
197
  query.process
@@ -207,6 +207,9 @@ class TaskJuggler
207
207
  # names are shown, otherwise their values.
208
208
  def to_s(query)
209
209
  if query
210
+ query = query.dup
211
+ query.scenarioIdx = @scenario.sequenceNo - 1
212
+ query.attributeId = @operand1
210
213
  query.process
211
214
  query.to_s
212
215
  else
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = MessageHandler.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -136,6 +136,8 @@ class TaskJuggler
136
136
  @logLevel = 3
137
137
  # The full file name of the log file.
138
138
  @logFile = nil
139
+ # Toggle if scenario ids are included in the messages or not.
140
+ @hideScenario = true
139
141
  # The name of the current application
140
142
  @appName = 'unknown'
141
143
  # Set to true if program should be exited on warnings.
@@ -168,7 +170,6 @@ class TaskJuggler
168
170
  @messages = []
169
171
  end
170
172
 
171
-
172
173
  # Set the console output level.
173
174
  def outputLevel=(level)
174
175
  @outputLevel = checkLevel(level)
@@ -179,6 +180,10 @@ class TaskJuggler
179
180
  @logLevel = checkLevel(level)
180
181
  end
181
182
 
183
+ def hideScenario=(yesNo)
184
+ @hideScenario = yesNo
185
+ end
186
+
182
187
  # Generate a fatal message that will abort the application.
183
188
  def fatal(id, message, sourceFileInfo = nil, line = nil, data = nil,
184
189
  scenario = nil)
@@ -268,7 +273,8 @@ class TaskJuggler
268
273
  # Treat criticals like errors but without generating another
269
274
  # exception.
270
275
  msg = Message.new(type == :critical ? :error : type, id, message,
271
- sourceFileInfo, line, data, scenario)
276
+ sourceFileInfo, line, data,
277
+ @hideScenario ? nil : scenario)
272
278
  @messages << msg
273
279
 
274
280
  # Append the message to the log file if requested by the user.
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = PTNProxy.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = Painter.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = Project.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -71,6 +71,7 @@ class TaskJuggler
71
71
  # members: the tjp syntax token, the user visible name and the
72
72
  # associated color as RGB byte array.
73
73
  'alertLevels' => AlertLevelDefinitions.new,
74
+ 'auxdir' => '',
74
75
  'copyright' => nil,
75
76
  'costaccount' => nil,
76
77
  'currency' => "EUR",
@@ -337,7 +338,7 @@ class TaskJuggler
337
338
  [ 'accountroot', 'Account Root', PropertyAttribute,
338
339
  true, false, false, nil ],
339
340
  [ 'auxdir', 'Auxiliary files directory', StringAttribute,
340
- true, false, false, '' ],
341
+ true, true, false, '' ],
341
342
  [ 'bsi', 'BSI', StringAttribute,
342
343
  false, false, false, '' ],
343
344
  [ 'caption', 'Caption', RichTextAttribute,
@@ -477,7 +478,7 @@ class TaskJuggler
477
478
  # context of enclosing reports needs to be preserved. Therefor we use a
478
479
  # stack to implement this.
479
480
  @reportContexts = []
480
- @outputDir = ''
481
+ @outputDir = './'
481
482
  @warnTsDeltas = false
482
483
  end
483
484
 
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = ProjectFileParser.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -193,14 +193,17 @@ class TaskJuggler
193
193
  # Register the new Attribute type with the Property set it should belong
194
194
  # to.
195
195
  @propertySet.addAttributeType(AttributeDefinition.new(
196
- @val[1], @val[2], type, inherit, false, scenarioSpecific, default, true))
196
+ @val[1], @val[2], type, inherit, false, scenarioSpecific, default,
197
+ true))
197
198
 
198
199
  # Add the new user-defined attribute as reportable attribute to the parser
199
200
  # rule.
200
201
  oldCurrentRule = @cr
201
202
  @cr = @rules[:reportableAttributes]
202
- singlePattern('_' + @val[1])
203
- descr(@val[2])
203
+ unless @cr.include?(@val[1])
204
+ singlePattern('_' + @val[1])
205
+ descr(@val[2])
206
+ end
204
207
  @cr = oldCurrentRule
205
208
 
206
209
  scenarioSpecific
@@ -265,6 +268,14 @@ class TaskJuggler
265
268
  @property.typeSpec = type
266
269
  @property.sourceFileInfo = sourceFileInfo
267
270
  @property.inheritAttributes
271
+
272
+ if block_given?
273
+ # The default attribute values for this report type have to be set in
274
+ # 'inherited' mode since they are not user provided.
275
+ AttributeBase.setMode(1)
276
+ yield
277
+ AttributeBase.setMode(0)
278
+ end
268
279
  end
269
280
 
270
281
  # If the @limitResources list is not empty, we have to create a Limits
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = ProjectFileScanner.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = PropertyList.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -191,7 +191,7 @@ class TaskJuggler
191
191
  def index
192
192
  i = 0
193
193
  @items.each do |p|
194
- p.set('index', i += 1)
194
+ p.force('index', i += 1)
195
195
  end
196
196
  end
197
197
 
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = PropertySet.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -242,7 +242,7 @@ class TaskJuggler
242
242
  end
243
243
  bsi += idx.to_s
244
244
  end
245
- p.set('bsi', bsi)
245
+ p.force('bsi', bsi)
246
246
  end
247
247
  end
248
248
 
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # = PropertyTreeNode.rb -- The TaskJuggler III Project Management Software
5
5
  #
6
- # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
7
7
  # by Chris Schlaeger <chris@linux.com>
8
8
  #
9
9
  # This program is free software; you can redistribute it and/or modify
@@ -423,10 +423,28 @@ class TaskJuggler
423
423
  end
424
424
  end
425
425
 
426
+ # Set the non-scenario-specific attribute with ID _attributeId_ to
427
+ # _value_. No further checks are done.
428
+ def force(attributeId, value)
429
+ @attributes[attributeId].set(value)
430
+ end
431
+
426
432
  # Set the non-scenario-specific attribute with ID _attributeId_ to _value_.
427
- # In case the attribute does not exist, an exception is raised.
433
+ # In case an already provided value is overwritten again, an exeception is
434
+ # raised.
428
435
  def set(attributeId, value)
429
- @attributes[attributeId].set(value)
436
+ attr = @attributes[attributeId]
437
+ # Assignments to list attributes always append. We don't
438
+ # consider this an overwrite.
439
+ overwrite = attr.provided && !attr.isList?
440
+ attr.set(value)
441
+
442
+ # We only raise the overwrite error after the value has been set.
443
+ if overwrite
444
+ raise AttributeOverwrite,
445
+ "Overwriting a previously provided value for attribute " +
446
+ "#{attributeId}"
447
+ end
430
448
  end
431
449
 
432
450
  # Set the scenario specific attribute with ID _attributeId_ for the
@@ -434,36 +452,46 @@ class TaskJuggler
434
452
  # attribute must not be scenario specific. In case the attribute does not
435
453
  # exist, an exception is raised.
436
454
  def []=(attributeId, scenario, value)
455
+ overwrite = false
456
+
437
457
  if scenario
438
458
  if AttributeBase.mode == 0
439
459
  # If we get values in 'provided' mode, we copy them immedidately to
440
460
  # all derived scenarios.
441
- overwrite = false
442
461
  @project.scenario(scenario).all.each do |sc|
443
462
  scenarioIdx = @project.scenarioIdx(sc)
463
+ attr = @scenarioAttributes[scenarioIdx][attributeId]
444
464
 
445
- if @scenarioAttributes[scenarioIdx][attributeId].provided
465
+ if attr.provided && !attr.isList?
466
+ # Assignments to list attributes always append. We don't
467
+ # consider this an overwrite.
446
468
  overwrite = true
447
469
  end
448
470
 
449
471
  if scenarioIdx == scenario
450
- @scenarioAttributes[scenarioIdx][attributeId].set(value)
472
+ attr.set(value)
451
473
  else
452
- @scenarioAttributes[scenarioIdx][attributeId].inherit(value)
474
+ attr.inherit(value)
453
475
  end
454
476
  end
455
- # We only raise the overwrite error after all scenarios have been
456
- # set. For some attributes the overwrite is actually allowed.
457
- if overwrite
458
- raise AttributeOverwrite,
459
- "Overwriting a previously provided value for attribute " +
460
- "#{attributeId}"
461
- end
462
477
  else
463
- @scenarioAttributes[scenario][attributeId].set(value)
478
+ attr = @scenarioAttributes[scenario][attributeId]
479
+ overwrite = attr.provided && !attr.isList?
480
+
481
+ attr.set(value)
464
482
  end
465
483
  else
466
- @attributes[attributeId].set(value)
484
+ attr = @attributes[attributeId]
485
+ overwrite = attr.provided && !attr.isList?
486
+ attr.set(value)
487
+ end
488
+
489
+ # We only raise the overwrite error after all scenarios have been
490
+ # set. For some attributes the overwrite is actually allowed.
491
+ if overwrite
492
+ raise AttributeOverwrite,
493
+ "Overwriting a previously provided value for attribute " +
494
+ "#{attributeId}"
467
495
  end
468
496
  end
469
497