From 4ca29b11dc7693995b8825e65cec1f8cdff94c48 Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Fri, 11 May 2007 10:34:29 +0000 Subject: [PATCH] Implemented the various classes needed to create a new JSF based runtime for webscripts. Added a new JSF component that implements the webscript runtime and is capable of rendering the output from a webscript url. This means that webscripts can be used in JSF pages, such as new dashlets in the Dashboard. Added some example dashlets that expose the Document List, My Tasks and My Web Forms webscripts as dashlets. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5664 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../web/scripts/WebScriptRuntime.java | 10 +- .../web/scripts/WebScriptServletRuntime.java | 18 -- .../alfresco/web/scripts/jsf/UIWebScript.java | 280 ++++++++++++++++++ .../web/scripts/jsf/WebScriptJSFRequest.java | 225 ++++++++++++++ .../web/scripts/jsf/WebScriptJSFResponse.java | 131 ++++++++ .../web/scripts/jsf/WebScriptTag.java | 88 ++++++ .../web/scripts/portlet/WebScriptPortlet.java | 10 - source/web/WEB-INF/faces-config-repo.xml | 25 +- source/web/WEB-INF/repo.tld | 28 ++ .../jsp/dashboards/dashlets/calculator.png | Bin 1920 -> 0 bytes .../web/jsp/dashboards/dashlets/calendar.png | Bin 7239 -> 0 bytes .../dashlets/content-checkedout.jsp | 30 -- .../dashlets/content-checkedout.png | Bin 28296 -> 0 bytes .../{calendar.jsp => doclist-webscript.jsp} | 5 +- .../dashlets/my-completed-tasks.png | Bin 15407 -> 0 bytes .../jsp/dashboards/dashlets/my-tasks-todo.png | Bin 15216 -> 0 bytes .../{calculator.jsp => mytasks-webscript.jsp} | 5 +- ...list-todo.jsp => mywebforms-webscript.jsp} | 5 +- .../dashlets/tasklist-completed.jsp | 30 -- 19 files changed, 777 insertions(+), 113 deletions(-) create mode 100644 source/java/org/alfresco/web/scripts/jsf/UIWebScript.java create mode 100644 source/java/org/alfresco/web/scripts/jsf/WebScriptJSFRequest.java create mode 100644 source/java/org/alfresco/web/scripts/jsf/WebScriptJSFResponse.java create mode 100644 source/java/org/alfresco/web/scripts/jsf/WebScriptTag.java delete mode 100644 source/web/jsp/dashboards/dashlets/calculator.png delete mode 100644 source/web/jsp/dashboards/dashlets/calendar.png delete mode 100644 source/web/jsp/dashboards/dashlets/content-checkedout.jsp delete mode 100644 source/web/jsp/dashboards/dashlets/content-checkedout.png rename source/web/jsp/dashboards/dashlets/{calendar.jsp => doclist-webscript.jsp} (83%) delete mode 100644 source/web/jsp/dashboards/dashlets/my-completed-tasks.png delete mode 100644 source/web/jsp/dashboards/dashlets/my-tasks-todo.png rename source/web/jsp/dashboards/dashlets/{calculator.jsp => mytasks-webscript.jsp} (83%) rename source/web/jsp/dashboards/dashlets/{tasklist-todo.jsp => mywebforms-webscript.jsp} (83%) delete mode 100644 source/web/jsp/dashboards/dashlets/tasklist-completed.jsp diff --git a/source/java/org/alfresco/web/scripts/WebScriptRuntime.java b/source/java/org/alfresco/web/scripts/WebScriptRuntime.java index d256338aca..52d8884316 100644 --- a/source/java/org/alfresco/web/scripts/WebScriptRuntime.java +++ b/source/java/org/alfresco/web/scripts/WebScriptRuntime.java @@ -303,7 +303,10 @@ public abstract class WebScriptRuntime * @param scriptRes Web Script Response * @return true => execute script, false => do not execute script */ - protected abstract boolean preExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes); + protected boolean preExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes) + { + return true; + } /** * Post-execution hook @@ -313,6 +316,7 @@ public abstract class WebScriptRuntime * @param scriptReq Web Script Request * @param scriptRes Web Script Response */ - protected abstract void postExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes); - + protected void postExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes) + { + } } diff --git a/source/java/org/alfresco/web/scripts/WebScriptServletRuntime.java b/source/java/org/alfresco/web/scripts/WebScriptServletRuntime.java index c491978cfd..c9640286f9 100644 --- a/source/java/org/alfresco/web/scripts/WebScriptServletRuntime.java +++ b/source/java/org/alfresco/web/scripts/WebScriptServletRuntime.java @@ -107,22 +107,4 @@ public class WebScriptServletRuntime extends WebScriptRuntime authenticator.authenticate(required, isGuest, req, res); } } - - /* (non-Javadoc) - * @see org.alfresco.web.scripts.WebScriptRuntime#preExecute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse) - */ - @Override - protected boolean preExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes) - { - return true; - } - - /* (non-Javadoc) - * @see org.alfresco.web.scripts.WebScriptRuntime#postExecute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse) - */ - @Override - protected void postExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes) - { - } - } diff --git a/source/java/org/alfresco/web/scripts/jsf/UIWebScript.java b/source/java/org/alfresco/web/scripts/jsf/UIWebScript.java new file mode 100644 index 0000000000..8a377ef730 --- /dev/null +++ b/source/java/org/alfresco/web/scripts/jsf/UIWebScript.java @@ -0,0 +1,280 @@ +/* + * 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.jsf; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.Map; + +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.el.ValueBinding; +import javax.faces.event.AbortProcessingException; +import javax.faces.event.ActionEvent; +import javax.faces.event.FacesEvent; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.service.transaction.TransactionService; +import org.alfresco.web.scripts.DeclarativeWebScriptRegistry; +import org.alfresco.web.scripts.WebScriptMatch; +import org.alfresco.web.scripts.WebScriptRegistry; +import org.alfresco.web.scripts.WebScriptRequest; +import org.alfresco.web.scripts.WebScriptResponse; +import org.alfresco.web.scripts.WebScriptRuntime; +import org.alfresco.web.scripts.WebScriptDescription.RequiredAuthentication; +import org.alfresco.web.scripts.portlet.WebScriptPortletRequest; +import org.alfresco.web.ui.common.component.SelfRenderingComponent; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.jsf.FacesContextUtils; + +/** + * JSF Component implementation for the WebScript component. + *

+ * Responsible for generating a JSF Component specific WebScriptRuntime instance and + * executing the specified WebScript against the runtime. + * + * @author Kevin Roast + */ +public class UIWebScript extends SelfRenderingComponent +{ + private static Log logger = LogFactory.getLog(UIWebScript.class); + + /** WebScript URL to execute */ + private String scriptUrl = null; + private boolean scriptUrlModified = false; + + private WebScriptRegistry registry; + private TransactionService txnService; + + /** + * Default constructor + */ + public UIWebScript() + { + WebApplicationContext ctx = FacesContextUtils.getRequiredWebApplicationContext( + FacesContext.getCurrentInstance()); + this.registry = (DeclarativeWebScriptRegistry)ctx.getBean("webscripts.registry"); + this.txnService = (TransactionService)ctx.getBean("transactionComponent"); + } + + /** + * @see javax.faces.component.UIComponent#getFamily() + */ + @Override + public String getFamily() + { + return "org.alfresco.faces.Controls"; + } + + /** + * @see javax.faces.component.StateHolder#restoreState(javax.faces.context.FacesContext, java.lang.Object) + */ + public void restoreState(FacesContext context, Object state) + { + Object values[] = (Object[])state; + // standard component attributes are restored by the super class + super.restoreState(context, values[0]); + this.scriptUrl = (String)values[1]; + this.scriptUrlModified = (Boolean)values[2]; + } + + /** + * @see javax.faces.component.StateHolder#saveState(javax.faces.context.FacesContext) + */ + public Object saveState(FacesContext context) + { + Object values[] = new Object[] { + super.saveState(context), this.scriptUrl, this.scriptUrlModified}; + return values; + } + + /* (non-Javadoc) + * @see javax.faces.component.UIComponentBase#broadcast(javax.faces.event.FacesEvent) + */ + @Override + public void broadcast(FacesEvent event) throws AbortProcessingException + { + if (event instanceof WebScriptEvent) + { + this.scriptUrlModified = true; + this.scriptUrl = ((WebScriptEvent)event).Url; + } + else + { + super.broadcast(event); + } + } + + /* (non-Javadoc) + * @see javax.faces.component.UIComponentBase#decode(javax.faces.context.FacesContext) + */ + @Override + public void decode(FacesContext context) + { + Map requestMap = context.getExternalContext().getRequestParameterMap(); + String fieldId = this.getClientId(context); + String value = (String)requestMap.get(fieldId); + if (value != null && value.length() != 0) + { + // found web-script URL for this component + try + { + String url = URLDecoder.decode(value, "UTF-8"); + queueEvent(new WebScriptEvent(this, url)); + } + catch (UnsupportedEncodingException e) + { + throw new AlfrescoRuntimeException("Unable to decode utf-8 script url."); + } + } + } + + /** + * @see javax.faces.component.UIComponentBase#encodeBegin(javax.faces.context.FacesContext) + */ + @Override + public void encodeBegin(FacesContext context) throws IOException + { + // execute WebScript + if (logger.isDebugEnabled()) + logger.debug("Processing UIWebScript encodeBegin(): " + getScriptUrl()); + + WebScriptRuntime runtime = new WebScriptJSFRuntime(context, getScriptUrl()); + runtime.executeScript(); + } + + /** + * Set the scriptUrl + * + * @param scriptUrl the scriptUrl + */ + public void setScriptUrl(String scriptUrl) + { + this.scriptUrl = scriptUrl; + } + + /** + * @return the scriptUrl + */ + public String getScriptUrl() + { + if (this.scriptUrlModified == false) + { + ValueBinding vb = getValueBinding("scriptUrl"); + if (vb != null) + { + this.scriptUrl = (String)vb.getValue(getFacesContext()); + } + } + return this.scriptUrl; + } + + + // ------------------------------------------------------------------------------ + // Inner classes + + /** + * Class representing the clicking of a webscript url action. + */ + public static class WebScriptEvent extends ActionEvent + { + public WebScriptEvent(UIComponent component, String url) + { + super(component); + Url = url; + } + + public String Url = null; + } + + /** + * Implementation of a WebScriptRuntime for the JSF environment + * + * @author Kevin Roast + */ + private class WebScriptJSFRuntime extends WebScriptRuntime + { + private FacesContext fc; + private String scriptUrl; + private String script; + + WebScriptJSFRuntime(FacesContext fc, String scriptUrl) + { + super(registry, txnService); + this.fc = fc; + this.scriptUrl = scriptUrl; + this.script = WebScriptPortletRequest.getScriptUrlParts(scriptUrl)[2]; + } + + /** + * @see org.alfresco.web.scripts.WebScriptRuntime#authenticate(org.alfresco.web.scripts.WebScriptDescription.RequiredAuthentication, boolean) + */ + @Override + protected void authenticate(RequiredAuthentication required, boolean isGuest) + { + // JSF component already in an authenticated environment as the + // /faces servlet filter (or JSF portlet wrapper) is called first + } + + /** + * @see org.alfresco.web.scripts.WebScriptRuntime#createRequest(org.alfresco.web.scripts.WebScriptMatch) + */ + @Override + protected WebScriptRequest createRequest(WebScriptMatch match) + { + return new WebScriptJSFRequest(fc, match, this.scriptUrl); + } + + /** + * @see org.alfresco.web.scripts.WebScriptRuntime#createResponse() + */ + @Override + protected WebScriptResponse createResponse() + { + return new WebScriptJSFResponse(fc, UIWebScript.this); + } + + /** + * @see org.alfresco.web.scripts.WebScriptRuntime#getScriptMethod() + */ + @Override + protected String getScriptMethod() + { + return "GET"; + } + + /** + * @see org.alfresco.web.scripts.WebScriptRuntime#getScriptUrl() + */ + @Override + protected String getScriptUrl() + { + return this.script; + } + } +} diff --git a/source/java/org/alfresco/web/scripts/jsf/WebScriptJSFRequest.java b/source/java/org/alfresco/web/scripts/jsf/WebScriptJSFRequest.java new file mode 100644 index 0000000000..3ada0cc15d --- /dev/null +++ b/source/java/org/alfresco/web/scripts/jsf/WebScriptJSFRequest.java @@ -0,0 +1,225 @@ +/* + * 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.jsf; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import javax.faces.context.FacesContext; + +import org.alfresco.web.scripts.WebScriptMatch; +import org.alfresco.web.scripts.WebScriptRequest; +import org.alfresco.web.scripts.portlet.WebScriptPortletRequest; + +/** + * Implementation of a WebScript Request for the JSF environment. + * + * @author Kevin Roast + */ +public class WebScriptJSFRequest implements WebScriptRequest +{ + private WebScriptMatch match; + private FacesContext fc; + private String[] scriptUrlParts; + private Map args = new HashMap(4, 1.0f); + + /** + * Constructor + * + * @param fc FacesContext + * @param match WebScriptMatch that matched this webscript + * @param scriptUrl The script URL this request is for + */ + WebScriptJSFRequest(FacesContext fc, WebScriptMatch match, String scriptUrl) + { + this.fc = fc; + this.match = match; + this.scriptUrlParts = WebScriptPortletRequest.getScriptUrlParts(scriptUrl); + if (this.scriptUrlParts[3] != null) + { + String[] parts = this.scriptUrlParts[3].split("&"); + for (String argument : parts) + { + int sepIndex = argument.indexOf('='); + if (sepIndex != -1) + { + String value = ""; + if (argument.length() > sepIndex + 1) + { + value = argument.substring(sepIndex + 1); + } + this.args.put(argument.substring(0, sepIndex), value); + } + } + } + } + + /** + * Gets the matching API Service for this request + * + * @return the service match + */ + public WebScriptMatch getServiceMatch() + { + return this.match; + } + + /** + * Get server portion of the request + * + * e.g. scheme://host:port + * + * @return server path + */ + public String getServerPath() + { + // NOTE: not accessable from JSF context - cannot create absolute external urls... + return ""; + } + + /** + * @see org.alfresco.web.scripts.WebScriptRequest#getContextPath() + */ + public String getContextPath() + { + return fc.getExternalContext().getRequestContextPath(); + } + + /** + * Gets the Alfresco Web Script Context Path + * + * @return service url e.g. /alfresco/service + */ + public String getServiceContextPath() + { + return fc.getExternalContext().getRequestContextPath() + scriptUrlParts[1]; + } + + /** + * Gets the Alfresco Service Path + * + * @return service url e.g. /alfresco/service/search/keyword + */ + public String getServicePath() + { + return getServiceContextPath() + scriptUrlParts[2]; + } + + /** + * Gets the full request URL + * + * @return request url e.g. /alfresco/service/search/keyword?q=term + */ + public String getURL() + { + return getServicePath() + (scriptUrlParts[3] != null ? "?" + scriptUrlParts[3] : ""); + } + + /** + * @see org.alfresco.web.scripts.WebScriptRequest#getQueryString() + */ + public String getQueryString() + { + return scriptUrlParts[3]; + } + + /** + * @see org.alfresco.web.scripts.WebScriptRequest#getParameterNames() + */ + public String[] getParameterNames() + { + Set keys = this.args.keySet(); + String[] names = new String[keys.size()]; + keys.toArray(names); + return names; + } + + /** + * @see org.alfresco.web.scripts.WebScriptRequest#getParameter(java.lang.String) + */ + public String getParameter(String name) + { + return this.args.get(name); + } + + /** + * Gets the path extension beyond the path registered for this service + * + * e.g. + * a) service registered path = /search/engine + * b) request path = /search/engine/external + * + * => /external + * + * @return extension path + */ + public String getExtensionPath() + { + String servicePath = this.scriptUrlParts[2]; + if (servicePath.indexOf('/') != -1) + { + return servicePath.substring(servicePath.indexOf('/')); + } + else + { + return null; + } + } + + /** + * Determine if Guest User? + * + * @return true => guest user + */ + public boolean isGuest() + { + return Boolean.valueOf(getParameter("guest")); + } + + /** + * Get Requested Format + * + * @return content type requested + */ + public String getFormat() + { + String format = getParameter("format"); + return (format == null || format.length() == 0) ? "" : format; + } + + /** + * Get User Agent + * + * TODO: Expand on known agents + * + * @return MSIE / Firefox + */ + public String getAgent() + { + // NOTE: unknown in the JSF environment + return null; + } +} diff --git a/source/java/org/alfresco/web/scripts/jsf/WebScriptJSFResponse.java b/source/java/org/alfresco/web/scripts/jsf/WebScriptJSFResponse.java new file mode 100644 index 0000000000..10180fb793 --- /dev/null +++ b/source/java/org/alfresco/web/scripts/jsf/WebScriptJSFResponse.java @@ -0,0 +1,131 @@ +/* + * 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.jsf; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.net.URLEncoder; + +import javax.faces.component.UIForm; +import javax.faces.context.FacesContext; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.web.scripts.WebScriptResponse; +import org.alfresco.web.ui.common.Utils; +import org.apache.myfaces.shared_impl.renderkit.html.HtmlFormRendererBase; + +/** + * Implementation of a WebScript Response for the JSF environment. + * + * @author Kevin Roast + */ +public class WebScriptJSFResponse implements WebScriptResponse +{ + private FacesContext fc; + private UIWebScript component; + + WebScriptJSFResponse(FacesContext fc, UIWebScript component) + { + this.fc = fc; + this.component = component; + } + + /** + * @see org.alfresco.web.scripts.WebScriptResponse#encodeScriptUrl(java.lang.String) + */ + public String encodeScriptUrl(String url) + { + UIForm form = Utils.getParentForm(fc, component); + if (form == null) + { + throw new IllegalStateException("Must nest components inside UIForm to generate form submit!"); + } + + String fieldId = component.getClientId(fc); + String formClientId = form.getClientId(fc); + + StringBuilder buf = new StringBuilder(200); + // dirty - but can't see any other way to convert to a JSF action click... + buf.append("#\" onclick=\""); + buf.append("document.forms["); + buf.append("'"); + buf.append(formClientId); + buf.append("'"); + buf.append("]['"); + buf.append(fieldId); + buf.append("'].value="); + buf.append("'"); + // encode the URL to the webscript + try + { + buf.append(URLEncoder.encode(url, "UTF-8")); + } + catch (UnsupportedEncodingException e) + { + throw new AlfrescoRuntimeException("Unable to utf-8 encode script url."); + } + buf.append("'"); + buf.append(";"); + + buf.append("document.forms["); + buf.append("'"); + buf.append(formClientId); + buf.append("'"); + buf.append("].submit();"); + + buf.append("return false;"); + + // weak, but this seems to be the way Sun RI/MyFaces do it... + HtmlFormRendererBase.addHiddenCommandParameter(fc, form, fieldId); + + return buf.toString(); + } + + /** + * @see org.alfresco.web.scripts.WebScriptResponse#getOutputStream() + */ + public OutputStream getOutputStream() throws IOException + { + return fc.getResponseStream(); + } + + /** + * @see org.alfresco.web.scripts.WebScriptResponse#getWriter() + */ + public Writer getWriter() throws IOException + { + return fc.getResponseWriter(); + } + + /** + * @see org.alfresco.web.scripts.WebScriptResponse#setContentType(java.lang.String) + */ + public void setContentType(String contentType) + { + // Alfresco JSF framework only supports the default of text-html + } +} diff --git a/source/java/org/alfresco/web/scripts/jsf/WebScriptTag.java b/source/java/org/alfresco/web/scripts/jsf/WebScriptTag.java new file mode 100644 index 0000000000..8e5ae65410 --- /dev/null +++ b/source/java/org/alfresco/web/scripts/jsf/WebScriptTag.java @@ -0,0 +1,88 @@ +/* + * 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.jsf; + +import javax.faces.component.UIComponent; + +import org.alfresco.web.ui.common.tag.BaseComponentTag; + +/** + * JSF tag class for the UIWebScript component. + * + * @author Kevin Roast + */ +public class WebScriptTag extends BaseComponentTag +{ + /** + * @see javax.faces.webapp.UIComponentTag#getComponentType() + */ + @Override + public String getComponentType() + { + return "org.alfresco.faces.WebScript"; + } + + /** + * @see javax.faces.webapp.UIComponentTag#getRendererType() + */ + @Override + public String getRendererType() + { + // the component is self renderering + return null; + } + + /** + * @see javax.faces.webapp.UIComponentTag#setProperties(javax.faces.component.UIComponent) + */ + protected void setProperties(UIComponent component) + { + super.setProperties(component); + setStringProperty(component, "scriptUrl", this.scriptUrl); + } + + /** + * @see javax.servlet.jsp.tagext.Tag#release() + */ + public void release() + { + super.release(); + this.scriptUrl = null; + } + + /** + * Set the scriptUrl + * + * @param scriptUrl the scriptUrl + */ + public void setScriptUrl(String scriptUrl) + { + this.scriptUrl = scriptUrl; + } + + + /** the scriptUrl */ + private String scriptUrl; +} diff --git a/source/java/org/alfresco/web/scripts/portlet/WebScriptPortlet.java b/source/java/org/alfresco/web/scripts/portlet/WebScriptPortlet.java index 6184cddf5c..07a9acdf0a 100644 --- a/source/java/org/alfresco/web/scripts/portlet/WebScriptPortlet.java +++ b/source/java/org/alfresco/web/scripts/portlet/WebScriptPortlet.java @@ -273,15 +273,5 @@ public class WebScriptPortlet implements Portlet // Note: Do not render script if portlet window is minimized return !WindowState.MINIMIZED.equals(req.getWindowState()); } - - /* (non-Javadoc) - * @see org.alfresco.web.scripts.WebScriptRuntime#postExecute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse) - */ - @Override - protected void postExecute(WebScriptRequest scriptReq, WebScriptResponse scriptRes) - { - } - } - } diff --git a/source/web/WEB-INF/faces-config-repo.xml b/source/web/WEB-INF/faces-config-repo.xml index 564defef2a..538467bef2 100644 --- a/source/web/WEB-INF/faces-config-repo.xml +++ b/source/web/WEB-INF/faces-config-repo.xml @@ -57,11 +57,11 @@ org.alfresco.faces.ContentSelector org.alfresco.web.ui.repo.component.UIContentSelector - - - - org.alfresco.faces.WebProjectFolderSelector - org.alfresco.web.ui.repo.component.UIWebProjectFolderSelector + + + + org.alfresco.faces.WebProjectFolderSelector + org.alfresco.web.ui.repo.component.UIWebProjectFolderSelector @@ -142,11 +142,11 @@ org.alfresco.faces.NodeInfo org.alfresco.web.ui.repo.component.UINodeInfo - - - - org.alfresco.faces.OpenSearch - org.alfresco.web.ui.repo.component.UIOpenSearch + + + + org.alfresco.faces.OpenSearch + org.alfresco.web.ui.repo.component.UIOpenSearch @@ -183,6 +183,11 @@ org.alfresco.faces.Navigator org.alfresco.web.ui.repo.component.UINavigator + + + org.alfresco.faces.WebScript + org.alfresco.web.scripts.jsf.UIWebScript + diff --git a/source/web/WEB-INF/repo.tld b/source/web/WEB-INF/repo.tld index a6aeb75bc3..a143058a1c 100644 --- a/source/web/WEB-INF/repo.tld +++ b/source/web/WEB-INF/repo.tld @@ -1973,4 +1973,32 @@ + + webScript + org.alfresco.web.scripts.jsf.WebScriptTag + JSP + + + Executes a webscript within the context of a JSF component. + + + + id + false + true + + + + rendered + false + true + + + + scriptUrl + true + true + + + diff --git a/source/web/jsp/dashboards/dashlets/calculator.png b/source/web/jsp/dashboards/dashlets/calculator.png deleted file mode 100644 index 4cc80aeba9475d74c76297469fb5442b90fe8f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1920 zcmYjS2{hYT7Y~Y&mZDl38lh-vZ>FhzkVtJ4bkUR(Rc$e9jlHVL*vX8gZAuYqr;Mqk zw#u{!8l0gObV?g-A{6ye5kZKA@89pV=X~#+-@Whr-g)o--hJ=fo8#r-tO$mHK_HN# ztBcclz|#OE{~!%mZ}=Ak;EZE2mt)bo0bv(X_i#3`6tTo?>tZhi)K z>XfxP!WwA>GcgB7`nHM@A!0Df7G2qRr9>U{&Y=8 zZQmHFw{=y{v)tBYapzzn-;_;puzT03ZU(hId>{jrq+(Lo5k4;JevI@$#1$`(-7kC1|An`e-ZhqZ!QT*0 zVaG%*Ttc#-TZ(^Nw5s0^SIqyU`AefX#iXPrVs^vv9JkU}2> zLP+U(!GGN+$efxG^?N9hV)mrOM@3Un2CdZ(5_n7$E5Y)%sl^%g^U(++afrmXGYcAS zG?%jU@`)LCZ-3rA6Jw;QE)T32h?6L1jh4^|<%Z<7b&hlX!nK`8LN+B%k@RwpDSp4a z*qYCww`tI2=e00r&S}-}k}dyZWL6OxHf6zhVQW{?8_7}*=CjiVUB$=L$SgumS{>)S z|HM>{;w=;KiXHVOhg~o!nvobhv?Kcthj(xDEjH$Yah!0TfR*v~1<6jWK`e;G)&>io zWQ`69gppkm5q7DPM2y4WS8VA8!-~T?%e!Z&sJjhelvc86{tUUMrd!vnYmEA{m88!{ z8}-q&-_sG#x25~07Dl&iwKKZ7K}kj4*@s^npy{nP0Xv#O&3;1D6e15ri2p04htp7T z=-0-9N-8M7?30cxJIn^Qyt9M@#ps8G;DP=%04Ep9#@nZRO^wyH* zCtIjpaqU{^swqX}s=+^+a^$^JxJl7U1$2ZF0-ucRyUiU3o;}q5Lu21c;$K*CM6mmv z0Y#E8U11*F!K6zbSZrF1K2zOoBbvOzdoG5exE(uFFp!)JtWoMK>=hWuX=l6)k%2_; z%`81qXlL*4rW3#nB$;1JzL2=xzNG(2Fk(CdK^D%r>kzWu5tN4@X$6+D8I9r^ZJpm} znT&4n3GXSv99V$)?c0h$eUEZg}+Ri@VoPTX)dV2k6W0iFV}vrip}w_L04Y zL8s$Y(CZHmF1I0ygD`8(ZuL5iy_Br_@R}aM@W2K3ef$h0?nS#l)5?QO!SxcrCyt74 zLnh%C9^7@3b#ic$<@Fuxx@qINB&sw)ajSK;)Zu@*nqCl1eaqngXL0v&PN=cZhpJe5 z28EETpJzi^;Z=IIkdOCp{^mH<(=r7C2`*YX@ziU@GZ0%+>B=mGk@4fQC2HBSf1H7Q zM>P4!i4sUkncW9Fl5vJ}^FsYYq&grl_Vh%U`syOYHhOD4&k#0==08~&7dolV!pbgu zDtT{6gr}D+RVgpx-J%!I-N3`H)S~!VRJs;R`>l2zcz7o^clC*F{0E)w)B1A%WR@4S z53<_Aal6&C5WYC%C%@x*c@B#n(z8n0p=|*J$U@7N(HOb{4|UQm4@AnK$%(ndL)oD{ z`M?ZM(qte(z_0lV^12z6fgBQ?kRs&viR&EjkMu|=&X?6)G9rr=ipOlb@f>irQt| z`d2P+CPAsJj#WWUorT;J#j462`DaRd>y&XF{CH!4kDlg9oQm0g)o;WYH^d!U3#aJk zgeH2QS9(*~^8CKxz-Sr`twQv#es!*T;Mfu6$;(OhG7KbGP%Hgiv^mKTkjt#t_x(no voORE9N0o0i_j`#2%N96PfmDIEF=OAUyHV48-}eE~@<6T_52r@d)ztq2)#9jK diff --git a/source/web/jsp/dashboards/dashlets/calendar.png b/source/web/jsp/dashboards/dashlets/calendar.png deleted file mode 100644 index 7ce352135edd92e114b590247b15d5b0d4e61eb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7239 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 -<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> -<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> -<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> -<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> - - diff --git a/source/web/jsp/dashboards/dashlets/content-checkedout.png b/source/web/jsp/dashboards/dashlets/content-checkedout.png deleted file mode 100644 index 8063f8b4a5c4784710261f95d74d1989bd3e8ca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28296 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

?sm@ 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 -<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> -<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> -<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> <%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> - + \ No newline at end of file diff --git a/source/web/jsp/dashboards/dashlets/my-completed-tasks.png b/source/web/jsp/dashboards/dashlets/my-completed-tasks.png deleted file mode 100644 index f53c1bbd046a68aa0979ee7f1daf520e102e4ca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15407 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 -<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> -<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> -<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> <%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> - + \ No newline at end of file diff --git a/source/web/jsp/dashboards/dashlets/tasklist-todo.jsp b/source/web/jsp/dashboards/dashlets/mywebforms-webscript.jsp similarity index 83% rename from source/web/jsp/dashboards/dashlets/tasklist-todo.jsp rename to source/web/jsp/dashboards/dashlets/mywebforms-webscript.jsp index 57682ca749..caa6e12af3 100644 --- a/source/web/jsp/dashboards/dashlets/tasklist-todo.jsp +++ b/source/web/jsp/dashboards/dashlets/mywebforms-webscript.jsp @@ -22,9 +22,6 @@ * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" --%> -<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> -<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> -<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> <%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> - + \ No newline at end of file diff --git a/source/web/jsp/dashboards/dashlets/tasklist-completed.jsp b/source/web/jsp/dashboards/dashlets/tasklist-completed.jsp deleted file mode 100644 index 7267f126ab..0000000000 --- a/source/web/jsp/dashboards/dashlets/tasklist-completed.jsp +++ /dev/null @@ -1,30 +0,0 @@ -<%-- - * 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" ---%> -<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> -<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> -<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %> -<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %> - -