+class ModuleOrModuleBuilder {
+ private final Optional<Module> maybeModule;
+ private final Optional<ModuleBuilder> maybeModuleBuilder;
+
+ ModuleOrModuleBuilder(final Module module) {
+ maybeModule = Optional.of(module);
+ maybeModuleBuilder = Optional.absent();
+ }
+
+ ModuleOrModuleBuilder(final ModuleBuilder moduleBuilder) {
+ maybeModule = Optional.absent();
+ maybeModuleBuilder = Optional.of(moduleBuilder);
+ }
+ boolean isModule(){
+ return maybeModule.isPresent();
+ }
+ boolean isModuleBuilder(){
+ return maybeModuleBuilder.isPresent();
+ }
+ Module getModule(){
+ return maybeModule.get();
+ }
+ ModuleBuilder getModuleBuilder(){
+ return maybeModuleBuilder.get();
+ }
+
+ static List<ModuleOrModuleBuilder> fromAll(final Collection<Module> modules, final Collection<ModuleBuilder> moduleBuilders) {
+ List<ModuleOrModuleBuilder> result = new ArrayList<>(modules.size() + moduleBuilders.size());
+ for(Module m: modules){
+ result.add(new ModuleOrModuleBuilder(m));
+ }
+ for (ModuleBuilder mb : moduleBuilders) {
+ result.add(new ModuleOrModuleBuilder(mb));
+ }
+ return result;
+ }
+}