/src/test/java/com/alibaba/json/bvt/issue_1400/Issue1496.java

https://github.com/alibaba/fastjson · Java · 201 lines · 155 code · 36 blank · 10 comment · 11 complexity · 3ce86a346020e3c9c614f547ff76ca0f MD5 · raw file

  1. package com.alibaba.json.bvt.issue_1400;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.annotation.JSONType;
  4. import com.alibaba.fastjson.serializer.SerializeConfig;
  5. import junit.framework.TestCase;
  6. import java.util.Arrays;
  7. import java.util.List;
  8. public class Issue1496 extends TestCase {
  9. public void test_for_issue() throws Exception {
  10. String json = JSON.toJSONString(SetupStatus.FINAL_TRAIL);
  11. assertEquals("{\"canRefuse\":true,\"code\":3,\"declaringClass\":\"com.alibaba.json.bvt.issue_1400.Issue1496$SetupStatus\",\"first\":false,\"last\":false,\"name\":\"FINAL_TRAIL\",\"nameCn\":\"公益委员会/理事会/理事长审核\"}", json);
  12. }
  13. public interface ISetupStatusInfo {
  14. List<SetupStatus> nextList();
  15. Boolean isFirst();
  16. Boolean isLast();
  17. }
  18. public interface ISetupStatusProcess {
  19. /**
  20. *
  21. * @return
  22. */
  23. SetupStatus refuse();
  24. /**
  25. * 状态转移失败返回null
  26. *
  27. * @param name
  28. * @return
  29. */
  30. SetupStatus next(String name);
  31. }
  32. @JSONType(serializeEnumAsJavaBean = true)
  33. public enum SetupStatus implements ISetupStatusInfo, ISetupStatusProcess {
  34. EDIT(0, "EDIT", "编辑中") {
  35. public List<SetupStatus> nextList() {
  36. return Arrays.asList(FIRST_TRAIL);
  37. }
  38. @Override
  39. public Boolean isFirst() {
  40. return true;
  41. }
  42. @Override
  43. public SetupStatus refuse() {
  44. return EDIT;
  45. }
  46. }, FIRST_TRAIL(1, "FIRST_TRAIL", "初审") {
  47. public List<SetupStatus> nextList() {
  48. return Arrays.asList(EXPERT, FINAL_TRAIL);
  49. }
  50. @Override
  51. public SetupStatus refuse() {
  52. return EDIT;
  53. }
  54. }, EXPERT(2, "EXPERT", "专家补充意见", false) {
  55. public List<SetupStatus> nextList() {
  56. return Arrays.asList(FINAL_TRAIL);
  57. }
  58. }, FINAL_TRAIL(3, "FINAL_TRAIL", "公益委员会/理事会/理事长审核") {
  59. public List<SetupStatus> nextList() {
  60. return Arrays.asList(PASS);
  61. }
  62. @Override
  63. public SetupStatus refuse() {
  64. return EDIT;
  65. }
  66. }, PASS(4, "PASS", "项目通过", false) {
  67. public List<SetupStatus> nextList() {
  68. return Arrays.asList(SIGN);
  69. }
  70. }, SIGN(5, "SIGN", "协议签署", false) {
  71. @Override
  72. public List<SetupStatus> nextList() {
  73. return Arrays.asList(ACTIVE);
  74. }
  75. }, ACTIVE(6, "ACTIVE", "启动") {
  76. @Override
  77. public List<SetupStatus> nextList() {
  78. return null;
  79. }
  80. @Override
  81. public Boolean isLast() {
  82. return true;
  83. }
  84. };
  85. private int code;
  86. private String name;
  87. private String nameCn;
  88. private boolean canRefuse;
  89. SetupStatus(int code, String name, String nameCn) {
  90. this.code = code;
  91. this.name = name;
  92. this.nameCn = nameCn;
  93. this.canRefuse = true;
  94. }
  95. SetupStatus(int code, String name, String nameCn, boolean canRefuse) {
  96. this.code = code;
  97. this.name = name;
  98. this.nameCn = nameCn;
  99. this.canRefuse = canRefuse;
  100. }
  101. public int getCode() {
  102. return code;
  103. }
  104. public void setCode(int code) {
  105. this.code = code;
  106. }
  107. public String getName() {
  108. return name;
  109. }
  110. public void setName(String name) {
  111. this.name = name;
  112. }
  113. public String getNameCn() {
  114. return nameCn;
  115. }
  116. public void setNameCn(String nameCn) {
  117. this.nameCn = nameCn;
  118. }
  119. public boolean isCanRefuse() {
  120. return canRefuse;
  121. }
  122. public void setCanRefuse(boolean canRefuse) {
  123. this.canRefuse = canRefuse;
  124. }
  125. public static SetupStatus getFromCode(Integer code) {
  126. if (code == null) {
  127. return null;
  128. }
  129. for (SetupStatus status : values()) {
  130. if (status.code == code) {
  131. return status;
  132. }
  133. }
  134. throw new IllegalArgumentException("unknown SetupStatus enumeration code:" + code);
  135. }
  136. public static SetupStatus getFromName(String name) {
  137. if (name == null) {
  138. return null;
  139. }
  140. for (SetupStatus status : values()) {
  141. if (status.name.equals(name)) {
  142. return status;
  143. }
  144. }
  145. return null;
  146. }
  147. public Boolean isFirst() {
  148. return false;
  149. }
  150. public Boolean isLast() {
  151. return false;
  152. }
  153. public SetupStatus refuse() {
  154. return null;
  155. }
  156. public SetupStatus next(String name) {
  157. SetupStatus status = getFromName(name);
  158. return name != null && this.nextList().contains(status) ? status : null;
  159. }
  160. @Override
  161. public String toString() {
  162. return "SetupStatus{" + "code=" + code + ", name='" + name + '\'' + ", nameCn='" + nameCn + '\'' + ", canRefuse=" + canRefuse + '}';
  163. }
  164. }
  165. }