3333import hudson .model .Run ;
3434import hudson .model .TaskListener ;
3535import java .io .IOException ;
36- import java .util .Collections ;
3736import java .util .HashMap ;
3837import java .util .Map ;
3938import java .util .Set ;
4342import org .jenkinsci .plugins .docker .commons .credentials .DockerRegistryEndpoint ;
4443import org .jenkinsci .plugins .docker .commons .credentials .KeyMaterialFactory ;
4544import org .jenkinsci .plugins .docker .commons .tools .DockerTool ;
45+ import org .jenkinsci .plugins .structs .describable .CustomDescribableModel ;
4646import org .jenkinsci .plugins .structs .describable .UninstantiatedDescribable ;
4747import org .jenkinsci .plugins .workflow .steps .Step ;
4848import org .jenkinsci .plugins .workflow .steps .StepContext ;
@@ -105,7 +105,7 @@ public static class Execution extends AbstractEndpointStepExecution {
105105
106106 }
107107
108- @ Extension public static class DescriptorImpl extends StepDescriptor {
108+ @ Extension public static class DescriptorImpl extends StepDescriptor implements CustomDescribableModel {
109109
110110 @ Override public String getFunctionName () {
111111 return "withDockerRegistry" ;
@@ -123,17 +123,7 @@ public static class Execution extends AbstractEndpointStepExecution {
123123 return true ;
124124 }
125125
126- @ Override public UninstantiatedDescribable uninstantiate (Step step ) throws UnsupportedOperationException {
127- RegistryEndpointStep s = (RegistryEndpointStep ) step ;
128- Map <String , Object > args = new TreeMap <>();
129- args .put ("url" , s .registry .getUrl ());
130- args .put ("credentialsId" , s .registry .getCredentialsId ());
131- args .put ("toolName" , s .toolName );
132- args .values ().removeAll (Collections .singleton (null ));
133- return new UninstantiatedDescribable (args );
134- }
135-
136- @ Override public Step newInstance (Map <String , Object > arguments ) throws Exception {
126+ @ Override public Map <String , Object > customInstantiate (Map <String , Object > arguments ) {
137127 arguments = new HashMap <>(arguments );
138128 if (arguments .containsKey ("url" ) || arguments .containsKey ("credentialsId" )) {
139129 if (arguments .containsKey ("registry" )) {
@@ -143,9 +133,20 @@ public static class Execution extends AbstractEndpointStepExecution {
143133 } else if (!arguments .containsKey ("registry" )) {
144134 throw new IllegalArgumentException ("must specify url/credentialsId (or registry)" );
145135 }
146- return super . newInstance ( arguments ) ;
136+ return arguments ;
147137 }
148138
139+ @ Override public UninstantiatedDescribable customUninstantiate (UninstantiatedDescribable ud ) {
140+ Object registry = ud .getArguments ().get ("registry" );
141+ if (registry instanceof UninstantiatedDescribable ) {
142+ Map <String , Object > arguments = new TreeMap <>(ud .getArguments ());
143+ arguments .remove ("registry" );
144+ arguments .putAll (((UninstantiatedDescribable ) registry ).getArguments ());
145+ return ud .withArguments (arguments );
146+ }
147+ return ud ;
148+ }
149+
149150 @ SuppressWarnings ("unchecked" )
150151 @ Override public Set <? extends Class <?>> getRequiredContext () {
151152 return ImmutableSet .of (TaskListener .class , EnvVars .class , Node .class , Run .class , FilePath .class , Launcher .class );
0 commit comments