View Javadoc

1   //----------------------------------------------------------------------
2   // 
3   // PerfectJPattern: "Design patterns are good but components are better!" 
4   // IAdaptingStrategy.java Copyright (c) 2009 Giovanni Azua Garcia
5   // bravegag@hotmail.com
6   //  
7   // This program is free software; you can redistribute it and/or
8   // modify it under the terms of the GNU General Public License
9   // as published by the Free Software Foundation; either version 3
10  // of the License, or (at your option) any later version.
11  //
12  // This program is distributed in the hope that it will be useful,
13  // but WITHOUT ANY WARRANTY; without even the implied warranty of
14  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  // GNU General Public License for more details.
16  //
17  // You should have received a copy of the GNU General Public License
18  // along with this program; if not, see <http://www.gnu.org/licenses/>.
19  //
20  //----------------------------------------------------------------------
21  package org.perfectjpattern.core.api.structural.adapter;
22  
23  import java.lang.reflect.Method;
24  
25  import org.perfectjpattern.core.api.behavioral.strategy.IStrategy;
26  
27  
28  /**
29   * Abstract definition of the adapting strategy to use e.g.
30   * <ul>
31   * <li>Signature exact matching: the Adaptee and Target methods (name and 
32   * parameters) must match or at least the Adaptee methods must be a subset 
33   * of Target methods</li>
34   * <li>Signature types matching: the Adaptee and Target methods must 
35   * match or at least the Adaptee methods must be a subset of the type 
36   * signature of the Target methods</li>
37   * <li>Names mapping: The user defines dynamically the correspondence 
38   * between methods in Adaptee and Target by name</li>
39   * </ul> 
40   * 
41   * @author <a href="mailto:bravegag@hotmail.com">Giovanni Azua</a>
42   * @version $Revision: 1.0 $Date: Jan 28, 2009 1:00:42 PM $
43   */
44  public 
45  interface IAdaptingStrategy
46  extends IStrategy
47  {
48      //------------------------------------------------------------------------
49      // public
50      //------------------------------------------------------------------------
51      /**
52       * According to the definition of this strategy validates the tuple <code>
53       * Target</code>/<code>Adaptee</code>. Should the two not match an 
54       * {@link NoSuchMethodError} will be thrown.
55       * 
56       * @param aTargetClass Target class type
57       * @param anAdaptee Adaptee instance 
58       * @param anAdapter Adapter instance 
59       * @throws NoSuchMethodError 
60       */
61      public void
62      validate(Class<?> aTargetClass, Object anAdaptee, Object anAdapter)
63      throws NoSuchMethodError;
64  
65      //------------------------------------------------------------------------
66      /**
67       * Returns the <code>Adaptee</code> or otherwise <code>Adapter</code> method
68       * that corresponds to the given <code>Target</code> class type. If the 
69       * corresponding method is not found an {@link NoSuchMethodError} will 
70       * be thrown.
71       * 
72       * @see #validate(Class, Object, Object)
73       *
74       * @param aTargetClass Target class type
75       * @param anAdaptee Adaptee instance
76       * @param anAdapter Adapter instance
77       * @param aTargetMethod Target method to search for in the Adaptee
78       * @return <code>Adaptee</code> method that corresponds to the given
79       *         <code>Target</code> class type
80       * @throws NoSuchMethodError
81       */
82      public Method
83      resolve(Class<?> aTargetClass, Object anAdaptee, Object anAdapter, 
84          Method aTargetMethod)
85      throws NoSuchMethodError;
86  }