티스토리 뷰
반응형
enum 클래스는 아래와 같은 방법으로 밖에 사용해 본 적이 없었다.
public enum GreengrassLoggerLevel {
DEBUG,
INFO,
WARN,
ERROR,
FATAL,
UNKNOWN_TO_SDK_VERSION;
}
이번에 그린그래스 커넥터를 개발하면서 enum 클래스의 또다른 사용법을 알게 됐다.
커넥터 request model 에는 parameters 라는 Map 형태의 객체가 포함되는데
어떤 커넥터를 사용할건지에 따라 connectorName, connectorArn 이 다르고,
버전에 따라 또 runtime, GGCVersion 이 다르다.
그리하여 커넥터타입 enum 클래스를 생성해준 후,
public enum GreengrassConnectorType {
SNS("SNS","arn:aws:greengrass:%s::/connectors/SNS/versions/%s") {
public GreengrassConnectorSNSParameterModel getParameterModel(String region, String version) {
return new GreengrassConnectorSNSParameterModel(region, version);
}
},
DEVICE_DEFENDER("DeviceDefender","arn:aws:greengrass:%s::/connectors/DeviceDefender/versions/%s") {
public GreengrassConnectorDeviceDefenderParameterModel getParameterModel(String region, String version) {
return new GreengrassConnectorDeviceDefenderParameterModel(region, version);
}
},
FIREHOUSE("KinesisFirehose","arn:aws:greengrass:%s::/connectors/KinesisFirehose/versions/%s") {
public Object getParameterModel(String region, String version) {
return new GreengrassConnectorFirehoseParameterModel(region, version);
}
public String getRuntime(String version) {
if (StringUtils.equals("4", version)) {
return "Python 3.7";
} else if (StringUtils.equals("3", version) || StringUtils.equals("2", version)) {
return "Python 2.7";
} else {
return null;
}
}
public String getGGCVersion(String version) {
if (StringUtils.equals("4", version)) {
return "1.9.3";
} else if (StringUtils.equals("3", version) || StringUtils.equals("2", version)) {
return "1.7.0";
} else {
return null;
}
}
},
CLOUD_WATCH_METRICS("CloudWatchMetrics","arn:aws:greengrass:%s::/connectors/CloudWatchMetrics/versions/%s") {
public GreengrassConnectorCloudWatchMetricParameterModel getParameterModel(String region, String version) {
return new GreengrassConnectorCloudWatchMetricParameterModel(region, version);
}
};
private String code;
private String arnTemplate;
GreengrassConnectorType(String code, String arnTemplate) {
this.code = code;
this.arnTemplate = arnTemplate;
}
public String getArn(String region, String version) {
return String.format(this.arnTemplate, region, version);
}
public String getRuntime(String version) {
if (StringUtils.equals("4", version) || StringUtils.equals("3", version)) {
return "Python 3.7";
} else if (StringUtils.equals("2", version) || StringUtils.equals("1", version)) {
return "Python 2.7";
} else {
return null;
}
}
public String getGGCVersion(String version) {
if (StringUtils.equals("4", version) || StringUtils.equals("3", version)) {
return "1.9.3";
} else if (StringUtils.equals("2", version) || StringUtils.equals("1", version)) {
return "1.7.0";
} else {
return null;
}
}
public boolean equalsCode(String code) {
return StringUtils.equals(this.code, code);
}
public static GreengrassConnectorType get(String code) {
for(GreengrassConnectorType current : GreengrassConnectorType.values()) {
if (StringUtils.equals(current.code, code)) {
return current;
}
}
return null;
}
public abstract Object getParameterModel(String region, String version);
}
이 때 하드코딩을 최대한 피하기 위해 각 커넥터의 request 모델을 생성해두고
해당 커넥터의 파라미터를 불러오기 위해 RestController 에 아래와 같이 추가해주었다.
@GetMapping(value="/connectors/parameter", produces = { MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<String> getParameter(String connectorTypeCode, String version) {
return this.greengrassConnectorService.getParameter(connectorTypeCode, version).toResponse();
}
서비스에서는 connectorTypeCode 에 따라 커넥터타입 객체를 생성한 후
parameterModel 을 리턴 받아 response 해주도록 하였다.
public ResponseModel getParameter(String connectorTypeCode, String version) {
GreengrassConnectorType connectorType = GreengrassConnectorType.get(connectorTypeCode);
return ResponseModel.create(connectorType.getParameterModel(this.iotCoreEndPoint.region(), version));
}
반응형
'Java' 카테고리의 다른 글
[Java] ConcurrentHashMap, HashMap, Hashtable (0) | 2021.02.10 |
---|---|
[Java] static 변수와 static 메소드 (0) | 2021.02.10 |
[Java] @Builder (0) | 2021.02.10 |
[Java] Source Builder (0) | 2021.02.10 |
[Java] Collection - Iterator (0) | 2021.02.10 |