1 /*
2 * Copyright 2011 Christopher Pheby
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 package org.jadira.bindings.core.binder;
17
18 import java.lang.annotation.Annotation;
19
20 import org.jadira.bindings.core.api.Binding;
21 import org.jadira.bindings.core.api.Converter;
22 import org.jadira.bindings.core.api.FromUnmarshaller;
23 import org.jadira.bindings.core.api.ToMarshaller;
24
25 public interface SearchableBinder {
26
27 /**
28 * Resolve a Binding with the given source and target class.
29 * A binding unifies a marshaller and an unmarshaller and both must be available to resolve a binding.
30 *
31 * The source class is considered the owning class of the binding. The source can be marshalled
32 * into the target class. Similarly, the target can be unmarshalled to produce an instance of the source type.
33 * @param key The converter key
34 * @param <S> The Source type
35 * @param <T> The Target type
36 * @return The found Binding
37 */
38 <S, T> Binding<S, T> findBinding(ConverterKey<S,T> key);
39
40 /**
41 * Resolve a Marshaller with the given source and target class.
42 * The marshaller is used as follows: Instances of the source can be marshalled into the target class.
43 * @param key The converter key
44 * @param <S> The Source type
45 * @param <T> The Target type
46 * @return The found Marshaller
47 */
48 <S, T> ToMarshaller<S, T> findMarshaller(ConverterKey<S,T> key);
49
50 /**
51 * Resolve a Converter with the given input and output classes. Instances of the input class can be converted into
52 * instances of the output class
53 * @param key The converter key
54 * @param <S> The Source type
55 * @param <T> The Target type
56 * @return The found Converter
57 */
58 <S, T> Converter<S, T> findConverter(ConverterKey<S,T> key);
59
60 /**
61 * Resolve an UnMarshaller with the given source and target class.
62 * The unmarshaller is used as follows: Instances of the source can be marshalled into the target class.
63 * @param key The converter key
64 * @param <S> The Source type
65 * @param <T> The Target type
66 * @return The found Unmarshaller
67 */
68 <S, T> FromUnmarshaller<S, T> findUnmarshaller(ConverterKey<S,T> key);
69
70 /**
71 * Resolve a Binding with the given source and target class.
72 * A binding unifies a marshaller and an unmarshaller and both must be available to resolve a binding.
73 * <br>
74 * The source class is considered the owning class of the binding. The source can be marshalled
75 * into the target class. Similarly, the target can be unmarshalled to produce an instance of the source type.
76 * @param source The source (owning) class
77 * @param target The target (foreign) class
78 * @param <S> The Source type
79 * @param <T> The Target type
80 * @return The found Binding
81 */
82 <S, T> Binding<S, T> findBinding(final Class<S> source, final Class<T> target);
83
84 /**
85 * Resolve a Marshaller with the given source and target class.
86 * The marshaller is used as follows: Instances of the source can be marshalled into the target class.
87 * @param source The source (input) class
88 * @param target The target (output) class
89 * @param <S> The Source type
90 * @param <T> The Target type
91 * @return The found Marshaller
92 */
93 <S, T> ToMarshaller<S, T> findMarshaller(final Class<S> source, final Class<T> target);
94
95 /**
96 * Resolve a Converter with the given input and output classes. Instances of the input class can be converted into
97 * instances of the output class
98 * @param source The input class
99 * @param target The output class
100 * @param <S> The Source type
101 * @param <T> The Target type
102 * @return The found Converter
103 */
104 <S, T> Converter<S, T> findConverter(final Class<S> source, final Class<T> target);
105
106 /**
107 * Resolve an UnMarshaller with the given source and target class.
108 * The unmarshaller is used as follows: Instances of the source can be marshalled into the target class.
109 * @param source The source (input) class
110 * @param target The target (output) class
111 * @param <S> The Source type
112 * @param <T> The Target type
113 * @return The found Unmarshaller
114 */
115 <S, T> FromUnmarshaller<S, T> findUnmarshaller(final Class<S> source, final Class<T> target);
116
117 /**
118 * Resolve a Binding with the given source and target class.
119 * A binding unifies a marshaller and an unmarshaller and both must be available to resolve a binding.
120 * <br>
121 * The source class is considered the owning class of the binding. The source can be marshalled
122 * into the target class. Similarly, the target can be unmarshalled to produce an instance of the source type.
123 * @param source The source (owning) class
124 * @param target The target (foreign) class
125 * @param qualifier The qualifier for which the binding must be registered
126 * @param <S> The Source type
127 * @param <T> The Target type
128 * @return The found Binding
129 */
130 <S, T> Binding<S, T> findBinding(final Class<S> source, final Class<T> target, final Class<? extends Annotation> qualifier);
131
132 /**
133 * Resolve a Marshaller with the given source and target class.
134 * The marshaller is used as follows: Instances of the source can be marshalled into the target class.
135 * @param source The source (input) class
136 * @param target The target (output) class
137 * @param qualifier The qualifier for which the marshaller must be registered
138 * @param <S> The Source type
139 * @param <T> The Target type
140 * @return The found Marshaller
141 */
142 <S, T> ToMarshaller<S, T> findMarshaller(final Class<S> source, final Class<T> target, final Class<? extends Annotation> qualifier);
143
144 /**
145 * Resolve a Converter with the given input and output classes. Instances of the input class can be converted into
146 * instances of the output class
147 * @param source The input class
148 * @param target The output class
149 * @param qualifier The qualifier for which the marshaller must be registered
150 * @param <S> The Source type
151 * @param <T> The Target type
152 * @return The found Converter
153 */
154 <S, T> Converter<S, T> findConverter(final Class<S> source, final Class<T> target, final Class<? extends Annotation> qualifier);
155
156 /**
157 * Resolve an UnMarshaller with the given source and target class.
158 * The unmarshaller is used as follows: Instances of the source can be marshalled into the target class.
159 * @param source The source (input) class
160 * @param target The target (output) class
161 * @param qualifier The qualifier for which the unmarshaller must be registered
162 * @param <S> The Source type
163 * @param <T> The Target type
164 * @return The found Unmarshaller
165 */
166 <S, T> FromUnmarshaller<S, T> findUnmarshaller(final Class<S> source, final Class<T> target, final Class<? extends Annotation> qualifier);
167 }