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

org.rhq.enterprise.communications.command.param.Parameter Maven / Gradle / Ivy

The newest version!
/*
 * 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 as published by
 * the Free Software Foundation version 2 of the License.
 *
 * 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 for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
package org.rhq.enterprise.communications.command.param;

import java.io.Serializable;

/**
 * A parameter encapsulates both a {@link ParameterDefinition definition} and an object value. Note that a parameter is
 * allowed to have a null definition, that is, the parameter can be of an unknown type and name; in this
 * case, only its value is known.
 *
 * 

A definition is immutable but this class allows for its parameter value to be set.

* * @author Charles Crouch * @author John Mazzitelli */ public class Parameter implements Serializable { /** * The serialVersionUID */ private static final long serialVersionUID = 1L; /** * The definition that describes the parameter - note it is final/immutable */ private final ParameterDefinition m_definition; /** * the actual value of the parameter - this value can change during its lifetime */ private Object m_value; /** * this will be true when the {@link #getValue() value} has changed from its initial value as set by a * call to one of the constructors. */ private boolean m_dirty; /** * Copy-constructor for {@link Parameter}. * * @param original the original to copy */ public Parameter(Parameter original) { this(original.getDefinition(), original.getValue(), original.isDirty()); } /** * Creates a new {@link Parameter} object given the individual parts of the parameter. * * @param definition the parameter's definition * @param value the value of the parameter * @param isDirty the flag to indicate if the parameter's value was changed (i.e. different than its original or * default value) */ protected Parameter(ParameterDefinition definition, Object value, boolean isDirty) { m_definition = definition; m_value = value; m_dirty = isDirty; return; } /** * Constructor for {@link Parameter} with the given initializers. Note that the definition may be null, * in which case nothing is known about the parameter other than its value. * * @param definition the object that defines the parameter metadata like its name, type, etc. (may be * null) * @param value the actual value of the parameter (may be null) */ public Parameter(ParameterDefinition definition, Object value) { this(definition, value, false); } /** * This is a convienence method to get the name of the parameter from its {@link #getDefinition() definition}. * * @return the parameter name */ public String getName() { return getDefinition().getName(); } /** * Returns the parameter's definition. This may be null, in which case you don't know anything about * the parameter other than its {@link #getValue() value}. * * @return the parameter's metadata definition (like its name, type, etc.) */ public ParameterDefinition getDefinition() { return m_definition; } /** * Returns the parameter's data value. This may be null. * * @return the parameter value */ public Object getValue() { return m_value; } /** * Sets the parameter's data value. This may be null. The {@link #isDirty() dirty flag} is set when * this method is called. * * @param value the parameter value */ public void setValue(Object value) { this.m_value = value; m_dirty = true; } /** * Returns true if the dirty flag has been set; that is, if {@link #setValue(Object)} has been called, * thus changing the value of this object's original value. * * @return true if the parameter's value was changed from its original value from the time this object * was instantiated */ public boolean isDirty() { return m_dirty; } /** * Same as {@link #toString(boolean) toString(true)}. * * @see java.lang.Object#toString() */ public String toString() { return toString(true); } /** * Will provide the string form of the parameter but the value's actual toString will only be returned in the string * if showValue is true. If it is false, the value will be omitted from the * string. * * @param showValue if true, the parameter's value will be in the returned string, it will not be if * false * * @return the string form of the parameter * * @see java.lang.Object#toString() */ public String toString(boolean showValue) { StringBuffer str = new StringBuffer("Parameter: "); str.append("def=[" + m_definition + "]"); str.append("; value's class=[" + ((m_value == null) ? "null" : m_value.getClass().toString()) + "]"); str.append("; dirty=[" + m_dirty + "]"); if (showValue) { str.append("; value=[" + ((m_value == null) ? "null" : m_value.toString()) + "]"); } return str.toString(); } /** * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { if ((obj == null) || (!(obj instanceof Parameter))) { return false; } Parameter other = (Parameter) obj; // first check the value if (this.m_value == null) { if (other.m_value != null) { return false; } } else if (!this.m_value.equals(other.m_value)) { return false; } // value is the same, now check the definition if (this.m_definition == null) { if (other.m_definition != null) { return false; } } else if (!this.m_definition.equals(other.m_definition)) { return false; } // everything is the same return true; } /** * @see java.lang.Object#hashCode() */ public int hashCode() { int hash = 7; hash = (hash * 31) + ((m_definition == null) ? 0 : m_definition.hashCode()); hash = (hash * 31) + ((m_value == null) ? 0 : m_value.hashCode()); return hash; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy