-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathDotNode.java
More file actions
179 lines (160 loc) · 3.36 KB
/
DotNode.java
File metadata and controls
179 lines (160 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package flowchat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 流程图节点类
* @author 华硕
*
*/
public class DotNode {
private int id;//节点的id,dot文件中作为节点的唯一标识
private String text;//将显示在节点框中的内容
private String shape;//节点的形状,只用了4种,单圆开始,双圆结束,普通四方,判断菱形
private List<Integer> preIds;//接到节点的id
private Map<Integer, String> edgeLabels;//指向本节点的边的标签
private int Level;
public DotNode(){
this.text = "";
this.shape = "record";
this.preIds = new ArrayList<>();;
this.edgeLabels = new HashMap<>();
this.setLevel(0);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
public List<Integer> getPreIds() {
return preIds;
}
public void setPreIds(List<Integer> preIds) {
this.preIds = preIds;
}
public Map<Integer, String> getEdgeLbls(){
return this.edgeLabels;
}
public String getEdgeLbl(int key){
return edgeLabels.get(key) == null ? "" : edgeLabels.get(key);
}
public void setEdgeLbl(Integer preId, String label){
edgeLabels.put(preId, label);
}
/**
* 在switch语句的case条件中,简单添加switch标志语句作为前导节点
* @param preId
*/
public void addPreId(int preId){
boolean exist = false;
for(int pid : preIds){
if(preId == pid){
exist = true;
break;
}
}
if(!exist){
preIds.add(preId);
}
}
/**
* 添加前导节点,如前导节点为判断节点,则设置边的标记为no
* @param list
* @param preId
*/
public void addPreId(List<DotNode> list, int preId){
boolean exist = false;
for(int pid : preIds){
if(preId == pid){
exist = true;
break;
}
}
if(!exist){
preIds.add(preId);
DotNode pre = getDotNode(list, preId);
if(pre != null){
if(pre.getShape().equals("diamond") && getEdgeLbl(preId).equals("")){
setEdgeLbl(preId, "no");
}
}
}
}
/**
* 在结点链表中查找指定id的节点
* @param list
* @param id
* @return
*/
public static DotNode getDotNode(List<DotNode> list, int id){
for(DotNode d : list){
if(d.getId() == id){
return d;
}
}
return null;
}
/**
* 将toAdd合并到dest中,过滤掉重复的节点
* @param dest
* @param toAdd
*/
public static void listAdd(List<DotNode> dest, List<DotNode> toAdd){
if(toAdd == null){
return;
}
if(dest == null){
dest = new ArrayList<>();
}
for(DotNode addNode : toAdd){
boolean exist = false;
for(DotNode node : dest){
if(addNode.getId() == node.getId()){
exist = true;
break;
}
}
if(!exist){
dest.add(addNode);
}
}
}
public static void listAdd(List<DotNode> destList, DotNode node){
if(node == null){
return;
}
if(destList == null){
destList = new ArrayList<>();
}
boolean exist = false;
for(DotNode d1 : destList){
if(node.getId() == d1.getId()){
exist = true;
break;
}
}
if(!exist){
destList.add(node);
}
}
public int getLevel() {
return Level;
}
public void setLevel(int level) {
Level = level;
}
}