forked from aws/aws-sdk-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAddOperations.java
More file actions
138 lines (113 loc) · 5.63 KB
/
AddOperations.java
File metadata and controls
138 lines (113 loc) · 5.63 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
/*
* 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;
import static com.amazonaws.codegen.internal.NameUtils.getExceptionName;
import static com.amazonaws.codegen.internal.NameUtils.getRequestClassName;
import static com.amazonaws.codegen.internal.NameUtils.getResponseClassName;
import static com.amazonaws.codegen.internal.Utils.unCapitialize;
import java.util.Map;
import java.util.TreeMap;
import com.amazonaws.codegen.model.intermediate.ExceptionModel;
import com.amazonaws.codegen.model.intermediate.OperationModel;
import com.amazonaws.codegen.model.intermediate.ReturnTypeModel;
import com.amazonaws.codegen.model.intermediate.VariableModel;
import com.amazonaws.codegen.model.service.ErrorMap;
import com.amazonaws.codegen.model.service.Input;
import com.amazonaws.codegen.model.service.Member;
import com.amazonaws.codegen.model.service.Operation;
import com.amazonaws.codegen.model.service.Output;
import com.amazonaws.codegen.model.service.ServiceModel;
import com.amazonaws.codegen.model.service.Shape;
/**
* Constructs the operation model for every operation defined by the service.
*/
final class AddOperations {
public static Map<String, OperationModel> constructOperations(
ServiceModel serviceModel) {
Map<String, OperationModel> javaOperationModels = new TreeMap<String, OperationModel>();
Map<String, Shape> c2jShapes = serviceModel.getShapes();
for (Map.Entry<String, Operation> entry : serviceModel.getOperations()
.entrySet()) {
final String operationName = entry.getKey();
final Operation op = entry.getValue();
OperationModel operationModel = new OperationModel();
operationModel.setOperationName(operationName);
operationModel.setDeprecated(op.isDeprecated());
operationModel.setDocumentation(op.getDocumentation());
final Input input = op.getInput();
if (input != null) {
String originalShapeName = input.getShape();
String inputShape = getRequestClassName(originalShapeName,
operationName);
String documentation = input.getDocumentation() != null ? input
.getDocumentation() : c2jShapes.get(originalShapeName)
.getDocumentation();
operationModel.setInput(new VariableModel(
unCapitialize(inputShape), inputShape)
.withDocumentation(documentation));
}
final Output output = op.getOutput();
if (output != null) {
final Shape outputShape = c2jShapes.get(output.getShape());
final String responseClassName = getResponseClassName(output.getShape(), operationName);
final String documentation = getOperationDocumentation(output, outputShape);
operationModel.setReturnType(new ReturnTypeModel(responseClassName).withDocumentation(documentation));
if (isBlobShape(getPayloadShape(c2jShapes, outputShape))) {
operationModel.setHasBlobMemberAsPayload(true);
}
}
if (op.getErrors() != null) {
for (ErrorMap error : op.getErrors()) {
String documentation = error.getDocumentation() != null ? error
.getDocumentation() : c2jShapes.get(
error.getShape()).getDocumentation();
operationModel.addException(new ExceptionModel(
getExceptionName(error.getShape()))
.withDocumentation(documentation));
}
}
// TODO: find the stream input parameter
operationModel.setInputStreamPropertyName(null);
javaOperationModels.put(operationName, operationModel);
}
return javaOperationModels;
}
private static String getOperationDocumentation(final Output output, final Shape outputShape) {
return output.getDocumentation() != null ? output.getDocumentation() : outputShape.getDocumentation();
}
/**
* @return True if shape is a Blob type. False otherwise
*/
private static boolean isBlobShape(Shape shape) {
return shape != null && "blob".equals(shape.getType());
}
/**
* If there is a member in the output shape that is explicitly marked as the payload (with the
* payload trait) this method returns the target shape of that member. Otherwise this method
* returns null.
*
* @param c2jShapes
* All C2J shapes
* @param outputShape
* Output shape of operation that may contain a member designated as the payload
*/
public static Shape getPayloadShape(Map<String, Shape> c2jShapes, Shape outputShape) {
if (outputShape.getPayload() == null) {
return null;
}
Member payloadMember = outputShape.getMembers().get(outputShape.getPayload());
return c2jShapes.get(payloadMember.getShape());
}
}