package io.takari.maven.plugins.plugin;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.maven.plugin.descriptor.Parameter;
import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
import org.codehaus.plexus.component.repository.ComponentRequirement;
import org.codehaus.plexus.configuration.PlexusConfigurationException;
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import com.google.common.base.Throwables;
import io.takari.maven.plugins.plugin.model.MojoDescriptor;
import io.takari.maven.plugins.plugin.model.MojoParameter;
import io.takari.maven.plugins.plugin.model.MojoRequirement;
class LegacyPluginDescriptors {
public static Collection<MojoDescriptor> readMojos(InputStream is) throws IOException, XmlPullParserException {
Reader reader = ReaderFactory.newXmlReader(is);
org.apache.maven.plugin.descriptor.PluginDescriptor pluginDescriptor;
try {
pluginDescriptor = new PluginDescriptorBuilder().build(reader);
} catch (PlexusConfigurationException e) {
Throwables.propagateIfPossible(e.getCause(), IOException.class, XmlPullParserException.class);
throw Throwables.propagate(e);
}
List<MojoDescriptor> result = new ArrayList<>();
for (org.apache.maven.plugin.descriptor.MojoDescriptor mojo : pluginDescriptor.getMojos()) {
result.add(toMojoDescriptor(mojo));
}
return result;
}
private static MojoDescriptor toMojoDescriptor(org.apache.maven.plugin.descriptor.MojoDescriptor mojo) {
MojoDescriptor result = new MojoDescriptor();
result.setGoal(mojo.getGoal());
result.setDescription(mojo.getDescription());
result.setSince(mojo.getSince());
result.setRequiresDependencyResolution(mojo.getDependencyResolutionRequired());
result.setRequiresDependencyCollection(mojo.getDependencyCollectionRequired());
result.setRequiresDirectInvocation(mojo.isDirectInvocationOnly());
result.setRequiresProject(mojo.isProjectRequired());
result.setRequiresReports(mojo.isRequiresReports());
result.setAggregator(mojo.isAggregator());
result.setRequiresOnline(mojo.isOnlineRequired());
result.setInheritedByDefault(mojo.isInheritedByDefault());
result.setPhase(mojo.getPhase());
result.setImplementation(mojo.getImplementation());
result.setLanguage(mojo.getLanguage());
result.setConfigurator(mojo.getComponentConfigurator());
result.setInstantiationStrategy(mojo.getInstantiationStrategy());
result.setExecutionStrategy(mojo.getExecutionStrategy());
result.setThreadSafe(mojo.isThreadSafe());
result.setDeprecated(mojo.getDeprecated());
List<MojoParameter> parameters = new ArrayList<>();
if (mojo.getParameters() != null) {
for (Parameter parameter : mojo.getParameters()) {
parameters.add(toMojoParameter(parameter));
}
}
result.setParameters(parameters);
List<MojoRequirement> requirements = new ArrayList<>();
for (ComponentRequirement requirement : mojo.getRequirements()) {
requirements.add(toMojoRequirement(requirement));
}
result.setRequirements(requirements);
return result;
}
private static MojoRequirement toMojoRequirement(ComponentRequirement requirement) {
MojoRequirement result = new MojoRequirement();
result.setFieldName(requirement.getFieldName());
result.setRole(requirement.getRole());
result.setRoleHint(requirement.getRoleHint());
return result;
}
private static MojoParameter toMojoParameter(Parameter parameter) {
MojoParameter result = new MojoParameter();
result.setName(parameter.getName());
result.setAlias(parameter.getAlias());
result.setType(parameter.getType());
result.setRequired(parameter.isRequired());
result.setEditable(parameter.isEditable());
result.setDescription(parameter.getDescription());
result.setDeprecated(parameter.getDeprecated());
result.setSince(parameter.getSince());
result.setImplementation(parameter.getImplementation());
result.setDefaultValue(parameter.getDefaultValue());
result.setExpression(parameter.getExpression());
return result;
}
}