mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
- Modified AbstractWebScript.execute() so that request-type specific script parameters (e.g. json, feed) are only available to those scripts that declare a type specific suffix, e.g. *.post.json.js, *.put.atomfeed.js. All non request type specific JS scripts will see requestbody (or formData if the request was multipart form data).This is so that scripts relying on requestBody being available at the moment don’t later get broken if we later map their request types to new FormatReaders. - Moved getExecuteScript from DeclarativeWebScript into AbstractWebScript and made other subclasses use it, therefore using consistent path resolution rules across all web scripts. - Removed FormatReader.createTemplateParameters() – Dave said this is not needed and the scripts themselves should copy over script parameters that are required by the templates. - Renamed *.post.js and *.put.js expecting JSON input to *.post.json.js and *.put.json.js - Extensive manual testing of share - Added unit tests - Ensure requestbody available to *.post.jst and *.put.js for unmapped request types - Ensure json variable available to *.json.post.js and *.json.put.js scripts handling application/json requests - Ensure entry variable available to *.atom.post.js and *. atom.put.js scripts handling application/atom;type=entry requests - Ensure error raised for bogus script with extension corresponding to format with no FormatReader git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@11034 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
128 lines
4.2 KiB
Java
128 lines
4.2 KiB
Java
/*
|
|
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
* As a special exception to the terms and conditions of version 2.0 of
|
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
|
* FLOSS exception. You should have recieved a copy of the text describing
|
|
* the FLOSS exception, and it is also available here:
|
|
* http://www.alfresco.com/legal/licensing"
|
|
*/
|
|
package org.alfresco.repo.cmis.rest;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.StringWriter;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
import org.alfresco.util.Content;
|
|
import org.alfresco.web.scripts.FormatReader;
|
|
import org.alfresco.web.scripts.WebScriptException;
|
|
import org.alfresco.web.scripts.WebScriptRequest;
|
|
import org.alfresco.web.scripts.WebScriptResponse;
|
|
import org.apache.abdera.ext.cmis.CMISConstants;
|
|
|
|
|
|
/**
|
|
* Convert application/cmisrequest+xml;type=query to class String.
|
|
*
|
|
* @author davidc
|
|
*/
|
|
public class CMISQueryReader implements FormatReader<String>
|
|
{
|
|
|
|
/* (non-Javadoc)
|
|
* @see org.alfresco.web.scripts.FormatReader#getDestinationClass()
|
|
*/
|
|
public Class<String> getDestinationClass()
|
|
{
|
|
return String.class;
|
|
}
|
|
|
|
/* (non-Javadoc)
|
|
* @see org.alfresco.web.scripts.FormatReader#getSourceMimetype()
|
|
*/
|
|
public String getSourceMimetype()
|
|
{
|
|
return CMISConstants.MIMETYPE_QUERY;
|
|
}
|
|
|
|
/* (non-Javadoc)
|
|
* @see org.alfresco.web.scripts.FormatReader#read(org.alfresco.web.scripts.WebScriptRequest)
|
|
*/
|
|
public String read(WebScriptRequest req)
|
|
{
|
|
Content content = req.getContent();
|
|
if (content == null)
|
|
{
|
|
throw new WebScriptException("Failed to convert request to String");
|
|
}
|
|
|
|
try
|
|
{
|
|
InputStreamReader reader;
|
|
if (content.getEncoding() != null)
|
|
{
|
|
reader = new InputStreamReader(content.getInputStream(), content.getEncoding());
|
|
}
|
|
else
|
|
{
|
|
reader = new InputStreamReader(content.getInputStream());
|
|
}
|
|
StringWriter writer = new StringWriter();
|
|
try
|
|
{
|
|
char[] buffer = new char[4096];
|
|
int bytesRead = -1;
|
|
while ((bytesRead = reader.read(buffer)) != -1)
|
|
{
|
|
writer.write(buffer, 0, bytesRead);
|
|
}
|
|
writer.flush();
|
|
return writer.toString();
|
|
}
|
|
finally
|
|
{
|
|
reader.close();
|
|
writer.close();
|
|
}
|
|
}
|
|
catch(UnsupportedEncodingException e)
|
|
{
|
|
throw new WebScriptException(HttpServletResponse.SC_BAD_REQUEST, "Failed to convert Query statement", e);
|
|
}
|
|
catch(IOException e)
|
|
{
|
|
throw new WebScriptException("Failed to convert Query statement", e);
|
|
}
|
|
}
|
|
|
|
/* (non-Javadoc)
|
|
* @see org.alfresco.web.scripts.FormatReader#createScriptParameters(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse)
|
|
*/
|
|
public Map<String, Object> createScriptParameters(WebScriptRequest req, WebScriptResponse res)
|
|
{
|
|
Map<String, Object> params = new HashMap<String, Object>();
|
|
params.put("query", read(req));
|
|
return params;
|
|
}
|
|
}
|