티스토리 뷰

Java

[Java] Enum class

Jane Kwon 2021. 2. 10. 16:53
반응형

 

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
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함