01: /*
02: * The contents of this file are subject to the terms of the Common Development
03: * and Distribution License (the License). You may not use this file except in
04: * compliance with the License.
05: *
06: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
07: * or http://www.netbeans.org/cddl.txt.
08: *
09: * When distributing Covered Code, include this CDDL Header Notice in each file
10: * and include the License file at http://www.netbeans.org/cddl.txt.
11: * If applicable, add the following below the CDDL Header, with the fields
12: * enclosed by brackets [] replaced by your own identifying information:
13: * "Portions Copyrighted [year] [name of copyright owner]"
14: *
15: * The Original Software is NetBeans. The Initial Developer of the Original
16: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17: * Microsystems, Inc. All Rights Reserved.
18: */
19:
20: package org.netbeans.modules.soa.ui;
21:
22: import java.lang.reflect.Constructor;
23: import java.util.HashMap;
24: import java.util.Map;
25: import org.openide.ErrorManager;
26:
27: /**
28: * Contains the objects of the specific base class T.
29: * The objects can be obtained by the particular class.
30: * If there isn't the object with required class, then it is created
31: * with the help of default constructor.
32: * Hence, it's implied that the class has the default constructor.
33: *
34: * @author nk160297
35: */
36: public class ClassBasedPool<T> {
37:
38: private Map<Class<T>, T> myPool = new HashMap<Class<T>, T>();
39:
40: public ClassBasedPool() {
41: }
42:
43: public <P extends T> P getObjectByClass(Class<P> tClass) {
44: P result = (P) myPool.get(tClass);
45: //
46: if (result == null) {
47: Constructor<P> defaultConstructor = null;
48: try {
49: defaultConstructor = tClass.getConstructor();
50: } catch (Exception ex) {
51: // do nothing
52: }
53: if (defaultConstructor != null) {
54: try {
55: result = defaultConstructor.newInstance();
56: } catch (Exception ex) {
57: ErrorManager.getDefault().notify(ex);
58: // do nothing
59: }
60: }
61: //
62: if (result != null) {
63: myPool.put((Class<T>) tClass, result);
64: }
65: }
66: //
67: return result;
68: }
69:
70: }
|