-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOSRMTextInstructions.java
135 lines (104 loc) · 4.14 KB
/
OSRMTextInstructions.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package us.brianolsen.instructions;
import java.io.Closeable;
import java.io.File;
import com.eclipsesource.v8.NodeJS;
import com.eclipsesource.v8.V8;
import com.eclipsesource.v8.V8Array;
import com.eclipsesource.v8.V8Function;
import com.eclipsesource.v8.V8Object;
import com.google.gson.Gson;
import com.mapbox.services.api.directions.v5.models.LegStep;
import us.brianolsen.instructions.util.ResourceUtil;
import us.brianolsen.instructions.util.V8Util;
public class OSRMTextInstructions implements Closeable {
protected static final String DEFAULT_VERSION = "v5";
protected static final String DEFAULT_LANGUAGE = "en";
protected static final String MODULE_NAME = "osrm-text-instructions";
protected static final String MODULE_VERSION = "0.11.3";
protected static final Gson gson = new Gson();
private NodeJS nodeJS;
private V8Object osrmTextInstructions;
private String version = DEFAULT_VERSION;
public V8 getRuntime() {
return nodeJS.getRuntime();
}
public NodeJS getNodeJS() {
return nodeJS;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public OSRMTextInstructions(String version) {
this.setVersion(version);
init();
}
private void init() {
nodeJS = NodeJS.createNodeJS();
File directory = ResourceUtil.getNodeModuleDirectory(MODULE_NAME, MODULE_VERSION);
V8Function osrmModule = (V8Function) getNodeJS().require(directory);
V8Array parameters = new V8Array(osrmModule.getRuntime());
parameters.push(getVersion());
osrmTextInstructions = (V8Object) osrmModule.call(osrmModule.getRuntime(), parameters);
parameters.release();
osrmModule.release();
}
@Override
public void close() {
try {
osrmTextInstructions.release();
nodeJS.release();
} finally {
osrmTextInstructions = null;
nodeJS = null;
}
}
public String capitalizeFirstLetter(String language, String string) {
return (String) osrmTextInstructions.executeJSFunction("capitalizeFirstLetter", language, string);
}
public String ordinalize(String language, Integer number) {
return (String) osrmTextInstructions.executeJSFunction("ordinalize", language, number);
}
public String directionFromDegree(String language, Double degree) {
return (String) osrmTextInstructions.executeJSFunction("directionFromDegree", language, degree);
}
public String laneConfig(LegStep step) {
V8Object v8Step = V8Util.jsonStringToV8Object(getRuntime(), gson.toJson(step));
String laneConfig = (String) osrmTextInstructions.executeJSFunction("laneConfig", v8Step);
v8Step.release();
return laneConfig;
}
public String getWayName(String language, LegStep step, String options) {
V8Object v8Step = V8Util.jsonStringToV8Object(getRuntime(), gson.toJson(step));
V8Object v8Options = V8Util.jsonStringToV8Object(getRuntime(), options);
String wayName = (String) osrmTextInstructions.executeJSFunction("getWayName", language, v8Step, v8Options);
v8Options.release();
v8Step.release();
return wayName;
}
public String compile(String language, LegStep step, String options) {
V8Object v8Step = V8Util.jsonStringToV8Object(getRuntime(), gson.toJson(step));
V8Object v8Options = V8Util.jsonStringToV8Object(getRuntime(), options);
String instruction = (String) osrmTextInstructions.executeJSFunction("compile", language, v8Step, v8Options);
v8Options.release();
v8Step.release();
return instruction;
}
public String grammarize(String language, String name, String grammar) {
return (String) osrmTextInstructions.executeJSFunction("grammarize", language, name, grammar);
}
public String tokenize(String language, String instruction, String tokens, String options) {
V8Object v8Tokens = V8Util.jsonStringToV8Object(getRuntime(), tokens);
V8Object v8Options = V8Util.jsonStringToV8Object(getRuntime(), options);
String tokenizedString = (String) osrmTextInstructions.executeJSFunction("tokenize", language, instruction,
v8Tokens, v8Options);
v8Options.release();
v8Tokens.release();
return tokenizedString;
}
public String getBestMatchingLanguage(String language) {
return (String) osrmTextInstructions.executeJSFunction("getBestMatchingLanguage", language);
}
}