001package org.kuali.common.util.properties.rice; 002 003import static com.google.common.base.Preconditions.checkNotNull; 004 005import javax.xml.bind.annotation.XmlAccessType; 006import javax.xml.bind.annotation.XmlAccessorType; 007import javax.xml.bind.annotation.XmlAttribute; 008import javax.xml.bind.annotation.XmlValue; 009 010@XmlAccessorType(XmlAccessType.FIELD) 011public class Param implements Comparable<Param> { 012 013 @XmlAttribute(required = true) 014 private final String name; 015 016 @XmlAttribute 017 private final boolean override; 018 019 @XmlAttribute 020 private final boolean random; 021 022 @XmlAttribute 023 private final boolean system; 024 025 @XmlValue 026 private final String value; 027 028 public String getName() { 029 return name; 030 } 031 032 public boolean isOverride() { 033 return override; 034 } 035 036 public boolean isRandom() { 037 return random; 038 } 039 040 public boolean isSystem() { 041 return system; 042 } 043 044 public String getValue() { 045 return value; 046 } 047 048 public static Param create(String name, String value) { 049 return builder(name, value).build(); 050 } 051 052 public static Builder builder(String name, String value) { 053 return new Builder(name, value); 054 } 055 056 public static class Builder { 057 058 // Required 059 private final String name; 060 private final String value; 061 062 // Optional 063 private boolean override = false; 064 private boolean random = false; 065 private boolean system = false; 066 067 public Builder(String name, String value) { 068 this.name = name; 069 this.value = value; 070 } 071 072 public Builder override(boolean override) { 073 this.override = override; 074 return this; 075 } 076 077 public Builder random(boolean random) { 078 this.random = random; 079 return this; 080 } 081 082 public Builder system(boolean system) { 083 this.system = system; 084 return this; 085 } 086 087 private Builder initialized() { 088 return this; 089 } 090 091 public Param build() { 092 Param instance = new Param(this); 093 validate(instance); 094 return instance; 095 } 096 097 private static void validate(Param instance) { 098 checkNotNull(instance.name, "'name' cannot be null"); 099 checkNotNull(instance.value, "'value' cannot be null"); 100 } 101 102 } 103 104 private Param() { 105 this(new Builder(null, null).initialized()); 106 } 107 108 private Param(Builder builder) { 109 this.name = builder.name; 110 this.value = builder.value; 111 this.override = builder.override; 112 this.random = builder.random; 113 this.system = builder.system; 114 } 115 116 @Override 117 public int compareTo(Param param) { 118 return this.name.compareTo(param.getName()); 119 } 120 121}