Skip to content

Package: DiffFileScanParser

DiffFileScanParser

nameinstructionbranchcomplexitylinemethod
DiffFileScanParser()
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
checkEntity(Line)
M: 44 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 8 C: 0
0%
M: 1 C: 0
0%
checkState(Line)
M: 26 C: 0
0%
M: 6 C: 0
0%
M: 4 C: 0
0%
M: 7 C: 0
0%
M: 1 C: 0
0%
scanParse(String)
M: 92 C: 0
0%
M: 6 C: 0
0%
M: 4 C: 0
0%
M: 22 C: 0
0%
M: 1 C: 0
0%
validCheck(Line)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: package migration;
2:
3: import java.io.ByteArrayInputStream;
4: import java.io.InputStream;
5: import java.nio.charset.Charset;
6: import java.util.ArrayList;
7: import java.util.List;
8:
9: import io.reflectoring.diffparser.api.DiffParser;
10: import io.reflectoring.diffparser.api.UnifiedDiffParser;
11: import io.reflectoring.diffparser.api.model.Diff;
12: import io.reflectoring.diffparser.api.model.Hunk;
13: import io.reflectoring.diffparser.api.model.Line;
14: import io.reflectoring.diffparser.api.model.Line.LineType;
15: import migration.difffile.AddLine;
16: import migration.difffile.DiffFile;
17: import migration.difffile.DiffPartFile;
18: import migration.difffile.DiffPartFileLine;
19: import migration.difffile.LineState;
20: import migration.difffile.NoChangeLine;
21: import migration.difffile.RemoveLine;
22: import migration.difffile.objects.DiffDefinition;
23: import migration.difffile.objects.DiffFileEntity;
24: import migration.difffile.objects.DiffIdentifier;
25:
26: /**
27: * Klasse um unified-diff Datein zu scannen und zu parsen.
28: *
29: * @author admin
30: *
31: */
32: public class DiffFileScanParser {
33:         /**
34:          * Funktion zum scannen und parsen.
35:          *
36:          * @param inputString
37:          * unified-diff datei als String
38:          * @return DiffFile
39:          */
40:
41:         private final String identifier = "='";
42:
43:         /**
44:          * Nimmt einen unified-diff Datei als String entgegen und gibt sie als DiffFile-Objekt zurück.
45:          *
46:          * @param inputString
47:          * unified-diff File in String-Format.
48:          * @return DiffFile
49:          */
50:         public DiffFile scanParse(final String inputString) {
51:
52:                 final InputStream inputStream =
53:                                 new ByteArrayInputStream(inputString.getBytes(Charset.forName("UTF-8")));
54:                 final DiffParser parser = new UnifiedDiffParser();
55:                 final List<Diff> diffList = parser.parse(inputStream);
56:                 final Diff diff = diffList.get(0);
57:
58:                 final List<Hunk> hunkList = diff.getHunks();
59:                 final ArrayList<DiffPartFile> diffPartFileList = new ArrayList<DiffPartFile>();
60:                 List<DiffPartFileLine> diffPartFileLineMap;
61:•                for (Hunk hunk : hunkList) {
62:                         diffPartFileLineMap = new ArrayList<DiffPartFileLine>();
63:                         final List<Line> lineList = hunk.getLines();
64:                         int i = 0;
65:•                        for (Line line : lineList) {
66:•                                if (validCheck(line)) {
67:                                         diffPartFileLineMap
68:                                                         .add(new DiffPartFileLine(checkState(line), checkEntity(line)));
69:                                         i++;
70:                                 }
71:                         }
72:                         diffPartFileList.add(new DiffPartFile(diffPartFileLineMap));
73:                         i = 0;
74:
75:                 }
76:                 final DiffFile diffFile = new DiffFile(diffPartFileList);
77:                 return diffFile;
78:         }
79:
80:         /**
81:          * Funktion die den State einer Line identifiziert.
82:          *
83:          * @param line
84:          * line
85:          * @return LineState
86:          */
87:         private LineState checkState(final Line line) {
88:•                if (line.getLineType() == LineType.TO) {
89:                         return new AddLine();
90:•                } else if (line.getLineType() == LineType.FROM) {
91:                         return new RemoveLine();
92:•                } else if (line.getLineType() == LineType.NEUTRAL) {
93:                         return new NoChangeLine();
94:                 } else {
95:                         return null;
96:                 }
97:
98:         }
99:
100:         /**
101:          * Identifiziert die Art der Line.
102:          *
103:          * @param line
104:          * line
105:          * @return DiffFileEntity
106:          */
107:         private DiffFileEntity checkEntity(final Line line) {
108:
109:•                if (line.getContent().contains(identifier)) {
110:                         final String[] stringArray = line.getContent().split(identifier);
111:                         final DiffIdentifier diffIdentifier =
112:                                         new DiffIdentifier(stringArray[0].replaceAll(" ", ""));
113:                         final int indexOfEnd = stringArray[1].indexOf("'");
114:                         final String content = (String) stringArray[1].subSequence(0, indexOfEnd);
115:
116:                         return new DiffDefinition(null, null, diffIdentifier, content);
117:                 } else {
118:                         return null;
119:                 }
120:
121:         }
122:
123:         /**
124:          * Prüft ob die Line geparsed werden muss.
125:          *
126:          * @param line
127:          * line
128:          * @return boolean
129:          */
130:         private boolean validCheck(final Line line) {
131:                 return line.getContent().contains(identifier);
132:         }
133:
134: }