Transcript
Page 1: CUST-2 New Client Configuration & Extension Points in Share

New Client Configuration & Extension Points in Share!

Dave Draper – UI Engineer – @_DaveDraper!

Page 2: CUST-2 New Client Configuration & Extension Points in Share

Background & Goals!•  Alfresco Share was not originally intended as a platform •  Spring Surf did not provide any extension mechanism •  Difficult to identify use cases

Page 3: CUST-2 New Client Configuration & Extension Points in Share

Goals!•  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: CUST-2 New Client Configuration & Extension Points in Share

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 5: CUST-2 New Client Configuration & Extension Points in Share

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 6: CUST-2 New Client Configuration & Extension Points in Share

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 7: CUST-2 New Client Configuration & Extension Points in Share

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

Components o Only Share v4.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 8: CUST-2 New Client Configuration & Extension Points in Share

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 9: CUST-2 New Client Configuration & Extension Points in Share

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)

•  Re-order Sub-Components

Page 10: CUST-2 New Client Configuration & Extension Points in Share

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)

•  Two deployment modes “auto” and “manual” (manual is default)

•  Default module configuration can be overridden when deployed

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

Page 11: CUST-2 New Client Configuration & Extension Points in Share

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 12: CUST-2 New Client Configuration & Extension Points in Share

Restrictions!•  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 13: CUST-2 New Client Configuration & Extension Points in Share

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 14: CUST-2 New Client Configuration & Extension Points in Share

Demo!

Page 15: CUST-2 New Client Configuration & Extension Points in Share

Adding New Content (Method 1)

Page 16: CUST-2 New Client Configuration & Extension Points in Share

Create some content...

WebScript Template

WebScript Descriptor

Page 17: CUST-2 New Client Configuration & Extension Points in Share

Target Area Of Share...

Page 18: CUST-2 New Client Configuration & Extension Points in Share

Define new Sub-Component...

Page 19: CUST-2 New Client Configuration & Extension Points in Share

Deploy Module...

Page 20: CUST-2 New Client Configuration & Extension Points in Share

Result...

Page 21: CUST-2 New Client Configuration & Extension Points in Share

Hiding Existing Content (Method 1)

Page 22: CUST-2 New Client Configuration & Extension Points in Share

Target Sub-Component to hide...

Page 23: CUST-2 New Client Configuration & Extension Points in Share

Result...

Page 24: CUST-2 New Client Configuration & Extension Points in Share

Conditional Hide

Page 25: CUST-2 New Client Configuration & Extension Points in Share

Create an Evaluator...

Page 26: CUST-2 New Client Configuration & Extension Points in Share

Make the Evaluator a Spring Bean...

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

Page 27: CUST-2 New Client Configuration & Extension Points in Share

Specify the Evaluator...

Page 28: CUST-2 New Client Configuration & Extension Points in Share

Result...

Page 29: CUST-2 New Client Configuration & Extension Points in Share

Adding New Content (Method 2)

Page 30: CUST-2 New Client Configuration & Extension Points in Share

Target a TemplateInstance...

Page 31: CUST-2 New Client Configuration & Extension Points in Share

Define a customization...

Page 32: CUST-2 New Client Configuration & Extension Points in Share

Create the customization file...

(in specified package)

Page 33: CUST-2 New Client Configuration & Extension Points in Share

Define a Component to bind to new Region...

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

Page 34: CUST-2 New Client Configuration & Extension Points in Share

Result...

Page 35: CUST-2 New Client Configuration & Extension Points in Share

Hiding Existing Content (Method 2)

Page 36: CUST-2 New Client Configuration & Extension Points in Share

Remove the Region...

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

Page 37: CUST-2 New Client Configuration & Extension Points in Share

Override i18n Properties

Page 38: CUST-2 New Client Configuration & Extension Points in Share

Find the property...

Page 39: CUST-2 New Client Configuration & Extension Points in Share

Define a customization...

Page 40: CUST-2 New Client Configuration & Extension Points in Share

Create the customization file...

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

customizations!

Page 41: CUST-2 New Client Configuration & Extension Points in Share

Result...

Page 42: CUST-2 New Client Configuration & Extension Points in Share

Override JavaScript Controller

Page 43: CUST-2 New Client Configuration & Extension Points in Share

Identify JavaScript model properties...

Page 44: CUST-2 New Client Configuration & Extension Points in Share

Define a customization...

Page 45: CUST-2 New Client Configuration & Extension Points in Share

Create The Customization File...

Page 46: CUST-2 New Client Configuration & Extension Points in Share

Result...

Page 47: CUST-2 New Client Configuration & Extension Points in Share

•  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 •  ...

Other Customizations...

Page 48: CUST-2 New Client Configuration & Extension Points in Share

•  Dependency directives •  <@widget> directive •  Make JavaScript widgets easier to extend •  Auto-compress and collate JavaScript and CSS resources •  ...

Roadmap...

Page 49: CUST-2 New Client Configuration & Extension Points in Share

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!

Page 50: CUST-2 New Client Configuration & Extension Points in Share

Questions?!

Page 51: CUST-2 New Client Configuration & Extension Points in Share

Top Related