View Javadoc

1   /*
2    * @(#)$Id: StorageManagerProxy.java 689 2009-07-22 00:10:27Z bsigner $
3    *
4    * Author   : Ueli Kurmann, igesture@uelikurmann.ch
5    *                                   
6    *                                   
7    * Purpose  : 
8    *
9    * -----------------------------------------------------------------------
10   *
11   * Revision Information:
12   *
13   * Date       Who     Reason
14   *
15   * 23.03.2008 ukurmann  Initial Release
16   *
17   * -----------------------------------------------------------------------
18   *
19   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
20   *
21   * This software is the proprietary information of ETH Zurich.
22   * Use is subject to license terms.
23   * 
24   */
25  
26  
27  package org.ximtec.igesture.tool.util;
28  
29  import java.lang.reflect.InvocationHandler;
30  import java.lang.reflect.InvocationTargetException;
31  import java.lang.reflect.Method;
32  import java.lang.reflect.Proxy;
33  import java.util.List;
34  
35  import org.ximtec.igesture.core.DataObject;
36  import org.ximtec.igesture.core.Visitor;
37  import org.ximtec.igesture.storage.IStorageManager;
38  import org.ximtec.igesture.storage.StorageManager;
39  
40  
41  public class StorageManagerProxy implements InvocationHandler {
42  
43     private StorageManager storageManager;
44  
45     private Visitor visitor;
46  
47  
48     private StorageManagerProxy(StorageManager manager, Visitor visitor) {
49        this.storageManager = manager;
50        this.visitor = visitor;
51     }
52  
53  
54     @Override
55     public Object invoke(Object proxy, Method method, Object[] args)
56           throws Throwable {
57  
58        Object result = null;
59  
60        if (args != null && args.length > 0) {
61           if (args[0] instanceof DataObject) {
62              ((DataObject)args[0]).accept(visitor);
63           }
64        }
65  
66        try {
67           result = method.invoke(storageManager, args);
68        }
69        catch (InvocationTargetException e) {
70           e.printStackTrace();
71        }
72        catch (Exception e) {
73  
74        }
75  
76        if (result instanceof DataObject) {
77           ((DataObject)result).accept(visitor);
78        }
79        else if (result instanceof List) {
80           for (Object listElement : (List< ? >)result) {
81              if (listElement instanceof DataObject) {
82                 try {
83                    ((DataObject)listElement).accept(visitor);
84                 }
85                 catch (ClassCastException e) {
86                    e.printStackTrace();
87                 }
88              }
89           }
90        }
91        return result;
92     }
93  
94  
95     public static IStorageManager newInstance(StorageManager storageManager,
96           Visitor visitor) {
97        return (IStorageManager)Proxy.newProxyInstance(StorageManager.class
98              .getClassLoader(), StorageManager.class.getInterfaces(),
99              new StorageManagerProxy(storageManager, visitor));
100    }
101 
102 }