forked from aws/aws-sdk-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDocumentationUtils.java
More file actions
163 lines (134 loc) · 6.71 KB
/
DocumentationUtils.java
File metadata and controls
163 lines (134 loc) · 6.71 KB
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/*
* Copyright (c) 2016. Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.amazonaws.codegen.internal;
import com.amazonaws.codegen.model.intermediate.Metadata;
import com.amazonaws.codegen.model.intermediate.ShapeModel;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import static com.amazonaws.codegen.internal.Constants.AWS_DOCS_HOST;
import static com.amazonaws.codegen.model.intermediate.ShapeType.Model;
import static com.amazonaws.codegen.model.intermediate.ShapeType.Request;
import static com.amazonaws.codegen.model.intermediate.ShapeType.Response;
public class DocumentationUtils {
public static final String DEFAULT_ASYNC_RETURN = "A Java Future containing the result of the %s operation returned by the service.";
public static final String DEFAULT_SYNC_RETURN = "Result of the %s operation returned by the service.";
public static final String DEFAULT_SETTER = "Sets the value of the %s property for this object.";
public static final String DEFAULT_SETTER_PARAM = "The new value for the %s property for this object.";
public static final String DEFAULT_GETTER = "Returns the value of the %s property for this object.";
public static final String DEFAULT_GETTER_PARAM = "The value of the %s property for this object.";
public static final String DEFAULT_FLUENT_RETURN = "Returns a reference to this object so that method calls can be chained together.";
public static final String CONSTRUCTOR_DOC = "Constructs a new %s object. Callers should use the setter or fluent setter (with...) methods to initialize any additional object members.";
public static final String LIST_VARARG_ADDITIONAL_DOC = "<p><b>NOTE:</b> This method appends the values to the existing list (if any). Use {@link #set%s(java.util.Collection)} or {@link #with%s(java.util.Collection)} if you want to override the existing values.</p>";
//TODO kylthoms@: probably should move this to a custom config in each service
private static final Set<String> SERVICES_EXCLUDED_FROM_CROSS_LINKING = new HashSet<>(Arrays.asList(
"apigateway", "budgets", "cloudsearch", "cloudsearchdomain",
"discovery", "elastictranscoder", "es", "glacier", "importexport",
"iot", "data.iot", "machinelearning", "rekognition", "s3", "sdb"
));
public static String generateSetterDocumentation() {
return null;
}
public static String generateGetterDocumentation() {
return null;
}
public static String generateWitherDocumentation() {
return null;
}
/**
* Returns a documentation with HTML tags prefixed and suffixed removed, or
* returns empty string if the input is empty or null. This method is to be
* used when constructing documentation for method parameters.
*
* @param documentation
* unprocessed input documentation
* @return HTML tag stripped documentation or empty string if input was
* null.
*/
public static String stripHTMLTags(String documentation) {
if (documentation == null) {
return "";
}
if (documentation.startsWith("<")) {
int startTagIndex = documentation.indexOf(">");
final int closingTagIndex = documentation.lastIndexOf("<");
if (closingTagIndex > startTagIndex) {
documentation = stripHTMLTags(documentation.substring
(startTagIndex + 1,
closingTagIndex));
} else {
documentation = stripHTMLTags(documentation.substring
(startTagIndex + 1));
}
}
return documentation.trim();
}
/**
* Escapes Java comment breaking illegal character sequences.
*
* @param documentation
* unprocessed input documentation
* @return escaped documentation, or empty string if input was null
*/
public static String escapeIllegalCharacters(String documentation) {
if (documentation == null) {
return "";
}
/*
* this specifically handles a case where a '* /' sequence may
* be present in documentation and inadvertently terminate that Java
* comment line, resulting in broken code.
*/
documentation = documentation.replaceAll("\\*\\/", "*/");
return documentation;
}
/**
* Create the HTML for a link to the operation/shape core AWS docs site
*
* @param metadata the UID for the service from that services metadata
* @param name the name of the shape/request/operation
*
* @return a '@see also' HTML link to the doc
*/
public static String createLinkToServiceDocumentation(Metadata metadata, String name) {
if (isCrossLinkingEnabledForService(metadata)) {
return String.format("@see <a href=\"http://%s/goto/WebAPI/%s/%s\" target=\"_top\">AWS API Documentation</a>",
AWS_DOCS_HOST,
metadata.getUid(),
name);
}
return "";
}
/**
* Create the HTML for a link to the operation/shape core AWS docs site
*
* @param metadata the UID for the service from that services metadata
* @param shapeModel the model of the shape
*
* @return a '@see also' HTML link to the doc
*/
public static String createLinkToServiceDocumentation(Metadata metadata, ShapeModel shapeModel) {
return isRequestResponseOrModel(shapeModel) ? createLinkToServiceDocumentation(metadata, shapeModel.getDocumentationShapeName()) : "";
}
public static String removeFromEnd(String string, String stringToRemove) {
return string.endsWith(stringToRemove) ? string.substring(0, string.length() - stringToRemove.length()) : string;
}
private static boolean isRequestResponseOrModel(ShapeModel shapeModel) {
return shapeModel.getShapeType() == Model || shapeModel.getShapeType() == Request || shapeModel.getShapeType() == Response;
}
private static boolean isCrossLinkingEnabledForService(Metadata metadata) {
return metadata.getUid() != null && metadata.getEndpointPrefix() != null && !SERVICES_EXCLUDED_FROM_CROSS_LINKING.contains(metadata.getEndpointPrefix());
}
}