Pure Java, OSGI based
- Building blocks
- Core - document storage, security, life cycle
- ECM Services - uses cirem generic & configurable, no UI
- workflow
- audit
- comment
- User, Directory, MIME...
- UI - multiple supported UI frameworks
- Features - services with default UI: workflow, subscription, picture...
- Distribution - assembly of components of such above as an application.
Leveraged existing frameworks
- JBPM - business process engine
- Drools - "business logic integration platform" for rules, work flow, event processing; it plays together with JBPM
- Seam - JSF
- Apache Shindig - Social infrastructure
- Jena RDF - Resource Description Framework provider
Components / Terminologies
- Branding - company logo, style, etc.
- Content views - filter + folderish listing of contents
- query to retrieve
- contextual parameters to query (like the current document to list children)
- filter, sorting
- caching
- layouts for the results
- actions on selected documents
- hooks to provide pluggable page providers to query custom databases
- also, loose binding of listing layouts
- Templates
- a layout can define an XHTML template to-be-used in a given mode
- variables available in page
- layout - the computed layout value, can be checked of its mode and number of columns
- value or document - document model, or whatever item used as value
- .... to be continue...
- DEBUG tip: put <ui:debug hotkey="x" /> in XHTML and press ctrl-shift-x to pop-up debug window showing context. Also see http://stackoverflow.com/questions/4049531/uidebug-tag-not-working-in-facelets-jsf-2-0 for conditional rendering to only render in debug mode
- Tabs
- still bound to current document context
-
- Widget
- defines how one or several fields from a schema will be presented
- can be displayed in several modes (view, edit)
- holds information (like field label)
- can perform conversion / validation like JSF components
- definition of widget points to widget type
- show input feedback
- definition:
- name: ID in the layout context, can be as simple as "title"
- type: widget type that will manage rendering
- labels: list of lavels to use for in a given mode, or "any" mode
- translated (default true): to translate widget label (which value will be treated as a message)
- fields: list of fields (most standard widget handles only one) to be managed by the widget. Example:
- "dc:title" - schema prefix (dublincore) and path
- "#{document.attribute}" - value expression
- properties: list of properties applicable to widget in given (or "any") mode;
- For standard widget, properties are mostly set as properties to the JSF component (like <h:inputText />) that are being used underline.
- Additional properties:
- helpLabels
- widgetModes - list local modes to override the local mode from layout
- subWidgets - list widget definitions as the widget list to describe sub widgets in configuration of some complex widget types
- Widgets type
- makes the association between widget definition and the JSF component tree that will be used to render it in given mode
- Implementation relies on...
- JSF / Facelets
- existing JSF libraries (RichFaces)
- JSF Expression Language for loose binding
- a layout can apply to a document or a bean
- EL context (what is available to be accessed in the EL expression)
- ...(incomplete) to be understood...
- Theme
- Header, Logo
- Global page layouts
- Use JSF and Freemarker features
- Layout (global layout) + CSS + flavor