BaseEnum.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package net.lab1024.smartadmin.common.domain;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONAware;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.google.common.base.CaseFormat;
  6. import lombok.Data;
  7. import java.util.LinkedHashMap;
  8. import java.util.Objects;
  9. /**
  10. * @author listen
  11. * @date 2018-07-17 下午 3:52
  12. */
  13. public interface BaseEnum {
  14. /**
  15. * 获取枚举类的值
  16. *
  17. * @return Object
  18. */
  19. Object getValue();
  20. /**
  21. * 获取枚举类的说明
  22. *
  23. * @return String
  24. */
  25. String getDesc();
  26. /**
  27. * 比较参数是否与枚举类的value相同
  28. *
  29. * @param value
  30. * @return boolean
  31. */
  32. default boolean equalsValue(Object value) {
  33. return Objects.equals(getValue(), value);
  34. }
  35. /**
  36. * 比较枚举类是否相同
  37. *
  38. * @param baseEnum
  39. * @return boolean
  40. */
  41. default boolean equals(BaseEnum baseEnum) {
  42. return Objects.equals(getValue(), baseEnum.getValue()) && Objects.equals(getDesc(), baseEnum.getDesc());
  43. }
  44. /**
  45. * 返回枚举类的说明
  46. *
  47. * @param clazz 枚举类类对象
  48. * @return
  49. */
  50. static String getInfo(Class<? extends BaseEnum> clazz) {
  51. BaseEnum[] enums = clazz.getEnumConstants();
  52. LinkedHashMap<String, JSONObject> json = new LinkedHashMap<>(enums.length);
  53. for (BaseEnum e : enums) {
  54. JSONObject jsonObject = new JSONObject();
  55. jsonObject.put("value", new DeletedQuotationAware(e.getValue()));
  56. jsonObject.put("desc", new DeletedQuotationAware(e.getDesc()));
  57. json.put(e.toString(), jsonObject);
  58. }
  59. String enumJson = JSON.toJSONString(json, true);
  60. enumJson = enumJson.replaceAll("\"", "");
  61. enumJson= enumJson.replaceAll("\t","&nbsp;&nbsp;");
  62. enumJson = enumJson.replaceAll("\n","<br>");
  63. String prefix = " <br> export const <br> " + CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, clazz.getSimpleName() + " = <br> ");
  64. return prefix + "" + enumJson + " <br>";
  65. }
  66. @Data
  67. class DeletedQuotationAware implements JSONAware {
  68. private String value;
  69. public DeletedQuotationAware(Object value) {
  70. if(value == null){
  71. this.value = "";
  72. }else if (value instanceof String) {
  73. this.value = "'" + value + "'";
  74. }else {
  75. this.value = value.toString();
  76. }
  77. }
  78. @Override
  79. public String toJSONString() {
  80. return value;
  81. }
  82. }
  83. }