View Javadoc

1   package nl.tudelft.goal.ut3.translators;
2   
3   import cz.cuni.amis.pogamut.ut2004.agent.module.sensor.WeaponPref;
4   import java.util.LinkedList;
5   
6   import nl.tudelft.goal.ut3.messages.FireMode;
7   import cz.cuni.amis.pogamut.ut3.communication.messages.UT3ItemType;
8   import eis.eis2java.exception.TranslationException;
9   import eis.eis2java.translation.Parameter2Java;
10  import eis.eis2java.translation.Translator;
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  		UT3ItemType itemType = Translator.getInstance().translate2Java(parameters.getFirst(), UT3ItemType.class);
51  
52  		
53  		FireMode fireMode = Translator.getInstance().translate2Java(parameters.getLast(), FireMode.class);
54  
55  		if(fireMode == FireMode.NONE){
56  			String message = String.format("Fire mode should be either primary or secondary but got %s.", parameter);
57  			throw new TranslationException(message);
58  		}
59  		
60  		return new WeaponPref(itemType, fireMode.isPrimary());
61  		
62  	}
63  
64  	@Override
65  	public Class<WeaponPref> translatesTo() {
66  		return WeaponPref.class;
67  	}
68  
69  }