/* * 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.util.UUID; import javax.faces.component.UIComponentBase; import javax.faces.context.FacesContext; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.gui.configuration.propset.ConfigurationSetComponent; import org.rhq.core.gui.util.FacesComponentIdFactory; import org.rhq.core.gui.util.FacesComponentUtility; import org.rhq.core.template.TemplateEngine; /** * An abstract base class for the {@link ConfigUIComponent} and the {@link ConfigurationSetComponent} JSF component * classes. * * @author Ian Springer */ public abstract class AbstractConfigurationComponent extends UIComponentBase implements FacesComponentIdFactory { private static final String COMPONENT_FAMILY = "rhq"; private static final String NULL_CONFIGURATION_DEFINITION_MESSAGE_ATTRIBUTE = "nullConfigurationDefinitionMessage"; private static final String NULL_CONFIGURATION_MESSAGE_ATTRIBUTE = "nullConfigurationMessage"; private static final String NULL_CONFIGURATION_STYLE_ATTRIBUTE = "nullConfigurationStyle"; private static final String LIST_NAME_ATTRIBUTE = "listName"; private static final String LIST_INDEX_ATTRIBUTE = "listIndex"; private static final String READ_ONLY_ATTRIBUTE = "readOnly"; private static final String FULLY_EDITABLE_ATTRIBUTE = "fullyEditable"; private Boolean readOnly; private Boolean fullyEditable; private String listName; private Integer listIndex; private String nullConfigurationDefinitionMessage; private String nullConfigurationMessage; private String nullConfigurationStyle; private boolean prevalidate; private boolean isGroup; public String getFamily() { return COMPONENT_FAMILY; } public abstract ConfigurationDefinition getConfigurationDefinition(); public abstract Configuration getConfiguration(); public abstract String getConfigurationDefinitionExpressionString(); public abstract String getConfigurationExpressionString(); public String createUniqueId() { return UNIQUE_ID_PREFIX + UUID.randomUUID(); } public boolean isReadOnly() { if (isFullyEditable()) return false; if (this.readOnly == null) { this.readOnly = FacesComponentUtility.getExpressionAttribute(this, READ_ONLY_ATTRIBUTE, Boolean.class); } return (this.readOnly != null) ? this.readOnly : false; } public void setReadOnly(boolean readOnly) { this.readOnly = readOnly; } public boolean isFullyEditable() { if (this.fullyEditable == null) { this.fullyEditable = FacesComponentUtility.getExpressionAttribute(this, FULLY_EDITABLE_ATTRIBUTE, Boolean.class); } return (this.fullyEditable != null) ? this.fullyEditable : false; } public void setFullyEditable(boolean fullyEditable) { this.fullyEditable = fullyEditable; } public String getListName() { if (this.listName == null) { this.listName = FacesComponentUtility.getExpressionAttribute(this, LIST_NAME_ATTRIBUTE, String.class); } return this.listName; } public void setListName(String listName) { this.listName = listName; } public Integer getListIndex() { if (this.listIndex == null) { this.listIndex = FacesComponentUtility.getExpressionAttribute(this, LIST_INDEX_ATTRIBUTE, Integer.class); } return this.listIndex; } public void setListIndex(Integer listIndex) { this.listIndex = listIndex; } public String getNullConfigurationStyle() { if (this.nullConfigurationStyle == null) { this.nullConfigurationStyle = FacesComponentUtility.getExpressionAttribute(this, NULL_CONFIGURATION_STYLE_ATTRIBUTE, String.class); } return this.nullConfigurationStyle; } public void setNullConfigurationStyle(String nullConfigurationStyle) { this.nullConfigurationStyle = nullConfigurationStyle; } public String getNullConfigurationDefinitionMessage() { if (this.nullConfigurationDefinitionMessage == null) { this.nullConfigurationDefinitionMessage = FacesComponentUtility.getExpressionAttribute(this, NULL_CONFIGURATION_DEFINITION_MESSAGE_ATTRIBUTE, String.class); } return this.nullConfigurationDefinitionMessage; } public void setNullConfigurationDefinitionMessage(String nullConfigurationDefinitionMessage) { this.nullConfigurationDefinitionMessage = nullConfigurationDefinitionMessage; } public String getNullConfigurationMessage() { if (this.nullConfigurationMessage == null) { this.nullConfigurationMessage = FacesComponentUtility.getExpressionAttribute(this, NULL_CONFIGURATION_MESSAGE_ATTRIBUTE, String.class); } return this.nullConfigurationMessage; } public void setNullConfigurationMessage(String nullConfigurationMessage) { this.nullConfigurationMessage = nullConfigurationMessage; } public boolean isPrevalidate() { return prevalidate; } public void setPrevalidate(boolean prevalidate) { this.prevalidate = prevalidate; } public boolean isGroup() { return isGroup; } public void setGroup(boolean isGroup) { this.isGroup = isGroup; } private Object[] stateValues; private TemplateEngine templateEngine; @Override public Object saveState(FacesContext facesContext) { if (this.stateValues == null) { this.stateValues = new Object[8]; } this.stateValues[0] = super.saveState(facesContext); this.stateValues[1] = this.readOnly; this.stateValues[2] = this.fullyEditable; this.stateValues[3] = this.listName; this.stateValues[4] = this.listIndex; this.stateValues[5] = this.prevalidate; this.stateValues[6] = this.isGroup; this.stateValues[7] = this.templateEngine; return this.stateValues; } @Override public void restoreState(FacesContext facesContext, Object stateValues) { this.stateValues = (Object[]) stateValues; super.restoreState(facesContext, this.stateValues[0]); this.readOnly = (Boolean) this.stateValues[1]; this.fullyEditable = (Boolean) this.stateValues[2]; this.listName = (String) this.stateValues[3]; this.listIndex = (Integer) this.stateValues[4]; this.prevalidate = (Boolean) this.stateValues[5]; this.isGroup = (Boolean) this.stateValues[6]; this.templateEngine = (TemplateEngine) this.stateValues[7]; } abstract public TemplateEngine getTemplateEngine() ; }