/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * 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 and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser 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. */ package org.rhq.core.gui.configuration; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Vector; import javax.faces.component.UIComponentBase; import javax.faces.component.UIPanel; import javax.faces.component.UIParameter; import javax.faces.component.html.HtmlCommandLink; import javax.faces.component.html.HtmlInputTextarea; import javax.faces.component.html.HtmlPanelGrid; import javax.faces.context.FacesContext; import org.rhq.core.gui.util.FacesComponentIdFactory; import org.rhq.core.gui.util.FacesComponentUtility; /** * @author Adam Young */ public class RawConfigUIComponent extends UIComponentBase { private static final String family = "rhq"; private static final CharSequence TABLE_STYLE = "<style type=\"text/css\">" + "td.raw-config-table {" + "vertical-align: top;" + "valign: top;" + "}" + "</style>"; private FacesComponentIdFactory idFactory; private HtmlInputTextarea inputTextarea; private ArrayList<String> configPathList; public HtmlCommandLink saveLink; private Vector<HtmlCommandLink> pathCommandLinks; private ArrayList<UIParameter> readOnlyParms; private boolean readOnly; @Override public String getFamily() { return family; } private void buildChildren() { if (getChildCount() > 0) { return; } FacesComponentUtility.addVerbatimText(this, TABLE_STYLE); UIPanel rawPanel = FacesComponentUtility.addBlockPanel(this, idFactory, ""); HtmlPanelGrid grid = FacesComponentUtility.addPanelGrid(rawPanel, idFactory, 2, "summary-props-table"); grid.setParent(this); grid.setColumnClasses("raw-config-table"); HtmlPanelGrid panelLeft = FacesComponentUtility.addPanelGrid(grid, idFactory, 1, "summary-props-table"); panelLeft.setBgcolor("#a4b2b9"); FacesComponentUtility.addOutputText(panelLeft, idFactory, "Raw Configurations Paths", ""); int rawCount = 0; configPathList = new ArrayList<String>(); Collections.sort(configPathList); String oldDirname = ""; pathCommandLinks = new Vector<HtmlCommandLink>(); for (String s : configPathList) { String dirname = s.substring(0, s.lastIndexOf("/") + 1); String basename = s.substring(s.lastIndexOf("/") + 1, s.length()); if (!dirname.equals(oldDirname)) { FacesComponentUtility.addOutputText(panelLeft, idFactory, dirname, ""); oldDirname = dirname; } UIPanel nextPath = FacesComponentUtility.addBlockPanel(panelLeft, idFactory, ""); HtmlCommandLink link = FacesComponentUtility.addCommandLink(nextPath, idFactory); FacesComponentUtility.addOutputText(link, idFactory, "", ""); FacesComponentUtility.addOutputText(link, idFactory, basename, ""); FacesComponentUtility.addParameter(link, idFactory, "path", s); FacesComponentUtility.addParameter(link, idFactory, "whichRaw", Integer.toString(rawCount++)); FacesComponentUtility.addParameter(link, idFactory, "showRaw", Boolean.TRUE.toString()); readOnlyParms.add(FacesComponentUtility.addParameter(link, idFactory, "readOnly", Boolean .toString(readOnly))); pathCommandLinks.add(link); } UIPanel panelRight = FacesComponentUtility.addBlockPanel(grid, idFactory, "summary-props-table"); UIPanel editPanel = FacesComponentUtility.addBlockPanel(panelRight, idFactory, "summary-props-table"); this.inputTextarea = createConfigTextArea(readOnly); editPanel.getChildren().add(this.inputTextarea); inputTextarea.setParent(editPanel); } @Override public void encodeBegin(FacesContext context) throws IOException { // TODO Auto-generated method stub buildChildren(); } public ArrayList<String> getConfigPathList() { return configPathList; } public void setConfigPathList(ArrayList<String> configPathList) { this.configPathList = configPathList; } private HtmlInputTextarea createConfigTextArea(boolean readOnly) { HtmlInputTextarea inputTextarea = new HtmlInputTextarea(); inputTextarea.setId("rawconfigtextarea"); inputTextarea.setCols(80); inputTextarea.setRows(40); inputTextarea.setReadonly(readOnly); return inputTextarea; } }