View Javadoc

1   /**
2    * BaseUnrealEnvironment, an implementation of the environment interface standard that 
3    * facilitates the connection between GOAL and the UT2004 engine. 
4    * 
5    * Copyright (C) 2012 BaseUnrealEnvironment authors.
6    * 
7    * This program is free software: you can redistribute it and/or modify it under
8    * the terms of the GNU General Public License as published by the Free Software
9    * Foundation, either version 3 of the License, or (at your option) any later
10   * version.
11   * 
12   * This program is distributed in the hope that it will be useful, but WITHOUT
13   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14   * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15   * details.
16   * 
17   * You should have received a copy of the GNU General Public License along with
18   * this program. If not, see <http://www.gnu.org/licenses/>.
19   */
20  package nl.tudelft.goal.unreal.translators;
21  
22  
23  import nl.tudelft.goal.unreal.messages.ParameterMap;
24  import eis.eis2java.exception.TranslationException;
25  import eis.eis2java.translation.Parameter2Java;
26  import eis.iilang.Identifier;
27  import eis.iilang.Parameter;
28  import eis.iilang.ParameterList;
29  
30  public class ParameterMapTranslator implements Parameter2Java<ParameterMap> {
31  
32  	// A map entry has a key and value, so a size of 2.
33  	private static final int ENTRY_SIZE = 2; 
34  
35  	@Override
36  	public ParameterMap translate(Parameter parameter) throws TranslationException {
37  		if (!(parameter instanceof ParameterList)) {
38  			String message = String.format("%s is not a parameter list.", parameter);
39  			throw new TranslationException(message);
40  		}
41  		
42  		return translateEntries((ParameterList) parameter);
43  	}
44  
45  	private ParameterMap translateEntries(ParameterList parameterList) throws TranslationException {
46  		ParameterMap map = new ParameterMap();
47  
48  		for (Parameter entry : parameterList) {
49  			
50  			if (!(entry instanceof ParameterList)) {
51  				String message = String.format("%s is not a parameter list.", entry);
52  				throw new TranslationException(message);
53  			}
54  			
55  			ParameterList entryList = (ParameterList) entry;
56  			
57  			if (entryList.size() != ENTRY_SIZE) {
58  				String message = String.format("Expected a parameter list with " + ENTRY_SIZE + " elements but received %s.", entryList);
59  				throw new TranslationException(message);
60  			}
61  			
62  			Parameter key = entryList.get(0);
63  			Parameter value = entryList.get(1);
64  			
65  			if(!(key instanceof Identifier)){
66  				String message = String.format("Expected an identifier but received %s.", key);
67  				throw new TranslationException(message);
68  			}
69  
70  			map.put((Identifier) key,value);
71  		}
72  
73  		return map;
74  	}
75  
76  	@Override
77  	public Class<ParameterMap> translatesTo() {
78  		return ParameterMap.class;
79  	}
80  
81  }