Tech Talk Live on Share Extensibility

52
New Client Config & Extension Points in Share Dave Draper @_DaveDraper

description

Slide deck to accompany Tesch Talk Live on New Client Config and Extension Points in Alfresco Share

Transcript of Tech Talk Live on Share Extensibility

Page 1: Tech Talk Live on Share Extensibility

New Client Config & Extension Points in Share

Dave Draper @_DaveDraper

!

Page 2: Tech Talk Live on Share Extensibility

Background

•  Alfresco Share was not originally intended as a platform

•  Spring Surf did not provide any extension mechanism

•  Difficult to identify use cases

Page 3: Tech Talk Live on Share Extensibility

Goals (for 4.0)

•  Ensure that Spring Surf continues to be compatible with previous Alfresco releases (i.e. Avoid branching)

•  Minimize Share code changes •  Provide the ability to easily extend Share

without copying and pasting code •  Provide extensions through simple JAR

deployment

Page 4: Tech Talk Live on Share Extensibility

Goals (for next major release)

•  Make customizing client-side JavaScript widgets simpler

•  Convert Share WebScripts to common “boiler-plate” template

•  Move dependency requests into WebScript “.html.ftl” files

•  Remove Share WebScript “.head.ftl” files

Page 5: Tech Talk Live on Share Extensibility

Solution Overview

•  Two distinct approaches to extension o  Customization by targeting existing files o  Customization through Component configuration

•  Creation of in-memory output model o  Provides opportunity to amend default output o  Each FreeMarker template gets an output model o  Models can are nested

•  Introduction of Sub-Components o  Solves 1-1 Region to Component mapping problem

Page 6: Tech Talk Live on Share Extensibility

File Customization

•  Works with Templates or WebScripts •  Can extend i18n properties, JavaScript

controllers & FreeMarker templates •  FreeMarker extensions depend upon

custom directives – <@region> & <@markup> – Entirely abstract framework – scope for adding

new directives

Page 7: Tech Talk Live on Share Extensibility

What Can You Do With This?

•  Modify Surf templates to add, remove, modify Component bindings

•  Change display labels •  Modify the content displayed by updating

the model

Page 8: Tech Talk Live on Share Extensibility

Sub-Components

•  A Sub-Component maps to a WebScript •  Only AdvancedComponents support Sub-

Components o  Only Share 4.0 uses AdvancedComponents by default o  Configurable through Surf configuration

•  Legacy configuration conversion o  Components become Sub-Components

•  Support for dynamic evaluation of parameters against request

Page 9: Tech Talk Live on Share Extensibility

Sub-Component Evaluations

•  A Sub-Component can have zero or more Evaluations

•  Each Evaluation can use zero or more Evaluators

•  If all Evaluators are successful then Evaluation overrides Sub-Component defaults

•  WebScript URL, properties and index can be overridden

Page 10: Tech Talk Live on Share Extensibility

What Can You Do With This?

•  Add, remove and modify the content within a Component

•  Have a Component display different content dynamically based on request information (e.g. The Site being accessed, the current User)

Page 11: Tech Talk Live on Share Extensibility

Extensions & Modules •  An “Extension” can contain zero or more “Modules” •  An Extension can be configured within the application

(e.g. Portlet extension) or externally in a JAR (e.g. RM extension)

•  Three deployment modes “auto”, “enable-auto-deploy” and “manual” (manual is default)

•  Default module configuration can be overridden when deployed

•  Modules can be dynamically deployed and removed without server restart.

Page 12: Tech Talk Live on Share Extensibility

Benefits

•  Easy to add new coarse grained content to existing Share pages

•  Easy to override i18n properties for WebScripts

•  Scope for future enhancements using in-memory output model (i.e. new FreeMarker directives)

Page 13: Tech Talk Live on Share Extensibility

Restrictions (in 4.0)

•  Still difficult to extend JavaScript widgets for fine grained changes

•  Limited use of <@markup> directive in Share

•  Sub-Component extensions only work with WebScripts

•  Limited control over module overrides at deployment

Page 14: Tech Talk Live on Share Extensibility

Additional Tooling

•  “SurfBug”: identifies the Spring Surf elements on each page: o  Sub-Components & Component bindings, properties &

evaluation results o  Contributing file paths o  WebScript information o  Customization data (i.e. use of extensibility directives)

Page 15: Tech Talk Live on Share Extensibility

Additional Dependency Handling

•  Use <dependencies> element as a child of <customization> element in Module configuration:

<dependencies> <css>/res/demo/dependencies/styles.css</css> <js>/res/demo/dependencies/script.js</js> </dependencies>

Page 16: Tech Talk Live on Share Extensibility

Share Configuration Support

•  Available from 4.0.2 •  Use of <configurations> element as a

child of <module> element •  Allows dynamically evaluated Share

configuration changes (i.e. that would typically be found in “share-config.xml”)

•  MUST include all configuration – it is not an augment capability

Page 17: Tech Talk Live on Share Extensibility

Demos

Page 18: Tech Talk Live on Share Extensibility

Adding New Content (Method 1)

Page 19: Tech Talk Live on Share Extensibility

Create some content...

WebScript Template

WebScript Descriptor

Page 20: Tech Talk Live on Share Extensibility

Target Area Of Share...

Page 21: Tech Talk Live on Share Extensibility

Define new Sub-Component...

Page 22: Tech Talk Live on Share Extensibility

Deploy Module...

Page 23: Tech Talk Live on Share Extensibility

Result...

Page 24: Tech Talk Live on Share Extensibility

Hiding Existing Content (Method 1)

Page 25: Tech Talk Live on Share Extensibility

Target Sub-Component to hide...

Page 26: Tech Talk Live on Share Extensibility

Result...

Page 27: Tech Talk Live on Share Extensibility

Conditional Hide

Page 28: Tech Talk Live on Share Extensibility

Create an Evaluator...

Page 29: Tech Talk Live on Share Extensibility

Make the Evaluator a Spring Bean...

org.springframework.extensions.surf.spring-surf-extensibility-context.xml

Page 30: Tech Talk Live on Share Extensibility

Specify the Evaluator...

Page 31: Tech Talk Live on Share Extensibility

Result...

Page 32: Tech Talk Live on Share Extensibility

Adding New Content (Method 2)

Page 33: Tech Talk Live on Share Extensibility

Target a TemplateInstance...

Page 34: Tech Talk Live on Share Extensibility

Define a customization...

Page 35: Tech Talk Live on Share Extensibility

Create the customization file...

(in specified package)

Page 36: Tech Talk Live on Share Extensibility

Define a Component to bind to new Region...

(re-using the WebScript from the earlier example to provide content)

Page 37: Tech Talk Live on Share Extensibility

Result...

Page 38: Tech Talk Live on Share Extensibility

Hiding Existing Content (Method 2)

Page 39: Tech Talk Live on Share Extensibility

Remove the Region... (Same target, different action)

Other actions are available... § “after” § “modify”

Page 40: Tech Talk Live on Share Extensibility

Override i18n Properties

Page 41: Tech Talk Live on Share Extensibility

Find the property...

Page 42: Tech Talk Live on Share Extensibility

Define a customization...

Page 43: Tech Talk Live on Share Extensibility

Create the customization file...

Note that the location of a WebScript customization is at a different path root than for TemplateInstance customizations!

Page 44: Tech Talk Live on Share Extensibility

Result...

Page 45: Tech Talk Live on Share Extensibility

Override JavaScript Controller

Page 46: Tech Talk Live on Share Extensibility

Identify JavaScript model properties...

Page 47: Tech Talk Live on Share Extensibility

Define a customization...

Page 48: Tech Talk Live on Share Extensibility

Create The Customization File...

Page 49: Tech Talk Live on Share Extensibility

Result...

Page 50: Tech Talk Live on Share Extensibility

Other Demos (if time allows)

•  Site conditional Flash upload •  User conditional help •  Additional dependencies •  Document Library extension

Page 51: Tech Talk Live on Share Extensibility

Other Customizations…

•  Re-order entire pages (add + remove regions)

•  Auto readme (see Blog post) •  PeerBind Chat Service (see David

Webster’s blog) •  Resource Management module •  Portlet module •  ...

Page 52: Tech Talk Live on Share Extensibility

Additional Reading

•  Lots more in-depth information and tutorials available at: http://blogs.alfresco.com/wp/ddraper

•  Alfresco Surf Development Forum •  More blogs to come!