View Javadoc

1   package nl.tudelft.goal.ut2004.translators;
2   
3   import java.util.LinkedList;
4   
5   import nl.tudelft.goal.EIS2Java.exception.TranslationException;
6   import nl.tudelft.goal.EIS2Java.translation.Parameter2Java;
7   import nl.tudelft.goal.EIS2Java.translation.Translator;
8   import nl.tudelft.goal.ut2004.messages.FireMode;
9   import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.WeaponPref;
10  import cz.cuni.amis.pogamut.ut2004.communication.messages.ItemType;
11  import eis.iilang.Function;
12  import eis.iilang.Parameter;
13  
14  /**
15   * 
16   * 
17   * Example: weapon(shock_rifle,primary)<br>
18   * Example: weapon(bio_rifle,primary)]<br>
19   * Example weapon(rocket_launcher,secondary)<br>
20   * 
21   * @author mpkorstanje
22   *
23   */
24  public class WeaponPrefTranslator implements Parameter2Java<WeaponPref> {
25  
26  	private static final int WEAPON_PARAMETERS = 2;
27  	private static final String WEAPON_KEYWORD = "weapon";
28  
29  	@Override
30  	public WeaponPref translate(Parameter parameter) throws TranslationException {
31  
32  		if (!(parameter instanceof Function)) {
33  			String message = String.format("Expected a function but got %s.", parameter);
34  			throw new TranslationException(message);
35  		}
36  		
37  		Function function = (Function)parameter;
38  	
39  		if(!function.getName().equals(WEAPON_KEYWORD)){
40  			String message = String.format("Expected a function named "+WEAPON_KEYWORD+" but got %s.", parameter);
41  			throw new TranslationException(message);
42  		}
43  		
44  		LinkedList<Parameter> parameters = function.getParameters();
45  		if(parameters.size() != WEAPON_PARAMETERS){
46  			String message = String.format("Expected a function named "+WEAPON_KEYWORD+" with exactly "+WEAPON_PARAMETERS+" arguments but got %s.", parameter);
47  			throw new TranslationException(message);
48  		}
49  		
50  		ItemType itemType = Translator.getInstance().translate2Java(parameters.getFirst(), ItemType.class);
51  		FireMode fireMode = Translator.getInstance().translate2Java(parameters.getLast(), FireMode.class);
52  
53  		if(fireMode == FireMode.NONE){
54  			String message = String.format("Fire mode should be either primary or secondary but got %s.", parameter);
55  			throw new TranslationException(message);
56  		}
57  		
58  		return new WeaponPref(itemType, fireMode.isPrimary());
59  		
60  	}
61  
62  	@Override
63  	public Class<WeaponPref> translatesTo() {
64  		return WeaponPref.class;
65  	}
66  
67  }