Skip to content

Provide CLI verion #66

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Oct 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions cli/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr

### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/

### Mac OS ###
.DS_Store
90 changes: 90 additions & 0 deletions cli/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.hjug.refactorfirst</groupId>
<artifactId>refactor-first</artifactId>
<version>0.4.1-SNAPSHOT</version>
</parent>

<packaging>jar</packaging>

<groupId>org.hjug.refactorfirst.report</groupId>
<artifactId>cli</artifactId>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
<version>4.7.4</version>
</dependency>
<dependency>
<groupId>org.hjug.refactorfirst.report</groupId>
<artifactId>report</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.9.2</version>
<scope>compile</scope>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.hjug.refactorfirst.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.skife.maven</groupId>
<artifactId>really-executable-jar-maven-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<programFile>rf</programFile>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>really-executable-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>
12 changes: 12 additions & 0 deletions cli/src/main/java/org/hjug/refactorfirst/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.hjug.refactorfirst;

import picocli.CommandLine;

public class Main {
public static void main(String[] args) {
int exitCode = new CommandLine(new ReportCommand())
.setCaseInsensitiveEnumValuesAllowed(true)
.execute(args);
System.exit(exitCode);
}
}
119 changes: 119 additions & 0 deletions cli/src/main/java/org/hjug/refactorfirst/ReportCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
package org.hjug.refactorfirst;

import lombok.extern.slf4j.Slf4j;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.project.MavenProject;
import org.hjug.refactorfirst.report.CsvReport;
import org.hjug.refactorfirst.report.HtmlReport;
import org.hjug.refactorfirst.report.json.JsonReportExecutor;
import picocli.CommandLine.Command;

import java.io.File;
import java.io.FileReader;
import java.util.concurrent.Callable;

import static picocli.CommandLine.Option;

@Command(mixinStandardHelpOptions = true, description = "Generate a report")
@Slf4j
public class ReportCommand implements Callable<Integer> {

@Option(
names = {"-d", "--details"},
description = "Show detailed report")
private boolean showDetails;

@Option(
names = {"-p", "--project"},
description = "Project name")
private String projectName;

@Option(
names = {"-v", "--version"},
description = "Project version")
private String projectVersion;

@Option(
names = {"-o", "--output"},
defaultValue = ".",
description = "Output directory")
private String outputDirectory;

@Option(
names = {"-b", "--base-dir"},
defaultValue = ".",
description = "Base directory of the project")
private File baseDir;

@Option(
names = {"-t", "--type"},
description = "Report type: ${COMPLETION-CANDIDATES}",
defaultValue = "HTML")
private ReportType reportType;

@Override
public Integer call() {

// TODO: add support for inferring arguments from gradle properties
inferArgumentsFromMavenProject();
populateDefaultArguments();
switch (reportType) {
case HTML:
HtmlReport htmlReport = new HtmlReport();
htmlReport.execute(showDetails, projectName, projectVersion, outputDirectory, baseDir);
return 0;
case JSON:
JsonReportExecutor jsonReportExecutor = new JsonReportExecutor();
jsonReportExecutor.execute(baseDir, outputDirectory);
return 0;
case CSV:
CsvReport csvReport = new CsvReport();
csvReport.execute(showDetails, projectName, projectVersion, outputDirectory, baseDir);
return 0;
}

return 0;
}

private void populateDefaultArguments() {
if (projectName == null || projectName.isEmpty()) {
projectName = "my-project";
}
if (projectVersion == null || projectVersion.isEmpty()) {
projectVersion = "0.0.0";
}
}

private void inferArgumentsFromMavenProject() {
if (baseDir.isDirectory()) {
File[] potentialPomFiles = baseDir.listFiles(f -> f.getName().equals("pom.xml"));
File pomFile = null;
if (potentialPomFiles != null && potentialPomFiles.length > 0) {
pomFile = potentialPomFiles[0];
}
if (pomFile != null) {
Model model;
FileReader reader;
MavenXpp3Reader mavenreader = new MavenXpp3Reader();
try {
reader = new FileReader(pomFile);
model = mavenreader.read(reader);
model.setPomFile(pomFile);
} catch (Exception ex) {
log.info("Unable to infer arguments from pom file");
return;
}
MavenProject project = new MavenProject(model);

// only override project name and version if they are not set
if (projectName == null || projectName.isEmpty()) {
projectName = project.getName();
}
if (projectVersion == null || projectVersion.isEmpty()) {
projectVersion = project.getVersion();
}
}
}
}
}
7 changes: 7 additions & 0 deletions cli/src/main/java/org/hjug/refactorfirst/ReportType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.hjug.refactorfirst;

public enum ReportType {
HTML,
JSON,
CSV;
}
10 changes: 9 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
<javac.version>9+181-r4173-1</javac.version>

<!--Compiler plugins-->
<errorprone.version>2.10.0</errorprone.version>
<errorprone.version>2.20.0</errorprone.version>
<lombok.version>1.18.28</lombok.version>

<spotbugs.maven.plugin.version>4.0.0</spotbugs.maven.plugin.version>
Expand All @@ -84,6 +84,8 @@
<module>refactor-first-maven-plugin</module>
<!--<module>refactor-first-gradle-plugin</module>-->
<module>coverage</module>
<module>report</module>
<module>cli</module>
</modules>

<dependencyManagement>
Expand Down Expand Up @@ -118,6 +120,12 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.hjug.refactorfirst.report</groupId>
<artifactId>report</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.hjug.refactorfirst.testresources</groupId>
<artifactId>test-resources</artifactId>
Expand Down
4 changes: 4 additions & 0 deletions refactor-first-maven-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
<artifactId>graph-data-generator</artifactId>
</dependency>

<dependency>
<groupId>org.hjug.refactorfirst.report</groupId>
<artifactId>report</artifactId>
</dependency>
<!-- Doxia -->
<!-- Needed since maven-reporting-impl brings in Struts 1.3.8 jars that have CVSS > 8 -->
<dependency>
Expand Down
Loading