diff --git a/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java b/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java index 68896aefe0..20d5d07938 100644 --- a/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java +++ b/source/java/org/alfresco/web/app/servlet/ajax/AjaxServlet.java @@ -38,6 +38,7 @@ public class AjaxServlet extends BaseServlet private static final long serialVersionUID = -7654769105419391840L; private static Log logger = LogFactory.getLog(AJAX_LOG_KEY); private static Log headersLogger = LogFactory.getLog(AJAX_LOG_KEY + ".headers"); + private static Log perfLogger = LogFactory.getLog(AJAX_LOG_KEY + ".performance"); /** * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) @@ -45,6 +46,8 @@ public class AjaxServlet extends BaseServlet protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + long startTime = 0; + try { String uri = request.getRequestURI(); @@ -95,6 +98,10 @@ public class AjaxServlet extends BaseServlet // setup the faces context FacesContext facesContext = FacesHelper.getFacesContext(request, response, getServletContext()); + // start a timer + if (perfLogger.isDebugEnabled()) + startTime = System.currentTimeMillis(); + // instantiate the relevant command AjaxCommand command = null; if (Command.invoke.toString().equals(commandName)) @@ -117,6 +124,15 @@ public class AjaxServlet extends BaseServlet { handleError(response, error); } + finally + { + // measure the time taken + if (perfLogger.isDebugEnabled()) + { + long endTime = System.currentTimeMillis(); + perfLogger.debug("Time to execute command: " + (endTime - startTime) + "ms"); + } + } } /** diff --git a/source/java/org/alfresco/web/app/servlet/ajax/GetCommand.java b/source/java/org/alfresco/web/app/servlet/ajax/GetCommand.java index be3363f41f..b513e27154 100644 --- a/source/java/org/alfresco/web/app/servlet/ajax/GetCommand.java +++ b/source/java/org/alfresco/web/app/servlet/ajax/GetCommand.java @@ -49,7 +49,10 @@ public class GetCommand extends BaseAjaxCommand // get the value from the value binding Object value = binding.getValue(facesContext); - response.getWriter().write(value.toString()); + if (value != null) + { + response.getWriter().write(value.toString()); + } // commit tx.commit(); diff --git a/source/java/org/alfresco/web/bean/ajax/BaseAjaxBean.java b/source/java/org/alfresco/web/bean/ajax/BaseAjaxBean.java deleted file mode 100644 index 6dbd25f18d..0000000000 --- a/source/java/org/alfresco/web/bean/ajax/BaseAjaxBean.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.alfresco.web.bean.ajax; - -import java.io.IOException; - -import javax.faces.context.FacesContext; -import javax.faces.context.ResponseWriter; - -/** - * Base class for all Ajax managed beans. - * - * It is not necessary to extend this bean but it provides - * helper methods. - * - * @author gavinc - */ -public abstract class BaseAjaxBean -{ - private ResponseWriter writer; - - /** - * Writes the given string to the response writer for this bean - * - * @param str The string to send back to the client - */ - public void write(String str) - { - try - { - getWriter().write(str); - } - catch (IOException ioe) - { - // not much we can do here, ignore - } - } - - /** - * Returns the ResponseWriter for this bean - * - * @return The JSF ResponseWriter - */ - public ResponseWriter getWriter() - { - if (this.writer == null) - { - this.writer = FacesContext.getCurrentInstance().getResponseWriter(); - } - - return this.writer; - } -} diff --git a/source/java/org/alfresco/web/bean/ajax/NodeInfoBean.java b/source/java/org/alfresco/web/bean/ajax/NodeInfoBean.java new file mode 100644 index 0000000000..d01e995801 --- /dev/null +++ b/source/java/org/alfresco/web/bean/ajax/NodeInfoBean.java @@ -0,0 +1,128 @@ +package org.alfresco.web.bean.ajax; + +import java.io.IOException; +import java.util.Map; + +import javax.faces.context.FacesContext; +import javax.faces.context.ResponseWriter; + +import org.alfresco.model.ContentModel; +import org.alfresco.service.cmr.repository.ContentService; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.web.bean.repository.Node; +import org.alfresco.web.bean.repository.Repository; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Bean used by an AJAX control to send information back on the + * requested node. + * + * @author gavinc + */ +public class NodeInfoBean +{ + private NodeService nodeService; + private ContentService contentService; + + private static final Log logger = LogFactory.getLog(NodeInfoBean.class); + + /** + * Returns information on the node identified by the 'noderef' + * parameter found in the ExternalContext. + *
+ * The result is the formatted HTML to show on the client. + */ + public void sendNodeInfo() throws IOException + { + FacesContext context = FacesContext.getCurrentInstance(); + ResponseWriter out = context.getResponseWriter(); + + String nodeRef = (String)context.getExternalContext().getRequestParameterMap().get("noderef"); + + if (nodeRef == null || nodeRef.length() == 0) + { + throw new IllegalArgumentException("'noderef' parameter is missing"); + } + + NodeRef repoNode = new NodeRef(nodeRef); + + if (this.nodeService.exists(repoNode)) + { + // get the client side node representation and its properties + Node clientNode = new Node(repoNode); + Map props = clientNode.getProperties(); + + // get the content size + Object content = props.get(ContentModel.PROP_CONTENT); + + // start the containing table + out.write("
Summary |
"); + out.write(nameColumn); + out.write(" | "); + if (dataColumn != null) + { + out.write(dataColumn); + } + else + { + out.write(" "); + } + out.write(" |