001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 019 package org.apache.commons.modeler; 020 021 022 import java.io.Serializable; 023 024 import javax.management.Descriptor; 025 import javax.management.MBeanParameterInfo; 026 import javax.management.modelmbean.ModelMBeanConstructorInfo; 027 028 029 /** 030 * <p>Internal configuration information for a <code>Constructor</code> 031 * descriptor.</p> 032 * 033 * @author Craig R. McClanahan 034 * @version $Revision: 480402 $ $Date: 2006-11-29 05:43:23 +0100 (Wed, 29 Nov 2006) $ 035 */ 036 037 public class ConstructorInfo extends FeatureInfo implements Serializable { 038 static final long serialVersionUID = -5735336213417238238L; 039 040 // ----------------------------------------------------- Instance Variables 041 042 043 /** 044 * The <code>ModelMBeanConstructorInfo</code> object that corresponds 045 * to this <code>ConstructorInfo</code> instance. 046 */ 047 transient ModelMBeanConstructorInfo info = null; 048 protected String displayName = null; 049 protected ParameterInfo parameters[] = new ParameterInfo[0]; 050 051 052 // ------------------------------------------------------------- Properties 053 054 055 /** 056 * Override the <code>description</code> property setter. 057 * 058 * @param description The new description 059 */ 060 public void setDescription(String description) { 061 super.setDescription(description); 062 this.info = null; 063 } 064 065 066 /** 067 * Override the <code>name</code> property setter. 068 * 069 * @param name The new name 070 */ 071 public void setName(String name) { 072 super.setName(name); 073 this.info = null; 074 } 075 076 077 /** 078 * The display name of this attribute. 079 */ 080 public String getDisplayName() { 081 return (this.displayName); 082 } 083 084 public void setDisplayName(String displayName) { 085 this.displayName = displayName; 086 } 087 088 089 /** 090 * The set of parameters for this constructor. 091 */ 092 public ParameterInfo[] getSignature() { 093 return (this.parameters); 094 } 095 096 097 // --------------------------------------------------------- Public Methods 098 099 100 /** 101 * Add a new parameter to the set of parameters for this constructor. 102 * 103 * @param parameter The new parameter descriptor 104 */ 105 public void addParameter(ParameterInfo parameter) { 106 107 synchronized (parameters) { 108 ParameterInfo results[] = new ParameterInfo[parameters.length + 1]; 109 System.arraycopy(parameters, 0, results, 0, parameters.length); 110 results[parameters.length] = parameter; 111 parameters = results; 112 this.info = null; 113 } 114 115 } 116 117 118 /** 119 * Create and return a <code>ModelMBeanConstructorInfo</code> object that 120 * corresponds to the attribute described by this instance. 121 */ 122 public ModelMBeanConstructorInfo createConstructorInfo() { 123 124 // Return our cached information (if any) 125 if (info != null) 126 return (info); 127 128 // Create and return a new information object 129 ParameterInfo params[] = getSignature(); 130 MBeanParameterInfo parameters[] = 131 new MBeanParameterInfo[params.length]; 132 for (int i = 0; i < params.length; i++) 133 parameters[i] = params[i].createParameterInfo(); 134 info = new ModelMBeanConstructorInfo 135 (getName(), getDescription(), parameters); 136 Descriptor descriptor = info.getDescriptor(); 137 descriptor.removeField("class"); 138 if (getDisplayName() != null) 139 descriptor.setField("displayName", getDisplayName()); 140 addFields(descriptor); 141 info.setDescriptor(descriptor); 142 return (info); 143 144 } 145 146 147 /** 148 * Return a string representation of this constructor descriptor. 149 */ 150 public String toString() { 151 152 StringBuffer sb = new StringBuffer("ConstructorInfo["); 153 sb.append("name="); 154 sb.append(name); 155 sb.append(", description="); 156 sb.append(description); 157 sb.append(", parameters="); 158 sb.append(parameters.length); 159 sb.append("]"); 160 return (sb.toString()); 161 162 } 163 164 165 }