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
18
19
20
21
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 }