package qubexplorer; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.util.Map; import java.util.Properties; import org.apache.maven.model.Build; import org.apache.maven.model.Model; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.netbeans.api.project.Project; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; /** * * @author Victor */ public class SonarMvnProject implements SonarQubeProjectConfiguration { public static final String PROPERTY_NAME = "sonar.projectName"; public static final String PROPERTY_VERSION = "sonar.projectVersion"; public static final String PROPERTY_KEY = "sonar.projectKey"; private final Model model; public SonarMvnProject(Project project) { try { this.model = createModel(project); } catch (MvnModelInputException ex) { throw new SonarQubeProjectException(ex); } } @Override public String getName() { String projectName = model.getProperties().getProperty(PROPERTY_NAME); if (projectName != null) { return projectName; } return model.getName() != null ? model.getName() : model.getArtifactId(); } @Override public ResourceKey getKey() { String projectKey = model.getProperties().getProperty(PROPERTY_KEY); if (projectKey != null) { return ResourceKey.valueOf(projectKey); } String groupId = model.getGroupId(); if (groupId == null && model.getParent() != null) { groupId = model.getParent().getGroupId(); } return new ResourceKey(groupId, model.getArtifactId()); } @Override public String getVersion() { String projectVersion = model.getProperties().getProperty(PROPERTY_VERSION); if (projectVersion != null) { return projectVersion; } String version = model.getVersion(); if (version == null && model.getParent() != null) { version = model.getParent().getVersion(); } return version; } public static Model createModel(Project project) throws MvnModelInputException { FileObject pomFile = getPomFileObject(project); MavenXpp3Reader mavenreader = new MavenXpp3Reader(); try (Reader reader = new InputStreamReader(pomFile.getInputStream())) { Model model = mavenreader.read(reader); model.setPomFile(new File(pomFile.getPath())); return model; } catch (XmlPullParserException | IOException ex) { throw new MvnModelInputException(ex); } } public static boolean isMvnProject(Project project) { return getPomFileObject(project) != null; } public static FileObject getPomFileObject(Project project) { return project.getProjectDirectory().getFileObject("pom.xml"); } public static MavenProject createMavenProject(Project project) throws MvnModelInputException { return new MavenProject(createModel(project)); } public static File getOutputDirectory(Project project) throws MvnModelInputException { MavenProject mavenProject = SonarMvnProject.createMavenProject(project); Build build = mavenProject.getBuild(); String path = null; if (build != null) { path = build.getDirectory(); } File outputDirectory; if (path != null) { outputDirectory = FileUtil.normalizeFile(new File(path)); } else { outputDirectory = new File(project.getProjectDirectory().getPath(), "target"); } return outputDirectory; } @Override public SonarQubeProjectConfiguration createConfiguration(Project subproject) { return new SonarMvnProject(subproject); } @Override public Properties getProperties() { Properties properties = new Properties(); for (Map.Entry<Object, Object> entry : model.getProperties().entrySet()) { if (entry.getKey().toString().startsWith("sonar.")) { properties.put(entry.getKey(), entry.getValue()); } } return properties; } }