View Javadoc
1   package org.kuali.common.dns.model;
2   
3   import static com.google.common.base.Optional.absent;
4   import static org.kuali.common.dns.model.DnsRecordType.CNAME;
5   
6   import org.kuali.common.core.build.ValidatingBuilder;
7   import org.kuali.common.core.validate.annotation.IdiotProofImmutable;
8   
9   import com.google.common.base.Optional;
10  
11  @IdiotProofImmutable
12  public final class DnsRecordSearchCriteria {
13  
14  	private final Optional<String> nameContains;
15  	private final Optional<DnsRecordType> type;
16  	private final Optional<String> valueContains;
17  
18  	private DnsRecordSearchCriteria(Builder builder) {
19  		this.nameContains = builder.nameContains;
20  		this.type = builder.type;
21  		this.valueContains = builder.valueContains;
22  	}
23  
24  	public static DnsRecordSearchCriteria allCNAMERecords() {
25  		return newDnsRecordSearchCriteria(CNAME);
26  	}
27  
28  	public static DnsRecordSearchCriteria newDnsRecordSearchCriteria(DnsRecordType type) {
29  		return builder().type(type).build();
30  	}
31  
32  	public static DnsRecordSearchCriteria newDnsRecordSearchCriteria() {
33  		return builder().build();
34  	}
35  
36  	public static Builder builder() {
37  		return new Builder();
38  	}
39  
40  	public static class Builder extends ValidatingBuilder<DnsRecordSearchCriteria> {
41  
42  		private Optional<String> nameContains = absent();
43  		private Optional<DnsRecordType> type = absent();
44  		private Optional<String> valueContains = absent();
45  
46  		public Builder nameContains(Optional<String> nameContains) {
47  			this.nameContains = nameContains;
48  			return this;
49  		}
50  
51  		public Builder type(Optional<DnsRecordType> type) {
52  			this.type = type;
53  			return this;
54  		}
55  
56  		public Builder type(DnsRecordType type) {
57  			return type(Optional.of(type));
58  		}
59  
60  		public Builder valueContains(Optional<String> valueContains) {
61  			this.valueContains = valueContains;
62  			return this;
63  		}
64  
65  		@Override
66  		public DnsRecordSearchCriteria build() {
67  			return validate(new DnsRecordSearchCriteria(this));
68  		}
69  
70  	}
71  
72  	public Optional<String> getNameContains() {
73  		return nameContains;
74  	}
75  
76  	public Optional<DnsRecordType> getType() {
77  		return type;
78  	}
79  
80  	public Optional<String> getValueContains() {
81  		return valueContains;
82  	}
83  
84  }