package commandLineClient;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
import javax.xml.rpc.handler.Handler;
import javax.xml.rpc.handler.HandlerChain;
import jplagWsClient.jplagClient.JPlagException;
import jplagWsClient.jplagClient.JPlagService_Impl;
import jplagWsClient.jplagClient.JPlagTyp_Stub;
import jplagWsClient.jplagClient.LanguageInfo;
import jplagWsClient.jplagClient.Option;
import jplagWsClient.jplagClient.ServerInfo;
import jplagWsClient.jplagClient.Status;
import jplagWsClient.jplagClient.Submission;
import jplagWsClient.util.JPlagClientAccessHandler;
public class JplagClient {
// Konstanten... eigentlich w�rs sinnvoll die nicht an DREI sondern
// an nur EINEM Platz zu haben.... Sollte noch ge�ndert werden...
public static final int WRITING_RESULTS = 3;
public static final int BAD_USER_ID = -1;
public static final int WAITING_IN_QUEUE = 0;
public static final int PARSING_WITH_NO_WARNING = 100;
public static final int PARSING_WITH_WARNING = 101;
public static final int COMPARING = 200;
public static final int ILLEGAL_SUFFIX_WARNING = 102;
public static final int PACKAGING_RESULTS = 201;
public static final int COMPARE_SOURCE_DONE = 300;
public static final int UNKOWN_ERROR_OCCURED = 400;
public static final int BAD_LANGUAGE_ERROR = 401;
public static final int NO_ENOUGH_SUBMISSIONS_ERROR = 402;
public static final int BAD_PARAMETER = 403;
public static final int BAD_SENSITIVITY_OF_COMPARISON = 404;
JPlagTyp_Stub stub = null;
JPlagClientAccessHandler accessHandler;
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("jplan CLI needs two parameters: username and password!");
System.exit(1);
}
try {
JplagClient jpClient = new JplagClient();
jpClient.stub = (JPlagTyp_Stub) (new JPlagService_Impl().getJPlagServicePort());
HandlerChain handlerchain = jpClient.stub._getHandlerChain();
@SuppressWarnings("rawtypes")
Iterator handlers = handlerchain.iterator();
while (handlers.hasNext()) {
Handler handler = (Handler) handlers.next();
if (handler instanceof JPlagClientAccessHandler) {
jpClient.accessHandler = ((JPlagClientAccessHandler) handler);
break;
}
}
if (jpClient.accessHandler == null) {
System.out.println("Unable to find access handler!");
} else {
jpClient.accessHandler.setUserPassObjects(args[0], args[1]);
}
ServerInfo serverInfo = jpClient.invoke_getServerInfo();
String lstr = "";
LanguageInfo[] langs = serverInfo.getLanguageInfos();
for (int i = 0; i < langs.length; i++) {
lstr += "\nLanguage: " + langs[i].getName() + "\nSuffixes: ";
String[] suf = langs[i].getSuffixes();
for (int j = 0; j < suf.length; j++)
lstr += suf[j] + ((j < suf.length - 1) ? "," : "");
lstr += "\nDefault minimum token length: " + langs[i].getDefMinMatchLen() + "\n";
}
String str = "";
Submission[] subs = serverInfo.getSubmissions();
for (int i = 0; i < subs.length; i++) {
str += "Submission ID: " + subs[i].getSubmissionID() + " Title: " + subs[i].getTitle() + " Date: " + subs[i].getDate()
+ "\n";
}
System.out.println("Left submission slots: " + serverInfo.getUserInfo().getLeftSubmissionSlots());
System.out.println("Account end date: " + serverInfo.getUserInfo().getExpires());
System.out.println("List of languages:\n" + lstr + "\nList of submissions on server:\n" + str);
if (args.length == 2) {
String containerid = jpClient.invoke_compareSource(args);
Status status;
System.out.println("Waiting for server to be done...");
do {
Thread.sleep(4000);
status = jpClient.stub.getStatus(containerid);
System.out.println("State=" + status.getState() + " Progress=" + status.getProgress());
// System.out.flush();
} while (status.getState() >= WAITING_IN_QUEUE && status.getState() < COMPARE_SOURCE_DONE);
if (status.getState() == BAD_USER_ID) {
System.out.println("ARGH! Where did my container go?!? " + status.getReport());
} else if (status.getState() == UNKOWN_ERROR_OCCURED || status.getState() == BAD_LANGUAGE_ERROR
|| status.getState() == NO_ENOUGH_SUBMISSIONS_ERROR) {
System.out.println("Error occurred: " + status.getReport());
} else {
jpClient.extractPart(jpClient.stub.getResult(containerid), args[1]);
}
}
} catch (Exception ex) {
if (ex instanceof JPlagException) {
JPlagException jex = (JPlagException) ex;
System.out.println(jex.getExceptionType());
System.out.println(jex.getDescription());
System.out.println(jex.getRepair());
}
ex.printStackTrace();
}
}
public ServerInfo invoke_getServerInfo() {
System.out.println("\n" + "############# JPLAG-RESULT :REQUEST = getServerInfo() ##############" + "\n" + "\n");
ServerInfo s = null;
try {
s = this.stub.getServerInfo();
} catch (Exception e) {
if (e instanceof JPlagException) {
JPlagException jex = (JPlagException) e;
System.out.println(jex.getExceptionType());
System.out.println(jex.getDescription());
System.out.println(jex.getRepair());
}
e.printStackTrace();
}
return s;
}
public String invoke_compareSource(String[] args) {
// package a zipped file
File file = new File(args[0]);
// MimeMultipart result=null;
String result = null;
System.out.println("Entering try block...");
try {
FileDataSource fds = new FileDataSource(file);
// Construct a MimeBodyPart
// Add Part on the .....
MimeMultipart mmp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setDataHandler(new DataHandler(fds));
mbp.setFileName(file.getName());
mmp.addBodyPart(mbp);
System.out.println("Creating Option object...");
// Prepare Options
/*
* String username= "mo"; boolean use_root_dir =true ; String
* directories =""; int sensitivity_of_comparison =9 ; boolean
* use_basecode =false ; String basecode_dir =""; boolean
* read_subdirs =true ; boolean clustering_on =true ; String
* clustertype="max"; int store_matches = 30 ; int store_in_percent
* = 10 ; boolean exclude_file_on = false ; String excluded_file =
* ""; boolean include_file_on=false ; String included_file ="";
* boolean suffixes_on =true ; String suffixes = "java";
*/
String language = "java12";
String title = "Server test";
Option option = new Option(args[0],/* username, */
null, 0, null, true, "avr", "50", null, null, language, title, "en");
// running Jplag
System.out.println("Calling compareSource...");
result = this.stub.compareSource(option, mmp);
System.out.println("\n" + "############# JPLAG-RESULT :REQUEST =compareSource() ##############" + "\nResult= " + result);
} catch (Exception ex) {
if (ex instanceof JPlagException) {
JPlagException jex = (JPlagException) ex;
System.out.println(jex.getExceptionType());
System.out.println(jex.getDescription());
System.out.println(jex.getRepair());
}
ex.printStackTrace();
}
return result; //extractPart(result, args[1]);
}
private File extractPart(MimeMultipart inputZipFile, String path) {
File result = new File(path + "/jplagResult.zip");
try {
if (inputZipFile == null)
return null;
MimeBodyPart bdp = (MimeBodyPart) inputZipFile.getBodyPart(0);
System.out.println("Content Type " + bdp.getContentType());
DataHandler dh = bdp.getDataHandler();
FileOutputStream os = new FileOutputStream(result);
dh.writeTo(os);
os.close();
} catch (Exception e) {
if (e instanceof JPlagException) {
JPlagException jex = (JPlagException) e;
System.out.println(jex.getExceptionType());
System.out.println(jex.getDescription());
System.out.println(jex.getRepair());
}
e.printStackTrace();
System.exit(-1);
}
String report = "\n"
+ "\n"
+ ((result == null) ? "compareSource was not successfull sorry"
: "WAOOOOOOOUUUUU ******** CompareSource was succesfull**********") + "\n" + "\n";
System.out.println(report);
return result;
}
}