01: /**
02: * Copyright 2006 Webmedia Group Ltd.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
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: **/package org.araneaframework;
16:
17: /**
18: * Implementers can enrich their objects with external Objects
19: * implementing certain interfaces. If a class implements Extendable
20: * then it always should implement Narrowable too.
21: *
22: * A typical use-case would be:
23: * <pre>
24: * <code>
25: *
26: * public SampleClass implements Extendable, Narrowable {
27: * ...
28: * }
29: *
30: *
31: * SampleClass obj = new SampleClass();
32: *
33: * obj.extend(SomeInterface.class, someObj);
34: *
35: * ....
36: *
37: * SomeInterface newObj = (SomeInterface)obj.narrow(SomeInterface.class);
38: * </code>
39: * </pre>
40: * @see org.araneaframework.Narrowable
41: * @author "Toomas Römer" <toomas@webmedia.ee>
42: * @author Jevgeni Kabanov (ekabanov <i>at</i> araneaframework <i>dot</i> org)
43: */
44: public interface Extendable {
45:
46: /**
47: * Adds an extension to the class, an interface with its implementation.
48: * <p>
49: * Can later be used via <code>narrow(Class)</code>
50: * if the class implements {@link Narrowable}.
51: *
52: * @param interfaceClass the interface of the extension being added
53: * @param extension a implementation of the interfaceClass
54: */
55: public void extend(Class interfaceClass, Object extension);
56: }
|