View Javadoc

1   /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  
16  package org.kuali.student.core.statement.naturallanguage;
17  
18  import java.util.ArrayList;
19  import java.util.HashMap;
20  import java.util.List;
21  import java.util.Map;
22  
23  
24  /**
25   * This class is a registry of template contexts which the requirement 
26   * component translator uses to generate natural language.
27   */
28  public class ContextRegistry<T extends Context<?>>  {
29  
30  	/** Registry context map */
31  	private Map<String, List<T>> registry = new HashMap<String, List<T>>();
32  
33  	/**
34  	 * Constructor.
35  	 */
36  	public ContextRegistry() {
37  	}
38  
39  	/**
40  	 * Constructor. Adds a context registry as a map.
41  	 * 
42  	 * @param registry Context registry
43  	 */
44  	public ContextRegistry(final Map<String, List<T>> registry) {
45  		this.registry = registry;
46  	}
47  
48  	/**
49  	 * Adds a context to the registry. Key is usually a 
50  	 * <@link {@link ReqComponentType} key.
51  	 * 
52  	 * @param key Context key
53  	 * @param context Context
54  	 */
55  	public void add(final String key, final T context) {
56  		if(this.registry.containsKey(key)) {
57  			this.registry.get(key).add(context);
58  		} else {
59  			List<T> list = new ArrayList<T>();
60  			list.add(context);
61  			this.registry.put(key, list);
62  		}
63  	}
64  
65  	/**
66  	 * Gets a context from the registry. Key is usually a 
67  	 * <@link {@link ReqComponentType} key.
68  	 * 
69  	 * @param key Context key
70  	 * @return A context
71  	 */
72  	public List<T> get(final String key) {
73  		return this.registry.get(key);
74  	}
75  
76  	/**
77  	 * Returns true if a context exists for <code>key</code>; otherwise false.
78  	 * 
79  	 * @param key Context key
80  	 * @return True if a context exists otherwise false
81  	 */
82  	public boolean containsKey(final String key) {
83  		return this.registry.containsKey(key);
84  	}
85  
86  	/**
87  	 * Remove a context from the registry. Key is usually a 
88  	 * <@link {@link ReqComponentType} key.
89  	 * 
90  	 * @param key
91  	 * @return
92  	 */
93  	public List<T> remove(final String key) {
94  		return this.registry.remove(key);
95  	}
96  
97  	/**
98  	 * Returns the number of keys of the registry.
99  	 * 
100 	 * @return Number of keys in the registry
101 	 */
102 	public int size() {
103 		return this.registry.size();
104 	}
105 
106 	@Override
107 	public String toString() {
108 		return this.registry.toString();
109 	}
110 }