KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > tapestry > binding > AbstractBinding


1 // Copyright 2004, 2005 The Apache Software Foundation
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14

15 package org.apache.tapestry.binding;
16
17 import org.apache.hivemind.Location;
18 import org.apache.hivemind.util.Defense;
19 import org.apache.tapestry.BindingException;
20 import org.apache.tapestry.IBinding;
21 import org.apache.tapestry.coerce.ValueConverter;
22
23 /**
24  * Base class for {@link IBinding}implementations.
25  *
26  * @author Howard Lewis Ship
27  */

28
29 public abstract class AbstractBinding implements IBinding
30 {
31     /** @since 4.0 */
32
33     private final String JavaDoc _description;
34
35     /** @since 4.0 */
36
37     private final ValueConverter _valueConverter;
38
39     /** @since 3.0 */
40
41     private final Location _location;
42
43     /** @since 3.0 */
44
45     protected AbstractBinding(String JavaDoc description, ValueConverter valueConverter, Location location)
46     {
47         Defense.notNull(description, "description");
48         Defense.notNull(valueConverter, "valueConverter");
49
50         _description = description;
51         _valueConverter = valueConverter;
52         _location = location;
53     }
54
55     public Location getLocation()
56     {
57         return _location;
58     }
59
60     /**
61      * Overridden in subclasses that are not invariant.
62      *
63      * @throws ReadOnlyBindingException
64      * always.
65      */

66
67     public void setObject(Object JavaDoc value)
68     {
69         throw createReadOnlyBindingException(this);
70     }
71
72     /**
73      * Default implementation: returns true.
74      *
75      * @since 2.0.3
76      */

77
78     public boolean isInvariant()
79     {
80         return true;
81     }
82
83     public Object JavaDoc getObject(Class JavaDoc type)
84     {
85         Defense.notNull(type, "type");
86
87         Object JavaDoc raw = getObject();
88
89         try
90         {
91             return _valueConverter.coerceValue(raw, type);
92         }
93         catch (Exception JavaDoc ex)
94         {
95             String JavaDoc message = BindingMessages.convertObjectError(this, ex);
96
97             throw new BindingException(message, getComponent(), _location, this, ex);
98         }
99     }
100
101     /**
102      * Returns the component to which this binding is connected; this is currently only used when
103      * building certain exceptions. This implementation returns null.
104      *
105      * @since 4.0
106      */

107
108     public Object JavaDoc getComponent()
109     {
110         return null;
111     }
112
113     /** @since 3.0 */
114
115     protected BindingException createReadOnlyBindingException(IBinding binding)
116     {
117         return new BindingException(BindingMessages.readOnlyBinding(binding), binding);
118     }
119
120     /** @since 4.0 */
121
122     public String JavaDoc getDescription()
123     {
124         return _description;
125     }
126
127     /** @since 4.0 */
128     public ValueConverter getValueConverter()
129     {
130         return _valueConverter;
131     }
132 }
Popular Tags