Skip to content

Commit f9f42ae

Browse files
committed
Fixed wrapping text within html encoded nodes and fixed wrapping if multiple types of byte has been present
1 parent bc595a8 commit f9f42ae

File tree

4 files changed

+95
-58
lines changed

4 files changed

+95
-58
lines changed

Parser/src/parser/output/Writer.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,11 @@ private void printPackets(Tree tree, PrintWriter writer) {
219219
streams.entrySet().forEach((item) -> {
220220
// To generate identifier
221221
val transmittedNode = new Node(null);
222-
writer.println(String.format("\t%d [label=\"%s\"];", transmittedNode.identifier, StringUtil.wrapText(item.getKey(), settings.getGraphSettings().getWrapAfter() * 3)));
222+
writer.println(String.format("\t%d [label=<%s>];", transmittedNode.identifier, StringUtil.wrapText(item.getKey(), settings.getGraphSettings().getWrapAfter() * 3, -1).left));
223223

224224
item.getValue().forEach((received, packets) -> {
225225
val receivedNode = new Node(null);
226-
writer.println(String.format("\t%d [label=\"%s\"];", receivedNode.identifier, StringUtil.wrapText(received, settings.getGraphSettings().getWrapAfter() * 3)));
226+
writer.println(String.format("\t%d [label=<%s>];", receivedNode.identifier, StringUtil.wrapText(received, settings.getGraphSettings().getWrapAfter() * 3, -1).left));
227227

228228
packets.forEach((packet) -> {
229229
writer.println(String.format("\t%d -> %d [label=\"[ac=%d]\"];", tree.root.identifier, transmittedNode.identifier, packet.getAc()));
@@ -329,7 +329,7 @@ private void printLabels(Node node, PrintWriter writer) {
329329
queue.add(node);
330330
while(!queue.isEmpty()) {
331331
node = queue.remove();
332-
writer.println(String.format("\t%d [label=\"%s\"];", node.identifier, StringUtil.wrapText(toHexBinaryString(node.getData()), settings.getGraphSettings().getWrapAfter() * 3)));
332+
writer.println(String.format("\t%d [label=<%s>];", node.identifier, StringUtil.wrapText(toHexBinaryString(node.getData()), settings.getGraphSettings().getWrapAfter() * 3, -1).left));
333333
queue.addAll(node.getChildNodes());
334334
}
335335
}
@@ -357,7 +357,7 @@ private void printFlow(Node node, int packetsCount, PrintWriter writer) {
357357

358358
val max = Collections.max(map.entrySet(), (Entry<String, Integer> o1, Entry<String, Integer> o2) -> o1.getValue().compareTo(o2.getValue()));
359359
val hexColor = String.format("#%06X", 0xFFFFFF & java.awt.Color.HSBtoRGB((float)max.getValue() / packetsCount / 3f, 1f, 1f));
360-
labels.append(String.format("\t%d [label=\"%s\" style=filled fillcolor=\"%s\"];%s", flowIndex, StringUtil.wrapText(max.getKey(), settings.getGraphSettings().getWrapAfter() * 3), hexColor, System.lineSeparator()));
360+
labels.append(String.format("\t%d [label=<%s> style=filled fillcolor=\"%s\"];%s", flowIndex, StringUtil.wrapText(max.getKey(), settings.getGraphSettings().getWrapAfter() * 3, -1).left, hexColor, System.lineSeparator()));
361361
graph.append(String.format("%d -> ", flowIndex++));
362362

363363
nodes = childNodes;

Parser/src/parser/output/data/OutputTree.java

+17-20
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
import java.util.HashSet;
1010
import java.util.List;
1111
import java.util.Set;
12-
import javafx.util.Pair;
1312
import lombok.Getter;
1413
import lombok.Setter;
1514
import lombok.val;
1615
import parser.data.Node;
1716
import parser.settings.Settings;
17+
import tools.Pair;
1818
import tools.SimilarityTool;
1919
import tools.StringUtil;
2020

@@ -105,37 +105,33 @@ public String prepareTextOutput() {
105105

106106
val prefixes = longestCommonPrefixes(transmittedMessages);
107107
val receivedPrefixes = longestCommonPrefixes(receivedMessages);
108-
int leftTransmitted = (int)prefixes.getKey();
109-
int rightTransmitted = (int)prefixes.getValue();
110-
int leftReceived = (int)receivedPrefixes.getKey();
111-
int rightReceived = (int)receivedPrefixes.getValue();
112108

113109
val firstTransmitted = transmittedMessages.get(0).message;
114110
val firstReceived = receivedMessages.get(0).message;
115111
sb.append("{");
116112
sb.append(settings.getTextOutputSettings().getBeforeDataStream());
117-
val transmittedMid = analyzeMessages(transmittedMessages, leftTransmitted, rightTransmitted);
113+
val transmittedMid = analyzeMessages(transmittedMessages, prefixes.left, prefixes.right);
118114
if (transmittedMid.length() == 0) {
119115
sb.append(splitAndJoinString(firstTransmitted));
120116
} else {
121117
sb.append(splitAndJoinString(String.format("%s %s %s",
122-
firstTransmitted.substring(0, leftTransmitted).trim(),
118+
firstTransmitted.substring(0, prefixes.left).trim(),
123119
transmittedMid.trim(),
124-
firstTransmitted.substring(firstTransmitted.length() - rightTransmitted).trim())));
120+
firstTransmitted.substring(firstTransmitted.length() - prefixes.right).trim())));
125121
}
126122

127123
sb.append(settings.getTextOutputSettings().getAfterDataStream());
128124
sb.append("}{");
129125
sb.append(settings.getTextOutputSettings().getBeforeDataStream());
130126

131-
val receivedMid = analyzeMessages(receivedMessages, leftReceived, rightReceived);
127+
val receivedMid = analyzeMessages(receivedMessages, receivedPrefixes.left, receivedPrefixes.right);
132128
if (receivedMid.length() == 0) {
133129
sb.append(splitAndJoinString(firstReceived));
134130
} else {
135131
sb.append(splitAndJoinString(String.format("%s %s %s",
136-
firstReceived.substring(0, leftReceived).trim(),
132+
firstReceived.substring(0, receivedPrefixes.left).trim(),
137133
receivedMid.trim(),
138-
firstReceived.substring(firstReceived.length() - rightReceived).trim())));
134+
firstReceived.substring(firstReceived.length() - receivedPrefixes.right).trim())));
139135
}
140136
sb.append(settings.getTextOutputSettings().getAfterDataStream());
141137
sb.append("}");
@@ -207,7 +203,7 @@ private String analyzeMessages(List<OutputMessage> msgs, int leftIndex, int righ
207203
return returnStr.toString();
208204
}
209205

210-
private Pair longestCommonPrefixes(List<OutputMessage> msgs) {
206+
private Pair<Integer, Integer> longestCommonPrefixes(List<OutputMessage> msgs) {
211207
val strings = new String[msgs.size()];
212208
val invertedStrings = new String[msgs.size()];
213209
for (int i = 0; i < msgs.size(); i++) {
@@ -223,21 +219,22 @@ private Pair longestCommonPrefixes(List<OutputMessage> msgs) {
223219

224220
private void prepare(StringBuilder sb, int parentIdentifier, List<OutputMessage> msgs, boolean generateIdentifier) {
225221
val prefixes = longestCommonPrefixes(msgs);
226-
int left = (int)prefixes.getKey();
227-
int right = (int)prefixes.getValue();
228-
val color = getColorForMidStream(msgs, left, right);
222+
val color = getColorForMidStream(msgs, prefixes.left, prefixes.right);
229223

230224
msgs.forEach((msg) -> {
231225
int msgLength = msg.message.length();
232226
int nodeIdentifier = generateIdentifier ? new Node(null).identifier : msg.identifier;
233227

234-
if (left + right + 1 >= msgLength) {
235-
sb.append(String.format("\t%d [label=\"%s\"];", nodeIdentifier, StringUtil.wrapText(msg.message, settings.getGraphSettings().getWrapAfter() * 3)));
228+
if (prefixes.left + prefixes.right + 1 >= msgLength) {
229+
sb.append(String.format("\t%d [label=<%s>];", nodeIdentifier, StringUtil.wrapText(msg.message, settings.getGraphSettings().getWrapAfter() * 3, -1).left));
236230
} else {
237231
sb.append(String.format("\t%d [label=<", nodeIdentifier));
238-
sb.append(StringUtil.wrapText(msg.message.substring(0, left), settings.getGraphSettings().getWrapAfter() * 3));
239-
sb.append(String.format("<font color=\"%s\">%s</font>", color, StringUtil.wrapText(msg.message.substring(left, msgLength - right), settings.getGraphSettings().getWrapAfter() * 3)));
240-
sb.append(StringUtil.wrapText(msg.message.substring(msgLength - right), settings.getGraphSettings().getWrapAfter() * 3));
232+
Pair<String, Integer> wrappedText = StringUtil.wrapText(msg.message.substring(0, prefixes.left), settings.getGraphSettings().getWrapAfter() * 3, -1);
233+
sb.append(wrappedText.left);
234+
235+
wrappedText = StringUtil.wrapText(msg.message.substring(prefixes.left, msgLength - prefixes.right), settings.getGraphSettings().getWrapAfter() * 3, wrappedText.right);
236+
sb.append(String.format("<font color=\"%s\">%s</font>", color, wrappedText.left));
237+
sb.append(StringUtil.wrapText(msg.message.substring(msgLength - prefixes.right), settings.getGraphSettings().getWrapAfter() * 3, wrappedText.right).left);
241238

242239
sb.append(">];");
243240
}

Parser/src/tools/Pair.java

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package tools;
7+
8+
/**
9+
*
10+
* @author Andrej
11+
*
12+
* @param <L> type of left parameter
13+
* @param <R> type of right parameter
14+
*/
15+
public class Pair<L,R> {
16+
17+
/**
18+
* Left parameter
19+
*/
20+
public final L left;
21+
22+
/**
23+
* Right parameter
24+
*/
25+
public final R right;
26+
27+
/**
28+
* Creates new Pair
29+
*
30+
* @param left left parameter
31+
* @param right right parameter
32+
*/
33+
public Pair(L left, R right) {
34+
this.left = left;
35+
this.right = right;
36+
}
37+
38+
/**
39+
*
40+
* @param <L> type of left parameter
41+
* @param <R> type of right parameter
42+
* @param left left parameter
43+
* @param right right parameter
44+
* @return new pair
45+
*/
46+
public static <L,R> Pair<L,R> of(L left, R right){
47+
return new Pair<>(left, right);
48+
}
49+
}

Parser/src/tools/StringUtil.java

+25-34
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
package tools;
77

8+
import lombok.val;
89

910

1011
/**
@@ -18,57 +19,47 @@ public class StringUtil {
1819
*
1920
* @param str text to be wrapped
2021
* @param wrapAfter number of chars after which the new line will be appended
21-
* @return wrapped text
22+
* @param firstWrap first wrap point
23+
* @return wrapped text with remaining wrap after
2224
*/
23-
public static String wrapText(String str, int wrapAfter) {
25+
public static Pair<String, Integer> wrapText(String str, int wrapAfter, int firstWrap) {
2426
if (wrapAfter <= 0) {
25-
return str;
27+
return Pair.of(str, wrapAfter);
2628
}
2729

28-
StringBuilder sb = new StringBuilder();
29-
for (int i = 0; i < str.length(); i += wrapAfter) {
30+
if (firstWrap < 0) {
31+
firstWrap = wrapAfter;
32+
}
33+
34+
val sb = new StringBuilder();
35+
if (str.length() < firstWrap) {
36+
sb.append(str);
37+
return Pair.of(sb.toString(), firstWrap - str.length());
38+
}
39+
40+
sb.append(str.substring(0, firstWrap));
41+
if (str.length() != firstWrap) {
42+
sb.append("<br/>");
43+
}
44+
45+
for (int i = firstWrap; i < str.length(); i += wrapAfter) {
3046
if (str.length() < i + wrapAfter) {
3147
break;
3248
}
3349

3450
sb.append(str.substring(i, i + wrapAfter));
3551

3652
if (str.length() != i + wrapAfter) {
37-
trimEnd(sb).append("\n");
53+
sb.append("<br/>");
3854
}
3955
}
4056

41-
int missingChars = str.length() % wrapAfter;
57+
val missingChars = (str.length() - firstWrap) % wrapAfter;
4258
if (missingChars > 0) {
4359
sb.append(str.substring(str.length() - missingChars));
60+
return Pair.of(sb.toString(), wrapAfter - missingChars);
4461
}
4562

46-
return sb.toString();
47-
}
48-
49-
/**
50-
* Trims trailing whitespace of StringBuilder
51-
*
52-
* @param sb StringBuilder to be trimmed
53-
* @return this StringBuilder
54-
*/
55-
public static StringBuilder trimEnd(StringBuilder sb)
56-
{
57-
if (sb == null || sb.length() == 0) {
58-
return sb;
59-
}
60-
61-
int i = sb.length();
62-
for (; i > 0; i--) {
63-
if (!Character.isWhitespace(sb.charAt(i - 1))) {
64-
break;
65-
}
66-
}
67-
68-
if (i < sb.length()) {
69-
sb.delete(i, sb.length());
70-
}
71-
72-
return sb;
63+
return Pair.of(sb.toString(), 0);
7364
}
7465
}

0 commit comments

Comments
 (0)