All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bekioui.maven.plugin.client.ClientMojo Maven / Gradle / Ivy

There is a newer version: 1.0.1
Show newest version
/**
 * Copyright (C) 2016 Mehdi Bekioui ([email protected])
 *
 * 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
 *
 *         http://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 com.bekioui.maven.plugin.client;

import java.util.List;

import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;

import com.bekioui.maven.plugin.client.generator.ClientConfigGenerator;
import com.bekioui.maven.plugin.client.generator.ClientFactoryGenerator;
import com.bekioui.maven.plugin.client.generator.ClientGenerator;
import com.bekioui.maven.plugin.client.generator.ContextGenerator;
import com.bekioui.maven.plugin.client.generator.PomGenerator;
import com.bekioui.maven.plugin.client.initializer.ProjectInitializer;
import com.bekioui.maven.plugin.client.inspector.JavaFileInspector;
import com.bekioui.maven.plugin.client.inspector.ResourceInspector;
import com.bekioui.maven.plugin.client.model.ContextResource;
import com.bekioui.maven.plugin.client.model.JavaSourceFile;
import com.bekioui.maven.plugin.client.model.Project;
import com.bekioui.maven.plugin.client.model.Properties;
import com.bekioui.maven.plugin.client.model.Resource;
import com.squareup.javapoet.TypeName;

@Mojo(name = "generate")
public class ClientMojo extends AbstractMojo {

	@Parameter(property = "client.apiUrl", required = true)
	public String apiUrl;

	@Parameter(property = "client.apiArtifactId", required = true)
	public String apiArtifactId;

	@Parameter(property = "client.clientArtifactId", required = true)
	public String clientArtifactId;

	@Parameter(property = "client.clientPrefix")
	public String clientPrefix = new String();

	@Parameter(property = "client.resourcePackageName", required = true)
	public String resourcePackageName;

	@Component
	private MavenProject mavenProject;

	@SuppressWarnings("unchecked")
	@Override
	public void execute() throws MojoExecutionException {
		if (!mavenProject.getArtifactId().equals(apiArtifactId)) {
			return;
		}

		if (mavenProject.getParent() == null) {
			throw new MojoExecutionException("API has to be a maven module with parent pom.");
		}

		List plugins = mavenProject.getParent().getBuildPlugins();
		for (Plugin plugin : plugins) {
			if (!plugin.getGroupId().equals("com.bekioui.plugin") || !plugin.getArtifactId().equals("client-maven-plugin")) {
				continue;
			}
			if (!plugin.getExecutions().isEmpty()) {
				throw new MojoExecutionException("client-maven-plugin has to not contain execution configuration.");
			}
			break;
		}

		Properties properties = Properties.builder() //
				.apiUrl(apiUrl) //
				.apiArtifactId(apiArtifactId) //
				.clientArtifactId(clientArtifactId) //
				.clientPrefix(clientPrefix) //
				.resourcePackageName(resourcePackageName) //
				.build();

		Project project = ProjectInitializer.initialize(mavenProject, properties);
		PomGenerator.generate(project);
		ClientConfigGenerator.generate(project);
		List javaSourceFiles = JavaFileInspector.inspect(project, resourcePackageName);
		List resources = ResourceInspector.inspect(project, javaSourceFiles);
		TypeName clientFactoryType = ClientFactoryGenerator.generate(project, resources);
		List contextResources = ContextGenerator.generate(project, resources, clientFactoryType);
		ClientGenerator.generate(project, contextResources, clientFactoryType);
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy