View Javadoc
1   package org.kuali.common.util.create.impl;
2   
3   import static com.google.common.base.Preconditions.checkNotNull;
4   import static com.google.common.base.Preconditions.checkState;
5   
6   import java.util.List;
7   
8   import javax.validation.Validator;
9   
10  import org.kuali.common.util.bind.api.Binder;
11  import org.kuali.common.util.bind.api.Binding;
12  import org.kuali.common.util.create.CreationProviderResolver;
13  import org.kuali.common.util.create.CreatorFactory;
14  import org.kuali.common.util.create.spi.BootstrapState;
15  import org.kuali.common.util.create.spi.ConfigurationState;
16  import org.kuali.common.util.create.spi.CreationProvider;
17  import org.kuali.common.util.validate.Validation;
18  
19  public final class ConfigurationImpl implements KualiCreationConfiguration, ConfigurationState {
20  
21  	private final Validator validator;
22  	private final Binder binder;
23  	private final CreationProviderResolver providerResolver;
24  
25  	@Override
26  	public CreatorFactory buildCreatorFactory() {
27  		List<CreationProvider<?>> providers = providerResolver.getCreationProviders();
28  		checkState(providers.size() > 0, "No providers were found");
29  		CreationProvider<?> provider = providers.get(0);
30  		return provider.buildCreatorFactory(this);
31  	}
32  
33  	@Override
34  	public Validator getValidator() {
35  		return validator;
36  	}
37  
38  	@Override
39  	public Binder getBinderService() {
40  		return binder;
41  	}
42  
43  	private ConfigurationImpl(Builder builder) {
44  		this.validator = builder.validator;
45  		this.binder = builder.binder;
46  		this.providerResolver = builder.providerResolver;
47  	}
48  
49  	public static ConfigurationImpl create(BootstrapState state) {
50  		return builder(state).build();
51  	}
52  
53  	public static Builder builder(BootstrapState state) {
54  		return new Builder(state);
55  	}
56  
57  	public static class Builder implements org.apache.commons.lang3.builder.Builder<ConfigurationImpl> {
58  
59  		private final CreationProviderResolver providerResolver;
60  		private Validator validator = Validation.getDefaultValidator();
61  		private Binder binder = Binding.getDefaultBinderService();
62  
63  		public Builder(BootstrapState state) {
64  			if (state.getCreationProviderResolver().isPresent()) {
65  				this.providerResolver = state.getCreationProviderResolver().get();
66  			} else {
67  				this.providerResolver = state.getDefaultCreationProviderResolver();
68  			}
69  		}
70  
71  		public Builder validator(Validator validator) {
72  			this.validator = validator;
73  			return this;
74  		}
75  
76  		public Builder binder(Binder binder) {
77  			this.binder = binder;
78  			return this;
79  		}
80  
81  		@Override
82  		public ConfigurationImpl build() {
83  			ConfigurationImpl instance = new ConfigurationImpl(this);
84  			validate(instance);
85  			return instance;
86  		}
87  
88  		private static void validate(ConfigurationImpl instance) {
89  			checkNotNull(instance.validator, "'validator' cannot be null");
90  			checkNotNull(instance.binder, "'binder' cannot be null");
91  		}
92  
93  		public Validator getValidator() {
94  			return validator;
95  		}
96  
97  		public void setValidator(Validator validator) {
98  			this.validator = validator;
99  		}
100 
101 		public Binder getBinder() {
102 			return binder;
103 		}
104 
105 		public void setBinder(Binder binder) {
106 			this.binder = binder;
107 		}
108 
109 		public CreationProviderResolver getProviderResolver() {
110 			return providerResolver;
111 		}
112 	}
113 
114 	public Binder getBinder() {
115 		return binder;
116 	}
117 
118 	public CreationProviderResolver getProviderResolver() {
119 		return providerResolver;
120 	}
121 
122 }