View Javadoc
1   /*
2     (C) Copyright IBM Corp. 2006, 2012
3   
4     THIS FILE IS PROVIDED UNDER THE TERMS OF THE ECLIPSE PUBLIC LICENSE
5     ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
6     CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
7   
8     You can obtain a current copy of the Eclipse Public License from
9     http://www.opensource.org/licenses/eclipse-1.0.php
10  
11    @author : Endre Bak, ebak@de.ibm.com
12   * 
13   * Flag       Date        Prog         Description
14   * -------------------------------------------------------------------------------
15   * 1565892    2006-10-06  ebak         Make SBLIM client JSR48 compliant
16   * 1737141    2007-06-18  ebak         Sync up with JSR48 evolution
17   * 2003590    2008-06-30  blaschke-oss Change licensing from CPL to EPL
18   * 2524131    2009-01-21  raman_arora  Upgrade client to JDK 1.5 (Phase 1)
19   * 2750520    2009-04-10  blaschke-oss Code cleanup from empty statement et al
20   * 2763216    2009-04-14  blaschke-oss Code cleanup: visible spelling/grammar errors
21   * 2797550    2009-06-01  raman_arora  JSR48 compliance - add Java Generics
22   * 2935258    2010-01-22  blaschke-oss Sync up javax.cim.* javadoc with JSR48 1.0.0
23   * 3400209    2011-08-31  blaschke-oss Highlighted Static Analysis (PMD) issues
24   * 3496301    2012-03-02  blaschke-oss Sync up javax.* javadoc with JSR48 1.0.0 Final
25   * 3565581    2012-09-07  blaschke-oss TCK: remove unnecessary overriding methods
26   */
27  
28  package org.metricshub.wbem.javax.cim;
29  
30  /*-
31   * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
32   * WBEM Java Client
33   * ჻჻჻჻჻჻
34   * Copyright 2023 - 2025 MetricsHub
35   * ჻჻჻჻჻჻
36   * Licensed under the Apache License, Version 2.0 (the "License");
37   * you may not use this file except in compliance with the License.
38   * You may obtain a copy of the License at
39   *
40   *      http://www.apache.org/licenses/LICENSE-2.0
41   *
42   * Unless required by applicable law or agreed to in writing, software
43   * distributed under the License is distributed on an "AS IS" BASIS,
44   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
45   * See the License for the specific language governing permissions and
46   * limitations under the License.
47   * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
48   */
49  
50  //Sync'd against JSR48 1.0.0 javadoc (build 1.6.0_18) on Thu Mar 01 12:21:26 EST 2012
51  /**
52   * This class represents a CIM Property as defined by the Distributed Management
53   * Task Force (<a href=http://www.dmtf.org>DMTF</a>) CIM Infrastructure
54   * Specification (<a
55   * href=http://www.dmtf.org/standards/published_documents/DSP0004V2.3_final.pdf
56   * >DSP004</a>). A CIM Property Object consists of a name, data type and value.
57   * The CIM Property object also includes a flag to signify whether the property
58   * is a key property (used as part of the name of the CIM element), a flag to
59   * signify whether it was propagated from a parent class and the class origin
60   * information (where the property was originally defined).
61   *
62   * @param <E>
63   *            Type parameter.
64   */
65  public class CIMProperty<E> extends CIMValuedElement<E> {
66  	private static final long serialVersionUID = -4741931597423829396L;
67  
68  	private boolean iKey, iPropagated;
69  
70  	private String iOriginClass;
71  
72  	/**
73  	 * Constructs a <code>CIMProperty</code> to be used in instances. For a
74  	 * <code>CIMClass</code>, <code>CIMClassProperty</code> shall be used. This
75  	 * can only be used for non-Key properties, non-propagated properties and
76  	 * when the the origin class is not needed.
77  	 *
78  	 * @param pName
79  	 *            The name of the property.
80  	 * @param pType
81  	 *            The <code>CIMDataType</code> of the property.
82  	 * @param pValue
83  	 *            The value of the property.
84  	 */
85  	public CIMProperty(String pName, CIMDataType pType, E pValue) {
86  		this(pName, pType, pValue, false, false, null);
87  	}
88  
89  	/**
90  	 * Constructs a <code>CIMProperty</code> to be used in instances. For a
91  	 * <code>CIMClass</code>, <code>CIMClassProperty</code> shall be used.
92  	 *
93  	 * @param pName
94  	 *            The name of the property.
95  	 * @param pType
96  	 *            The <code>CIMDataType</code> of the property.
97  	 * @param pValue
98  	 *            The value of the property.
99  	 * @param pKey
100 	 *            <code>true</code> if the property is a key; otherwise
101 	 *            <code>false</code>.
102 	 * @param pPropagated
103 	 *            <code>true</code> if the value was propagated from the class.
104 	 * @param pOriginClass
105 	 *            The class in which this property was defined or overridden.
106 	 */
107 	public CIMProperty(
108 		String pName,
109 		CIMDataType pType,
110 		E pValue,
111 		boolean pKey,
112 		boolean pPropagated,
113 		String pOriginClass
114 	) {
115 		super(pName, pType, pValue);
116 		this.iKey = pKey;
117 		this.iPropagated = pPropagated;
118 		this.iOriginClass = pOriginClass;
119 	}
120 
121 	/**
122 	 * Compares this object against the specified object. The result is
123 	 * <code>true</code> if and only if the argument is not <code>null</code>
124 	 * and is a <code>CIMProperty</code> that represents the same name, type and
125 	 * value as this object.
126 	 *
127 	 * @param pObj
128 	 *            The object to compare with.
129 	 * @return <code>true</code> if the objects are the same; <code>false</code>
130 	 *         otherwise.
131 	 */
132 	@Override
133 	public boolean equals(Object pObj) {
134 		if (!(pObj instanceof CIMProperty)) return false;
135 		if (!super.equals(pObj)) return false;
136 		CIMProperty<?> that = (CIMProperty<?>) pObj;
137 		return (
138 			this.iKey == that.iKey &&
139 			this.iPropagated == that.iPropagated &&
140 			(this.iOriginClass == null ? that.iOriginClass == null : this.iOriginClass.equalsIgnoreCase(that.iOriginClass))
141 		);
142 	}
143 
144 	/**
145 	 * Returns the class in which this property was defined or overridden.
146 	 *
147 	 * @return Name of class where this property was defined.
148 	 */
149 	public String getOriginClass() {
150 		return this.iOriginClass;
151 	}
152 
153 	/**
154 	 * Convenience method for determining if this property is a Key.
155 	 *
156 	 * @return <code>true</code> if this property is a key.
157 	 */
158 	public boolean isKey() {
159 		return this.iKey;
160 	}
161 
162 	/**
163 	 * Determines if this property is Propagated. When this property is part of
164 	 * a class, this value designates that the class origin value is the same as
165 	 * the class name.
166 	 *
167 	 * @return <code>true</code> if this property is propagated.
168 	 */
169 	public boolean isPropagated() {
170 		return this.iPropagated;
171 	}
172 }