<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>PropertyGetter xref</title>
<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
</head>
<body>
<div id="overview"><a href="../../../../../apidocs/org/apache/log4j/config/PropertyGetter.html">View Javadoc</a></div><pre>

<a name="1" href="#1">1</a>   <em class="jxr_comment">/*</em>
<a name="2" href="#2">2</a>   <em class="jxr_comment"> * Licensed to the Apache Software Foundation (ASF) under one or more</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> * contributor license agreements.  See the NOTICE file distributed with</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> * this work for additional information regarding copyright ownership.</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> * (the "License"); you may not use this file except in compliance with</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> * the License.  You may obtain a copy of the License at</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> * </em>
<a name="9" href="#9">9</a>   <em class="jxr_comment"> *      <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
<a name="10" href="#10">10</a>  <em class="jxr_comment"> * </em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> * Unless required by applicable law or agreed to in writing, software</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> * distributed under the License is distributed on an "AS IS" BASIS,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> * See the License for the specific language governing permissions and</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> * limitations under the License.</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> */</em>
<a name="17" href="#17">17</a>  
<a name="18" href="#18">18</a>  <strong class="jxr_keyword">package</strong> org.apache.log4j.config;
<a name="19" href="#19">19</a>  
<a name="20" href="#20">20</a>  <strong class="jxr_keyword">import</strong> org.apache.log4j.Priority;
<a name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> org.apache.log4j.helpers.LogLog;
<a name="22" href="#22">22</a>  
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.beans.BeanInfo;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> java.beans.IntrospectionException;
<a name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> java.beans.Introspector;
<a name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> java.beans.PropertyDescriptor;
<a name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> java.io.InterruptedIOException;
<a name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.InvocationTargetException;
<a name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Method;
<a name="30" href="#30">30</a>  
<a name="31" href="#31">31</a>  
<a name="32" href="#32">32</a>  <em class="jxr_javadoccomment">/**</em>
<a name="33" href="#33">33</a>  <em class="jxr_javadoccomment">   Used for inferring configuration information for a log4j's component.</em>
<a name="34" href="#34">34</a>  
<a name="35" href="#35">35</a>  <em class="jxr_javadoccomment">   @author  Anders Kristensen</em>
<a name="36" href="#36">36</a>  <em class="jxr_javadoccomment"> */</em>
<a name="37" href="#37">37</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../org/apache/log4j/config/PropertyGetter.html">PropertyGetter</a> {
<a name="38" href="#38">38</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Object[] NULL_ARG = <strong class="jxr_keyword">new</strong> Object[] {};
<a name="39" href="#39">39</a>    <strong class="jxr_keyword">protected</strong> Object obj;
<a name="40" href="#40">40</a>    <strong class="jxr_keyword">protected</strong> PropertyDescriptor[] props;
<a name="41" href="#41">41</a>  
<a name="42" href="#42">42</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../org/apache/log4j/config/PropertyGetter.html">PropertyCallback</a> {
<a name="43" href="#43">43</a>      <strong class="jxr_keyword">void</strong> foundProperty(Object obj, String prefix, String name, Object value);
<a name="44" href="#44">44</a>    }
<a name="45" href="#45">45</a>  
<a name="46" href="#46">46</a>    <em class="jxr_javadoccomment">/**</em>
<a name="47" href="#47">47</a>  <em class="jxr_javadoccomment">    Create a new PropertyGetter for the specified Object. This is done</em>
<a name="48" href="#48">48</a>  <em class="jxr_javadoccomment">    in prepartion for invoking {@link</em>
<a name="49" href="#49">49</a>  <em class="jxr_javadoccomment">    #getProperties(PropertyGetter.PropertyCallback, String)} one or</em>
<a name="50" href="#50">50</a>  <em class="jxr_javadoccomment">    more times.</em>
<a name="51" href="#51">51</a>  
<a name="52" href="#52">52</a>  <em class="jxr_javadoccomment">    @param obj the object for which to set properties */</em>
<a name="53" href="#53">53</a>    <strong class="jxr_keyword">public</strong>
<a name="54" href="#54">54</a>    <a href="../../../../org/apache/log4j/config/PropertyGetter.html">PropertyGetter</a>(Object obj) <strong class="jxr_keyword">throws</strong> IntrospectionException {
<a name="55" href="#55">55</a>      BeanInfo bi = Introspector.getBeanInfo(obj.getClass());
<a name="56" href="#56">56</a>      props = bi.getPropertyDescriptors();
<a name="57" href="#57">57</a>      <strong class="jxr_keyword">this</strong>.obj = obj;
<a name="58" href="#58">58</a>    }
<a name="59" href="#59">59</a>  
<a name="60" href="#60">60</a>    <strong class="jxr_keyword">public</strong>
<a name="61" href="#61">61</a>    <strong class="jxr_keyword">static</strong>
<a name="62" href="#62">62</a>    <strong class="jxr_keyword">void</strong> getProperties(Object obj, <a href="../../../../org/apache/log4j/config/PropertyGetter.html">PropertyCallback</a> callback, String prefix) {
<a name="63" href="#63">63</a>      <strong class="jxr_keyword">try</strong> {
<a name="64" href="#64">64</a>        <strong class="jxr_keyword">new</strong> <a href="../../../../org/apache/log4j/config/PropertyGetter.html">PropertyGetter</a>(obj).getProperties(callback, prefix);
<a name="65" href="#65">65</a>      } <strong class="jxr_keyword">catch</strong> (IntrospectionException ex) {
<a name="66" href="#66">66</a>        LogLog.error(<span class="jxr_string">"Failed to introspect object "</span> + obj, ex);
<a name="67" href="#67">67</a>      }
<a name="68" href="#68">68</a>    }
<a name="69" href="#69">69</a>  
<a name="70" href="#70">70</a>    <strong class="jxr_keyword">public</strong>
<a name="71" href="#71">71</a>    <strong class="jxr_keyword">void</strong> getProperties(<a href="../../../../org/apache/log4j/config/PropertyGetter.html">PropertyCallback</a> callback, String prefix) {
<a name="72" href="#72">72</a>      <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; props.length; i++) {
<a name="73" href="#73">73</a>        Method getter = props[i].getReadMethod();
<a name="74" href="#74">74</a>        <strong class="jxr_keyword">if</strong> (getter == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">continue</strong>;
<a name="75" href="#75">75</a>        <strong class="jxr_keyword">if</strong> (!isHandledType(getter.getReturnType())) {
<a name="76" href="#76">76</a>  	<em class="jxr_comment">//System.err.println("Ignoring " + props[i].getName() +" " + getter.getReturnType());</em>
<a name="77" href="#77">77</a>  	<strong class="jxr_keyword">continue</strong>;
<a name="78" href="#78">78</a>        }
<a name="79" href="#79">79</a>        String name = props[i].getName();
<a name="80" href="#80">80</a>        <strong class="jxr_keyword">try</strong> {
<a name="81" href="#81">81</a>  	Object result = getter.invoke(obj, NULL_ARG);
<a name="82" href="#82">82</a>  	<em class="jxr_comment">//System.err.println("PROP " + name +": " + result);</em>
<a name="83" href="#83">83</a>  	<strong class="jxr_keyword">if</strong> (result != <strong class="jxr_keyword">null</strong>) {
<a name="84" href="#84">84</a>  	  callback.foundProperty(obj, prefix, name, result);
<a name="85" href="#85">85</a>  	}
<a name="86" href="#86">86</a>        } <strong class="jxr_keyword">catch</strong> (IllegalAccessException ex) {
<a name="87" href="#87">87</a>  	    LogLog.warn(<span class="jxr_string">"Failed to get value of property "</span> + name);
<a name="88" href="#88">88</a>        } <strong class="jxr_keyword">catch</strong> (InvocationTargetException ex) {
<a name="89" href="#89">89</a>          <strong class="jxr_keyword">if</strong> (ex.getTargetException() instanceof InterruptedException
<a name="90" href="#90">90</a>                  || ex.getTargetException() instanceof InterruptedIOException) {
<a name="91" href="#91">91</a>              Thread.currentThread().interrupt();
<a name="92" href="#92">92</a>          }
<a name="93" href="#93">93</a>          LogLog.warn(<span class="jxr_string">"Failed to get value of property "</span> + name);
<a name="94" href="#94">94</a>        } <strong class="jxr_keyword">catch</strong> (RuntimeException ex) {
<a name="95" href="#95">95</a>  	    LogLog.warn(<span class="jxr_string">"Failed to get value of property "</span> + name);
<a name="96" href="#96">96</a>        }
<a name="97" href="#97">97</a>      }
<a name="98" href="#98">98</a>    }
<a name="99" href="#99">99</a>  
<a name="100" href="#100">100</a>   <strong class="jxr_keyword">protected</strong>
<a name="101" href="#101">101</a>   <strong class="jxr_keyword">boolean</strong> isHandledType(Class type) {
<a name="102" href="#102">102</a>     <strong class="jxr_keyword">return</strong> String.<strong class="jxr_keyword">class</strong>.isAssignableFrom(type) ||
<a name="103" href="#103">103</a>       Integer.TYPE.isAssignableFrom(type) ||
<a name="104" href="#104">104</a>       Long.TYPE.isAssignableFrom(type)    ||
<a name="105" href="#105">105</a>       Boolean.TYPE.isAssignableFrom(type) ||
<a name="106" href="#106">106</a>       Priority.<strong class="jxr_keyword">class</strong>.isAssignableFrom(type);
<a name="107" href="#107">107</a>   }
<a name="108" href="#108">108</a> }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

