1 package nl.tudelft.goal.ut2004.translators;
2
3 import nl.tudelft.goal.ut2004.messages.UnrealIdOrLocation;
4 import cz.cuni.amis.pogamut.base3d.worldview.object.Location;
5 import cz.cuni.amis.pogamut.unreal.communication.messages.UnrealId;
6 import eis.eis2java.exception.TranslationException;
7 import eis.eis2java.translation.Java2Parameter;
8 import eis.eis2java.translation.Parameter2Java;
9 import eis.eis2java.translation.Translator;
10 import eis.iilang.Parameter;
11
12 public class UnrealIdOrLocationTranslator implements Parameter2Java<UnrealIdOrLocation>, Java2Parameter<UnrealIdOrLocation> {
13
14 @Override
15 public UnrealIdOrLocation translate(Parameter parameter) throws TranslationException {
16
17 TranslationException translationExceptionId;
18 try {
19 UnrealId id = Translator.getInstance().translate2Java(parameter, UnrealId.class);
20 return new UnrealIdOrLocation(id);
21 } catch (TranslationException e) {
22 translationExceptionId = e;
23 }
24
25 TranslationException translationExceptionLocation;
26 try {
27 Location location = Translator.getInstance().translate2Java(parameter, Location.class);
28 return new UnrealIdOrLocation(location);
29 } catch (TranslationException e) {
30 translationExceptionLocation = e;
31 }
32
33 String message = String.format("Could not translate to either UnrealId or Location. "
34 + "\nCause 1: %s\nCause 2: %s", translationExceptionId, translationExceptionLocation);
35 throw new TranslationException(message);
36
37 }
38
39 @Override
40 public Class<UnrealIdOrLocation> translatesTo() {
41 return UnrealIdOrLocation.class;
42 }
43
44 @Override
45 public Parameter[] translate(UnrealIdOrLocation idOrLocation) throws TranslationException {
46 if(idOrLocation.isLocation()){
47 return Translator.getInstance().translate2Parameter(idOrLocation.getLocation());
48 } else {
49 return Translator.getInstance().translate2Parameter(idOrLocation.getId());
50 }
51 }
52
53 @Override
54 public Class<? extends UnrealIdOrLocation> translatesFrom() {
55 return UnrealIdOrLocation.class;
56 }
57
58 }