annotate app/models/TPGraph.java @ 47:9645bfb49603

modified computeAndUpdateStatus
author one
date Thu, 04 Oct 2012 08:55:13 +0900
parents 1d5c086e069b
children d6c623e92837
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
1 package models;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
2
27
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
3 import java.util.ArrayList;
23
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
4 import java.util.HashSet;
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
5 import java.util.Iterator;
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
6
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
7 import com.tinkerpop.blueprints.Edge;
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
8 import com.tinkerpop.blueprints.Graph;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
9 import com.tinkerpop.blueprints.Vertex;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
10 import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
24
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
11 import com.tinkerpop.gremlin.java.GremlinPipeline;
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
12
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
13 public class TPGraph {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
14
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
15 private static TPGraph instance = new TPGraph();
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
16 private Object claimRootId;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
17 private Object userRootId;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
18
13
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
19 /*
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
20 * Edge type
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
21 */
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
22 protected final String CHILD = "child";
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
23
13
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
24
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
25 private TPGraph() {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
26
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
27 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
28
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
29 public static TPGraph getInstance() {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
30 return instance;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
31 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
32
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
33 private Graph graph;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
34 private String path = null;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
35
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
36 public void setPath(String path) {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
37 this.path = path;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
38 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
39
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
40 public Graph newGraph() {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
41 if (path == null) {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
42 graph = new TinkerGraph();
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
43 } else {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
44 graph = new TinkerGraph(path);
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
45
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
46 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
47 return graph;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
48 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
49
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
50 public Graph getGraph() {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
51 return graph;
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
52 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
53
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
54 public void setClaimRootId(Object id) {
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
55 this.claimRootId = id;
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
56 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
57
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
58 public void setUserRootId(Object id) {
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
59 this.userRootId = id;
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
60 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
61
13
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
62 public Object getClaimRootId() {
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
63 return claimRootId;
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
64 }
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
65
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
66 public Object getUserRootId() {
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
67 return userRootId;
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
68 }
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
69
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
70 public Vertex getClaimRootVertex() {
13
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
71 return graph.getVertex(claimRootId);
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
72 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
73
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
74 public Vertex getUserRootVertex() {
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
75 return graph.getVertex(userRootId);
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
76 }
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
77
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
78 private Edge setLabel(Vertex fromV, Vertex toV, String label) {
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
79 return graph.addEdge(null, fromV, toV, label);
18
one
parents: 17
diff changeset
80 }
one
parents: 17
diff changeset
81
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
82 public Edge setLabelToRootUser(UserModel user) {
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
83 Vertex rootUser = getUserRootVertex();
18
one
parents: 17
diff changeset
84 // rootUser ---child---> newUser
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
85 return setLabel(rootUser, user.getVertex(), CHILD);
13
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
86 }
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
87
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
88 public Edge setLabelToRootClaim(ClaimModel claim) {
13
9b677755cb93 create action Claim/createClaim
one
parents: 9
diff changeset
89 Vertex rootClaim = getClaimRootVertex();
18
one
parents: 17
diff changeset
90 // rootUser ---child---> newUser
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
91 return setLabel(rootClaim, claim.getVertex(), CHILD);
8
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
92 }
7b314898fddd create action User.getUser()
one
parents: 7
diff changeset
93
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
94 public Edge setLabelToAuthor(ClaimModel claim, String author) {
16
7cdc9d19834f modified createClaim
one
parents: 13
diff changeset
95 Vertex authorVertex = graph.getVertex(author);
18
one
parents: 17
diff changeset
96 // claim ---author---> authorVertex(userVertex)
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
97 return setLabel(claim.getVertex(), authorVertex, NodeModel.L_AUTHOR);
16
7cdc9d19834f modified createClaim
one
parents: 13
diff changeset
98 }
7cdc9d19834f modified createClaim
one
parents: 13
diff changeset
99
20
34ea98c5a18c modified UserModel/getEdgeInUser
one
parents: 18
diff changeset
100 public Boolean setLabelToUsers(ClaimModel claim, String[] users, String label) {
18
one
parents: 17
diff changeset
101 for (String userName: users) {
one
parents: 17
diff changeset
102 Vertex userVertex = graph.getVertex(userName);
one
parents: 17
diff changeset
103 if (userVertex == null) return false;
20
34ea98c5a18c modified UserModel/getEdgeInUser
one
parents: 18
diff changeset
104 setLabel(claim.getVertex(), userVertex, label);
18
one
parents: 17
diff changeset
105 }
one
parents: 17
diff changeset
106 return true;
16
7cdc9d19834f modified createClaim
one
parents: 13
diff changeset
107 }
9
d050b7fb4cda create getUserRequests action
one
parents: 8
diff changeset
108
36
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
109 public Boolean setLabelStatusToUser(ClaimModel claim, String userName, String label, String status) {
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
110 Vertex userVertex = graph.getVertex(userName);
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
111 if (userVertex == null) {
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
112 return false;
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
113 }
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
114 Edge edge = setLabel(claim.getVertex(), userVertex, label);
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
115 edge.setProperty(NodeModel.STATUS, status);
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
116 return true;
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
117 }
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
118
30
80b5628f17d8 modified ClaimModel/getInfo action
one
parents: 27
diff changeset
119 public Boolean setLabelStatusToUsers(ClaimModel claim, String[] users, String label, String status) {
80b5628f17d8 modified ClaimModel/getInfo action
one
parents: 27
diff changeset
120 for (String userName: users) {
36
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
121 Boolean createFlag = setLabelStatusToUser(claim, userName, label, status);
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
122 if (!createFlag) {
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
123 return false;
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
124 }
30
80b5628f17d8 modified ClaimModel/getInfo action
one
parents: 27
diff changeset
125 }
80b5628f17d8 modified ClaimModel/getInfo action
one
parents: 27
diff changeset
126 return true;
80b5628f17d8 modified ClaimModel/getInfo action
one
parents: 27
diff changeset
127 }
80b5628f17d8 modified ClaimModel/getInfo action
one
parents: 27
diff changeset
128
25
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
129 public Edge setLabelMention(ClaimModel fromClaim, ClaimModel toClaim, String label) {
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
130 return setLabel(fromClaim.getVertex(), toClaim.getVertex(), label);
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
131 }
97b249d9fad1 fix infinite loop on getConsensus Action
one
parents: 24
diff changeset
132
40
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
133 public Object[] searchAllUser() {
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
134 Vertex userRootVertex = graph.getVertex(getUserRootId());
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
135 GremlinPipeline<Vertex,Vertex> pipe = new GremlinPipeline<Vertex,Vertex>();
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
136 pipe.start(userRootVertex).out(CHILD);
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
137 ArrayList<Object> userArray = new ArrayList<Object>();
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
138 for (Vertex userVertex : pipe) {
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
139 userArray.add(userVertex.getId());
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
140 }
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
141 if (userArray.size() == 0) {
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
142 return null;
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
143 }
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
144 return userArray.toArray();
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
145 }
1d5c086e069b create getAllUsers() action.
one
parents: 36
diff changeset
146
36
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
147 public Boolean deleteRequestEdge(ClaimModel claim, HashSet<Object> userSet) {
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
148 GremlinPipeline<Vertex,Edge> pipeEdge = new GremlinPipeline<Vertex,Edge>();
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
149 pipeEdge.start(claim.getVertex()).outE(NodeModel.L_REQUEST);
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
150 ArrayList<Edge> deleteEdgeArray = new ArrayList<Edge>();
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
151 for (Edge e : pipeEdge) {
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
152 GremlinPipeline<Edge,Vertex> pipeUserVertex = new GremlinPipeline<Edge,Vertex>();
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
153 pipeUserVertex.start(e).inV();
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
154 Vertex userVertex = pipeUserVertex.next();
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
155 if (userSet.contains(userVertex.getId())) {
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
156 deleteEdgeArray.add(e);
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
157 }
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
158 }
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
159 for (Edge e : deleteEdgeArray) {
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
160 graph.removeEdge(e);
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
161 }
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
162 return true;
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
163 }
5f7fcdf98380 create editClaim
one
parents: 35
diff changeset
164
23
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
165 public Object[] checkConsensus(HashSet<Object> set) {
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
166 Iterator<Object> iter = set.iterator();
27
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
167 while (iter.hasNext()) {
24
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
168 Object childId = iter.next();
27
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
169 ArrayList<Object> array = getAllUpperVertex(childId);
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
170 for (Object parentId: array.toArray()) {
24
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
171 if (set.contains(parentId)) {
27
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
172 if (set.contains(childId)) {
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
173 // This behavior is anxiety.
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
174 set.remove(childId);
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
175 iter = set.iterator();
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
176 }
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
177 childId = parentId;
24
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
178 }
23
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
179 }
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
180 }
24
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
181 return set.toArray();
23
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
182 }
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
183
27
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
184
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
185 public ArrayList<Object> getAllUpperVertex(Object id) {
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
186 Vertex startV = graph.getVertex(id);
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
187 GremlinPipeline<Vertex,Vertex> pipe = new GremlinPipeline<Vertex,Vertex>();
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
188 pipe.start(startV).in(NodeModel.L_QUESTION, NodeModel.L_REFUTATION, NodeModel.L_SUGGESTION);
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
189 ArrayList<Object> vertexArray = new ArrayList<Object>();
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
190 while (pipe.hasNext()) {
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
191 Object e = pipe.next().getId();
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
192 vertexArray.add(e);
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
193 pipe.start(graph.getVertex(e)).in(NodeModel.L_QUESTION, NodeModel.L_REFUTATION, NodeModel.L_SUGGESTION);
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
194 }
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
195 return vertexArray;
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
196 }
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
197
e246e0dac9c8 modified checkConsensus
one
parents: 26
diff changeset
198 public Object getOneUpperVertex(Object id) {
24
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
199 Vertex startV = graph.getVertex(id);
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
200 GremlinPipeline<Vertex,Vertex> pipe = new GremlinPipeline<Vertex,Vertex>();
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
201 pipe.start(startV).in(NodeModel.L_QUESTION, NodeModel.L_REFUTATION, NodeModel.L_SUGGESTION);
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
202 if (pipe.hasNext()) {
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
203 Vertex v = pipe.next();
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
204 return v.getId();
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
205 } else {
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
206 return null;
81d1d7c7bcde create getConsensus action. but this action can not test because there is no createMention action.
one
parents: 23
diff changeset
207 }
23
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
208 }
cad8e054fe4b modifying getConsensus action
one
parents: 20
diff changeset
209
7
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
210
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
211 public void shutdownGraph() {
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
212 graph.shutdown();
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
213 }
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
214
2122c50278bd add Global.java, ande models/*
one
parents:
diff changeset
215 }