package edu.purdue.pivot.skwiki.server;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.Properties;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import edu.purdue.pivot.skwiki.client.CheckIDService;
import edu.purdue.pivot.skwiki.shared.DataPack;
import edu.purdue.pivot.skwiki.shared.RevisionHistory;
/**
* The server side implementation of the RPC service.
*/
@SuppressWarnings("serial")
public class CheckIDServiceImpl extends RemoteServiceServlet implements
CheckIDService {
private String current_project_name = "";
private String main_database_name = "";
private String postgres_name = "postgres";
private String postgres_password = "fujiko";
Properties prop = new Properties();
private String escapeHtml(String html) {
if (html == null) {
return null;
}
return html.replaceAll("&", "&").replaceAll("<", "<")
.replaceAll(">", ">");
}
@Override
public DataPack checkID(DataPack input) throws IllegalArgumentException {
/* read database details from file */
BufferedReader br;
InputStream config_file = null;
//current_project_name = input.projectName;
main_database_name = "mainbase";
try {
//config_file = new FileInputStream(this.getServletContext().getRealPath("serverConfig.properties"));
br = new BufferedReader(new FileReader(this.getServletContext().getRealPath("/serverConfig.txt")));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
String first = line.substring(0, line.lastIndexOf(':'));
String last = line.substring(line.lastIndexOf(':') + 1);
if (first.contains("content_database")) {
current_project_name = last;
}
if (first.contains("owner_database")) {
main_database_name = last;
}
if (first.contains("username")) {
postgres_name = last;
}
if (first.contains("password")) {
postgres_password = last;
}
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
//String everything = sb.toString();
//System.out.println("file: "+everything);
br.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
}
String userAgent = getThreadLocalRequest().getHeader("User-Agent");
userAgent = escapeHtml(userAgent);
DataPack returnPack = new DataPack();
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your PostgreSQL JDBC Driver? "
+ "Include in your library path!");
e.printStackTrace();
}
Connection connection = null;
Statement st = null;
ResultSet rs = null;
try {
/* LOG */
Date date= new Date();
System.out.println(date.toString()+",checkid"+","+input.id+",");
connection = DriverManager.getConnection(
"jdbc:postgresql://127.0.0.1:5432/"+current_project_name, "postgres",
"fujiko");
st = connection.createStatement();
rs = st.executeQuery("SELECT count(*) FROM"+" currentrevision ");
while (rs.next()) {
returnPack.updateRevision = rs.getInt(1);
}
st = connection.createStatement();
rs = st.executeQuery("SELECT * FROM"+" currentrevision ");
while (rs.next()) {
String tempID = rs.getString(1);
int revision = rs.getInt(2);
int fromRevision = rs.getInt(3);
String comment = rs.getString(4);
RevisionHistory tempRevisionHistory = new RevisionHistory(tempID, revision,
fromRevision,comment);
returnPack.revisionList.add(tempRevisionHistory);
}
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
}
finally {
try {
if (rs != null) {
rs.close();
}
if (st != null) {
st.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
return returnPack;
}
}