Skip to contentPackage: DiffFileScanParser
DiffFileScanParser
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: }