PageRenderTime 55ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-components/jira-core/src/main/java/com/atlassian/jira/bc/admin/ApplicationPropertyMetadata.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 313 lines | 244 code | 55 blank | 14 comment | 6 complexity | e9d76cc3b0c1b4717a06aecd291075a4 MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.bc.admin;
  2. import com.atlassian.jira.config.properties.ExampleGenerator;
  3. import com.atlassian.jira.util.lang.Pair;
  4. import com.atlassian.util.concurrent.LazyReference;
  5. import com.atlassian.validation.ApplicationPropertyEnumerator;
  6. import com.atlassian.validation.BooleanValidator;
  7. import com.atlassian.validation.IntegerValidator;
  8. import com.atlassian.validation.NonValidator;
  9. import com.atlassian.validation.Validator;
  10. import com.atlassian.validation.ValidatorFactory;
  11. import com.google.common.base.Supplier;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. /**
  15. * Represents an individual property setting as defined in the jpm.xml file. This implementation models the various
  16. * metadata about a single JIRA application property and also provides access to some type and validation logic.
  17. *
  18. * @since v4.4
  19. */
  20. public class ApplicationPropertyMetadata {
  21. private static final Map<String, Validator> DEFAULT_VALIDATORS_BY_TYPE = new HashMap<String, Validator>();
  22. static {
  23. DEFAULT_VALIDATORS_BY_TYPE.put("string", new NonValidator());
  24. DEFAULT_VALIDATORS_BY_TYPE.put("uint", new IntegerValidator(0, Integer.MAX_VALUE));
  25. DEFAULT_VALIDATORS_BY_TYPE.put("int", new IntegerValidator());
  26. DEFAULT_VALIDATORS_BY_TYPE.put("boolean", new BooleanValidator());
  27. }
  28. private String key;
  29. private String type;
  30. private String defaultValue;
  31. private Supplier<? extends Validator> validator;
  32. private boolean advancedSetting;
  33. private boolean sysadminEditable;
  34. private boolean adminEditable;
  35. private boolean requiresRestart;
  36. private String name;
  37. private String nameKey;
  38. private String desc;
  39. private String descKey;
  40. private ExampleGenerator exampleGenerator;
  41. private ApplicationPropertyEnumerator enumerator;
  42. private Pair<String, Boolean> requiredFeatureKey;
  43. private static Supplier<Validator> validatorResolver(final String type) {
  44. return new LazyReference<Validator>() {
  45. @Override
  46. protected Validator create() throws Exception {
  47. Validator validator = DEFAULT_VALIDATORS_BY_TYPE.get(type);
  48. if (validator == null) {
  49. validator = new NonValidator();
  50. }
  51. return validator;
  52. }
  53. };
  54. }
  55. private ApplicationPropertyMetadata(final String key, final String type, final String defaultValue, final Supplier<? extends Validator> validatorSupplier,
  56. boolean advancedSetting, boolean sysadminEditable, boolean adminEditable, boolean requiresRestart, final String name, final String nameKey, final String desc,
  57. final String descKey, ExampleGenerator exampleGenerator, final ApplicationPropertyEnumerator enumerator, Pair<String, Boolean> requiredFeatureKey) {
  58. this.key = key;
  59. this.type = type;
  60. this.defaultValue = defaultValue;
  61. this.advancedSetting = advancedSetting;
  62. this.sysadminEditable = sysadminEditable;
  63. this.adminEditable = adminEditable;
  64. this.requiresRestart = requiresRestart;
  65. this.name = name;
  66. this.nameKey = nameKey;
  67. this.desc = desc;
  68. this.descKey = descKey;
  69. this.validator = validatorSupplier;
  70. this.exampleGenerator = exampleGenerator;
  71. this.enumerator = enumerator;
  72. this.requiredFeatureKey = requiredFeatureKey;
  73. }
  74. public String getType() {
  75. return type;
  76. }
  77. public String getKey() {
  78. return key;
  79. }
  80. /**
  81. * Returns true if this property should appear on the "General Configuration > AdvancedSettings" page.
  82. */
  83. public boolean isAdvancedSetting() {
  84. return advancedSetting;
  85. }
  86. public boolean isSysadminEditable() {
  87. return sysadminEditable;
  88. }
  89. /**
  90. * Whether or not changing the property value requires a restart in order to take effect.
  91. *
  92. * @return true only if the property requires a restart.
  93. */
  94. public boolean isRequiresRestart() {
  95. return requiresRestart;
  96. }
  97. public String getName() {
  98. return name;
  99. }
  100. public String getNameKey() {
  101. return nameKey;
  102. }
  103. public String getDescription() {
  104. return desc;
  105. }
  106. public String getDescriptionKey() {
  107. return descKey;
  108. }
  109. public String getDefaultValue() {
  110. return defaultValue;
  111. }
  112. public Validator getValidator() {
  113. return validator.get();
  114. }
  115. public ApplicationPropertyEnumerator getEnumerator() {
  116. if (!"enum".equals(type)) {
  117. throw new IllegalStateException("Tried to get enumerator for a non-enum type");
  118. }
  119. return enumerator;
  120. }
  121. public Validator.Result validate(String value) {
  122. return validator.get().validate(value);
  123. }
  124. public boolean isAdminEditable() {
  125. return adminEditable;
  126. }
  127. public ExampleGenerator getExampleGenerator() {
  128. return exampleGenerator;
  129. }
  130. public Pair<String, Boolean> getRequiredFeatureKey() {
  131. return requiredFeatureKey;
  132. }
  133. public static class Builder {
  134. private String key;
  135. private String type;
  136. private String defaultValue;
  137. private Supplier<? extends Validator> validator;
  138. private boolean advancedSetting;
  139. private boolean sysAdminEditable;
  140. private boolean adminEditable;
  141. private boolean requiresRestart;
  142. private String name;
  143. private String nameKey;
  144. private String desc;
  145. private String descKey;
  146. private ApplicationPropertyEnumerator enumerator;
  147. private ExampleGenerator exampleGenerator;
  148. private Pair<String, Boolean> requiredFeatureKeys;
  149. public String key() {
  150. return key;
  151. }
  152. public Builder key(String key) {
  153. this.key = key;
  154. return this;
  155. }
  156. public String type() {
  157. return type;
  158. }
  159. public Builder type(String type) {
  160. this.type = type;
  161. return this;
  162. }
  163. public String defaultValue() {
  164. return defaultValue;
  165. }
  166. public Builder defaultValue(String defaultValue) {
  167. this.defaultValue = defaultValue;
  168. return this;
  169. }
  170. public Supplier<? extends Validator> validator() {
  171. return validator;
  172. }
  173. public Builder validatorName(String validatorName) {
  174. if (validatorName == null) {
  175. this.validator = validatorResolver(type);
  176. } else {
  177. this.validator = new ValidatorFactory().getInstanceLazyReference(validatorName);
  178. }
  179. return this;
  180. }
  181. public Builder validator(Supplier<? extends Validator> validator) {
  182. this.validator = validator;
  183. return this;
  184. }
  185. public boolean sysAdminEditable() {
  186. return sysAdminEditable;
  187. }
  188. public Builder sysAdminEditable(boolean sysAdminEditable) {
  189. this.sysAdminEditable = sysAdminEditable;
  190. return this;
  191. }
  192. public boolean adminEditable() {
  193. return adminEditable;
  194. }
  195. public Builder adminEditable(boolean adminEditable) {
  196. this.adminEditable = adminEditable;
  197. return this;
  198. }
  199. public boolean requiresRestart() {
  200. return requiresRestart;
  201. }
  202. public Builder requiresRestart(boolean requiresRestart) {
  203. this.requiresRestart = requiresRestart;
  204. return this;
  205. }
  206. public String name() {
  207. return name;
  208. }
  209. public Builder name(String name) {
  210. this.name = name;
  211. return this;
  212. }
  213. public String nameKey() {
  214. return nameKey;
  215. }
  216. public Builder nameKey(String nameKey) {
  217. this.nameKey = nameKey;
  218. return this;
  219. }
  220. public String desc() {
  221. return desc;
  222. }
  223. public Builder desc(String desc) {
  224. this.desc = desc;
  225. return this;
  226. }
  227. public String descKey() {
  228. return descKey;
  229. }
  230. public Builder descKey(String descKey) {
  231. this.descKey = descKey;
  232. return this;
  233. }
  234. public ApplicationPropertyEnumerator enumerator() {
  235. return enumerator;
  236. }
  237. public Builder enumerator(ApplicationPropertyEnumerator enumerator) {
  238. this.enumerator = enumerator;
  239. return this;
  240. }
  241. public ApplicationPropertyMetadata build() {
  242. return new ApplicationPropertyMetadata(key, type, defaultValue, validator, advancedSetting, sysAdminEditable, adminEditable, requiresRestart,
  243. name, nameKey, desc, descKey, exampleGenerator, enumerator, requiredFeatureKeys);
  244. }
  245. public Builder exampleGenerator(ExampleGenerator exampleGenerator) {
  246. this.exampleGenerator = exampleGenerator;
  247. return this;
  248. }
  249. public Builder requiredFeatureKey(Pair<String, Boolean> requiredFeatureKeys) {
  250. this.requiredFeatureKeys = requiredFeatureKeys;
  251. return this;
  252. }
  253. public Builder advancedSetting(boolean advancedSetting) {
  254. this.advancedSetting = advancedSetting;
  255. return this;
  256. }
  257. }
  258. }