mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V2.1 to HEAD
6386: Fix for AR-1649 6387: Fix for AR-1645 6388: Updated Polish messages 6389: Updated security providers 6392: Add support to log in as guest with any password (if guest is allowed) 6393: AR-1562 : Cannot directly exit/disable Alfresco JavaScript Debugger window 6394: Allow creation of PropertyValue persisted properties without knowing the type QName 6397: Log Serializable properties don't cause infinte waits 6398: Build fix and tidy up for authentication chaining Resolved conflicted state of 'root\projects\repository\source\java\org\alfresco\repo\security\authentication\AuthenticationUtil.java' 6402: AR-1643 Web Script args object does not handle multi-value arguments 6407: Removed use of QName "{}silly" as a data type definition. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6728 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -29,11 +29,13 @@ import java.io.Writer;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.alfresco.repo.jscript.Scopeable;
|
||||||
import org.alfresco.repo.jscript.ScriptableHashMap;
|
import org.alfresco.repo.jscript.ScriptableHashMap;
|
||||||
import org.alfresco.repo.template.AbsoluteUrlMethod;
|
import org.alfresco.repo.template.AbsoluteUrlMethod;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
@@ -50,6 +52,8 @@ import org.alfresco.web.scripts.WebScriptDescription.RequiredAuthentication;
|
|||||||
import org.alfresco.web.scripts.WebScriptDescription.RequiredTransaction;
|
import org.alfresco.web.scripts.WebScriptDescription.RequiredTransaction;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.mozilla.javascript.Context;
|
||||||
|
import org.mozilla.javascript.Scriptable;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -189,22 +193,79 @@ public abstract class AbstractWebScript implements WebScript
|
|||||||
//
|
//
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a map of arguments from Web Script Request
|
* Create a map of arguments from Web Script Request (for scripting)
|
||||||
*
|
*
|
||||||
* @param req Web Script Request
|
* @param req Web Script Request
|
||||||
* @return argument map
|
* @return argument map
|
||||||
*/
|
*/
|
||||||
final protected Map<String, String> createArgModel(WebScriptRequest req)
|
final protected Map<String, String> createScriptArgs(WebScriptRequest req)
|
||||||
{
|
{
|
||||||
Map<String, String> args = new ScriptableHashMap<String, String>();
|
Map<String, String> args = new ScriptableHashMap<String, String>();
|
||||||
String[] names = req.getParameterNames();
|
String[] names = req.getParameterNames();
|
||||||
for (String name : names)
|
for (String name : names)
|
||||||
{
|
{
|
||||||
args.put(name, req.getParameter(name));
|
args.put(name, req.getParameter(name));
|
||||||
}
|
}
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a map of arguments from Web Script Request (for templating)
|
||||||
|
*
|
||||||
|
* @param req Web Script Request
|
||||||
|
* @return argument map
|
||||||
|
*/
|
||||||
|
final protected Map<String, String> createTemplateArgs(WebScriptRequest req)
|
||||||
|
{
|
||||||
|
Map<String, String> args = new HashMap<String, String>();
|
||||||
|
String[] names = req.getParameterNames();
|
||||||
|
for (String name : names)
|
||||||
|
{
|
||||||
|
args.put(name, req.getParameter(name));
|
||||||
|
}
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a map of (array) arguments from Web Script Request (for scripting)
|
||||||
|
*
|
||||||
|
* @param req Web Script Request
|
||||||
|
* @return argument map
|
||||||
|
*/
|
||||||
|
final protected Map<String, Map<String, String>> createScriptArgsM(WebScriptRequest req)
|
||||||
|
{
|
||||||
|
Map<String, Map<String, String>> args = new ScriptableHashMap<String, Map<String, String>>();
|
||||||
|
String[] names = req.getParameterNames();
|
||||||
|
for (String name : names)
|
||||||
|
{
|
||||||
|
ScriptableHashMap<String, String> values = new ScriptableHashMap<String, String>();
|
||||||
|
int i = 0;
|
||||||
|
for (String value : req.getParameterValues(name))
|
||||||
|
{
|
||||||
|
values.put(new Integer(i++).toString(), value);
|
||||||
|
}
|
||||||
|
args.put(name, values);
|
||||||
|
}
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a map of (array) arguments from Web Script Request (for scripting)
|
||||||
|
*
|
||||||
|
* @param req Web Script Request
|
||||||
|
* @return argument map
|
||||||
|
*/
|
||||||
|
final protected Map<String, String[]> createTemplateArgsM(WebScriptRequest req)
|
||||||
|
{
|
||||||
|
Map<String, String[]> args = new HashMap<String, String[]>();
|
||||||
|
String[] names = req.getParameterNames();
|
||||||
|
for (String name : names)
|
||||||
|
{
|
||||||
|
args.put(name, req.getParameterValues(name));
|
||||||
|
}
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a model for script usage
|
* Create a model for script usage
|
||||||
*
|
*
|
||||||
@@ -242,7 +303,8 @@ public abstract class AbstractWebScript implements WebScript
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add web script context
|
// add web script context
|
||||||
model.put("args", createArgModel(req));
|
model.put("args", createScriptArgs(req));
|
||||||
|
model.put("argsM", createScriptArgsM(req));
|
||||||
if (req instanceof WebScriptServletRequest)
|
if (req instanceof WebScriptServletRequest)
|
||||||
{
|
{
|
||||||
model.put("formdata", new FormData(((WebScriptServletRequest)req).getHttpServletRequest()));
|
model.put("formdata", new FormData(((WebScriptServletRequest)req).getHttpServletRequest()));
|
||||||
@@ -298,7 +360,8 @@ public abstract class AbstractWebScript implements WebScript
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add web script context
|
// add web script context
|
||||||
model.put("args", createArgModel(req));
|
model.put("args", createTemplateArgs(req));
|
||||||
|
model.put("argsM", createTemplateArgsM(req));
|
||||||
model.put("guest", req.isGuest());
|
model.put("guest", req.isGuest());
|
||||||
model.put("url", new URLModel(req));
|
model.put("url", new URLModel(req));
|
||||||
model.put("webscript", getDescription());
|
model.put("webscript", getDescription());
|
||||||
|
@@ -106,6 +106,17 @@ public interface WebScriptRequest
|
|||||||
* @return parameter value (or null, if parameter does not exist)
|
* @return parameter value (or null, if parameter does not exist)
|
||||||
*/
|
*/
|
||||||
public String getParameter(String name);
|
public String getParameter(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the (array) value of the named parameter
|
||||||
|
*
|
||||||
|
* Note: An array of one item is returned when a "single value" named parameter
|
||||||
|
* is requested
|
||||||
|
*
|
||||||
|
* @param name parameter name
|
||||||
|
* @return array of values (or null, if parameter does not exist)
|
||||||
|
*/
|
||||||
|
public String[] getParameterValues(String name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the path extension beyond the path registered for this service
|
* Gets the path extension beyond the path registered for this service
|
||||||
|
@@ -179,6 +179,14 @@ public class WebScriptServletRequest extends WebScriptRequestImpl
|
|||||||
return req.getParameter(name);
|
return req.getParameter(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.web.scripts.WebScriptRequest#getArrayParameter(java.lang.String)
|
||||||
|
*/
|
||||||
|
public String[] getParameterValues(String name)
|
||||||
|
{
|
||||||
|
return req.getParameterValues(name);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get User Agent
|
* Get User Agent
|
||||||
*
|
*
|
||||||
|
@@ -24,7 +24,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.web.scripts;
|
package org.alfresco.web.scripts;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -43,6 +45,7 @@ public abstract class WebScriptURLRequest extends WebScriptRequestImpl
|
|||||||
protected String pathInfo;
|
protected String pathInfo;
|
||||||
protected String queryString;
|
protected String queryString;
|
||||||
protected Map<String, String> queryArgs;
|
protected Map<String, String> queryArgs;
|
||||||
|
protected Map<String, List<String>> queryArgsMulti;
|
||||||
|
|
||||||
/** Service bound to this request */
|
/** Service bound to this request */
|
||||||
protected WebScriptMatch serviceMatch;
|
protected WebScriptMatch serviceMatch;
|
||||||
@@ -111,14 +114,27 @@ public abstract class WebScriptURLRequest extends WebScriptRequestImpl
|
|||||||
this.pathInfo = scriptUrlParts[2];
|
this.pathInfo = scriptUrlParts[2];
|
||||||
this.queryString = scriptUrlParts[3];
|
this.queryString = scriptUrlParts[3];
|
||||||
this.queryArgs = new HashMap<String, String>();
|
this.queryArgs = new HashMap<String, String>();
|
||||||
|
this.queryArgsMulti = new HashMap<String, List<String>>();
|
||||||
if (this.queryString != null)
|
if (this.queryString != null)
|
||||||
{
|
{
|
||||||
String[] args = this.queryString.split("&");
|
String[] args = this.queryString.split("&");
|
||||||
for (String arg : args)
|
for (String arg : args)
|
||||||
{
|
{
|
||||||
String[] parts = arg.split("=");
|
String[] parts = arg.split("=");
|
||||||
// TODO: Handle multi-value parameters
|
if (this.queryArgs.containsKey(parts[0]))
|
||||||
this.queryArgs.put(parts[0], parts.length == 2 ? parts[1] : "");
|
{
|
||||||
|
List<String> values = this.queryArgsMulti.get(parts[0]);
|
||||||
|
if (values == null)
|
||||||
|
{
|
||||||
|
values = new ArrayList<String>();
|
||||||
|
this.queryArgsMulti.put(parts[0], values);
|
||||||
|
}
|
||||||
|
values.add(parts.length == 2 ? parts[1] : "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.queryArgs.put(parts[0], parts.length == 2 ? parts[1] : "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.serviceMatch = serviceMatch;
|
this.serviceMatch = serviceMatch;
|
||||||
@@ -198,4 +214,28 @@ public abstract class WebScriptURLRequest extends WebScriptRequestImpl
|
|||||||
{
|
{
|
||||||
return queryArgs.get(name);
|
return queryArgs.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.web.scripts.WebScriptRequest#getArrayParameter(java.lang.String)
|
||||||
|
*/
|
||||||
|
public String[] getParameterValues(String name)
|
||||||
|
{
|
||||||
|
List<String> values = queryArgsMulti.get(name);
|
||||||
|
if (values != null)
|
||||||
|
{
|
||||||
|
String[] array = new String[values.size()];
|
||||||
|
values.toArray(array);
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String value = queryArgs.get(name);
|
||||||
|
if (value != null)
|
||||||
|
{
|
||||||
|
return new String[]{value};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -151,7 +151,7 @@ public class KeywordSearch extends DeclarativeWebScript
|
|||||||
// construct search statement
|
// construct search statement
|
||||||
String[] terms = searchTerms.split(" ");
|
String[] terms = searchTerms.split(" ");
|
||||||
Map<String, Object> statementModel = new HashMap<String, Object>(7, 1.0f);
|
Map<String, Object> statementModel = new HashMap<String, Object>(7, 1.0f);
|
||||||
statementModel.put("args", createArgModel(req));
|
statementModel.put("args", createTemplateArgs(req));
|
||||||
statementModel.put("terms", terms);
|
statementModel.put("terms", terms);
|
||||||
Writer queryWriter = new StringWriter(1024);
|
Writer queryWriter = new StringWriter(1024);
|
||||||
renderFormatTemplate(QUERY_FORMAT, statementModel, queryWriter);
|
renderFormatTemplate(QUERY_FORMAT, statementModel, queryWriter);
|
||||||
|
Reference in New Issue
Block a user