Index: admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LBConfigContentSource.java =================================================================== --- admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LBConfigContentSource.java (revision 52279) +++ admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LBConfigContentSource.java (working copy) @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright (c) 2009-2011 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009-2012 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development @@ -88,7 +88,7 @@ */ public InputStream getInputStream(DownloadServlet.Context ctx) { // Set the extension so it can be mapped to a MIME type - ctx.setAttribute(DownloadServlet.EXTENSION, "LB-CONFIG"); + ctx.setAttribute(DownloadServlet.EXTENSION, "xml"); // Get appName HttpServletRequest request = (HttpServletRequest) ctx.getServletRequest(); Index: admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LogViewerContentSource.java =================================================================== --- admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LogViewerContentSource.java (revision 0) +++ admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LogViewerContentSource.java (revision 0) @@ -0,0 +1,128 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright (c) 2009-2012 Oracle and/or its affiliates. All rights reserved. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common Development + * and Distribution License("CDDL") (collectively, the "License"). You + * may not use this file except in compliance with the License. You can + * obtain a copy of the License at + * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html + * or packager/legal/LICENSE.txt. See the License for the specific + * language governing permissions and limitations under the License. + * + * When distributing the software, include this License Header Notice in each + * file and include the License file at packager/legal/LICENSE.txt. + * + * GPL Classpath Exception: + * Oracle designates this particular file as subject to the "Classpath" + * exception as provided by Oracle in the GPL Version 2 section of the License + * file that accompanied this code. + * + * Modifications: + * If applicable, add the following below the License Header, with the fields + * enclosed by brackets [] replaced by your own identifying information: + * "Portions Copyright [year] [name of copyright owner]" + * + * Contributor(s): + * If you wish your version of this file to be governed by only the CDDL or + * only the GPL Version 2, indicate your decision by adding "[Contributor] + * elects to include this software in this distribution under the [CDDL or GPL + * Version 2] license." If you don't indicate a single choice of license, a + * recipient has the option to distribute your version of this file under + * either the CDDL, the GPL Version 2 or to extend the choice of license to + * its licensees as provided above. However, if you add GPL Version 2 code + * and therefore, elected the GPL Version 2 license, then the option applies + * only if the new code is made subject to such option by the copyright + * holder. + */ + +package org.glassfish.admingui.common.servlet; + +import java.io.InputStream; + +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import org.glassfish.admingui.common.util.RestUtil; + +import com.sun.jersey.api.client.ClientResponse; + +/** + * + * @author andriy.zhdanov + */ +public class LogViewerContentSource implements DownloadServlet.ContentSource { + + /** + *

This method returns a unique string used to identify this + * {@link DownloadServlet#ContentSource}. This string must be + * specified in order to select the appropriate + * {@link DownloadServlet#ContentSource} when using the + * {@link DownloadServlet}.

+ */ + public String getId() { + return "LogViewer"; // NOI18N + } + + /** + *

This method is responsible for generating the content and + * returning an InputStream to that content. It is also + * responsible for setting any attribute values in the + * {@link DownloadServlet#Context}, such as {@link DownloadServlet#EXTENSION} or + * {@link DownloadServlet#CONTENT_TYPE}.

+ */ + public InputStream getInputStream(DownloadServlet.Context ctx) { + // Set the extension so it can be mapped to a MIME type + ctx.setAttribute(DownloadServlet.EXTENSION, "asc"); + + HttpServletRequest request = (HttpServletRequest) ctx.getServletRequest(); + //http://localhost:4848/management/domain/view-log/?start=180427&instanceName=server + String restUrl = request.getParameter("restUrl"); + String start = request.getParameter("start"); + String instanceName = request.getParameter("instanceName"); + + // Create the tmpFile + InputStream tmpFile = null; + try { + String endpoint = restUrl + "/view-log/"; + Map attrsMap = new HashMap(); + attrsMap.put("start", start); + attrsMap.put("instanceName", instanceName); + ClientResponse cr = RestUtil.getRequestFromServlet(request, endpoint, attrsMap); + Map headers = new HashMap(); + if (cr.getHeaders().containsKey("X-Text-Append-Next")) { + headers.put("X-Text-Append-Next", cr.getHeaders().getFirst("X-Text-Append-Next")); + } + ctx.setAttribute(DownloadServlet.HEADERS, headers); + tmpFile = cr.getEntityInputStream(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + + // Return an InputStream to the tmpFile + return tmpFile; + } + + /** + *

This method may be used to clean up any temporary resources. It + * will be invoked after the InputStream has been + * completely read.

+ */ + public void cleanUp(DownloadServlet.Context ctx) { + // Nothing to do + } + + /** + *

This method is responsible for returning the last modified date of + * the content, or -1 if not applicable. This information will be + * used for caching. This implementation always returns -1.

+ * + * @return -1 + */ + public long getLastModified(DownloadServlet.Context context) { + return -1; + } +} Index: admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LogFilesContentSource.java =================================================================== --- admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LogFilesContentSource.java (revision 52279) +++ admingui/common/src/main/java/org/glassfish/admingui/common/servlet/LogFilesContentSource.java (working copy) @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright (c) 2009-2011 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009-2012 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development @@ -81,7 +81,7 @@ */ public InputStream getInputStream(DownloadServlet.Context ctx) { // Set the extension so it can be mapped to a MIME type - ctx.setAttribute(DownloadServlet.EXTENSION, "CLIENT-STUBS"); + ctx.setAttribute(DownloadServlet.EXTENSION, "zip"); // Get appName HttpServletRequest request = (HttpServletRequest) ctx.getServletRequest(); Index: admingui/common/src/main/java/org/glassfish/admingui/common/servlet/ClientStubsContentSource.java =================================================================== --- admingui/common/src/main/java/org/glassfish/admingui/common/servlet/ClientStubsContentSource.java (revision 52279) +++ admingui/common/src/main/java/org/glassfish/admingui/common/servlet/ClientStubsContentSource.java (working copy) @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright (c) 2009-2011 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009-2012 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development @@ -80,7 +80,7 @@ */ public InputStream getInputStream(DownloadServlet.Context ctx) { // Set the extension so it can be mapped to a MIME type - ctx.setAttribute(DownloadServlet.EXTENSION, "CLIENT-STUBS"); + ctx.setAttribute(DownloadServlet.EXTENSION, "zip"); // Get appName HttpServletRequest request = (HttpServletRequest) ctx.getServletRequest(); Index: admingui/common/src/main/java/org/glassfish/admingui/common/servlet/DownloadServlet.java =================================================================== --- admingui/common/src/main/java/org/glassfish/admingui/common/servlet/DownloadServlet.java (revision 52279) +++ admingui/common/src/main/java/org/glassfish/admingui/common/servlet/DownloadServlet.java (working copy) @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright (c) 2009-2011 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009-2012 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development @@ -264,6 +264,18 @@ } } ((HttpServletResponse) resp).setHeader("Content-type", contentType); + + // Write additional headers + Object o = context.getAttribute(HEADERS); + if (o instanceof Map) { + @SuppressWarnings("unchecked") + Map headers = (Map) o; + for (Map.Entry h: headers.entrySet()) { + ((HttpServletResponse) resp).setHeader(h.getKey(), h.getValue()); + } + } + // TODO: log warning + } /** @@ -690,4 +702,12 @@ * the content if it were saved to a filesystem.

*/ public static final String EXTENSION = "extension"; + + /** + *

This is the {@link DownloadServlet#Context} attribute name used to + * specify optional additional headers. It must be set to + * Map object when needed.

+ */ + public static final String HEADERS = "Headers"; } + Index: admingui/common/src/main/java/org/glassfish/admingui/common/util/RestUtil.java =================================================================== --- admingui/common/src/main/java/org/glassfish/admingui/common/util/RestUtil.java (revision 52279) +++ admingui/common/src/main/java/org/glassfish/admingui/common/util/RestUtil.java (working copy) @@ -732,8 +732,18 @@ .accept(RESPONSE_TYPE).get(ClientResponse.class); RestResponse rr = RestResponse.getRestResponse(cr); parseResponse(rr, null, endpoint, attrs, quiet, throwException); + } + public static ClientResponse getRequestFromServlet(HttpServletRequest request, String endpoint, Map attrs) { + String token = (String) request.getSession().getAttribute(AdminConsoleAuthModule.REST_TOKEN); + WebResource webResource = JERSEY_CLIENT.resource(endpoint).queryParams(buildMultivalueMap(attrs)); + ClientResponse cr = webResource + .cookie(new Cookie(REST_TOKEN_COOKIE, token)) + .get(ClientResponse.class); + + return cr; } + //****************************************************************************************************************** // Jersey client methods //****************************************************************************************************************** Index: admingui/common/src/main/resources/logViewer/logViewerRaw.jsf =================================================================== --- admingui/common/src/main/resources/logViewer/logViewerRaw.jsf (revision 52279) +++ admingui/common/src/main/resources/logViewer/logViewerRaw.jsf (working copy) @@ -57,7 +57,7 @@ - + #include "/common/shared/alertMsg.inc" @@ -97,8 +97,8 @@ var timeout = 1000; var success = function(xhr, targetId, requestedUrl) { - if (xhr.status == 200) { - if (xhr.responseText) { + if (xhr.status == 200 && xhr.getResponseHeader('Content-Type') == "text/plain") { + if (xhr.responseText ) { var records = document.createTextNode(xhr.responseText); var documentX = window.pageXOffset || document.body.scrollLeft /* IE */; var documentY = window.pageYOffset || document.body.scrollTop /* IE */; @@ -112,7 +112,13 @@ } } // get only new records next time - url = xhr.getResponseHeader('X-Text-Append-Next'); + var nextRestUrl = xhr.getResponseHeader('X-Text-Append-Next'); + if (nextRestUrl != undefined) { + var matches = nextRestUrl.match(/start=\\\\d+/) + if (matches) { + url = url.replace(/start=\\\\d+/, matches[0]); + } + } } setTimeout(poll, timeout); }; Index: admingui/war/src/main/webapp/WEB-INF/web.xml =================================================================== --- admingui/war/src/main/webapp/WEB-INF/web.xml (revision 52279) +++ admingui/war/src/main/webapp/WEB-INF/web.xml (working copy) @@ -106,6 +106,7 @@ org.glassfish.admingui.common.servlet.LBConfigContentSource, org.glassfish.admingui.common.servlet.ClientStubsContentSource, org.glassfish.admingui.common.servlet.LogFilesContentSource + org.glassfish.admingui.common.servlet.LogViewerContentSource