Technical overview
Pincette is a WebDAV-system built from the ground up in Java. It is deployed in a Tomcat application server. The following WebDAV RFCs are implemented:
- RFC 4918: HTTP Extensions for Web Distributed Authoring and Versioning
- RFC 3253: Versioning Extensions to WebDAV
- RFC 3744: WebDAV Access Control Protocol
- RFC 4331: Quota and Size Properties for Distributed Authoring and Versioning (DAV) Collections
- RFC 5397: Current Principal Extension
- RFC 5842: Binding Extensions to WebDAV
Other open standards implemented by Pincette are:
- OPDS 1.0: for using Pincette as a digital media catalogue
- OAuth 2.0: lets users log in with different account providers such as Google, Facebook or Windows Live
- JNLP: for deploying applications with Java Web Start by just copying the files to Pincette
- RSS 2.0: every folder is an RSS-feed. The automatically extracted preview and title as well as the abstract is used for modified documents
Pincette is completely stateless and transactional, which means that any modifications of the data, documents included, are done in a transactional database. Data and file corruption are therefore not possible. Another consequence is that Pincette is very scalable. You can freely add instances and load-balance over them. There is no complicated session or state management getting in the way. Moreover, no state means no memory. Only some modules that manipulate documents for extracting previews, text, etc. require memory proportional to the document size. Other than that the memory footprint of Pincette is very small.
Extensions
You can extend Pincette by writing modules for it. Modules are
installed by uploading them somewhere under the /configuration/
folder in Pincette itself and declaring their existence by modifying the
central configuration
file that is in that folder. So you don't need any back-door access to add
modules. The advanced versioning and labelling features that are available for
documents and folders also apply to modules. When anything changes they are
reloaded dynamically. Each module lives in its own class loader.
Most modules can be configured to operate starting from particular folders and/or for particular media types. There are modules for the following functions in Pincette:
- Text extraction: used for full-text search.
- Preview extraction: for presentation purposes.
- Automatic meta-data exchange: getting and setting meta-data in documents for use in Pincette.
- Storage: generating the binary stream for a document.
- I/O filters: these transform files from one type to another on the fly, which can be used in HTTP content negotiation. So, if there is a filter from XHTML to PDF, for example, and the document is requested in PDF then the filter will be used to do the conversion. This works in both ways.
- Compare documents: returns the difference between any two versions of a document.
- Merge: these can merge a base version in one branch with a contribution in another and combine the result with a target version on the first branch.
- Test differences: these modules tell if two documents are different in an efficient way. They don't calculate all the differences. The modules are used in the merge functionality.
- Dynamic content: such modules have functions with a fixed signature that are called when certain stub XML-files are requested from the system.
Integration features
The best integration feature probably is the fact that every document and folder has a URL. This is the most standard way to link a document into some other environment. The URL namespace is completely under control of the users.
Since Pincette sits in Tomcat it benefits from the possibility to use and build various authenthicators. On top of that the OAuth 2.0 implementation makes it possible to create a modern single sign-on environment.
In the browser Pincette functionality can be embedded in any web-page through Pincette's jQuery plugin. Multiple instances can be deployed on the same page and styling is completely open via CSS.
Back-office integrations are possible through a WebDAV-API. There are several and in different kinds of technologies. Pincette can also be hidden behind an application as a document store. In that case there is trust relationship between the application and Pincette, in which the application can use Pincette's system user to act on behalf of a real user through a special HTTP-header.