diff --git a/WikiRating/src/main/java/computations/CreditSystem.java b/WikiRating/src/main/java/computations/CreditSystem.java new file mode 100644 index 0000000..29242cb --- /dev/null +++ b/WikiRating/src/main/java/computations/CreditSystem.java @@ -0,0 +1,109 @@ +package main.java.computations; + + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; + +import org.codehaus.jettison.json.JSONArray; +import org.codehaus.jettison.json.JSONException; +import org.json.JSONObject; + +import com.tinkerpop.blueprints.Direction; +import com.tinkerpop.blueprints.Edge; +import com.tinkerpop.blueprints.Vertex; +import com.tinkerpop.blueprints.impls.orient.OrientGraph; +import com.tinkerpop.blueprints.impls.orient.OrientVertex; + +import main.java.utilities.Connections; + +@Path("credit") +@Produces("application/json") +public class CreditSystem { + + @GET + @Path("users") + @Produces("application/json") + public static String generateCredits(@QueryParam("name") List pageList,@QueryParam("join") boolean join){ + OrientGraph graph = Connections.getInstance().getDbGraph(); + + if(join){ + Vertex pageNode=null; + for(int i=0;i userContributions=new HashMap(); + getUserContributions(graph,userContributions,pageNode); + + + } + + + graph.shutdown(); + return "Success"; + + } + + + else{ + graph.shutdown(); + return "Success"; + + } + +} + + /** + * @param graph + * @param userContributions + * @param pageNode + */ + public static void getUserContributions(OrientGraph graph,HashMap userContributions,Vertex pageNode){ + Vertex revisionNode=null,userNode=null; + revisionNode=pageNode.getEdges(Direction.OUT, "@class", "PreviousVersionOfPage").iterator().next().getVertex(Direction.IN); + Edge contribute=null; + int contributionSize=0,userid=0; + try{ + while(true){ + + contribute=revisionNode.getEdges(Direction.IN, "@class", "Contribute").iterator().next(); + userNode=contribute.getVertex(Direction.OUT); + + //Get the required bytes and the corresponding userid + contributionSize=contribute.getProperty("contributionSize"); + userid=userNode.getProperty("userid"); //Putting the data into the HashMap + + if(userContributions.containsKey(userid)){ + + userContributions.put(userid, userContributions.get(userid)+contributionSize); + + } + else{ + + userContributions.put(userid, contributionSize); + + } + + if((int)revisionNode.getProperty("parentid")!=0) + break; + + revisionNode=graph.getVertices("revid", (int)revisionNode.getProperty("parentid")).iterator().next(); + + } + }catch(Exception e){ + e.printStackTrace(); + } + + Iterator it = userContributions.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = (Map.Entry) it.next(); + System.out.println(pair.getKey()+" "+pair.getValue()); + } + } +} diff --git a/WikiRating/src/main/java/controllers/DisplayStatistics.java b/WikiRating/src/main/java/controllers/DisplayStatistics.java index a50df75..6963c97 100644 --- a/WikiRating/src/main/java/controllers/DisplayStatistics.java +++ b/WikiRating/src/main/java/controllers/DisplayStatistics.java @@ -1,48 +1,49 @@ package main.java.controllers; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import org.glassfish.jersey.server.JSONP; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.impls.orient.OrientGraph; import main.java.utilities.Connections; import main.java.utilities.PropertiesAccess; @Path("stats") public class DisplayStatistics { @GET @Path("display") @JSONP(queryParam = "callback") @Produces({ "application/x-javascript" }) public String getAllStats(@QueryParam("callback") String callback, @QueryParam("pageTitle") String pageTitle) { int nameSpace,badgeNumber;long totalVotes=0; double pageRank,currentPageVote,pageReliability,maxPageReliability,maxPageRank; OrientGraph graph = Connections.getInstance().getDbGraph(); Vertex pageNode=graph.getVertices("title",pageTitle).iterator().next(); nameSpace=pageNode.getProperty("namespace"); badgeNumber=pageNode.getProperty("badgeNumber"); pageRank=pageNode.getProperty("Pagerank"); totalVotes=pageNode.getProperty("totalVotes"); currentPageVote=pageNode.getProperty("currentPageVote"); pageReliability=pageNode.getProperty("currentPageReliability"); maxPageReliability=PropertiesAccess.getParameter("maxPageReliability"); maxPageRank=PropertiesAccess.getParameter("maxPageRank"); graph.shutdown(); System.out.println(nameSpace+" "+badgeNumber+" "+pageRank+" "+totalVotes+" "+currentPageVote+" "+pageReliability+" "+maxPageReliability+" "+maxPageRank); - String sJson="{\"pageTitle\":\"dd\",\"currentPageRating\":2,\"maxPageRating\":55,\"badgeNumber\":4}"; + //String sJson="{\"pageTitle\":\"dd\",\"currentPageRating\":2,\"maxPageRating\":55,\"badgeNumber\":4}"; + String sJson="{\"nameSpace\":"+nameSpace+",\"badgeNumber\":"+badgeNumber+",\"pageRank\":"+pageRank+",\"totalVotes\":"+totalVotes+",\"currentPageVote\":"+currentPageVote+",\"pageReliability\":"+pageReliability+",\"maxPageReliability\":"+maxPageReliability+",\"maxPageRank\":"+maxPageRank+"}"; String result = callback + "(" + sJson + ");"; return result; } } diff --git a/WikiRating/src/main/java/controllers/Firstrun.java b/WikiRating/src/main/java/controllers/Firstrun.java index 7f6980e..c6655e9 100644 --- a/WikiRating/src/main/java/controllers/Firstrun.java +++ b/WikiRating/src/main/java/controllers/Firstrun.java @@ -1,90 +1,94 @@ package main.java.controllers; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import com.orientechnologies.orient.core.Orient; + import main.java.computations.BadgeGenerator; import main.java.computations.NormalisedVotes; import main.java.computations.PageRating; import main.java.computations.Pagerank; import main.java.computations.RandomVoteGenerator; import main.java.computations.Reliability; import main.java.computations.UserCredibility; import main.java.models.InitialiseDB; import main.java.models.LinkPages; import main.java.models.LinkUserContributions; import main.java.models.Page; import main.java.models.Revision; import main.java.models.User; /** * This class will be used to initialize the engine. * */ @Path("firstRun") public class Firstrun { @GET @Produces("application/json") // Warning: If you add revisions before the Users, only those users who have // not contributed to Wiki will be added. // However this behaviour can be inverted too /** * This method will call different other methods that will initialize the engine * @return Response object showing time taken to run the computation */ public Response pCompute() { long startTime = System.currentTimeMillis(); InitialiseDB.createClass(); System.out.println("==================Classes creation over====================="); Page.insertPages(); System.out.println("==================Page insertion over====================="); LinkPages.linkAll("@class","Page"); System.out.println("==================Page linking over====================="); - User.insertAllUsers(); + Orient.instance().shutdown(); + + /*User.insertAllUsers(); System.out.println("==================All Users inserted====================="); Revision.getAllRevisions("@class","Page"); System.out.println("==================Page Revisions over====================="); Pagerank.pageRankCompute(); System.out.println("==================Page rank over====================="); LinkUserContributions.linkAll(); System.out.println("==================All Users Linked====================="); RandomVoteGenerator.generateVotes(); System.out.println("==================All Versions voted====================="); NormalisedVotes.calculatePageVotes(); System.out.println("==================All Page Votes computed====================="); UserCredibility.getUserCredibility(); System.out.println("==================User Credibility computed====================="); Reliability.calculateReliability(); System.out.println("==================Vote Reliability computed====================="); PageRating.computePageRatings(); System.out.println("==================Page Ratings computed====================="); new BadgeGenerator().generateBadges(); - System.out.println("==================Badges given====================="); + System.out.println("==================Badges given=====================");*/ long estimatedTime = System.currentTimeMillis() - startTime; estimatedTime = estimatedTime / 60000; return Response.status(200).entity("Successful and took" + estimatedTime + "Minutes").build(); } } diff --git a/WikiRating/src/main/java/models/InitialiseDB.java b/WikiRating/src/main/java/models/InitialiseDB.java index 8cf82de..6d809ba 100644 --- a/WikiRating/src/main/java/models/InitialiseDB.java +++ b/WikiRating/src/main/java/models/InitialiseDB.java @@ -1,44 +1,47 @@ package main.java.models; import com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx; import main.java.utilities.Connections; /** * This class will be used only for the creation of the classes in the database. */ public class InitialiseDB { /** * This method will create various classes in the database */ public static void createClass() { + // No transaction to avoid warnings OrientGraphNoTx graph = Connections.getInstance().getDbGraphNT(); graph.createVertexType("Page"); System.out.println("====Created Class Page===="); graph.createVertexType("User"); System.out.println("====Created Class User===="); graph.createVertexType("Revision"); System.out.println("====Created Class Revision===="); graph.createEdgeType("Backlink"); System.out.println("====Created Class Backlink===="); graph.createEdgeType("PreviousRevision"); System.out.println("====Created Class PreviousRevision===="); graph.createEdgeType("PreviousVersionOfPage"); System.out.println("====Created Class PreviousVersionOfPage===="); graph.createEdgeType("Contribute"); System.out.println("====Created Class Contribute===="); graph.createEdgeType("Review"); System.out.println("====Created Class Review===="); + + graph.shutdown(); } } diff --git a/WikiRating/src/main/java/models/LinkPages.java b/WikiRating/src/main/java/models/LinkPages.java index 19e8f86..d5e974a 100644 --- a/WikiRating/src/main/java/models/LinkPages.java +++ b/WikiRating/src/main/java/models/LinkPages.java @@ -1,107 +1,109 @@ package main.java.models; import java.io.InputStream; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.wikidata.wdtk.wikibaseapi.ApiConnection; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.impls.orient.OrientGraph; import main.java.controllers.WikiUtil; import main.java.utilities.Connections; /** * This class will deal with the procedures to links the pages which points to some other pages. * So this will interconnect all the Backlinks. */ public class LinkPages { /** * This method will link all the Pages in the database * @param key Name of the key here '@class' * @param value Value of the key here 'Page' */ public static void linkAll(String key,String value){ OrientGraph graph = Connections.getInstance().getDbGraph(); String result=""; int inLinks; //Iterating on every vertex to check it's backlinks for (Vertex pageNode : graph.getVertices(key,value)) { //Getting the JSON formatted String to process. result=getBacklinks((int)(pageNode.getProperty("pid"))); inLinks=0; //JSON interpretation of the fetched String try { JSONObject js=new JSONObject(result); JSONObject js2=js.getJSONObject("query"); //This array has all the backlinks the page has. JSONArray arr=js2.getJSONArray("backlinks"); JSONObject currentJsonObject; inLinks=arr.length(); System.out.println(pageNode.getProperty("title").toString()+" has inLinks = "+inLinks); //Iterating to get all the backlinks of a particular node(Page) for(int i=0;i