/
ExtensionMethod.java
100 lines (79 loc) · 3.41 KB
/
ExtensionMethod.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
package com.tinkerpop.rexster.extension;
import com.tinkerpop.rexster.Tokens;
import org.codehaus.jettison.json.JSONObject;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.HashMap;
/**
* Holds the reflected method for the extension service call and its associated
* extension attributes.
*/
public class ExtensionMethod {
/**
* The service method.
*/
private final Method method;
/**
* The definition of the extension.
*/
private final ExtensionDefinition extensionDefinition;
/**
* The descriptor for the extension.
*/
private final ExtensionDescriptor extensionDescriptor;
/**
* The extension class that owns this method.
*/
private final RexsterExtension rexsterExtension;
public ExtensionMethod(final Method method, final ExtensionDefinition extensionDefinition,
final ExtensionDescriptor extensionDescriptor,
final RexsterExtension rexsterExtension) {
this.method = method;
this.extensionDefinition = extensionDefinition;
this.extensionDescriptor = extensionDescriptor;
this.rexsterExtension = rexsterExtension;
}
public Method getMethod() {
return this.method;
}
public ExtensionDefinition getExtensionDefinition() {
return this.extensionDefinition;
}
public RexsterExtension getRexsterExtension() {
return this.rexsterExtension;
}
public JSONObject getExtensionApiAsJson() {
JSONObject fullApi = null;
final HashMap<String, Object> map = new HashMap<String, Object>();
if (this.extensionDescriptor != null) {
map.put(Tokens.DESCRIPTION, this.extensionDescriptor.description());
JSONObject api = null;
final HashMap<String, String> innerMap = new HashMap<String, String>();
if (this.extensionDescriptor.apiBehavior() == ExtensionApiBehavior.DEFAULT
|| this.extensionDescriptor.apiBehavior() == ExtensionApiBehavior.EXTENSION_DESCRIPTOR_ONLY) {
if (this.extensionDescriptor.api().length > 0) {
for (ExtensionApi apiItem : this.extensionDescriptor.api()) {
innerMap.put(apiItem.parameterName(), apiItem.description());
}
}
}
if (this.extensionDescriptor.apiBehavior() == ExtensionApiBehavior.DEFAULT
|| this.extensionDescriptor.apiBehavior() == ExtensionApiBehavior.EXTENSION_PARAMETER_ONLY) {
final Annotation[][] parametersAnnotations = method.getParameterAnnotations();
for (int ix = 0; ix < parametersAnnotations.length; ix++) {
final Annotation[] annotation = parametersAnnotations[ix];
if (annotation != null && annotation[0] instanceof ExtensionRequestParameter) {
final ExtensionRequestParameter extensionRequestParameter = (ExtensionRequestParameter) annotation[0];
innerMap.put(extensionRequestParameter.name(), extensionRequestParameter.description());
}
}
}
if (!innerMap.isEmpty()) {
api = new JSONObject(innerMap);
map.put(Tokens.PARAMETERS, api);
}
fullApi = new JSONObject(map);
}
return fullApi;
}
}