View Javadoc
1   package org.kuali.common.devops.model;
2   
3   import java.util.Properties;
4   
5   import org.kuali.common.core.build.ValidatingBuilder;
6   import org.kuali.common.core.validate.annotation.IdiotProofImmutable;
7   import org.kuali.common.util.project.model.ImmutableProject;
8   import org.kuali.common.util.project.model.Project;
9   import org.kuali.common.util.property.ImmutableProperties;
10  
11  import com.google.common.base.Optional;
12  
13  @IdiotProofImmutable
14  public final class Application {
15  
16  	private final ImmutableProject project;
17  	private final ImmutableProperties manifest;
18  	private final ImmutableProperties configuration;
19  	private final Optional<Database> database;
20  	private final Optional<Scm> scm;
21  
22  	private Application(Builder builder) {
23  		this.project = ImmutableProject.copyOf(builder.project);
24  		this.configuration = ImmutableProperties.copyOf(builder.configuration);
25  		this.manifest = ImmutableProperties.copyOf(builder.manifest);
26  		this.database = builder.database;
27  		this.scm = builder.scm;
28  	}
29  
30  	public static Application create(Project project, Properties manifest, Properties config, Optional<Database> database, Optional<Scm> scm) {
31  		return builder().project(project).manifest(manifest).configuration(config).database(database).scm(scm).build();
32  	}
33  
34  	public static Builder builder() {
35  		return new Builder();
36  	}
37  
38  	public static class Builder extends ValidatingBuilder<Application> {
39  
40  		private Project project;
41  		private Properties configuration;
42  		private Properties manifest;
43  		private Optional<Database> database;
44  		private Optional<Scm> scm;
45  
46  		public Builder scm(Optional<Scm> scm) {
47  			this.scm = scm;
48  			return this;
49  		}
50  
51  		public Builder scm(Scm scm) {
52  			return scm(Optional.of(scm));
53  		}
54  
55  		public Builder project(Project project) {
56  			this.project = project;
57  			return this;
58  		}
59  
60  		public Builder configuration(Properties configuration) {
61  			this.configuration = configuration;
62  			return this;
63  		}
64  
65  		public Builder manifest(Properties manifest) {
66  			this.manifest = manifest;
67  			return this;
68  		}
69  
70  		public Builder database(Optional<Database> database) {
71  			this.database = database;
72  			return this;
73  		}
74  
75  		public Builder database(Database database) {
76  			return database(Optional.of(database));
77  		}
78  
79  		@Override
80  		public Application build() {
81  			return validate(new Application(this));
82  		}
83  
84  		public Project getProject() {
85  			return project;
86  		}
87  
88  		public void setProject(Project project) {
89  			this.project = project;
90  		}
91  
92  		public Optional<Database> getDatabase() {
93  			return database;
94  		}
95  
96  		public void setDatabase(Optional<Database> database) {
97  			this.database = database;
98  		}
99  
100 		public Optional<Scm> getScm() {
101 			return scm;
102 		}
103 
104 		public void setScm(Optional<Scm> scm) {
105 			this.scm = scm;
106 		}
107 
108 		public Properties getConfiguration() {
109 			return configuration;
110 		}
111 
112 		public void setConfiguration(Properties configuration) {
113 			this.configuration = configuration;
114 		}
115 
116 		public Properties getManifest() {
117 			return manifest;
118 		}
119 
120 		public void setManifest(Properties manifest) {
121 			this.manifest = manifest;
122 		}
123 	}
124 
125 	public Project getProject() {
126 		return project;
127 	}
128 
129 	public Optional<Database> getDatabase() {
130 		return database;
131 	}
132 
133 	public Optional<Scm> getScm() {
134 		return scm;
135 	}
136 
137 	public ImmutableProperties getManifest() {
138 		return manifest;
139 	}
140 
141 	public ImmutableProperties getConfiguration() {
142 		return configuration;
143 	}
144 
145 }