3333import org .apposed .appose .Builder ;
3434import org .apposed .appose .BuilderFactory ;
3535import org .apposed .appose .Environment ;
36+ import org .apposed .appose .Scheme ;
3637
3738/**
3839 * Dynamic builder that auto-detects the appropriate specific builder
4243 */
4344public final class DynamicBuilder extends BaseBuilder <DynamicBuilder > {
4445
45- private String builderName ;
46+ private String envType ;
4647
4748 // -- DynamicBuilder methods --
4849
4950 /**
5051 * Specifies the preferred builder to use.
5152 *
52- * @param builderName The builder name (e.g., "pixi", "mamba", "uv")
53+ * @param envType The builder's environment type (e.g., "pixi", "mamba", "uv")
5354 * @return This builder instance, for fluent-style programming.
5455 */
55- public DynamicBuilder builder (String builderName ) {
56- this .builderName = builderName ;
56+ public DynamicBuilder builder (String envType ) {
57+ this .envType = envType ;
5758 return this ;
5859 }
5960
6061 // -- Builder methods --
6162
6263 @ Override
63- public String name () {
64- return "dynamic" ;
64+ public String envType () {
65+ return envType != null ? envType : "dynamic" ;
6566 }
6667
6768 @ Override
6869 public Environment build () throws BuildException {
69- Builder <?> delegate = createBuilder (builderName , scheme );
70+ Builder <?> delegate = createBuilder ();
7071 copyConfigToDelegate (delegate );
7172 return delegate .build ();
7273 }
7374
7475 @ Override
7576 public Environment rebuild () throws BuildException {
76- Builder <?> delegate = createBuilder (builderName , scheme );
77+ Builder <?> delegate = createBuilder ();
7778 copyConfigToDelegate (delegate );
7879 return delegate .rebuild ();
7980 }
@@ -86,31 +87,31 @@ private void copyConfigToDelegate(Builder<?> delegate) {
8687 if (envName != null ) delegate .name (envName );
8788 if (envDir != null ) delegate .base (envDir );
8889 if (content != null ) delegate .content (content );
89- if (scheme != null ) delegate .scheme (scheme );
90+ if (scheme != null ) delegate .scheme (scheme . name () );
9091 delegate .channels (channels );
9192 progressSubscribers .forEach (delegate ::subscribeProgress );
9293 outputSubscribers .forEach (delegate ::subscribeOutput );
9394 errorSubscribers .forEach (delegate ::subscribeError );
9495 }
9596
96- private Builder <?> createBuilder (String name , String scheme ) {
97+ private Builder <?> createBuilder () {
9798 // Find the builder matching the specified name, if any.
98- if (name != null ) {
99- BuilderFactory factory = Builders .findFactoryByName ( name );
100- if (factory == null ) throw new IllegalArgumentException ("Unknown builder: " + name );
99+ if (envType != null ) {
100+ BuilderFactory factory = Builders .findFactoryByEnvType ( envType );
101+ if (factory == null ) throw new IllegalArgumentException ("Unknown builder: " + envType );
101102 return factory .createBuilder ();
102103 }
103104
104105 // Detect scheme from content if content is provided but scheme is not.
105- String effectiveScheme = scheme ;
106- if (effectiveScheme == null && content != null ) {
107- effectiveScheme = scheme (). name ();
106+ Scheme actualScheme = scheme ;
107+ if (actualScheme == null && content != null ) {
108+ actualScheme = resolveScheme ();
108109 }
109110
110111 // Find the highest-priority builder that supports this scheme.
111- if (effectiveScheme != null ) {
112- BuilderFactory factory = Builders .findFactoryByScheme (effectiveScheme );
113- if (factory == null ) throw new IllegalArgumentException ("No builder supports scheme: " + effectiveScheme );
112+ if (actualScheme != null ) {
113+ BuilderFactory factory = Builders .findFactoryByScheme (actualScheme . name () );
114+ if (factory == null ) throw new IllegalArgumentException ("No builder supports scheme: " + actualScheme . name () );
114115 return factory .createBuilder ();
115116 }
116117
0 commit comments