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

Tech Talk Live on Share Extensibility

Embed Size (px)

DESCRIPTION

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

Citation preview

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!