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 * Change History 14 * Flag Date Prog Description 15 * ------------------------------------------------------------------------------- 16 * 1565892 2006-10-06 ebak Make SBLIM client JSR48 compliant 17 * 1660756 2007-02-22 ebak Embedded object support 18 * 1737141 2007-06-18 ebak Sync up with JSR48 evolution 19 * 2003590 2008-06-30 blaschke-oss Change licensing from CPL to EPL 20 * 2524131 2009-01-21 raman_arora Upgrade client to JDK 1.5 (Phase 1) 21 * 2750520 2009-04-10 blaschke-oss Code cleanup from empty statement et al 22 * 2797550 2009-06-01 raman_arora JSR48 compliance - add Java Generics 23 * 2935258 2010-01-22 blaschke-oss Sync up javax.cim.* javadoc with JSR48 1.0.0 24 * 2944842 2010-02-08 blaschke-oss Missing thrown ArrayIndexOutOfBoundsException 25 * 3001333 2010-05-19 blaschke-oss CIMMethod class ignores propagated parameter 26 * 3400209 2011-08-31 blaschke-oss Highlighted Static Analysis (PMD) issues 27 * 3565581 2012-09-07 blaschke-oss TCK: remove unnecessary overriding methods 28 */ 29 30 package org.metricshub.wbem.javax.cim; 31 32 /*- 33 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲ 34 * WBEM Java Client 35 * ჻჻჻჻჻჻ 36 * Copyright 2023 - 2025 MetricsHub 37 * ჻჻჻჻჻჻ 38 * Licensed under the Apache License, Version 2.0 (the "License"); 39 * you may not use this file except in compliance with the License. 40 * You may obtain a copy of the License at 41 * 42 * http://www.apache.org/licenses/LICENSE-2.0 43 * 44 * Unless required by applicable law or agreed to in writing, software 45 * distributed under the License is distributed on an "AS IS" BASIS, 46 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 47 * See the License for the specific language governing permissions and 48 * limitations under the License. 49 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱ 50 */ 51 52 import java.util.Arrays; 53 import org.metricshub.wbem.sblim.cimclient.internal.cim.CIMElementSorter; 54 import org.metricshub.wbem.sblim.cimclient.internal.cim.CIMQualifiedElementInterfaceImpl; 55 import org.metricshub.wbem.sblim.cimclient.internal.util.MOF; 56 57 //Sync'd against JSR48 1.0.0 javadoc (build 1.5.0_10) on Wed Jan 20 02:20:59 EST 2010 58 /** 59 * This class represents a CIM Method as defined by the Distributed Management 60 * Task Force (<a href=http://www.dmtf.org>DMTF</a>) CIM Infrastructure 61 * Specification (<a 62 * href=http://www.dmtf.org/standards/published_documents/DSP0004V2.3_final.pdf 63 * >DSP004</a>). 64 * 65 * @param <E> 66 * Type parameter. 67 */ 68 public class CIMMethod<E> extends CIMTypedElement implements CIMQualifiedElementInterface { 69 private static final long serialVersionUID = -3920536802046705977L; 70 71 private CIMQualifiedElementInterfaceImpl iQualiImpl; 72 73 private CIMParameter<?>[] iParams; 74 75 private boolean iPropagated; 76 77 private String iOriginClass; 78 79 /** 80 * Constructs a <code>CIMMethod</code> object with the specified 81 * information. 82 * 83 * @param pName 84 * The name of the method. 85 * @param pType 86 * The data type of the method. 87 * @param pQualis 88 * The method qualifiers. 89 * @param pParams 90 * The array of parameters for this method. 91 * @param pPropagated 92 * Is this method propagated from the superclass. 93 * @param pOriginClass 94 * The class this method was defined or overridden in. 95 */ 96 public CIMMethod( 97 String pName, 98 CIMDataType pType, 99 CIMQualifier<?>[] pQualis, 100 CIMParameter<?>[] pParams, 101 boolean pPropagated, 102 String pOriginClass 103 ) { 104 super(pName, pType); 105 this.iQualiImpl = new CIMQualifiedElementInterfaceImpl(pQualis, false, true); 106 this.iParams = (CIMParameter[]) CIMElementSorter.sort(pParams); 107 this.iPropagated = pPropagated; 108 this.iOriginClass = pOriginClass; 109 } 110 111 /** 112 * Compares this object against the specified object. The result is 113 * <code>true</code> if and only if the argument is not <code>null</code> 114 * and is a <code>CIMMethod</code> object that represents the same value as 115 * this object. 116 * 117 * @param pObj 118 * The object to compare. 119 * @return <code>true</code> if the objects are the same; <code>false</code> 120 * otherwise. 121 */ 122 @Override 123 public boolean equals(Object pObj) { 124 if (!(pObj instanceof CIMMethod)) return false; 125 if (!super.equals(pObj)) return false; 126 CIMMethod<?> that = (CIMMethod<?>) pObj; 127 if (!this.iQualiImpl.equals(that.iQualiImpl)) return false; 128 if (this.iPropagated != that.iPropagated) return false; 129 return Arrays.equals(getParameters(), that.getParameters()); 130 } 131 132 /** 133 * Returns a <code>CIMMethod</code> filtered as specified. 134 * 135 * @param pIncludeQualifiers 136 * If <code>true</code> all qualifiers are returned; otherwise no 137 * qualifiers. 138 * @param pIncludeClassOrigin 139 * If <code>true</code> the class origin is included; otherwise 140 * no class origin is present. 141 * @return A filtered <code>CIMMethod</code>. 142 */ 143 public CIMMethod<E> filter(boolean pIncludeQualifiers, boolean pIncludeClassOrigin) { 144 return filter(pIncludeQualifiers, pIncludeClassOrigin, false); 145 } 146 147 /** 148 * Returns a <code>CIMMethod</code> filtered as specified. 149 * 150 * @param pIncludeQualifiers 151 * If <code>true</code> all qualifiers are returned; otherwise no 152 * qualifiers. 153 * @param pIncludeClassOrigin 154 * If <code>true</code> the class origin is included; otherwise 155 * no class origin is present 156 * @param pLocalOnly 157 * If <code>true</code> only the qualifiers defined on this class 158 * are included; otherwise all qualifiers are included. 159 * 160 * @return A filtered <code>CIMMethod</code>. 161 */ 162 public CIMMethod<E> filter(boolean pIncludeQualifiers, boolean pIncludeClassOrigin, boolean pLocalOnly) { 163 return new CIMMethod<E>( 164 getName(), 165 getDataType(), 166 pIncludeQualifiers ? this.iQualiImpl.getQualifiers(pLocalOnly) : null, 167 this.iParams, 168 this.iPropagated, 169 pIncludeClassOrigin ? this.iOriginClass : null 170 ); 171 } 172 173 /** 174 * Returns the class name in which this method was defined or overridden. 175 * 176 * @return Name of class where this property was defined. 177 */ 178 public String getOriginClass() { 179 return this.iOriginClass; 180 } 181 182 /** 183 * Get the parameter that matches the specified name. 184 * 185 * @param pName 186 * The name of the <code>CIMParameter</code> to retrieve. 187 * @return <code>CIMParameter</code> matching the name specified; otherwise 188 * <code>null</code>. 189 */ 190 public CIMParameter<?> getParameter(String pName) { 191 return (CIMParameter<?>) CIMElementSorter.find(this.iParams, pName); 192 } 193 194 /** 195 * Returns an array of the parameters for this method. 196 * 197 * @return The parameters for this method. 198 */ 199 public CIMParameter<?>[] getParameters() { 200 return this.iParams == null ? new CIMParameter[0] : this.iParams; 201 } 202 203 /** 204 * Get a qualifier by index. 205 * 206 * @param pIndex 207 * The index of the qualifier. 208 * @return The Qualifier at index <code>pIndex</code>. 209 * @throws ArrayIndexOutOfBoundsException 210 */ 211 public CIMQualifier<?> getQualifier(int pIndex) throws ArrayIndexOutOfBoundsException { 212 return this.iQualiImpl.getQualifier(pIndex); 213 } 214 215 /** 216 * Gets a qualifier by name. 217 * 218 * @param pName 219 * The name of the qualifier to get. 220 * @return <code>null</code> if the qualifier does not exist, otherwise 221 * returns the reference to the qualifier. 222 */ 223 public CIMQualifier<?> getQualifier(String pName) { 224 return this.iQualiImpl.getQualifier(pName); 225 } 226 227 /** 228 * Get the number of qualifiers defined for this CIM Method. 229 * 230 * @return The number of qualifiers. 231 */ 232 public int getQualifierCount() { 233 return this.iQualiImpl.getQualifierCount(); 234 } 235 236 /** 237 * Returns the list of qualifiers for this class. 238 * 239 * @return Qualifiers for this class. 240 */ 241 public CIMQualifier<?>[] getQualifiers() { 242 return this.iQualiImpl.getQualifiers(); 243 } 244 245 /** 246 * Gets a qualifier value by name. 247 * 248 * @param pName 249 * The name of the qualifier to get. 250 * @return <code>null</code> if the qualifier does not exist or value is 251 * <code>null</code>, otherwise returns the reference to the 252 * qualifier. 253 */ 254 public Object getQualifierValue(String pName) { 255 return this.iQualiImpl.getQualifierValue(pName); 256 } 257 258 /** 259 * Checks whether the specified qualifier is one of the qualifiers in this 260 * CIM method. 261 * 262 * @param pName 263 * The name of the qualifier. 264 * @return <code>true</code> if the qualifier exists in this CIM method, 265 * otherwise <code>false</code>. 266 */ 267 public boolean hasQualifier(String pName) { 268 return this.iQualiImpl.hasQualifier(pName); 269 } 270 271 /** 272 * Checks whether the specified qualifier is one of the qualifiers defined 273 * for this method with the specified value. This method will return 274 * <code>false</code> if the qualifier is not applied or if the value does 275 * not match. 276 * 277 * @param pName 278 * The name of the qualifier. 279 * @param pValue 280 * The value to be tested. 281 * @return <code>true</code> if the qualifier exists and has this value, 282 * otherwise false. 283 */ 284 public boolean hasQualifierValue(String pName, Object pValue) { 285 return this.iQualiImpl.hasQualifierValue(pName, pValue); 286 } 287 288 /** 289 * Determines if this method is Propagated. 290 * 291 * @return <code>true</code> if this method is propagated. 292 */ 293 public boolean isPropagated() { 294 return this.iPropagated; 295 } 296 297 /** 298 * Returns a <code>String</code> representation of the 299 * <code>CIMMethod</code>. This method is intended to be used only for 300 * debugging purposes, and the format of the returned string may vary 301 * between implementations. The returned string may be empty but may not be 302 * <code>null</code>. 303 * 304 * @return The string representation of this method. 305 */ 306 @Override 307 public String toString() { 308 return MOF.methodDeclaration(this, MOF.EMPTY); 309 } 310 }