taskjuggler 3.4.0 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
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