diff --git a/AcademicSearchEngine/WebContent/js/index.js b/AcademicSearchEngine/WebContent/js/index.js
index 7d0702b..26875c6 100644
--- a/AcademicSearchEngine/WebContent/js/index.js
+++ b/AcademicSearchEngine/WebContent/js/index.js
@@ -6,6 +6,8 @@ $(function() {
$('#user_paper_btn').remove();
$('#share_history_btn').click(getUserGift($('#share_history_btn').attr("user")));
$('#share_history_btn').remove();
+ $('#recommend_btn').click(doRecommend($('#recommend_btn').attr("user")));
+ $('#recommend_btn').remove();
// index.jsp
leftSide();
@@ -63,10 +65,10 @@ $(function() {
showWordCloud();
});
- $('#related_btn').click(rightSide());
+ $('#related_btn').click(relatedSide());
$('#related_btn').remove();
$('#related_btn').on("click", function(e) {
- rightSide();
+ relatedSide();
});
$('#rankpaper_btn').on("click", function(e) {
@@ -162,6 +164,27 @@ function doRegister(user) {
});
}
+function doRecommend(name) {
+ $.ajax({
+ type : 'GET',
+ url : "recommend?user="+name,
+ dataType : 'json',
+ success : function(data) {
+ var list = data.list;
+ for (var i = 0; i < list.length; i ++) {
+ $('#tab2').append('
');
+ }
+ },
+ error : function(XmlHttpRequest, textStatus, errorThrown) {
+ alert("recommend ajax error!");
+ }
+ });
+}
+
function getUserAuthor(name) {
$.ajax({
type : 'GET',
@@ -291,7 +314,7 @@ function history(action) {
}
-function rightSide() {
+function relatedSide() {
var field = $("#rfield").val();
var place = $("#rplace").val();
var name = $("#rname").val();
diff --git a/AcademicSearchEngine/src/dcd/academic/DAO/UserDAO.java b/AcademicSearchEngine/src/dcd/academic/DAO/UserDAO.java
index bc7af54..e879eac 100644
--- a/AcademicSearchEngine/src/dcd/academic/DAO/UserDAO.java
+++ b/AcademicSearchEngine/src/dcd/academic/DAO/UserDAO.java
@@ -15,4 +15,5 @@ public interface UserDAO {
public ArrayList
getUserAuthor(String name);
public ArrayList getUserPaper(String name);
+ public ArrayList recommendPaper(String name);
}
diff --git a/AcademicSearchEngine/src/dcd/academic/DAO/impl/SearchDaoImpl.java b/AcademicSearchEngine/src/dcd/academic/DAO/impl/SearchDaoImpl.java
index caad65e..f2967cc 100644
--- a/AcademicSearchEngine/src/dcd/academic/DAO/impl/SearchDaoImpl.java
+++ b/AcademicSearchEngine/src/dcd/academic/DAO/impl/SearchDaoImpl.java
@@ -52,7 +52,8 @@ public class SearchDaoImpl implements SearchDAO {
pst = (PreparedStatement) con.prepareStatement(query);
rs = pst.executeQuery();
while (rs.next()) {
- hot.add("("+rs.getString("count").toString()+") "+rs.getString("sk").toString());
+ if (!rs.getString("sk").toString().equals("undefined"))
+ hot.add("("+rs.getString("count").toString()+") "+rs.getString("sk").toString());
}
} catch (Exception e) {
e.printStackTrace();
@@ -80,7 +81,8 @@ public class SearchDaoImpl implements SearchDAO {
pst = (PreparedStatement) con.prepareStatement(query);
rs = pst.executeQuery();
while (rs.next()) {
- newly.add(rs.getString("sk").toString());
+ if (!rs.getString("sk").toString().equals("undefined"))
+ newly.add(rs.getString("sk").toString());
}
} catch (Exception e) {
e.printStackTrace();
diff --git a/AcademicSearchEngine/src/dcd/academic/DAO/impl/UserDaoImpl.java b/AcademicSearchEngine/src/dcd/academic/DAO/impl/UserDaoImpl.java
index a99b331..a125c5f 100644
--- a/AcademicSearchEngine/src/dcd/academic/DAO/impl/UserDaoImpl.java
+++ b/AcademicSearchEngine/src/dcd/academic/DAO/impl/UserDaoImpl.java
@@ -3,6 +3,8 @@ package dcd.academic.DAO.impl;
import java.sql.ResultSet;
import java.util.ArrayList;
+import javax.rmi.CORBA.Tie;
+
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
@@ -16,6 +18,103 @@ import dcd.academic.solrj.SolrjHelper;
public class UserDaoImpl implements UserDAO {
+ @Override
+ public ArrayList recommendPaper(String name) {
+ ArrayList list = new ArrayList();
+ ArrayList keys = getUserKeys(name);
+ ArrayList titles = getUserTitles(name);
+ for (String key : keys) {
+ String query = "select * from UserPaper where username<>? and sk=?;";
+ Connection con = null;
+ PreparedStatement pst = null;
+ ResultSet rs = null;
+ DBConnectionManage dbmanage = DBConnectionManage.getInstance();
+
+ try {
+ con = dbmanage.getFreeConnection();
+ pst = (PreparedStatement) con.prepareStatement(query);
+ pst.setString(1, name);
+ pst.setString(2, key);
+ rs = pst.executeQuery();
+ while (rs.next()) {
+ if (!titles.contains(rs.getString("title").toString())) {
+ PublicationModel model = new PublicationModel();
+ model.setSk(key);
+ model.setTitle(rs.getString("title").toString());
+ model.setAuthor(rs.getString("username").toString());
+ model.setDate(rs.getString("date").toString());
+ list.add(model);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ dbmanage.closeConnection(con);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return list;
+ }
+
+ private ArrayList getUserTitles(String name) {
+ ArrayList list = new ArrayList();
+ String query = "select distinct title from UserPaper where username=?;";
+ Connection con = null;
+ PreparedStatement pst = null;
+ ResultSet rs = null;
+ DBConnectionManage dbmanage = DBConnectionManage.getInstance();
+
+ try {
+ con = dbmanage.getFreeConnection();
+ pst = (PreparedStatement) con.prepareStatement(query);
+ pst.setString(1, name);
+ rs = pst.executeQuery();
+ while (rs.next()) {
+ list.add(rs.getString("title").toString());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ dbmanage.closeConnection(con);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return list;
+ }
+
+ private ArrayList getUserKeys(String name) {
+ ArrayList list = new ArrayList();
+ String query = "SELECT distinct sk FROM userpaper where username =?;";
+ Connection con = null;
+ PreparedStatement pst = null;
+ ResultSet rs = null;
+ DBConnectionManage dbmanage = DBConnectionManage.getInstance();
+
+ try {
+ con = dbmanage.getFreeConnection();
+ pst = (PreparedStatement) con.prepareStatement(query);
+ pst.setString(1, name);
+ rs = pst.executeQuery();
+ while (rs.next()) {
+ list.add(rs.getString("sk").toString());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ dbmanage.closeConnection(con);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return list;
+ }
+
@Override
public User getUser(String username) {
User user = new User();
diff --git a/AcademicSearchEngine/src/dcd/academic/action/RecommendAction.java b/AcademicSearchEngine/src/dcd/academic/action/RecommendAction.java
new file mode 100644
index 0000000..47dd1d4
--- /dev/null
+++ b/AcademicSearchEngine/src/dcd/academic/action/RecommendAction.java
@@ -0,0 +1,40 @@
+package dcd.academic.action;
+
+import java.util.ArrayList;
+
+import com.opensymphony.xwork2.ActionSupport;
+
+import dcd.academic.DAO.DAOfactory;
+import dcd.academic.model.PublicationModel;
+
+public class RecommendAction extends ActionSupport {
+
+ private String user;
+
+ public ArrayList list = new ArrayList();
+
+ @Override
+ public String execute() throws Exception {
+ list = DAOfactory.getUserDAO().recommendPaper(user);
+ return SUCCESS;
+ }
+
+ public String getUser() {
+ return user;
+ }
+
+ public void setUser(String user) {
+ this.user = user;
+ }
+
+ public ArrayList getList() {
+ return list;
+ }
+
+ public void setList(ArrayList list) {
+ this.list = list;
+ }
+
+
+
+}
diff --git a/AcademicSearchEngine/src/dcd/academic/action/SearchHistoryAction.java b/AcademicSearchEngine/src/dcd/academic/action/SearchHistoryAction.java
index c49042e..462583d 100644
--- a/AcademicSearchEngine/src/dcd/academic/action/SearchHistoryAction.java
+++ b/AcademicSearchEngine/src/dcd/academic/action/SearchHistoryAction.java
@@ -27,7 +27,7 @@ public class SearchHistoryAction extends ActionSupport {
SearchDAO dao = DAOfactory.getSearchDAO();
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
- if (sk.length() > 2 && sk != null) {
+ if (!sk.equals("undefined") && sk != null) {
dao.saveHistory(type, user, sk.toLowerCase(), date.toLocaleString());
}
diff --git a/AcademicSearchEngine/src/struts.xml b/AcademicSearchEngine/src/struts.xml
index 9b5d38f..c12c4d1 100644
--- a/AcademicSearchEngine/src/struts.xml
+++ b/AcademicSearchEngine/src/struts.xml
@@ -73,5 +73,8 @@
+
+
+
\ No newline at end of file