view app/init/InitialData.java @ 120:5ee0a70ab968 draft

modifie viewr
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Thu, 18 Apr 2013 06:20:51 +0900
parents 3440be06e501
children 5cc8c9689fec
line wrap: on
line source

package init;
import models.ClaimModel;
import models.NodeModel;
import models.TPGraph;
import models.UserModel;

import org.codehaus.jackson.node.ObjectNode;

import play.libs.Json;

import com.tinkerpop.blueprints.Graph;
import com.tinkerpop.blueprints.Vertex;

public class InitialData {

	private static InitialData instance = new InitialData();
	
	static String tatsumi = "Tatsumi";
	static String yana = "Yana";
	static String ikuhiro = "Ikuhiro";
	static String shiomi = "Shiomi";

	static String takaaki = "Takaaki";
	static String akifumi = "Akifumi";
	static String yosiaki = "Yosiaki";

	public InitialData() {
		
	}
	
	public static void init() {
		TPGraph.resetInstance();
		TPGraph tpGraph = TPGraph.getInstance();		
		tpGraph.setPath(null);
		Vertex claimV = tpGraph.addVertex(null);
		tpGraph.setClaimRootId(claimV.getId());
		Vertex userV = tpGraph.addVertex(null);
		tpGraph.setUserRootId(userV.getId());
		createDemoUsers();
		instance.enterDataDemo1();

		instance.enterDataDemo2();
	}
	
	private static void createDemoUsers() {
		TPGraph tpGraph = TPGraph.getInstance();
		Graph graph = tpGraph.getGraph();
		/* Demo1 Users */
		UserModel userModel1 = new UserModel(graph.addVertex(takaaki));
		UserModel userModel2 = new UserModel(graph.addVertex(akifumi));
		UserModel userModel3 = new UserModel(graph.addVertex(yosiaki));
		tpGraph.setLabelFromRootUser(userModel1);
		tpGraph.setLabelFromRootUser(userModel2);
		tpGraph.setLabelFromRootUser(userModel3);
		/* Demo2 Users */
		UserModel userModel4 = new UserModel(graph.addVertex(tatsumi));
		UserModel userModel5 = new UserModel(graph.addVertex(yana));
		UserModel userModel6 = new UserModel(graph.addVertex(ikuhiro));
		UserModel userModel7 = new UserModel(graph.addVertex(shiomi));
		tpGraph.setLabelFromRootUser(userModel4);
		tpGraph.setLabelFromRootUser(userModel5);
		tpGraph.setLabelFromRootUser(userModel6);
		tpGraph.setLabelFromRootUser(userModel7);
	}
	
	public static void setMentionLabelLatestClaim(TPGraph tpGraph, ClaimModel fromClaim, ClaimModel toClaim
										, String relation) {
		tpGraph.setLabelMention(getLatestClaim(tpGraph, fromClaim), getLatestClaim(tpGraph, toClaim), relation);
	}
	
	public static void copyConsensusTree(TPGraph tpGraph, ClaimModel claim) {
		String timestamp = Long.toString(System.currentTimeMillis());
		ClaimModel latest = getLatestClaim(tpGraph, claim);
		tpGraph.copyConsensusTree(latest, timestamp);		
	}
	
	public void enterDataDemo1() {
		TPGraph tpGraph = TPGraph.getInstance();
		Graph graph = tpGraph.getGraph();
		String[] otherUser1 = { akifumi, yosiaki, tatsumi, yana, shiomi, ikuhiro };

		ClaimModel claimModel1 = new ClaimModel(graph.addVertex(null));
		ObjectNode t1 = createToulmin("アプリでGraphDBを利用する。");
		createFirstClaim(claimModel1, t1, takaaki, otherUser1, NodeModel.AGREED);
		
		ClaimModel claimModel2 = new ClaimModel(graph.addVertex(null));
		ObjectNode t2 = createToulmin("RDBを利用すべきである。");
		String[] usersClaim2 = { takaaki };
		createClaimForMention(tpGraph, claimModel2, t2, akifumi, usersClaim2,
		NodeModel.DENIED);
//		createClaimForMention(tpGraph, claimModel2, t2, akifumi, usersClaim2,
//		NodeModel.UNKNOWN);
		setMentionLabelLatestClaim(tpGraph, claimModel1, claimModel2,
				NodeModel.L_REFUTATION);
	    /*  */
		claimModel1.computeAndUpdateStatus();
		copyConsensusTree(tpGraph, claimModel1);

		ClaimModel claimModel3 = new ClaimModel(graph.addVertex(null));
		ObjectNode t3 = createToulmin("データ構造はGraphDBに向いている。");
		String[] usersClaim3 = { akifumi };
		createClaimForMention(tpGraph,claimModel3, t3, takaaki, usersClaim3,
				NodeModel.UNKNOWN);
		setMentionLabelLatestClaim(tpGraph, claimModel2, claimModel3,
				NodeModel.L_REFUTATION);
		claimModel2.computeAndUpdateStatus();		
		copyConsensusTree(tpGraph, claimModel1);		
		
		ClaimModel claimModel4 = new ClaimModel(graph.addVertex(null));
		ObjectNode t4 = createToulmin("どのGraphDBを利用するのか。");
		createClaimForMention(tpGraph, claimModel4, t4, yosiaki, usersClaim2,
				NodeModel.AGREED);
		setMentionLabelLatestClaim(tpGraph, claimModel1, claimModel4, NodeModel.L_QUESTION);

		copyConsensusTree(tpGraph, claimModel1);				
		
		ClaimModel claimModel5 = new ClaimModel(graph.addVertex(null));
		ObjectNode t5 = createToulmin("TinkerPopはどうか?");
		String[] usersClaim5 = { yosiaki };
		createClaimForMention(tpGraph,claimModel5, t5, takaaki, usersClaim5,
				NodeModel.AGREED);
		setMentionLabelLatestClaim(tpGraph, claimModel4, claimModel5,
				NodeModel.L_SUGGESTION);
		
		copyConsensusTree(tpGraph, claimModel1);				
		
		claimModel3.computeAndUpdateStatus();
		claimModel2.computeAndUpdateStatus();

		tpGraph.setLabelStatusToUsers(claimModel1, usersClaim3, NodeModel.L_REQUEST, NodeModel.AGREED);

	}
	
	public static ClaimModel getLatestClaim(TPGraph tpGraph, ClaimModel claim) {
		Object latestId = tpGraph.getLatestVertexId(claim.getId());
		return new ClaimModel(tpGraph.getVertex(latestId));
	}
	
	public void enterDataDemo2() {
		TPGraph tpGraph = TPGraph.getInstance();
		Graph graph = tpGraph.getGraph();
		String[] usersClaim1 = {tatsumi,yana,ikuhiro,shiomi};

		ClaimModel claimModel1 = new ClaimModel(graph.addVertex(null));
		ObjectNode t1 = createToulmin("YanaのパソコンにMacPro QuadCoreを買う");
		createFirstClaim(claimModel1, t1, yana, usersClaim1, NodeModel.AGREED);

		ClaimModel claimModel2 = new ClaimModel(graph.addVertex(null));
		ObjectNode t2 = createToulmin("壊れたマシンと同じ程度の物があればいいです。");
		String[] usersClaim2 = { tatsumi };
		createClaimForMention(tpGraph,claimModel2, t2, yana, usersClaim2,
				NodeModel.DENIED);
		setMentionLabelLatestClaim(tpGraph, claimModel1, claimModel2,
				NodeModel.L_SUGGESTION);

		ClaimModel claimModel3 = new ClaimModel(graph.addVertex(null));
		ObjectNode t3 = createToulmin("MacProの最新版がいいでしょう。");
		String[] usersClaim3 = { yana };
		createClaimForMention(tpGraph,claimModel3, t3, tatsumi, usersClaim3,
				NodeModel.AGREED);
		setMentionLabelLatestClaim(tpGraph, claimModel2, claimModel3,
				NodeModel.L_REFUTATION);

		ClaimModel claimModel4 = new ClaimModel(graph.addVertex(null));
		ObjectNode t4 = createToulmin("MacProの最新版を買います。");
		String[] usersClaim4 = { yana,ikuhiro,shiomi };
		createClaimForMention(tpGraph,claimModel4, t4, tatsumi, usersClaim4,
				NodeModel.DENIED);
		setMentionLabelLatestClaim(tpGraph, claimModel1, claimModel4,
				NodeModel.L_SUGGESTION);
		
		ClaimModel claimModel5 = new ClaimModel(graph.addVertex(null));
		ObjectNode t5 = createToulmin("MacProの最新は高いのでやめましょう。");
		String[] usersClaim5 = { tatsumi};
		createClaimForMention(tpGraph,claimModel5, t5, shiomi, usersClaim5,
				NodeModel.AGREED);
		setMentionLabelLatestClaim(tpGraph, claimModel4, claimModel5,
				NodeModel.L_REFUTATION);
		
		ClaimModel claimModel6 = new ClaimModel(graph.addVertex(null));
		ObjectNode t6 = createToulmin("MacProの最速マシンである必要はありません。");
		String[] usersClaim6 = { tatsumi };
		createClaimForMention(tpGraph,claimModel6, t6, shiomi, usersClaim6,
				NodeModel.AGREED);
		setMentionLabelLatestClaim(tpGraph, claimModel4, claimModel6,
				NodeModel.L_REFUTATION);
		
	}

	public static void createClaimForMention(TPGraph tpGraph, ClaimModel claim, ObjectNode t,
			String author, String[] users, String type) {
		createClaimSetToulmin(getLatestClaim(tpGraph, claim), t, author, users, type);
	}

	public static void createFirstClaim(ClaimModel claim, ObjectNode t,
			String author, String[] users, String type) {
		TPGraph tpGraph = TPGraph.getInstance();
		createClaimSetToulmin(claim, t, author, users, type);
		tpGraph.setLabelFromRootClaim(claim);
	}

	public static void createClaimSetToulmin(ClaimModel claim, ObjectNode t,
			String author, String[] users, String type) {
		TPGraph tpGraph = TPGraph.getInstance();
		tpGraph.setLabelToAuthor(claim, author);
		claim.setClaimProperties(t, NodeModel.UNANIMOUSLY);
		tpGraph.setLabelStatusToUsers(claim, users, NodeModel.L_REQUEST, type);
		claim.computeAndUpdateStatus();
	}

	public static ObjectNode createToulmin(String title) {
		ObjectNode t = Json.newObject();
		t.put(NodeModel.TITLE, title);
		t.put(NodeModel.CONTENTS, title);
		t.put(NodeModel.QUALIFIER, "");
		t.put(NodeModel.DATA, "");
		t.put(NodeModel.WARRANT, "");
		t.put(NodeModel.BACKING, "");
		t.put(NodeModel.REBUTTLE, "");
		return t;
	}

}