1 package org.apache.torque.generator.merge;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.ByteArrayOutputStream;
23 import java.io.IOException;
24 import java.io.UnsupportedEncodingException;
25
26 import org.apache.torque.generator.GeneratorException;
27 import org.eclipse.jgit.diff.RawText;
28 import org.eclipse.jgit.diff.RawTextComparator;
29 import org.eclipse.jgit.merge.MergeAlgorithm;
30 import org.eclipse.jgit.merge.MergeFormatter;
31 import org.eclipse.jgit.merge.MergeResult;
32
33
34
35
36
37
38 public class ThreeWayMerger
39 {
40
41
42
43
44
45
46
47
48
49
50
51
52 public String merge(
53 String base,
54 String generated,
55 String edited,
56 String charsetName)
57 throws GeneratorException
58 {
59 MergeAlgorithm mergeAlgorithm = new MergeAlgorithm();
60 MergeResult<RawText> mergeResult;
61 try
62 {
63 mergeResult = mergeAlgorithm.merge(
64 RawTextComparator.DEFAULT,
65 new RawText(base.getBytes(charsetName)),
66 new RawText(generated.getBytes(charsetName)),
67 new RawText(edited.getBytes(charsetName)));
68 }
69 catch (UnsupportedEncodingException e)
70 {
71 throw new GeneratorException(
72 "unknown character set " + charsetName,
73 e);
74 }
75 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
76 try
77 {
78 new MergeFormatter().formatMerge(
79 outputStream,
80 mergeResult,
81 "base",
82 "generated",
83 "edited",
84 charsetName);
85 }
86 catch (IOException e)
87 {
88 throw new GeneratorException("could nor render merge result", e);
89 }
90 try
91 {
92 String result
93 = new String(outputStream.toByteArray(), charsetName);
94 return result;
95 }
96 catch (UnsupportedEncodingException e)
97 {
98 throw new GeneratorException(
99 "unknown character set " + charsetName,
100 e);
101 }
102 }
103 }