View Javadoc

1   package org.csc.phynixx.common.cast;
2   
3   /*
4    * #%L
5    * phynixx-common
6    * %%
7    * Copyright (C) 2014 Christoph Schmidt-Casdorff
8    * %%
9    * Licensed under the Apache License, Version 2.0 (the "License");
10   * you may not use this file except in compliance with the License.
11   * You may obtain a copy of the License at
12   * 
13   *      http://www.apache.org/licenses/LICENSE-2.0
14   * 
15   * Unless required by applicable law or agreed to in writing, software
16   * distributed under the License is distributed on an "AS IS" BASIS,
17   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18   * See the License for the specific language governing permissions and
19   * limitations under the License.
20   * #L%
21   */
22  
23  
24  /**
25   * Implementierung des von {@link IImplementor} fuer eine Delegatinon.
26   *
27   * @param <O>
28   * @author Christoph Schmidt-Casdorff
29   */
30  public class ObjectImplementor<O> implements IImplementor {
31  
32      private final O bean;
33  
34      public ObjectImplementor(final O bean) {
35          if (bean == null) {
36              throw new IllegalArgumentException("Bean muss definiert sein");
37          }
38          this.bean = bean;
39      }
40  
41      public O getBean() {
42          return this.bean;
43      }
44  
45      /**
46       * prueft, ob uebergebene Klasse <code>assignable</code> von aktueller
47       * Klasse ist.
48       */
49      public <X> X cast(final Class<X> cls) {
50          if (cls == null) {
51              throw new IllegalArgumentException("Parameter 'cls' muss angegeben werden");
52          }
53  
54          final Class<?> beanClass = bean.getClass();
55          if (cls.isAssignableFrom(beanClass)) {
56              return cls.cast(bean);
57          }
58          throw new ClassCastException("Klasse " + beanClass + " kann nicht nach " + cls + " gewandelt werden");
59      }
60  
61      public <X> boolean isImplementationOf(final Class<X> cls) {
62          if (cls == null) {
63              throw new IllegalArgumentException("Parameter 'cls' muss angegeben werden");
64          }
65          final Class<?> beanClass = bean.getClass();
66          return cls.isAssignableFrom(beanClass);
67  
68      }
69  
70  }