1 /*
2  * JasperReports - Free Java Reporting Library.
3  * Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
4  * http://www.jaspersoft.com
5  *
6  * Unless you have purchased a commercial license agreement from Jaspersoft,
7  * the following license terms apply:
8  *
9  * This program is part of JasperReports.
10  *
11  * JasperReports is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License as published by
13  * the Free Software Foundation, either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * JasperReports is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
23  */

24 package net.sf.jasperreports.extensions;
25
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30
31 /**
32  * An extension registry that contains several lists of extensions.
33  * 
34  * @author Lucian Chirita (lucianc@users.sourceforge.net)
35  */

36 public class ListExtensionsRegistry implements ExtensionsRegistry
37 {
38
39     private final Map<Class<?>, List<Object>> extensions;
40     
41     public ListExtensionsRegistry()
42     {
43         extensions = new HashMap<Class<?>, List<Object>>();
44     }
45
46     /**
47      * Adds an extension.
48      * 
49      * @param type the extension type
50      * @param extension the extension object
51      * @return this object
52      */

53     public <T> ListExtensionsRegistry add(Class<T> type, T extension)
54     {
55         List<Object> list = extensions.get(type);
56         if (list == null)
57         {
58             list = new ArrayList<Object>();
59             extensions.put(type, list);
60         }
61         
62         list.add(extension);
63         return this;
64     }
65     
66     @Override
67     public <T> List<T> getExtensions(Class<T> extensionType)
68     {
69         @SuppressWarnings("unchecked")
70         List<T> list = (List<T>) extensions.get(extensionType);
71         return list;
72     }
73
74 }
75