2.3 TO 2.4 CHANGES

Document editor

In your document browser configurations you can now specify that the document browser popup should start in table mode or in preview mode. This is done by adding a startMode="previewMode|tableMode" attribute on the root element of docbrowser-....xml.

You can now control what is being searched by the FullText clause (name, contents and/or fields). For each location there is a checkbox for which the visibility (show/hide), default state (checked/unchecked) and read/write site can be configured in the documentbrowser configuration

XML formatting of Date and DateTime fields

The formatting of Date and DateTime fields in XML representations of documents (over the HTTP interface, and in the export format) has been mildly changed. 
We keep following the formats as defined in the relevant W3C recommendation, but reside to a more controlled way of serializing the Java Date objects to achieve some level of timezone-neutrality.

In detail:

  • Date fields are serialized in a more strrict YYYY-MM-DD format (stripping the time and timezone fragments ensures that no time offsets between client and server can introduce shifts to previous/next day)
  • Datetime fields are serialized after normalization to GMT (thus we now always have trailing "Z" indications on these)

Imports from previous verious should just keep on working on the new system as before (ie. possibly showing wrong value shifts when client and server have non matching time-zones. Note that this mismatch can be relieved by providing "-Duser.timezone=..." when starting the client.


Daisy now depends on Joda-time, an excellent java date and time API. The dependency is introduced via the repository API, so chances are that you will want to add it to your projects as well when upgrading.

Access control

There are two new detail permissions:

  • read live history
  • publish live history

The upgrade instructions will grant 'publish live history' to users who already have publish permissions.Read live history is not granted automatically.

API changes

Point in time related API changes

  • PublisherVersionMode, NavigationVersionMode, WikiVersionMode: these have been replaced by a single class: org.outerj.daisy.repository.VersionMode
  • new methods on Document:
    • LiveHistoryEntry addLiveHistoryEntry(Date startDate, Date endDate, long versionId)
    • void removeLiveHistoryEntry(LiveHistoryEntry);
    • LiveHistoryEntry[] getLiveHistory();
    • LiveHistoryEntry getLiveHistoryEntryAt(Date date);
    • Version getVersion(VersionMode);
    • long getVersionId(VersionMode);
    • void setRequestedLiveVersionId(long);
    • void setNewLiveStrategy(LiveStrategy);
    • Timeline getTimeline()

Important change: the 'live' version is no longer calculated by looking at the most recent published version. In fact, the version state concept is completely detached from the 'live' version.  However, for backwards compatibility reasons, if a new published version is created the default behaviour is to also make it the live version. (If you don't want this, use the new API method Document.setNewLiveStrategy(LiveStrategy)).

  • new methods in NavigationManager:
    • generateNavigationTree(..., boolean allowOld). If allowOld is false, you get the same result as the method without allowOld argument, else you can get a slightly outdated version - which is faster, especially when there are a lot of repository changes going on.
    • lookup(..., boolean allowOld).
    • reverseLookup(..., boolean allowOld).

new Repository.getRepositoryManager() method

This method is useful to get access to the RepositoryManager, and thus to be able to get a Repository for a different user, in situations where you only have access to a Repository. Concrete use-case: pre-save hooks (which are loaded before the repository itself).

new QueryManager.performDistinctQueryReturnValues method

Added new variants of the performDistinctQuery methods which directly return the values rather than an XMLBeans object. The values are returned as a List rather than a Set since they are optionally sorted. These methods are only supported in the local implementation.


new UserPropertyVisitor interface

This interface is meant to be used for setting user properties in the UserCreator. The user creator will take care of setting the scheme name and storing the user object.

new UpdatingAuthenticationScheme interface

An interface used by authentication schemes that copy user properties from the external authentication system. If the daisy user object needs to stay in sync with the external system this interface should be implemented.

new UserCreator.create method

Method allowing the setting of user properties by an authentication scheme.

Wiki full text screen configuration

A new configuration <extraConditions> has been added, see docs.

Book publishing

When you publish a book and specify to use the last version of documents, this previously only affected the documents that are part of the book, but not the book definition itself. Now this will also affect the version of the book definition itself.

Document tasks

In previous versions, when the repository was shut down, running document tasks were marked as interrupted and nothing further was done.  As of Daisy 2.4, document tasks that were interrupted by shutdown are resumed when the repository comes up again.

User auto creation / authentication schemes

You might have gathered this from the changes to the API but it is now possible to sync Daisy users with users fetched with an Authentication scheme. Read through the sample to see how it is done.

Document editor

  • Configurable tabs in the document editor. The sequence in which tabs are displayed and if tabs should be displayed at all are configured by a configuration file in the conf directory. Configuration is done on a per document type basis. Have a look at the document editor notes


  • The default locale for notification emails and messages can be set with vm parameters -Duser.language= and -Duser.country= This is a fix for DSY-782