View Javadoc
1   /* ***************************************************************************
2    * Copyright (c) 2008 Brabenetz Harald, Austria.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   * 
16   *****************************************************************************/
17  package org.settings4j;
18  
19  
20  /**
21   * <p>The ObjectResolver is a Helper to resolve byte[] Content to a Java Object.
22   * 
23   * <pre>
24   * Example Configuration in settings4j.xml:
25   * <div style="border-width:1px;border-style:solid;">
26   * &lt;connector name="<span style="color:green;">ClasspathConnector</span>"
27   *          class="org.settings4j.connector.ClasspathConnector"&gt;
28   *     &lt;objectResolver-ref ref="<span style="color:red;">JavaXMLBeansObjectResolver</span>" /&gt;
29   * &lt;/connector&gt;
30   * &lt;objectResolver name="<span style="color:red;">JavaXMLBeansObjectResolver</span>"
31   *          class="org.settings4j.objectresolver.JavaXMLBeansObjectResolver" /&gt;
32   * </div></pre>
33   * 
34   * 
35   * <p>You can now store a XMLEncoded (Serialized) Java-Objects into your Classpath.<br />
36   * see {@link org.settings4j.objectresolver.JavaXMLBeansObjectResolver} for more details.<br />
37   * Or see {@link org.settings4j.objectresolver.SpringConfigObjectResolver} for more details on a Spring Configuration
38   * File to generate an Object. Requires Springframework (tested with 2.5.6)<br />
39   * 
40   * @author Harald.Brabenetz
41   *
42   */
43  public interface ObjectResolver {
44      
45      /**
46       * Reads the byte[] content from the ContentResolver and creates an Object.
47       * 
48       * The normal usecase of an implementation of this ObjectResolver Interface:<br />
49       * 
50       * <ol>
51       * <li>Read the Propertyfile from {@link ContentResolver}.getContent(key + ".properties")</li>
52       * <li>Read the Value of "objectResolverKey" from propertyfile</li>
53       * <li>The "objectResolverKey" defines which ObjectResolver-Implementation should
54       *      solve the byte[] content to a Java-Object</li>
55       * <li>Convert the byte[] from {@link ContentResolver#getContent(String key)} to an Object.</li>
56       * <li>Maybe additional values are consumed from the propertyfile</li>
57       * </ol>
58       * 
59       * 
60       * @param key The Key of the byte[] who should be converted to an Object.
61       * @param contentResolver The contentResolver, from where the content could be read.
62       * @return the Object, or null if this Object-Resolver can not convert the byte[] Content to an Object.
63       */
64      Object getObject(String key, ContentResolver contentResolver);
65      
66      /**
67       * Some Implementations of a {@link ObjectResolver} are delegating the functionality
68       * to other ObjectResolvers.<br />
69       * Examples are: {@link org.settings4j.objectresolver.UnionObjectResolver}
70       * 
71       * <pre>
72       * --------------------------------------
73       * &lt;objectResolver name="DefaultObjectResolver" class="org.settings4j.objectresolver.UnionObjectResolver"&gt;
74       *     &lt;objectResolver-ref ref="JavaXMLBeansObjectResolver" /&gt;
75       *     &lt;objectResolver-ref ref="SpringConfigObjectResolver" /&gt;
76       * &lt;/objectResolver&gt;
77       * --------------------------------------
78       * </pre>
79       * 
80       * @param objectResolver the original objectResolver to delegate.
81       */
82      void addObjectResolver(ObjectResolver objectResolver);
83  }