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
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 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 }