Skip to content

Commit

Permalink
* changed code in main method
Browse files Browse the repository at this point in the history
* added OptionsBuilder
* added RepositoryFactory
  • Loading branch information
r1j0 committed Feb 26, 2012
1 parent 496b175 commit d3a7efc
Show file tree
Hide file tree
Showing 3 changed files with 160 additions and 43 deletions.
117 changes: 74 additions & 43 deletions src/com/github/r1j0/bugspot/Bugspot.java
Original file line number Diff line number Diff line change
@@ -1,75 +1,106 @@
package com.github.r1j0.bugspot;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;

import com.github.r1j0.bugspot.repository.LogEntries;
import com.github.r1j0.bugspot.repository.Repository;
import com.github.r1j0.bugspot.repository.SvnRepository;

import com.github.r1j0.bugspot.repository.RepositoryFactory;

public class Bugspot {

private static final String NAME = Bugspot.class.getSimpleName();


public static void main(String[] args) {
String url = "http://svn.apache.org/repos/asf/hadoop/common/trunk/hadoop-common-project";
String username = "anonymous";
String password = "anonymous";
args = new String[] { "-h" };
// args = new String[] { "-url", "http://svn.apache.org/repos/asf/hadoop/common/trunk/hadoop-common-project", "-u", "anonymous", "-p", "anonymous" };
/**
* <code>
* args = new String[] { "-url", "http://svn.apache.org/repos/asf/hadoop/common/trunk/hadoop-common-project", "-u", "anonymous", "-p", "anonymous" };
* </code>
*/
CommandLineParser parser = new PosixParser();
Options commandLineOptions = OptionsBuilder.build();
CommandLine line = null;

try {
line = parser.parse(commandLineOptions, args);
} catch (ParseException e) {
System.out.println(e.getMessage() + "\n");
printHelp(commandLineOptions);
System.exit(1);
}

Repository svnRepository = new SvnRepository(url, username, password);
List<LogEntries> logEntries = svnRepository.checkout(1200180, 1241260);
checkConditions(line, commandLineOptions);
final Map<String, String> options = parseCommandLineOptions(line);

Repository repository = RepositoryFactory.getInstance(options.get("type"), options.get("url"), options.get("username"), options.get("password"));
List<LogEntries> logEntries = repository.checkout(1200180, 1241260);

Computate computate = new Computate(logEntries);
computate.compute();
Map<String, Double> hotspots = computate.getHotspots();

for (Entry<String, Double> entrySet : hotspots.entrySet()) {
System.out.println("PATH: " + entrySet.getKey() + " VALUE: " + entrySet.getValue());
}


/**
* <code>
Options options = new Options();
options.addOption(new Option("h", "help", false, "print this message"));
options.addOption(new Option("version",
"print the version information and exit"));
OptionBuilder.withArgName("u");
OptionBuilder.withDescription("repository username");
OptionBuilder.hasArg();
OptionBuilder.withArgName("USERNAME");
options.addOption(OptionBuilder.create("u"));
// create the parser
CommandLineParser parser = new PosixParser();
}
}

args = new String[] { "-h", "--version" };

// parse the command line arguments
CommandLine line = null;
private static Map<String, String> parseCommandLineOptions(final CommandLine line) {
final Map<String, String> options = new HashMap<String, String>();

try {
line = parser.parse(options, args);
} catch (ParseException e) {
System.out.println(e.getMessage() + "\n");
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("BugSpot", options);
System.exit(1);
options.put("url", line.getOptionValue("url"));
options.put("username", "anonymous");
options.put("password", "anonymous");
options.put("type", "svn");

if (line.hasOption("u")) {
options.put("username", line.getOptionValue("u"));
}

if (line.hasOption("p")) {
options.put("password", line.getOptionValue("p"));
}

if (line.hasOption("t")) {
options.put("type", line.getOptionValue("t"));
}

return options;
}


private static void checkConditions(CommandLine line, Options options) {
if (line.hasOption("h")) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("BugSpot", options);
printHelp(options);
System.exit(0);
}

if (line.hasOption("version")) {
System.out.println("Version is crap.");
System.out.println("Version is and will be infinite.");
System.exit(0);
}
if (line.hasOption("u")) {
System.out.println("username: " + line.getOptionValue("u"));

if (!line.hasOption("url")) {
System.out.println("No repository url has been given.");
System.exit(0);
}
</code>
*/
}
}


private static void printHelp(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(NAME, options);
}
}
69 changes: 69 additions & 0 deletions src/com/github/r1j0/bugspot/OptionsBuilder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.github.r1j0.bugspot;

import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;

public class OptionsBuilder {

public static Options build() {
Options options = new Options();

addHelpOption(options);
addVersionOption(options);
addUrlOption(options);
addUsernameOption(options);
addPasswordOption(options);
addRepositoryTypeOption(options);
return options;
}


private static void addUrlOption(Options options) {
OptionBuilder.withArgName("url");
OptionBuilder.withDescription("repository url");
OptionBuilder.hasArg();
OptionBuilder.withArgName("URL");
options.addOption(OptionBuilder.create("url"));
}


private static void addUsernameOption(Options options) {
OptionBuilder.withArgName("u");
OptionBuilder.withLongOpt("username");
OptionBuilder.withDescription("repository username");
OptionBuilder.hasArg();
OptionBuilder.withArgName("USERNAME");
options.addOption(OptionBuilder.create("u"));
}


private static void addPasswordOption(Options options) {
OptionBuilder.withArgName("p");
OptionBuilder.withLongOpt("password");
OptionBuilder.withDescription("repository password");
OptionBuilder.hasArg();
OptionBuilder.withArgName("PASSWORD");
options.addOption(OptionBuilder.create("p"));
}


private static void addRepositoryTypeOption(Options options) {
OptionBuilder.withArgName("t");
OptionBuilder.withLongOpt("type");
OptionBuilder.withDescription("repository type, e.g. svn or git");
OptionBuilder.hasArg();
OptionBuilder.withArgName("TYPE");
options.addOption(OptionBuilder.create("t"));
}


private static void addVersionOption(Options options) {
options.addOption(new Option("version", "print the version information and exit"));
}


private static void addHelpOption(Options options) {
options.addOption(new Option("h", "help", false, "print this message"));
}
}
17 changes: 17 additions & 0 deletions src/com/github/r1j0/bugspot/repository/RepositoryFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.github.r1j0.bugspot.repository;

public class RepositoryFactory {

public static Repository getInstance(final String type, final String url, final String username, final String password) {
final String typeLowerCase = type.toLowerCase();

if (typeLowerCase.equals("svn")) {
return new SvnRepository(url, username, password);
} else if (typeLowerCase.equals("git")) {
return new GitRepository(url, username, password);
}

throw new IllegalArgumentException("No repository connector for repository type " + type + " available.");
}

}

0 comments on commit d3a7efc

Please sign in to comment.