General Actions:
Log-in
Wiki:
Courses
▼
:
Document Index
»
Space:
DSSF2008
▼
:
Document Index
»
Page:
KennethsTestArea
Search
DSSF2008
:
KennethsTestArea
Page Actions:
Export
▼
:
Export as PDF
Export as RTF
Export as HTML
More actions
▼
:
Print preview
View Source
KennethsTestArea
Wiki source code of
KennethsTestArea
Last modified by
Hal Eden
on 2010/08/20 11:06
Content
·
Comments
(0)
·
Attachments
(2)
·
History
·
Information
Show line numbers
$request.number 1. $request.assignmentId <% import java.util.StringTokenizer import java.util.HashMap import com.xpn.xwiki.doc.XWikiAttachment import groovy.xml.MarkupBuilder if (xwiki.hasAdminRights()) { def attachmentName = "userdistances-weightedtimes.txt" if(request.get("updaterelations") != null) { //common edits user relations def sql = ", BaseObject as obj where obj.name=doc.fullName and obj.className='XWiki.XWikiUsers'" def usersArray = [] for (item in xwiki.searchDocuments(sql)) { def username = xwiki.getUserName(item) def user = xwiki.getUser(item) if (user.isUserInGroup("XWiki.DCNM2009")) { //TODO: different periods for the revision criteria def last_week_period = xwiki.criteriaService.periodFactory.createSinceWeeksPeriod(1) def previous_period = xwiki.criteriaService.periodFactory.createPeriod(xwiki.criteriaService.periodFactory.getALL_TIME().getStart(), last_week_period.getStart()) def criteria_new = xwiki.criteriaService.revisionCriteriaFactory.createRevisionCriteria(item, last_week_period) def criteria_old = xwiki.criteriaService.revisionCriteriaFactory.createRevisionCriteria(item, previous_period) usersArray.add([item, criteria_new, criteria_old, [], 0]) } } sql = ", BaseObject as obj where doc.web='DCNM2009'" def test = 0 for (item in xwiki.searchDocuments(sql)) { def currDocument = xwiki.getDocument(item) //checks if each user has editing this doc for(currUser in usersArray) { def revisions_old = currDocument.getRevisions(currUser[2]) def revisions_new = currDocument.getRevisions(currUser[1]) if(revisions_new.size() > 0) { currUser[3].add(2) //revisions_new.size() currUser[4] += 2 }else if(revisions_old.size() > 0) { currUser[3].add(1) //revisions_old.size() currUser[4] += 1 } else { currUser[3].add(0) } } } def distanceArray = [] def dimension = usersArray.size() for(i in 0..(dimension - 1)) { def row = new double[dimension] distanceArray.add(row) //fill in previously calculated distances (symmetric matrix) for(prev in 0..(i-1)) { distanceArray[i][prev] = distanceArray[prev][i] } //calculate distances if(i < (dimension - 1)) { for(next in (i+1)..(dimension - 1)) { /* //euclidean distance normalized so that 1 = the same point, 0 = separate def ss = 0 for(k in 0..(usersArray[i][3].size() - 1)) { def dim = usersArray[i][3][k] - usersArray[next][3][k] ss += dim * dim } distanceArray[i][next] = 1 / (1 + Math.sqrt(ss)) */ //tanimoto distance //calculate cross product of usersArray[i][2] and usersArray[next][2] def totalShared = 0 for(k in 0..(usersArray[i][3].size() - 1)) { //if(usersArray[i][3][k] * usersArray[next][3][k] > 0) { totalShared += Math.min(usersArray[i][3][k], usersArray[next][3][k]) } def denom = (double)(usersArray[next][4]+ usersArray[i][4] - totalShared) if(denom != 0) { distanceArray[i][next] = totalShared / denom } else { distanceArray[i][next] = 0 } } } } //write out connection matrix to an attachment def writer = new StringWriter() writer.write(distanceArray.size() + "\n") for(i in 0..(usersArray.size()-1)) { writer.write(usersArray[i][0]) if(i < usersArray.size()-1) { writer.write(",") } } writer.write("\n") for(i in 0..(distanceArray.size()-1)) { for(j in 0..(distanceArray.size()-1)) { writer.write("" + distanceArray[i][j]) if(j < distanceArray.size()-1) { writer.write(",") } } writer.write("\n") } //MOVED TO TOP: def attachmentName = "userdistances-weightedtimes.txt" def attachment = doc.getDocument().getAttachment(attachmentName) if (!attachment){ attachment = new XWikiAttachment(doc.getDocument(), attachmentName) doc.getDocument().getAttachmentList().add(attachment) } attachment.setContent(writer.toString().getBytes()) doc.getDocument().saveAttachmentContent(attachment, context.getContext()) doc.save() println "Finished updating user relations." println "[View top relations per user>" + doc.fullName + "?viewtoprelations=1]" } else if(request.get("viewtoprelations") != null){ //MOVED TO TOP: def attachmentName = "userdistances.txt" def attachment = doc.getAttachment(attachmentName) if (!attachment){ println "No user relations file found." } else { def content = attachment.getContentAsString() def reader = new BufferedReader(new StringReader(content)) def size = Integer.parseInt(reader.readLine()) def users = [] def userListStr = new StringTokenizer(reader.readLine(), ",") for(i in 1..size) { users.add(userListStr.nextToken()) } def sortedDistanceMatrix = [] for(i in 1..size) { def distanceStr = new StringTokenizer(reader.readLine(), ",") def row = [] for(j in 1..size) { row.add([users[j-1],Double.parseDouble(distanceStr.nextToken())]) } //sort the row for(j in 1..(size-1)) { def valueC = row[j][1] def valueN = row[j][0] def k = j-1 while(k >= 0 && row[k][1] < valueC) { row[k + 1][0] = row[k][0] row[k + 1][1] = row[k][1] k = k-1 } row[k+1][0] = valueN row[k+1][1] = valueC } //prints users' top five connected people if they exist print users[i-1] + ": " for(j in 0..4) { if(row[j][1] > 0) { if(j > 0) { print ", " } print xwiki.getUserName(row[j][0]) } } println "\n" sortedDistanceMatrix.add(row) } } } else { println "[Update the User Relations>" + doc.fullName + "?updaterelations=1]" println "[View top relations per user>" + doc.fullName + "?viewtoprelations=1]" } } //Old code //interests user relations------------------------------- /* def sql = ", BaseObject as obj where obj.name=doc.fullName and obj.className='XWiki.XWikiUsers'" def interestArray = [] for (item in xwiki.searchDocuments(sql)) { def userdoc = xwiki.getDocument(item) def userobj = userdoc.getObject("XWiki.XWikiUsers") def interests = userobj.getProperty("research_interests") def username = xwiki.getUserName(item) def user = xwiki.getUser(item) if (interests != null && user.isUserInGroup("XWiki.DCNM2009")) { def st = new StringTokenizer(interests.getValue(), ",\n\r") def interestsList = [] while(st.hasMoreTokens()) { interestsList.add(st.nextToken().toLowerCase()) } def userNameAndInterests = [username, interestsList] interestArray.add(userNameAndInterests) } } def distanceArray = [] def dimension = interestArray.size() for(i in 0..(dimension - 1)) { def row = new double[dimension] distanceArray.add(row) //fill in previously calculated distances (symmetric matrix) for(prev in 0..(i-1)) { distanceArray[i][prev] = distanceArray[prev][i] } //calculate distances if(i < (dimension - 1)) { for(next in (i+1)..(dimension - 1)) { //calculate distance between interestArray[i][1] and interestArray[next][1] //tanimoto distance def totalShared = 0 for(interestItem in interestArray[i][1]) { for(compareInterestItem in interestArray[next][1]) { if(interestItem.equalsIgnoreCase(compareInterestItem)) { totalShared = totalShared + 1 break } } } def denom = (double)(interestArray[next][1].size() + interestArray[i][1].size() - totalShared) if(denom != 0) { distanceArray[i][next] = totalShared / denom } else { distanceArray[i][next] = 0 } } } } for(i in 0..(distanceArray.size()-1)) { for(j in 0..(distanceArray.size()-1)) { print distanceArray[i][j] + ", " } print "<br>" }*/ //----------------------------------------- %>
Course Pages
Home
Roster
Assignments
Schedule and Syllabus
Course Announcement
Lecture Material
Relevant Resources
Questionnaires
Independent Research Projects
Blog
Recently Visited
AndrewHepler
|
A8MakeshiftCrew
|
User Quotes
|
A12DaraCunningham
|
Q1DaraCunningham
Search
Search query
Recently Modified
MSC Final Project ...
MakeShiftCrew Proj...
Embedding Content
Human-Centered Com...
Assignment12KyleMa...
See More Changes
Recent Comments
Recently Created
WebPreferences
|
RatingStats
|
palen
|
ksiek
|
kena