Nuxeo ECM Projects 5.4.3-SNAPSHOT

org.nuxeo.runtime.model
Class ContributionFragmentRegistry<T>

java.lang.Object
  extended by org.nuxeo.runtime.model.ContributionFragmentRegistry<T>
Direct Known Subclasses:
ActionContributionHandler, FilterContributionHandler, FlavorRegistry, PageRegistry, StyleRegistry

public abstract class ContributionFragmentRegistry<T>
extends Object

This is a contribution registry that is managing contribution fragments and merge them as needed. The implementation will be notified through #contributionUpdated(String, Object) each time you need to store or remove a contribution. Note that contribution objects that are registered by your implementation must not be modified. You can see them as immutable objects - otherwise your local changes will be lost at the next update event.

To use it you should extends this abstract implementation and implement the abstract methods.

The implementation registry doesn't need to be thread safe since it will be called from synchronized methods.

Also, the contribution object

A simple implementation is:

 public class MyRegistry extends ContributionFragmentRegistry<MyContribution> {
     public Map<String, MyContribution> registry = new HAshMap<String, MyContribution>();

     public String getContributionId(MyContribution contrib) {
         return contrib.getId();
     }

     public void contributionUpdated(String id, MyContribution contrib,
             MyContribution origContrib) {
         registry.put(id, contrib);
     }

     public void contributionRemoved(String id, MyContribution origContrib) {
         registry.remove(id);
     }

     public MyContribution clone(MyContribution contrib) {
          MyContribution clone = new MyContribution(contrib.getId());
          clone.setSomeProperty(contrib.getSomeProperty());
          ...
          return clone;
       }

     public void merge(MyContribution src, MyContribution dst) {
          dst.setSomeProperty(src.getSomeProperty());
          ...
       }
 }
 

Author:
Bogdan Stefanescu

Nested Class Summary
static class ContributionFragmentRegistry.Fragment<T>
           
static class ContributionFragmentRegistry.FragmentList<T>
           
 
Constructor Summary
ContributionFragmentRegistry()
           
 
Method Summary
 void addContribution(T contrib)
          Add a new contribution.
abstract  T clone(T orig)
          CLone the given contribution object
abstract  void contributionRemoved(String id, T origContrib)
          All the fragments in the contribution was removed.
abstract  void contributionUpdated(String id, T contrib, T newOrigContrib)
          Adds or updates a contribution.
 T getContribution(String id)
          Get a merged contribution directly from the internal registry - and avoid passing by the implementation registry.
abstract  String getContributionId(T contrib)
          Returns the contribution ID given the contribution object
 ContributionFragmentRegistry.FragmentList<T>[] getFragments()
          Get an array of all contribution fragments
abstract  void merge(T src, T dst)
          Merge 'src' into 'dst'.
 void removeContribution(T contrib)
          Remove a contribution.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ContributionFragmentRegistry

public ContributionFragmentRegistry()
Method Detail

getContributionId

public abstract String getContributionId(T contrib)
Returns the contribution ID given the contribution object

Parameters:
contrib -
Returns:

contributionUpdated

public abstract void contributionUpdated(String id,
                                         T contrib,
                                         T newOrigContrib)
Adds or updates a contribution.

If the contribution doesn't yet exists then it will be added, otherwise the value will be updated. If the given value is null the existing contribution must be removed.

The second parameter is the contribution that should be updated when merging, as well as stored and used. This usually represents a clone of the original contribution or a merge of multiple contribution fragments. Modifications on this object at application level will be lost on next contributionUpdated(String, Object, Object) call on the same object id: modifications should be done in the merge(Object, Object) method.

The last parameter is the new contribution object, unchanged (original) which was neither cloned nor merged. This object should never be modified at application level, because it will be used each time a subsequent merge is done. Also, it never should be stored.

Parameters:
id - - the id of the contribution that needs to be updated
contrib - the updated contribution object that
newOrigContrib - - the new, unchanged (original) contribution fragment that triggered the update.

contributionRemoved

public abstract void contributionRemoved(String id,
                                         T origContrib)
All the fragments in the contribution was removed. Contribution must be unregistered.

The first parameter is the contribution ID that should be remove and the second parameter the original contribution fragment that as unregistered causing the contribution to be removed.

Parameters:
id -
origContrib -

clone

public abstract T clone(T orig)
CLone the given contribution object

Parameters:
object -
Returns:

merge

public abstract void merge(T src,
                           T dst)
Merge 'src' into 'dst'. When merging only the 'dst' object is modified.

Parameters:
src - the object to copy over the 'dst' object
dst - this object is modified

addContribution

public void addContribution(T contrib)
Add a new contribution. This will start install the new contribution and will notify the implementation about the value to add. (the final value to add may not be the same object as the one added - but a merge between multiple contributions)

Parameters:
contrib -

removeContribution

public void removeContribution(T contrib)
Remove a contribution. This will uninstall the contribution and notify the implementation about the new value it should store (after re-merging contribution fragments).

Parameters:
contrib -

getContribution

public T getContribution(String id)
Get a merged contribution directly from the internal registry - and avoid passing by the implementation registry. Note that this operation will invoke a merge of existing fragments if needed.

Parameters:
id -
Returns:

getFragments

public ContributionFragmentRegistry.FragmentList<T>[] getFragments()
Get an array of all contribution fragments

Returns:

Nuxeo ECM Projects 5.4.3-SNAPSHOT

Copyright © 2011 Nuxeo SAS. All Rights Reserved.