mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged DEV/FORMS to HEAD (Merging r13070 through r13210)
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13211 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
package org.alfresco.repo.forms;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang.NotImplementedException;
|
||||
@@ -44,7 +44,7 @@ public class FormData
|
||||
*/
|
||||
public FormData()
|
||||
{
|
||||
this.data = new HashMap<String, FieldData>(8);
|
||||
this.data = new LinkedHashMap<String, FieldData>(8);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -82,6 +82,7 @@ public class FormData
|
||||
/*
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
StringBuilder buffer = new StringBuilder(super.toString());
|
||||
@@ -163,6 +164,7 @@ public class FormData
|
||||
/*
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
StringBuilder buffer = new StringBuilder(super.toString());
|
||||
|
@@ -29,6 +29,8 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.alfresco.repo.forms.AssociationFieldDefinition;
|
||||
import org.alfresco.repo.forms.Form;
|
||||
@@ -36,6 +38,7 @@ import org.alfresco.repo.forms.FormData;
|
||||
import org.alfresco.repo.forms.FormException;
|
||||
import org.alfresco.repo.forms.PropertyFieldDefinition;
|
||||
import org.alfresco.repo.forms.AssociationFieldDefinition.Direction;
|
||||
import org.alfresco.repo.forms.FormData.FieldData;
|
||||
import org.alfresco.repo.forms.PropertyFieldDefinition.FieldConstraint;
|
||||
import org.alfresco.service.cmr.dictionary.AssociationDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.Constraint;
|
||||
@@ -72,6 +75,13 @@ public class NodeHandler extends AbstractHandler
|
||||
protected DictionaryService dictionaryService;
|
||||
protected NamespaceService namespaceService;
|
||||
|
||||
/**
|
||||
* A regular expression which can be used to match property/association names.
|
||||
* These names will look like <code>"prop:cm:name"</code>.
|
||||
* The pattern can also be used to extract the "cm" and the "name" parts.
|
||||
*/
|
||||
private Pattern propertyNamePattern = Pattern.compile("prop:(.*){1}?:(.*){1}?");
|
||||
|
||||
/**
|
||||
* Sets the node service
|
||||
*
|
||||
@@ -131,14 +141,51 @@ public class NodeHandler extends AbstractHandler
|
||||
*/
|
||||
public void handlePersist(Object item, FormData data)
|
||||
{
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Persisting form for: " + item + " with data: " + data);
|
||||
|
||||
// cast to the expected NodeRef representation
|
||||
NodeRef nodeRef = (NodeRef)item;
|
||||
|
||||
// TODO: persist data using node service
|
||||
Map<QName, Serializable> submittedProperties = extractSubmittedPropsFrom(data);
|
||||
|
||||
// The call to addProperties changes the repo values of those properties
|
||||
// included in the Map, but leaves any other property values unchanged.
|
||||
//
|
||||
// Compare setProperties(..), which causes the deletion of properties that
|
||||
// are not included in the Map.
|
||||
this.nodeService.addProperties(nodeRef, submittedProperties);
|
||||
}
|
||||
|
||||
private Map<QName, Serializable> extractSubmittedPropsFrom(FormData data)
|
||||
{
|
||||
Map<QName, Serializable> result = new HashMap<QName, Serializable>();
|
||||
for (String dataKey : data.getData().keySet())
|
||||
{
|
||||
FieldData nextFieldData = data.getData().get(dataKey);
|
||||
if (nextFieldData.isFile())
|
||||
{
|
||||
//TODO Implement support for file-based submits.
|
||||
}
|
||||
else
|
||||
{
|
||||
String nextDataName = nextFieldData.getName();
|
||||
|
||||
Matcher m = this.propertyNamePattern.matcher(nextDataName);
|
||||
// Only "prop:" properties are handled here
|
||||
if (m.matches())
|
||||
{
|
||||
String qNamePrefix = m.group(1);
|
||||
String localName = m.group(2);
|
||||
QName fullQName = QName.createQName(qNamePrefix, localName, namespaceService);
|
||||
// These values are all Strings. The repo does most of the data
|
||||
// conversion work for us.
|
||||
Object nextDataObject = nextFieldData.getValue();
|
||||
|
||||
// This cast should be safe as all dataObjects are Strings.
|
||||
result.put(fullQName, (Serializable)nextDataObject);
|
||||
}
|
||||
//TODO Implement support for "assoc:" properties.
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -29,6 +29,8 @@ import org.alfresco.repo.forms.FormData;
|
||||
import org.alfresco.repo.forms.FormService;
|
||||
import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* Script object representing the form service.
|
||||
@@ -37,6 +39,7 @@ import org.alfresco.service.ServiceRegistry;
|
||||
*/
|
||||
public class ScriptFormService extends BaseScopableProcessorExtension
|
||||
{
|
||||
private static Log logger = LogFactory.getLog(ScriptFormService.class);
|
||||
/** Service Registry */
|
||||
private ServiceRegistry serviceRegistry;
|
||||
|
||||
@@ -85,11 +88,21 @@ public class ScriptFormService extends BaseScopableProcessorExtension
|
||||
*/
|
||||
public void saveForm(String item, Object postData)
|
||||
{
|
||||
FormData data = null;
|
||||
FormData dataForFormService = null;
|
||||
if (postData instanceof FormData)
|
||||
{
|
||||
dataForFormService = (FormData)postData;
|
||||
// Note on data conversion. The Repo will handle conversion of String-based
|
||||
// data into the types required by the model.
|
||||
|
||||
// convert the post data into a repo FormData object
|
||||
data = new FormData();
|
||||
//TODO Do we need special handling for submission of false booleans?
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO Need to add handling of other POST submit types here. JSON, args.
|
||||
dataForFormService = new FormData();
|
||||
}
|
||||
|
||||
formService.saveForm(item, data);
|
||||
formService.saveForm(item, dataForFormService);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user