From a07a545df9d3394c88451b5ea1a6a1a6ffa40341 Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Tue, 18 Aug 2009 22:00:23 +0000 Subject: [PATCH] MOB-1209: Add ability to pass optional context when generating a form. Also added a sample template to demonstrate a custom set layout. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@15802 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/forms/FormService.java | 44 +++++++++++++++++++ .../alfresco/repo/forms/FormServiceImpl.java | 31 +++++++++++-- .../repo/forms/FormServiceImplTest.java | 10 +++++ .../alfresco/repo/forms/processor/Filter.java | 11 ++++- .../processor/FilteredFormProcessor.java | 27 ++++++------ .../repo/forms/processor/FormProcessor.java | 6 ++- .../processor/node/NodeFormProcessor.java | 7 +-- .../processor/node/TypeFormProcessor.java | 7 +-- 8 files changed, 117 insertions(+), 26 deletions(-) diff --git a/source/java/org/alfresco/repo/forms/FormService.java b/source/java/org/alfresco/repo/forms/FormService.java index 45609a0013..ac18083128 100644 --- a/source/java/org/alfresco/repo/forms/FormService.java +++ b/source/java/org/alfresco/repo/forms/FormService.java @@ -25,6 +25,7 @@ package org.alfresco.repo.forms; import java.util.List; +import java.util.Map; /** @@ -45,6 +46,17 @@ public interface FormService */ public Form getForm(Item item); + /** + * Returns a form representation of the given item, + * all known fields for the item are included. + * + * @param item The item to get a form for + * @param context Map representing optional context that + * can be used during retrieval of the form + * @return The Form representation + */ + public Form getForm(Item item, Map context); + /** * Returns a form representation of the given item consisting * only of the given fields. @@ -57,6 +69,20 @@ public interface FormService */ public Form getForm(Item item, List fields); + /** + * Returns a form representation of the given item consisting + * only of the given fields. + * + * @param item The item to get a form for + * @param fields Restricted list of fields to include, null + * indicates all possible fields for the item + * should be included + * @param context Map representing optional context that + * can be used during retrieval of the form + * @return The Form representation + */ + public Form getForm(Item item, List fields, Map context); + /** * Returns a form representation of the given item consisting * only of the given fields. @@ -73,6 +99,24 @@ public interface FormService */ public Form getForm(Item item, List fields, List forcedFields); + /** + * Returns a form representation of the given item consisting + * only of the given fields. + * + * @param item The item to get a form for + * @param fields Restricted list of fields to include, null + * indicates all possible fields for the item + * should be included + * @param forcedFields List of field names from 'fields' list + * that should be forcibly included, it is + * up to the form processor implementation + * to determine how to enforce this + * @param context Map representing optional context that + * can be used during retrieval of the form + * @return The Form representation + */ + public Form getForm(Item item, List fields, List forcedFields, Map context); + /** * Persists the given form representation for the given item. * diff --git a/source/java/org/alfresco/repo/forms/FormServiceImpl.java b/source/java/org/alfresco/repo/forms/FormServiceImpl.java index ea8e81aee1..e07fed5519 100644 --- a/source/java/org/alfresco/repo/forms/FormServiceImpl.java +++ b/source/java/org/alfresco/repo/forms/FormServiceImpl.java @@ -25,6 +25,7 @@ package org.alfresco.repo.forms; import java.util.List; +import java.util.Map; import org.alfresco.repo.forms.processor.FormProcessor; import org.alfresco.repo.forms.processor.FormProcessorRegistry; @@ -59,7 +60,15 @@ public class FormServiceImpl implements FormService */ public Form getForm(Item item) { - return getForm(item, null, null); + return getForm(item, null, null, null); + } + + /* + * @see org.alfresco.repo.forms.FormService#getForm(org.alfresco.repo.forms.Item, java.util.Map) + */ + public Form getForm(Item item, Map context) + { + return getForm(item, null, null, context); } /* @@ -67,13 +76,29 @@ public class FormServiceImpl implements FormService */ public Form getForm(Item item, List fields) { - return getForm(item, fields, null); + return getForm(item, fields, null, null); + } + + /* + * @see org.alfresco.repo.forms.FormService#getForm(org.alfresco.repo.forms.Item, java.util.List, java.util.Map) + */ + public Form getForm(Item item, List fields, Map context) + { + return getForm(item, fields, null, context); } /* * @see org.alfresco.repo.forms.FormService#getForm(org.alfresco.repo.forms.Item, java.util.List, java.util.List) */ public Form getForm(Item item, List fields, List forcedFields) + { + return getForm(item, fields, forcedFields, null); + } + + /* + * @see org.alfresco.repo.forms.FormService#getForm(org.alfresco.repo.forms.Item, java.util.List, java.util.List, java.util.Map) + */ + public Form getForm(Item item, List fields, List forcedFields, Map context) { if (this.processorRegistry == null) { @@ -91,7 +116,7 @@ public class FormServiceImpl implements FormService } else { - return processor.generate(item, fields, forcedFields); + return processor.generate(item, fields, forcedFields, context); } } diff --git a/source/java/org/alfresco/repo/forms/FormServiceImplTest.java b/source/java/org/alfresco/repo/forms/FormServiceImplTest.java index 26042a0670..c4fd9e5189 100644 --- a/source/java/org/alfresco/repo/forms/FormServiceImplTest.java +++ b/source/java/org/alfresco/repo/forms/FormServiceImplTest.java @@ -1034,6 +1034,16 @@ public class FormServiceImplTest extends BaseAlfrescoSpringTest assertEquals("Expecting 'overwritten' value to be 'three'", "three", value); } + public void testFormContext() throws Exception + { + Map context = new HashMap(2); + context.put("nodeRef", this.folder); + context.put("name", "Gavin Cornwell"); + + Form form = this.formService.getForm(new Item(NODE_FORM_ITEM_KIND, this.document.toString()), context); + assertNotNull(form); + } + public void testJavascriptAPI() throws Exception { Map model = new HashMap(); diff --git a/source/java/org/alfresco/repo/forms/processor/Filter.java b/source/java/org/alfresco/repo/forms/processor/Filter.java index 03ad2a2270..16b509bd75 100644 --- a/source/java/org/alfresco/repo/forms/processor/Filter.java +++ b/source/java/org/alfresco/repo/forms/processor/Filter.java @@ -25,6 +25,7 @@ package org.alfresco.repo.forms.processor; import java.util.List; +import java.util.Map; import org.alfresco.repo.forms.Form; import org.alfresco.repo.forms.FormData; @@ -57,8 +58,11 @@ public interface Filter * @param fields Restricted list of fields to include * @param forcedFields List of fields to forcibly include * @param form The Form object + * @param @param context Map representing optional context that + * can be used during retrieval of the form */ - public void beforeGenerate(Object item, List fields, List forcedFields, Form form); + public void beforeGenerate(Object item, List fields, List forcedFields, + Form form, Map context); /** * Callback used to indicate that a form has just been generated for @@ -73,8 +77,11 @@ public interface Filter * @param fields Restricted list of fields to include * @param forcedFields List of fields to forcibly include * @param form The Form object + * @param context Map representing optional context that + * can be used during retrieval of the form */ - public void afterGenerate(Object item, List fields, List forcedFields, Form form); + public void afterGenerate(Object item, List fields, List forcedFields, + Form form, Map context); /** * Callback used to indicate that the given form data is about to be diff --git a/source/java/org/alfresco/repo/forms/processor/FilteredFormProcessor.java b/source/java/org/alfresco/repo/forms/processor/FilteredFormProcessor.java index d34de2cdab..7809e366fa 100644 --- a/source/java/org/alfresco/repo/forms/processor/FilteredFormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/FilteredFormProcessor.java @@ -25,6 +25,7 @@ package org.alfresco.repo.forms.processor; import java.util.List; +import java.util.Map; import org.alfresco.repo.forms.Form; import org.alfresco.repo.forms.FormData; @@ -56,17 +57,12 @@ public abstract class FilteredFormProcessor extends AbstractFormProcessor if (logger.isDebugEnabled()) logger.debug("Set filter registry: " + this.filterRegistry + " for processor: " + this); } - - /** - * Generates a Form for the given item. - * - * @see org.alfresco.repo.forms.processor.FormProcessor#generate(org.alfresco.repo.forms.Item, java.util.List, java.util.List) - * @param item The item to generate a form for - * @param fields Restricted list of fields to include - * @param forcedFields List of fields to forcibly include - * @return The generated Form + + /* + * @see org.alfresco.repo.forms.processor.FormProcessor#generate(org.alfresco.repo.forms.Item, java.util.List, java.util.List, java.util.Map) */ - public Form generate(Item item, List fields, List forcedFields) + public Form generate(Item item, List fields, List forcedFields, + Map context) { // get the typed object representing the item Object typedItem = getTypedItem(item); @@ -79,19 +75,19 @@ public abstract class FilteredFormProcessor extends AbstractFormProcessor { for (Filter filter: this.filterRegistry.getFilters()) { - filter.beforeGenerate(typedItem, fields, forcedFields, form); + filter.beforeGenerate(typedItem, fields, forcedFields, form, context); } } // perform the actual generation of the form - internalGenerate(typedItem, fields, forcedFields, form); + internalGenerate(typedItem, fields, forcedFields, form, context); // inform all regsitered filters the form has been generated if (this.filterRegistry != null) { for (Filter filter: this.filterRegistry.getFilters()) { - filter.afterGenerate(typedItem, fields, forcedFields, form); + filter.afterGenerate(typedItem, fields, forcedFields, form, context); } } @@ -155,8 +151,11 @@ public abstract class FilteredFormProcessor extends AbstractFormProcessor * @param fields Restricted list of fields to include * @param forcedFields List of fields to forcibly include * @param form The form object being generated + * @param context Map representing optional context that + * can be used during retrieval of the form */ - protected abstract void internalGenerate(Object item, List fields, List forcedFields, Form form); + protected abstract void internalGenerate(Object item, List fields, List forcedFields, + Form form, Map context); /** * Persists the form data. diff --git a/source/java/org/alfresco/repo/forms/processor/FormProcessor.java b/source/java/org/alfresco/repo/forms/processor/FormProcessor.java index bbf6c40388..6a595dabf9 100644 --- a/source/java/org/alfresco/repo/forms/processor/FormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/FormProcessor.java @@ -25,6 +25,7 @@ package org.alfresco.repo.forms.processor; import java.util.List; +import java.util.Map; import org.alfresco.repo.forms.Form; import org.alfresco.repo.forms.FormData; @@ -67,9 +68,12 @@ public interface FormProcessor * that should be forcibly included, it is * up to the form processor implementation * to determine how to enforce this + * @param context Map representing optional context that + * can be used during retrieval of the form * @return The Form representation */ - public Form generate(Item item, List fields, List forcedFields); + public Form generate(Item item, List fields, List forcedFields, + Map context); /** * Persists the given object representing the form data diff --git a/source/java/org/alfresco/repo/forms/processor/node/NodeFormProcessor.java b/source/java/org/alfresco/repo/forms/processor/node/NodeFormProcessor.java index b5c350c99d..d8c655c834 100644 --- a/source/java/org/alfresco/repo/forms/processor/node/NodeFormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/node/NodeFormProcessor.java @@ -115,12 +115,13 @@ public class NodeFormProcessor extends ContentModelFormProcessor return nodeRef; } } - + /* - * @see org.alfresco.repo.forms.processor.FilteredFormProcessor#internalGenerate(java.lang.Object, java.util.List, java.util.List, org.alfresco.repo.forms.Form) + * @see org.alfresco.repo.forms.processor.FilteredFormProcessor#internalGenerate(java.lang.Object, java.util.List, java.util.List, org.alfresco.repo.forms.Form, java.util.Map) */ @Override - protected void internalGenerate(Object item, List fields, List forcedFields, Form form) + protected void internalGenerate(Object item, List fields, List forcedFields, + Form form, Map context) { if (logger.isDebugEnabled()) logger.debug("Generating form for: " + item); diff --git a/source/java/org/alfresco/repo/forms/processor/node/TypeFormProcessor.java b/source/java/org/alfresco/repo/forms/processor/node/TypeFormProcessor.java index 952cb0913c..8b9e4f9d82 100644 --- a/source/java/org/alfresco/repo/forms/processor/node/TypeFormProcessor.java +++ b/source/java/org/alfresco/repo/forms/processor/node/TypeFormProcessor.java @@ -124,12 +124,13 @@ public class TypeFormProcessor extends ContentModelFormProcessor // return the type definition object for the requested type return typeDef; } - + /* - * @see org.alfresco.repo.forms.processor.node.NodeFormProcessor#internalGenerate(java.lang.Object, java.util.List, java.util.List, org.alfresco.repo.forms.Form) + * @see org.alfresco.repo.forms.processor.FilteredFormProcessor#internalGenerate(java.lang.Object, java.util.List, java.util.List, org.alfresco.repo.forms.Form, java.util.Map) */ @Override - protected void internalGenerate(Object item, List fields, List forcedFields, Form form) + protected void internalGenerate(Object item, List fields, List forcedFields, + Form form, Map context) { if (logger.isDebugEnabled()) logger.debug("Generating form for item: " + item);