All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.glassfish.admingui.handlers.WoodstockHandler Maven / Gradle / Ivy

There is a newer version: 7.2024.1.Alpha1
Show newest version
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 2009-2015 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.
 */
// Portions Copyright [2022] Payara Foundation and/or its affiliates

/*
 * CommonHandlers.java
 *
 * Created on August 30, 2006, 4:21 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
// Portions Copyright [2017-2021] [Payara Foundation and/or its affiliates]
package org.glassfish.admingui.handlers;

import com.sun.enterprise.util.io.FileUtils;
import com.sun.jsftemplating.annotation.Handler;
import com.sun.jsftemplating.annotation.HandlerInput;
import com.sun.jsftemplating.annotation.HandlerOutput;
import com.sun.jsftemplating.layout.descriptors.handler.HandlerContext;

import com.sun.webui.jsf.component.Calendar;
import com.sun.webui.jsf.model.UploadedFile;
import com.sun.webui.jsf.component.Hyperlink;

import jakarta.faces.context.ExternalContext;
import jakarta.faces.context.FacesContext;
import jakarta.faces.model.SelectItem;
import com.sun.webui.jsf.model.Option;
import com.sun.webui.jsf.model.OptionGroup;
import com.sun.webui.jsf.component.DropDown;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.SecureRandom;
import java.util.Map;
import java.util.List;
import java.util.ListIterator;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.glassfish.admingui.common.util.GuiUtil;
import org.glassfish.admingui.common.handlers.MonitoringHandlers;
import org.glassfish.admingui.common.util.RestUtil;
import org.glassfish.admingui.util.SunOptionUtil;

public class WoodstockHandler {

    /**
     * Creates a new instance of CommonHandlers
     */
    public WoodstockHandler() {
    }

    /**
     * 

* This handler will delete file from temp directory

* @param handlerCtx * @throws IOException */ @Handler(id = "deleteFileFromTempDir", input = { @HandlerInput(name = "deleteTempFile", type = String.class)}) public static void deleteFileFromTempDir(HandlerContext handlerCtx) throws IOException { Logger logger = GuiUtil.getLogger(); if (logger.isLoggable(Level.FINE)) { logger.fine(GuiUtil.getCommonMessage("log.indeleteFileFromTempDir")); } String deleteTempFile = (String) handlerCtx.getInputValue("deleteTempFile"); if (deleteTempFile == null) { return; } Path pathToFile = Paths.get(deleteTempFile); if (Files.exists(pathToFile)) { try { Files.delete(pathToFile); } catch (IOException x) { logger.log(Level.WARNING, GuiUtil.getCommonMessage("log.fileCouldntFound", new Object[]{"" + deleteTempFile})); } catch (SecurityException e) { } } } /** *

* This method uploads a file temp directory

*

* Input value: "file" -- Type: * com.sun.webui.jsf.model.UploadedFile

*

* Output value: "uploadDir" -- Type: java.lang.String

* * @param handlerCtx The HandlerContext. */ @Handler(id = "uploadFileToTempDir", input = { @HandlerInput(name = "file", type = UploadedFile.class)}, output = { @HandlerOutput(name = "origPath", type = String.class), @HandlerOutput(name = "uploadedTempFile", type = String.class) }) public static void uploadFileToTempDir(HandlerContext handlerCtx) { Logger logger = GuiUtil.getLogger(); if (logger.isLoggable(Level.FINE)) { logger.fine(GuiUtil.getCommonMessage("log.inUploadFileToTmpDir")); } UploadedFile uploadedFile = (UploadedFile) handlerCtx.getInputValue("file"); File tmpFile = null; String uploadTmpFile = ""; if (uploadedFile != null) { String name = uploadedFile.getOriginalName(); logger.info("uploadFileName=" + name); //see bug# 6498910, for IE, getOriginalName() returns the full path, including the drive. //for any other browser, it just returns the file name. int lastIndex = name.lastIndexOf("\\"); if (lastIndex != -1) { name = name.substring(lastIndex + 1, name.length()); } int index = name.indexOf('.'); if (index <= 0) { logger.info("name=" + name + ",index=" + index); String mesg = GuiUtil.getMessage("msg.deploy.nullArchiveError"); GuiUtil.handleError(handlerCtx, mesg); return; } String suffix = name.substring(index); String prefix = name.substring(0, index); handlerCtx.setOutputValue("origPath", prefix); try { //createTempFile requires min. of 3 char for prefix. if (prefix.length() <= 2) { prefix = prefix + new SecureRandom().nextInt(100000); } tmpFile = File.createTempFile(prefix, suffix); FileUtils.deleteOnExit(tmpFile); // org.apache.commons.io.FileUtils#moveTo requires non-existent destination file otherwise throws error tmpFile.delete(); if (logger.isLoggable(Level.FINE)) { logger.fine(GuiUtil.getCommonMessage("log.writeToTmpFile")); } uploadedFile.write(tmpFile); FileUtils.deleteOnExit(tmpFile); if (logger.isLoggable(Level.FINE)) { logger.fine(GuiUtil.getCommonMessage("log.afterWriteToTmpFile")); } uploadTmpFile = tmpFile.getCanonicalPath(); } catch (IOException ioex) { try { if (tmpFile != null) { uploadTmpFile = tmpFile.getAbsolutePath(); } } catch (Exception ex) { //Handle AbsolutePathException here } } catch (Exception ex) { GuiUtil.handleException(handlerCtx, ex); } } if (logger.isLoggable(Level.FINE)) { logger.fine(GuiUtil.getCommonMessage("log.successfullyUploadedTmp") + uploadTmpFile); } handlerCtx.setOutputValue("uploadedTempFile", uploadTmpFile); } /** *

* This handler enable or disable the table text field according to the * method value. */ @Handler(id = "setDisableConnectionPoolTableField", input = { @HandlerInput(name = "tableDD", type = com.sun.webui.jsf.component.DropDown.class), @HandlerInput(name = "validationField", type = com.sun.webui.jsf.component.DropDown.class), @HandlerInput(name = "methodValue", type = String.class)}) public static void setDisableConnectionPoolTableField(HandlerContext handlerCtx) { String methodValue = (String) handlerCtx.getInputValue("methodValue"); DropDown tableDD = (DropDown) handlerCtx.getInputValue("tableDD"); DropDown validationDD = (DropDown) handlerCtx.getInputValue("validationField"); if ("table".equals(methodValue)) { tableDD.setDisabled(false); validationDD.setDisabled(true); } else if ("custom-validation".equals(methodValue)) { tableDD.setDisabled(true); validationDD.setDisabled(false); } else { tableDD.setDisabled(true); validationDD.setDisabled(true); } } @Handler(id = "createHyperlinkArray", output = { @HandlerOutput(name = "links", type = Hyperlink[].class) }) public static void createHyperlinkArray(HandlerContext handlerCtx) { FacesContext ctx = handlerCtx.getFacesContext(); ExternalContext extCtx = ctx.getExternalContext(); Map reqParams = extCtx.getRequestParameterValuesMap(); String linkText[] = reqParams.get("text"); String linkUrl[] = reqParams.get("urls"); if (linkText == null) { // No data! Should we add something here anyway? return; } int len = linkText.length; Hyperlink arr[] = new Hyperlink[len]; String url = null; String ctxPath = extCtx.getRequestContextPath(); int ctxPathSize = ctxPath.length(); for (int idx = 0; idx < len; idx++) { // FIXME: Set parent arr[idx] = new Hyperlink(); arr[idx].setId("bcLnk" + idx); // Set rendererType to avoid using widget renderer!! arr[idx].setRendererType("com.sun.webui.jsf.Hyperlink"); arr[idx].setText(linkText[idx]); url = linkUrl[idx]; if (url.startsWith(ctxPath)) { url = url.substring(ctxPathSize); } arr[idx].setUrl(url); } handlerCtx.setOutputValue("links", arr); } @Handler(id = "dummyHyperlinkArray", output = { @HandlerOutput(name = "links", type = Hyperlink[].class) }) public static void dummyHyperlinkArray(HandlerContext handlerCtx) { Hyperlink arr[] = new Hyperlink[1]; arr[0] = new Hyperlink(); arr[0].setText(">"); handlerCtx.setOutputValue("links", arr); } @Handler(id = "gf.stringArrayToSelectItemArray", input = { @HandlerInput(name = "stringArray", type = String[].class, required = true)}, output = { @HandlerOutput(name = "item", type = SelectItem[].class)}) public static void stringArrayToSelectItemArray(HandlerContext handlerCtx) { String[] stringArray = (String[]) handlerCtx.getInputValue("stringArray"); handlerCtx.setOutputValue("item", SunOptionUtil.getOptions(stringArray)); } @Handler(id = "selectItemArrayToStrArray", input = { @HandlerInput(name = "item", type = SelectItem[].class, required = true)}, output = { @HandlerOutput(name = "strAry", type = String[].class)}) public static void selectItemArrayToStrArray(HandlerContext handlerCtx) { SelectItem[] item = (SelectItem[]) handlerCtx.getInputValue("item"); if (item == null || item.length == 0) { handlerCtx.setOutputValue("strAry", new String[0]); return; } String[] strAry = new String[item.length]; for (int i = 0; i < item.length; i++) { strAry[i] = (String) item[i].getValue(); } handlerCtx.setOutputValue("strAry", strAry); } @Handler(id = "gf.convertListToOptionArray", input = { @HandlerInput(name = "list", type = List.class, required = true)}, output = { @HandlerOutput(name = "optionArray", type = Option[].class)}) public static void convertListToOptionArray(HandlerContext handlerCtx) { List list = (List) handlerCtx.getInputValue("list"); if (list == null || list.isEmpty()) { handlerCtx.setOutputValue("optionArray", new Option[0]); return; } handlerCtx.setOutputValue("optionArray", SunOptionUtil.getOptionsArray(list.toArray(new String[list.size()]))); } /** *

* Returns the date pattern for this calendar component. * */ @Handler(id = "getDatePattern", input = { @HandlerInput(name = "calendarComponent", type = com.sun.webui.jsf.component.Calendar.class, required = true)}, output = { @HandlerOutput(name = "pattern", type = String.class)}) public static void getDatePattern(HandlerContext handlerCtx) { Calendar calendar = (Calendar) handlerCtx.getInputValue("calendarComponent"); String pattern = calendar.getDateFormatPattern(); if (pattern == null || pattern.length() == 0) { pattern = calendar.getDatePicker().getDateFormatPattern(); if (pattern == null || pattern.length() == 0) { pattern = "MM/dd/yyyy"; //default pattern } } handlerCtx.setOutputValue("pattern", pattern); } /** *

* Returns the list of monitorable server components

* */ @Handler(id = "populateServerMonitorDropDown", input = { @HandlerInput(name = "VSList", type = List.class, required = true), @HandlerInput(name = "GCList", type = List.class, required = true), @HandlerInput(name = "NLList", type = List.class, required = true), @HandlerInput(name = "ThreadSystemList", type = List.class, required = true)}, output = { @HandlerOutput(name = "MonitorList", type = Option[].class)}) public void populateServerMonitorDropDown(HandlerContext handlerCtx) { List vsList = (List) handlerCtx.getInputValue("VSList"); List threadList = (List) handlerCtx.getInputValue("ThreadSystemList"); List gcList = (List) handlerCtx.getInputValue("GCList"); List nlList = (List) handlerCtx.getInputValue("NLList"); ArrayList menuList = new ArrayList(); menuList.add(new Option("", "")); // Menu for Virtual Servers OptionGroup vsMenuOptions = getMenuOptions(vsList, "virtual-server", "", false); if (vsMenuOptions != null) { menuList.add(vsMenuOptions); } // Menu for Listeners OptionGroup nlMenuOptions = getMenuOptions(nlList, "http-listener", "", false); if (nlMenuOptions != null) { menuList.add(nlMenuOptions); } // Menu for Garbage Collectors OptionGroup gcMenuOptions = getMenuOptions(gcList, "garbage-collector", "", false); if (gcMenuOptions != null) { menuList.add(gcMenuOptions); } // Menu for Thread System OptionGroup tsMenuOptions = getMenuOptions(threadList, "thread-system", "", false); if (tsMenuOptions != null) { menuList.add(tsMenuOptions); } // Add Menu Options. jumpMenuOptions = (Option[]) menuList.toArray(new Option[menuList.size()]); //Arrays.sort(jumpMenuOptions); handlerCtx.setOutputValue("MonitorList", jumpMenuOptions); } /** *

* Returns the list of monitorable resource components

* */ @Handler(id = "populateResourceMonitorDropDown", input = { @HandlerInput(name = "ResourceList", type = List.class, required = true)}, output = { @HandlerOutput(name = "MonitorList", type = Option[].class), @HandlerOutput(name = "FirstItem", type = String.class)}) public void populateResourceMonitorDropDown(HandlerContext handlerCtx) { List rList = (List) handlerCtx.getInputValue("ResourceList"); ArrayList menuList = new ArrayList(); // Menu for Resources ArrayList resList = new ArrayList(); String firstItem = null; if (rList != null) { ListIterator rl = rList.listIterator(); while (rl.hasNext()) { String name = (String) rl.next(); resList.add(new Option(name, name)); if (firstItem == null) { firstItem = name; } } } Option[] groupedOptions1 = (Option[]) resList.toArray(new Option[resList.size()]); OptionGroup jumpGroup1 = new OptionGroup(); jumpGroup1.setLabel("resources"); jumpGroup1.setOptions(groupedOptions1); menuList.add(jumpGroup1); // Add Menu Options. jumpMenuOptions = (Option[]) menuList.toArray(new Option[menuList.size()]); handlerCtx.setOutputValue("MonitorList", jumpMenuOptions); handlerCtx.setOutputValue("FirstItem", firstItem); } /** *

* Returns the list of monitorable application components

* */ @Handler(id = "populateApplicationsMonitorDropDown", input = { @HandlerInput(name = "AppsList", type = List.class, required = true), @HandlerInput(name = "monitorURL", type = String.class, required = true)}, output = { @HandlerOutput(name = "MonitorList", type = Option[].class), @HandlerOutput(name = "FirstItem", type = String.class)}) public void populateApplicationsMonitorDropDown(HandlerContext handlerCtx) { List aList = (List) handlerCtx.getInputValue("AppsList"); String monitorURL = (String) handlerCtx.getInputValue("monitorURL"); ArrayList menuList = new ArrayList(); String firstItem = null; String title = null; if (aList != null) { ListIterator al = aList.listIterator(); while (al.hasNext()) { ArrayList moduleList = new ArrayList(); String appName = (String) al.next(); //Add the application name link in the dropdown if there are any app scoped resources. if (MonitoringHandlers.doesMonitoringDataExist(monitorURL + "/applications/" + appName + "/resources")) { moduleList.add(appName); } Set modules = new HashSet(); try { modules = RestUtil.getChildMap(GuiUtil.getSessionValue("REST_URL") + "/applications/application/" + appName + "/module").keySet(); } catch (Exception ex) { GuiUtil.handleException(handlerCtx, ex); } for (String moduleName : modules) { if (MonitoringHandlers.doesAppProxyExist(appName, moduleName)) { if (!moduleList.contains(moduleName)) { moduleList.add(moduleName); } } } if (moduleList.isEmpty()) { menuList.add(new Option(appName, appName)); if (firstItem == null) { firstItem = appName; } } else { OptionGroup menuOptions = getMenuOptions(moduleList, appName, "", false); menuList.add(menuOptions); if (firstItem == null) { firstItem = (String) moduleList.get(0); } } } } // Add Menu Options. jumpMenuOptions = (Option[]) menuList.toArray(new Option[menuList.size()]); handlerCtx.setOutputValue("MonitorList", jumpMenuOptions); handlerCtx.setOutputValue("FirstItem", firstItem); } /** *

* Returns the list of monitorable components of an application

* */ @Handler(id = "populateComponentDropDown", input = { @HandlerInput(name = "ModuleName", type = String.class, required = true), @HandlerInput(name = "VSList", type = List.class, required = true), @HandlerInput(name = "MonitorURL", type = String.class, required = true), @HandlerInput(name = "AppName", type = String.class, required = true)}, output = { @HandlerOutput(name = "ComponentList", type = Option[].class)}) public void populateComponentDropDown(HandlerContext handlerCtx) { String moduleName = (String) handlerCtx.getInputValue("ModuleName"); String appname = (String) handlerCtx.getInputValue("AppName"); String monitorURL = (String) handlerCtx.getInputValue("MonitorURL"); List vsList = (List) handlerCtx.getInputValue("VSList"); ArrayList menuList = new ArrayList(); menuList.add(new Option("", "")); if (appname != null && !appname.isEmpty()) { //Servlet Instance Menu Options. List servletInstanceMenuOptions = getWebComponentMenuOptions(appname, moduleName, vsList, monitorURL, handlerCtx); menuList.addAll(servletInstanceMenuOptions); //EJB Menu options. if (!appname.equals(moduleName)) { Map compsMap = MonitoringHandlers.getSubComponents(appname, moduleName); if (compsMap != null && compsMap.size() > 0) { for (Map.Entry e : compsMap.entrySet()) { if (!e.getValue().equals("Servlet")) { List compMenuOptions = getEJBComponentMenuOptions(appname, moduleName, e.getKey(), monitorURL, handlerCtx); menuList.addAll(compMenuOptions); } } } } List resMenuOptions = getAppScopedResourcesMenuOptions(appname, moduleName, monitorURL, handlerCtx); if (resMenuOptions.size() > 0) { menuList.addAll(resMenuOptions); } } // Add Menu Options. jumpMenuOptions = (Option[]) menuList.toArray(new Option[menuList.size()]); handlerCtx.setOutputValue("ComponentList", jumpMenuOptions); } private static List getEJBComponentMenuOptions(String appname, String modulename, String compName, String monitorURL, HandlerContext handlerCtx) { String endpoint = monitorURL + "/applications/" + appname + "/" + modulename + "/" + compName; List compMenuList = new ArrayList(); List menuList = new ArrayList(); Set compChildSet = null; try { if (appname.equals(modulename)) { endpoint = monitorURL + "/applications/" + appname + "/" + compName; } compChildSet = RestUtil.getChildMap(endpoint).keySet(); } catch (Exception ex) { GuiUtil.getLogger().severe("Error in getEJBComponentMenuOptions ; \nendpoint = " + endpoint + "method=GET"); } if (compChildSet != null) { for (String child : compChildSet) { Set subCompChildSet = null; try { subCompChildSet = RestUtil.getChildMap(endpoint + "/" + child).keySet(); } catch (Exception ex) { GuiUtil.getLogger().severe("Error in getEJBComponentMenuOptions ; \nendpoint = " + endpoint + "/" + child + "method=GET"); } if ((subCompChildSet != null) && subCompChildSet.size() > 0) { //For ex: bean-methods OptionGroup childCompMenuOptions = getMenuOptions(new ArrayList(subCompChildSet), child, compName, true); menuList.add(childCompMenuOptions); } else { //For ex: bean-cache and bean- compMenuList.add(child); } } } compMenuList.add(0, compName); OptionGroup compMenuOptions = getMenuOptions(compMenuList, compName, "", true); menuList.add(0, compMenuOptions); return menuList; } private static List getAppScopedResourcesMenuOptions(String appname, String modulename, String monitorURL, HandlerContext handlerCtx) { String endpoint = monitorURL + "/applications/" + appname + "/" + modulename + "/resources"; List menuList = new ArrayList(); Set resChildSet = null; try { if (appname.equals(modulename)) { endpoint = monitorURL + "/applications/" + appname + "/resources"; } resChildSet = RestUtil.getChildMap(endpoint).keySet(); } catch (Exception ex) { GuiUtil.getLogger().severe("Error in getAppScopedResourcesMenuOptions ; \nendpoint = " + endpoint + "method=GET"); } if (resChildSet != null && resChildSet.size() > 0) { OptionGroup childResMenuOptions = getMenuOptions(new ArrayList(resChildSet), "resources", "", true); menuList.add(childResMenuOptions); } return menuList; } private static List getWebComponentMenuOptions(String appname, String modulename, List vsList, String monitorURL, HandlerContext handlerCtx) { String endpoint = monitorURL + "/applications/" + appname; List menuList = new ArrayList(); if (modulename != null && !modulename.trim().equals("") && !appname.equals(modulename)) { endpoint += "/" + modulename; } if (vsList != null) { ListIterator vl = vsList.listIterator(); while (vl.hasNext()) { String name = (String) vl.next(); try { List servlets = new ArrayList(RestUtil.getChildMap(endpoint + "/" + name).keySet()); if (!servlets.isEmpty()) { OptionGroup menuOptions = getMenuOptions(servlets, name, "", true); menuList.add(menuOptions); } } catch (Exception ex) { GuiUtil.getLogger().severe("Error in getWebComponentMenuOptions ; \nendpoint = " + endpoint + "/" + name + "method=GET"); } } } return menuList; } private static OptionGroup getMenuOptions(List values, String label, String label2, boolean addLabel) { if (values == null) { return null; } ArrayList nList = new ArrayList(); Collections.sort(values); ListIterator nl = values.listIterator(); while (nl.hasNext()) { String name = (String) nl.next(); if (addLabel && label2.equals("")) { if (!label.equals(name)) { nList.add(new Option(label + "/" + name, name)); } else { nList.add(new Option(name, name)); } } else if (addLabel && !label2.equals("")) { nList.add(new Option(label2 + "/" + label + "/" + name, name)); } else { nList.add(new Option(name, name)); } } Option[] groupedOptions3 = (Option[]) nList.toArray(new Option[nList.size()]); OptionGroup jumpGroup3 = new OptionGroup(); jumpGroup3.setLabel(label); jumpGroup3.setOptions(groupedOptions3); return jumpGroup3; } private Option[] jumpMenuOptions = null; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy