diff --git a/config/alfresco/templates/webscripts/org/alfresco/index_get_desc.xml b/config/alfresco/templates/webscripts/org/alfresco/index_get_desc.xml index b659569911..1e2cd4cca3 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/index_get_desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/index_get_desc.xml @@ -1,5 +1,6 @@ Web Script Index - Index of all Web Scripts + Retrieve an index of all Web Scripts + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/index_get_html.ftl b/config/alfresco/templates/webscripts/org/alfresco/index_get_html.ftl index 881a2fe4eb..701a31f037 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/index_get_html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/index_get_html.ftl @@ -2,7 +2,7 @@ - Alfresco Web APIs + Alfresco Web Scripts @@ -11,24 +11,33 @@ - +
AlfrescoAlfresco Web APIsAlfresco Web Scripts
Alfresco ${server.edition} v${server.version} -
${webscripts?size} apis - Online documentation. +
${webscripts?size} Web Scripts - Online documentation.


- - -<#list webscripts as webscript> - <#assign desc = webscript.description> - - - - <#list desc.URIs as uri> - - - + <#list webscripts as webscript> + <#assign desc = webscript.description> + ${desc.shortName} +
IdMethodAuthentication
${desc.id}${desc.method}${desc.requiredAuthentication}
  [${desc.description}]
  ${uri.format}<#if uri.format = desc.defaultFormat> (default)${url.serviceContext}${uri.URI}
+ <#list desc.URIs as uri> +
${desc.method} ${url.serviceContext}${uri.URI} => ${uri.format}<#if uri.format = desc.defaultFormat> (default) + +
+ + <#if desc.description??>
Description:${desc.description}<#else> +
Authentication:${desc.requiredAuthentication} +
Transaction:${desc.requiredTransaction} +
+
Store:${desc.sourceStore} +
Location:${desc.sourceLocation} +
Id:${desc.id} +
+
+ + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/index_get_wiki.ftl b/config/alfresco/templates/webscripts/org/alfresco/index_get_wiki.ftl new file mode 100644 index 0000000000..632685d392 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/index_get_wiki.ftl @@ -0,0 +1,38 @@ +Back to [[HTTP API]]. + + +'''NOTE:'''
+'''This document describes features to be found in Alfresco v2.1 (not yet released).'''
+'''Documentation for v2.0 can be found [[REST|here]].''' + + += Introduction = + +This page provides reference documentation for the Alfresco [[HTTP API]]. + +Generated on ${date?datetime} from + + GET http://:/alfresco/service/index?format=wiki + += API Reference = +<#list webscripts as webscript> +<#assign desc = webscript.description> + +== ${desc.shortName} == + +<#if desc.description??><#if desc.description?ends_with(".")>${desc.description}<#else>${desc.description}.<#else> + +<#list desc.URIs as uri> + [http://localhost:8080/${url.serviceContext}${uri.URI} ${desc.method} ${url.serviceContext}${uri.URI}] => ${uri.format}<#if uri.format = desc.defaultFormat> (default) + + +Requirements: +* Authentication: ${desc.requiredAuthentication} +* Transaction: ${desc.requiredTransaction} + +Definition: +* Store: ${desc.sourceStore} +* Location: ${desc.sourceLocation} +* Id: ${desc.id} + + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/index_post_html.ftl b/config/alfresco/templates/webscripts/org/alfresco/index_post_html.ftl index e92fc01dba..ec6bf1d6c8 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/index_post_html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/index_post_html.ftl @@ -2,23 +2,24 @@ - Alfresco Web APIs Maintenance + Alfresco Web Scripts Maintenance - +
AlfrescoAlfresco Web APIs MaintenanceAlfresco Web Scripts Maintenance
Alfresco ${server.edition} v${server.version} -
${webscripts?size} apis.

- - +
Completed Task
+ <#list tasks as task>
Maintenance Completed
${task}
+
+
List Web Scripts
\ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch_get_desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch_get_desc.xml index bcb8f1ddb3..58ca751178 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch_get_desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/keywordsearch_get_desc.xml @@ -4,5 +4,5 @@ - user + guest \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/scriptdescription_get_desc.xml b/config/alfresco/templates/webscripts/org/alfresco/scriptdescription_get_desc.xml new file mode 100644 index 0000000000..375f66846d --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/scriptdescription_get_desc.xml @@ -0,0 +1,5 @@ + + Web Script Description + Retrieve description document for identified Web Script + + \ No newline at end of file diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index ddc2a83801..254e1801f9 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -110,11 +110,13 @@ text/html + text/plain text/xml application/atom+xml application/rss+xml application/json application/opensearchdescription+xml + text/plain @@ -177,6 +179,9 @@ + + + diff --git a/source/java/org/alfresco/web/scripts/DeclarativeWebScriptRegistry.java b/source/java/org/alfresco/web/scripts/DeclarativeWebScriptRegistry.java index 99de8a5de2..66f0df3b00 100644 --- a/source/java/org/alfresco/web/scripts/DeclarativeWebScriptRegistry.java +++ b/source/java/org/alfresco/web/scripts/DeclarativeWebScriptRegistry.java @@ -183,7 +183,6 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat if (logger.isDebugEnabled()) logger.debug("Locating Web Scripts within " + apiStore.getBasePath()); - String basePath = apiStore.getBasePath(); String[] serviceDescPaths = apiStore.getDescriptionDocumentPaths(); for (String serviceDescPath : serviceDescPaths) { @@ -193,7 +192,7 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat try { serviceDescIS = apiStore.getDescriptionDocument(serviceDescPath); - serviceDesc = createDescription(basePath, serviceDescPath, serviceDescIS); + serviceDesc = createDescription(apiStore, serviceDescPath, serviceDescIS); } catch(IOException e) { @@ -219,7 +218,10 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat if (logger.isDebugEnabled()) { WebScript existingService = webscriptsById.get(id); - logger.debug("Web Script description document " + serviceDesc.getSourceLocation() + " overridden by " + existingService.getDescription().getSourceLocation()); + WebScriptDescription existingDesc = existingService.getDescription(); + String msg = "Web Script description document " + serviceDesc.getSourceStore() + "/" + serviceDesc.getSourceLocation(); + msg += " overridden by " + existingDesc.getSourceStore() + "/" + existingDesc.getSourceLocation(); + logger.debug(msg); } continue; } @@ -319,13 +321,13 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat /** * Create an Web Script Description * - * @param basePath + * @param store * @param serviceDescPath * @param serviceDoc * * @return web script service description */ - private WebScriptDescription createDescription(String basePath, String serviceDescPath, InputStream serviceDoc) + private WebScriptDescription createDescription(WebScriptStore store, String serviceDescPath, InputStream serviceDoc) { SAXReader reader = new SAXReader(); try @@ -430,7 +432,8 @@ public class DeclarativeWebScriptRegistry implements WebScriptRegistry, Applicat // construct service description WebScriptDescriptionImpl serviceDesc = new WebScriptDescriptionImpl(); - serviceDesc.setSourceLocation(basePath + "/" + serviceDescPath); + serviceDesc.setSourceStore(store); + serviceDesc.setSourceLocation(serviceDescPath); serviceDesc.setId(id); serviceDesc.setShortName(shortName); serviceDesc.setDescription(description); diff --git a/source/java/org/alfresco/web/scripts/WebScriptDescription.java b/source/java/org/alfresco/web/scripts/WebScriptDescription.java index f7ab22f8a7..9a5220dc51 100644 --- a/source/java/org/alfresco/web/scripts/WebScriptDescription.java +++ b/source/java/org/alfresco/web/scripts/WebScriptDescription.java @@ -24,6 +24,9 @@ */ package org.alfresco.web.scripts; +import java.io.IOException; +import java.io.InputStream; + /** * Web Script Description @@ -53,6 +56,21 @@ public interface WebScriptDescription } + /** + * Gets the source document of this web script + * + * @return source document + */ + public InputStream getSourceDocument() + throws IOException; + + /** + * Gets the store this web script is located in + * + * @return path to store + */ + public String getSourceStore(); + /** * Gets the source document location of this service description * diff --git a/source/java/org/alfresco/web/scripts/WebScriptDescriptionImpl.java b/source/java/org/alfresco/web/scripts/WebScriptDescriptionImpl.java index 4ec8ed5f2f..37b15af190 100644 --- a/source/java/org/alfresco/web/scripts/WebScriptDescriptionImpl.java +++ b/source/java/org/alfresco/web/scripts/WebScriptDescriptionImpl.java @@ -24,6 +24,8 @@ */ package org.alfresco.web.scripts; +import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.Map; @@ -35,6 +37,7 @@ import java.util.Map; */ public class WebScriptDescriptionImpl implements WebScriptDescription { + private WebScriptStore sourceStore; private String sourceLocation; private String id; private String shortName; @@ -45,7 +48,34 @@ public class WebScriptDescriptionImpl implements WebScriptDescription private URI[] uris; private String defaultFormat; private Map uriByFormat; + + /** + * Sets the source store + * + * @param store source store + */ + public void setSourceStore(WebScriptStore store) + { + this.sourceStore = store; + } + + /* (non-Javadoc) + * @see org.alfresco.web.scripts.WebScriptDescription#getSourceDocument() + */ + public InputStream getSourceDocument() + throws IOException + { + return this.sourceStore.getDescriptionDocument(sourceLocation); + } + + /* (non-Javadoc) + * @see org.alfresco.web.scripts.WebScriptDescription#getSourceStore() + */ + public String getSourceStore() + { + return this.sourceStore.getBasePath(); + } /** * Sets the source location diff --git a/source/java/org/alfresco/web/scripts/bean/Index.java b/source/java/org/alfresco/web/scripts/bean/Index.java index 535384de3f..c631d8acc2 100644 --- a/source/java/org/alfresco/web/scripts/bean/Index.java +++ b/source/java/org/alfresco/web/scripts/bean/Index.java @@ -33,7 +33,7 @@ import org.alfresco.web.scripts.WebScriptResponse; /** - * Retrieves the list of available Web APIs + * Retrieves the list of available Web Scripts * * @author davidc */ diff --git a/source/java/org/alfresco/web/scripts/bean/IndexUpdate.java b/source/java/org/alfresco/web/scripts/bean/IndexUpdate.java index a43ba464f8..f60c70545f 100644 --- a/source/java/org/alfresco/web/scripts/bean/IndexUpdate.java +++ b/source/java/org/alfresco/web/scripts/bean/IndexUpdate.java @@ -35,7 +35,7 @@ import org.alfresco.web.scripts.WebScriptResponse; /** - * Retrieves the list of available Web APIs + * Retrieves the list of available Web Scripts * * @author davidc */ diff --git a/source/java/org/alfresco/web/scripts/bean/ServiceDescription.java b/source/java/org/alfresco/web/scripts/bean/ServiceDescription.java new file mode 100644 index 0000000000..9125f8d7e4 --- /dev/null +++ b/source/java/org/alfresco/web/scripts/bean/ServiceDescription.java @@ -0,0 +1,98 @@ +/* + * 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.web.scripts.bean; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.web.scripts.AbstractWebScript; +import org.alfresco.web.scripts.WebScript; +import org.alfresco.web.scripts.WebScriptDescription; +import org.alfresco.web.scripts.WebScriptException; +import org.alfresco.web.scripts.WebScriptRequest; +import org.alfresco.web.scripts.WebScriptResponse; + + +/** + * Retrieves a Web Script Description Document + * + * @author davidc + */ +public class ServiceDescription extends AbstractWebScript +{ + + public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException + { + // extract web script id + String extensionPath = req.getExtensionPath(); + if (extensionPath == null || extensionPath.length() == 0) + { + throw new WebScriptException("Web Script Id not provided"); + } + String scriptId = extensionPath.replace("/", "."); + + // locate web script + WebScript script = getWebScriptRegistry().getWebScript(scriptId); + if (script == null) + { + throw new WebScriptException("Web Script Id '" + scriptId + "' not found"); + } + + // retrieve description document + WebScriptDescription desc = script.getDescription(); + InputStream serviceDescIS = null; + try + { + serviceDescIS = desc.getSourceDocument(); + OutputStream out = res.getOutputStream(); + res.setContentType(MimetypeMap.MIMETYPE_XML + ";charset=UTF-8"); + byte[] buffer = new byte[2048]; + int read = serviceDescIS.read(buffer); + while (read != -1) + { + out.write(buffer, 0, read); + read = serviceDescIS.read(buffer); + } + } + catch(IOException e) + { + throw new WebScriptException("Failed to read Web Script description document for '" + scriptId + "'", e); + } + finally + { + try + { + if (serviceDescIS != null) serviceDescIS.close(); + } + catch(IOException e) + { + // NOTE: ignore close exception + } + } + } + +}