/*
 * Copyright 2016-2019 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package org.springframework.gradle.maven;

import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.publish.Publication;
import org.gradle.api.publish.PublishingExtension;
import org.gradle.api.publish.plugins.PublishingPlugin;
import org.gradle.plugins.signing.SigningExtension;
import org.gradle.plugins.signing.SigningPlugin;

import java.util.concurrent.Callable;

public class SpringSigningPlugin implements Plugin<Project> {
	@Override
	public void apply(Project project) {
		project.getPluginManager().apply(SigningPlugin.class);
		project.getPlugins().withType(SigningPlugin.class).all(new Action<SigningPlugin>() {
			@Override
			public void execute(SigningPlugin signingPlugin) {
				boolean hasSigningKey = project.hasProperty("signing.keyId") || project.hasProperty("signingKey");
				if (hasSigningKey) {
					sign(project);
				}
			}
		});
	}

	private void sign(Project project) {
		SigningExtension signing = project.getExtensions().findByType(SigningExtension.class);
		signing.setRequired(new Callable<Boolean>() {
			@Override
			public Boolean call() throws Exception {
				return project.getGradle().getTaskGraph().hasTask("publishArtifacts");
			}
		});
		String signingKeyId = (String) project.findProperty("signingKeyId");
		String signingKey = (String) project.findProperty("signingKey");
		String signingPassword = (String) project.findProperty("signingPassword");
		if (signingKeyId != null) {
			signing.useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword);
		} else {
			signing.useInMemoryPgpKeys(signingKey, signingPassword);
		}
		project.getPlugins().withType(PublishAllJavaComponentsPlugin.class).all(new Action<PublishAllJavaComponentsPlugin>() {
			@Override
			public void execute(PublishAllJavaComponentsPlugin publishingPlugin) {
				PublishingExtension publishing = project.getExtensions().findByType(PublishingExtension.class);
				Publication maven = publishing.getPublications().getByName("mavenJava");
				signing.sign(maven);
			}
		});
	}
}

@@ -1851,399 +1851,31 @@
 ;%0A%09%09
-String signingKeyId = (String) project.findProperty(%22signingKeyId%22);%0A%09%09String signingKey = (String) project.findProperty(%22signingKey%22);%0A%09%09String signingPassword = (String) project.findProperty(%22signingPassword%22);%0A%09%09if (signingKeyId != null) %7B%0A%09%09%09signing.useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword);%0A%09%09%7D else %7B%0A%09%09%09signing.useInMemoryPgpKeys(signingKey, signingPassword);%0A%09%09%7D
+sign(project, signing);
 %0A%09%09p
@@ -2286,19 +2286,19 @@
 );%0A%09%09%09%7D%0A
-
 %09%09%7D);%0A%09%7D
 %0A%7D%0A
@@ -2294,11 +2294,557 @@
 %09%09%7D);%0A%09%7D
+%0A%0A%09private void sign(Project project, SigningExtension signing) %7B%0A%09%09if (project.hasProperty(%22signing.keyId%22)) %7B%0A%09%09%09return; // use Gradle defaults%0A%09%09%7D%0A%09%09String signingKeyId = (String) project.findProperty(%22signingKeyId%22);%0A%09%09String signingKey = (String) project.findProperty(%22signingKey%22);%0A%09%09String signingPassword = (String) project.findProperty(%22signingPassword%22);%0A%09%09if (signingKeyId != null) %7B%0A%09%09%09signing.useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword);%0A%09%09%7D else %7B%0A%09%09%09signing.useInMemoryPgpKeys(signingKey, signingPassword);%0A%09%09%7D%0A%09%7D
 %0A%7D%0A

Add support for signing.keyId