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}