2.0(.X) TO 2.1 CHANGES

  • Replaced Avalon Merlin by something new called the "Daisy Runtime"
    • most users won't notice this
    • the Daisy Runtime is basically some thin infrastructure around Spring. See docs.
    • writing repository plugins (authentication schemes, extensions, ...) is now much better supported. Plugins can simply be dropped in the datadir/plugins directory. See docs and tutorial for creating an authentication scheme.
    • logging is now performed using log4j instead of Avalon logkit, as a consequence the logging configuration changed.
  • Source build: various simplifications:
    • no Merlin installation needed anymore because of the introduction of the new Daisy Runtime
    • made the development setup similar to the binary setup by also using the repository data directory concept
    • moved to Maven 1.1. The plugins don't need to be installed manually anymore
    • no Xalan jar in Maven install needed anymore
    • for the Wiki, added a "maven cocoon.download" goal to automate this step
    • and more
  • Query language:
    • For multivalue and/or hierarchical field identifiers, an index-notation is now supported to address specific values. For example $MyField[2][3]. The index is 1-based. A negative index counts from the end. To specify a hierarchy index without multivalue index, the notation $MyField[*][3] is used.
    • New function GetLinkPath(linkFieldName, includeCurrent, linkExpr): returns a HierarchyPath obtained by recursively following a link field. Only works in evaluate mode.
    • New function ReversePath(arg): takes a HierarchyPath value as argument and returns a HierarchyPath with the same elements but in reversed order.
    • New function String(arg): evaluates its argument and converts it to a string representation.
    • Concat function: in evaluate mode, non-string arguments are now accepted which will be automatically converted to strings (with same algorithm as the String function).
    • matchesPath: the path specification argument is now evaluated dynamically, allowing to use expressions in there. For example, matchesPath(Concat(ContextDoc(link), '/**'))
    • when using comparison operators with numbers or dates, it is not longer required that the datatypes match exactly, for example it is possible to compare a long with a decimal value.
    • various internal implementation cleanup and improvements.
  • Field types:
    • Allow to use hierarchical selection lists with non-hierarchical fields. In this case, the selected node will be stored in the field, in contrast with hierarchical fields where the complete path leading to the node is stored.
    • Added a new kind of link-type hierarchical selection list; one where the tree is formed by documents having a link-type field pointing to their parent document.
  • Repository API:
    • extracted the common methods of the Document and Version interfaces into a new interface called VersionedData.
    • QueryManager now provides an API to compile and evaluate arbitrary query-language expressions (previously there was only such an API for predicate expressions)
    • QueryHelper utility class: the patterns for formatting dates and times in the format accepted by the query language are now available as public strings.
    • The EvaluationContext.get/setUserId() methods have been removed. The user ID is now automatically taken from the current repository user.
    • When an entity (document, user, ...) cannot be updated due to optimistic locking, throw a ConcurrentUpdateException instead of a generic RepositoryException.
  • Publisher:
    • extended p:forEach so that it can not only run over the results of a query, but also over the results of an expression if the expression returns a link-type result (thus a VariantKey). This is partly an alternative for the p:document/@field instruction (whose implementation is now changed to make use of the forEach), but allows more possibilities, e.g. in combination with the new GetLinkPath function.
    • the p:navigationTree instruction now allows to specify a p:document subrequest which, if present, will be executed for each document node in the navigation tree, the result is inserted as first child of the respective node. This allows to annotate the document nodes with extra information about the document.
    • Publisher exceptions now include a source location, in case of an exception the current execution stack in the publisher request is also shown.
    • In certain attributes or elements, it is now possible to use expressions using ${...} syntax, where previously only fixed values where supported. This is for example useful with p:navigationTree to dynamically specify the navigation document or active document.
    • the p:performQuery instruction now allows to specify a p:document subrequest, similar as for p:navigationTree. The resulting functionality is similar to p:forEach, but gives you access to e.g. the chunk information.
    • allow faceted queries with the p:performFacetedQuery instruction.
  • Navigation Manager:
    • nodes can now optionally be annotated with the number of children they have (both the number of normally-visible nodes and the number of all nodes, including the visible when-active or hidden nodes).
    • a link node can now be conditionally hidden depending on the read access to another document
  • Document publishing:
    • the site's configured publisher request set is now also honored for extensions such as RSS feeds and publishdoc, and for the document basket aggregation.
    • a new property called displayContext is made available to the document styling XSLTs, next to the already existing isIncluded. displayContext can contain an arbitrary string value indicating the context in which the document is displayed. For the normal display of a document in the Wiki its value is "standalone", while in other cases it has other values or is empty. The displayContext is defined via the p:preparedDocuments instruction in the publisher request.
  • Tanuki wrapper scripts:
    • included binaries for more platforms (Mac, Solaris), the binary to use is automatically determined.
    • don't copy the wrapper binaries to the data directories anymore, instead require the DAISY_HOME environment variable to be set
    • make use of wrapper's cascading configuration files feature so that only local customizations have to be in the data directories, avoiding the need to manually merge changes on upgrade.
    • For Windows: fixed failing repository shutdown by adding a dependency on the "Netman" service (see DSY-457 for details).
    • Added an extra DO_NOT_USE_THESE_SCRIPTS.txt file in the wrapper/service directory.
  • Import/export tools:
    • The export-set can now specify extra schema types, namespaces and collections to be exported, that are not in used by the exported documents.
    • Field and part types used by documents, that are not part of their document type anymore, are now also exported.
    • import/export format change: there is a new info/collections.xml file
  • Faceted browser :
    • accepts a set of additional identifiers which is used in select clause of the query.
    • supports ordering on names of link value types.
  • Other, somewhat larger new functionality:
    • Shifting headers for document includes: when including one document inside another (using an include or query-and-include), it is now possible to let the headers of the included document shift with a certain amount. This can be specified by locating the cursor inside the query instruction and using the "Include settings" button on the toolbar.
    • A first experimental version of the HTML diff by our Google Summer of Code student has been integrated.
  • Other, somewhat smaller new functionality:
    • A per-site filter can now be defined for the document types that should be visible when creating a new document. This filter (using include/exclude patterns) is specified in the siteconf.xml
    • Added a "Literal HTML" document type allowing the embedding of any HTML.
    • The document editor now supports to plug in a "pre-save interaction" screen, an example of this is for eSignatures.
    • Allow to set the start number for ordered lists
  • Other small improvements:
    • Below the navigation tree, there are now both "view" and "edit" links for the navigation document, displayed when the corresponding rights are available on the navigation tree.
    • Make the guest user configurable for the guest repository provider. This allows to change the password of the guest user.
    • daisy-util.js: added a getDaisy() function to get (a singleton instance of) the Daisy object, which is somewhat nicer than having to do "new Daisy()".
    • It is now possible to get PDFs for each version of a document. Previously, the PDF was always generated for the live/last version of the document.
    • The styling of the "Variant Not Found" page has been improved to show the available variants in a tabular layout.
    • PDF publishing (in the Wiki): switched to FOP version 0.93, which should fix various issues, such as footnotes running through the body text. It also supports new features such as "keep with next" (useful for headings).
    • Upgraded to Jetty 6.1.3 (from 5.1.10), both for the Jetty embedded in the repository server as the one included in the binary distribution to run the Daisy Wiki.
  • Other small fixes:
    • The [edit] links for included documents now also show up in IE 6.
    • Admin console: don't show edit and delete links for the default language and the main branch, since these are not editable anyway.
    • Fixed bug in document type filtering through ACL (for display on "New document" page) when using the AND operator.
    • Windows bat files: paths ending on backslash (for DAISY_HOME, repo/wiki data dir) no longer cause problems (DSY-461).
    • Link extraction: include-links were not recognized if the include instruction contained a comment.
    • Book publishing: document includes in books were not working properly, due to a wrong namespace declaration being added to the first element of the included content.
    • Fulltext index: if the index is locked on repository startup, assume it is from an unclean shutdown and automatically unlock the index. A big warning is printed and an error is logged.
    • Book PDF publication: fixed the problem with embedding images when the wiki data directory was located in a path containing spaces.
    • Fixed all HTML cleaner issues reported in Jira.