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 package org.apache.geronimo.gbean;
019
020 import java.io.Serializable;
021 import java.util.Arrays;
022
023 import org.apache.geronimo.kernel.KernelRegistry;
024
025 /**
026 * Describes an attibute of a GBean.
027 *
028 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
029 */
030 public class GAttributeInfo implements Serializable {
031 private static final long serialVersionUID = 2805493042418685048L;
032
033 /**
034 * Name of this attribute.
035 */
036 private final String name;
037
038 /**
039 * Type of this attribute.
040 */
041 private final String type;
042
043 /**
044 * Is this attribute persistent?
045 */
046 private final boolean persistent;
047
048 /**
049 * Is this attribute manageable?
050 */
051 private final boolean manageable;
052
053 /**
054 * Is this attribute readable?
055 */
056 private final boolean readable;
057
058 /**
059 * Is this attribute writiable?
060 */
061 private final boolean writable;
062
063 /**
064 * Name of the getter method.
065 * The default is "get" + name. In the case of a defualt value we do a caseless search for the name.
066 */
067 private final String getterName;
068
069 /**
070 * Name of the setter method.
071 * The default is "set" + name. In the case of a defualt value we do a caseless search for the name.
072 */
073 private final String setterName;
074
075 public GAttributeInfo(String name, String type, boolean persistent, boolean manageable, String getterName, String setterName) {
076 this(name, type, persistent, manageable, getterName != null, setterName != null, getterName, setterName);
077 }
078
079 public GAttributeInfo(String name, String type, boolean persistent, boolean manageable, boolean readable, boolean writable, String getterName, String setterName) {
080 this.name = name;
081 this.type = type;
082 this.persistent = persistent;
083 //non persistent attributes cannot be manageable
084 this.manageable = manageable & persistent;
085 this.readable = readable;
086 this.writable = writable;
087 this.getterName = getterName;
088 this.setterName = setterName;
089 }
090
091 public String getName() {
092 return name;
093 }
094
095 public String getType() {
096 return type;
097 }
098
099 public boolean isPersistent() {
100 return persistent;
101 }
102
103 public boolean isManageable() {
104 return manageable;
105 }
106
107 public boolean isReadable() {
108 return readable;
109 }
110
111 public boolean isWritable() {
112 return writable;
113 }
114
115 public String getGetterName() {
116 return getterName;
117 }
118
119 public String getSetterName() {
120 return setterName;
121 }
122
123 public String toString() {
124 return "[GAttributeInfo: name=" + name +
125 " type=" + type +
126 " persistent=" + persistent +
127 " manageable=" + manageable +
128 " readable=" + readable +
129 " writable=" + writable +
130 " getterName=" + getterName +
131 " setterName=" + setterName +
132 "]";
133 }
134
135 public String toXML(AbstractName abstractName) {
136 StringBuilder xml = new StringBuilder();
137
138 xml.append("<gAttributeInfo ");
139 xml.append("name='" + name + "' ");
140 xml.append("type='" + type + "' ");
141 xml.append("persistent='" + persistent + "' ");
142 xml.append("manageable='" + manageable + "' ");
143 xml.append("readable='" + readable + "' ");
144 xml.append("writable='" + writable + "' ");
145 xml.append(">");
146
147 xml.append("<getterName>" + getterName + "</getterName>");
148 xml.append("<setterName>" + setterName + "</setterName>");
149
150 if (readable) {
151 try {
152 Object value = KernelRegistry.getSingleKernel().getAttribute(abstractName, name);
153 if (value != null) {
154 if (value instanceof String[]) {
155 for (String valueString : Arrays.asList((String[]) value))
156 xml.append("<value>" + valueString + "</value>");
157 } else {
158 xml.append("<value>" + value + "</value>");
159 }
160 }
161 } catch (Exception e) {
162
163 }
164 }
165
166 xml.append("</gAttributeInfo>");
167
168 return xml.toString();
169 }
170 }