1 package org.apache.maven.scm.provider.cvslib.command.blame;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.Date;
24 import java.util.List;
25 import java.util.Locale;
26
27 import org.apache.maven.scm.command.blame.BlameLine;
28 import org.apache.maven.scm.log.ScmLogger;
29 import org.apache.maven.scm.util.AbstractConsumer;
30 import org.apache.regexp.RE;
31
32
33
34
35
36
37 public class CvsBlameConsumer
38 extends AbstractConsumer
39 {
40 private static final String CVS_TIMESTAMP_PATTERN = "dd-MMM-yy";
41
42
43
44 private static final String LINE_PATTERN = "(.*)\\((.*)\\s+(.*)\\)";
45
46
47
48
49 private RE lineRegexp;
50
51 private List<BlameLine> lines = new ArrayList<BlameLine>();
52
53 public CvsBlameConsumer( ScmLogger logger )
54 {
55 super( logger );
56
57 lineRegexp = new RE( LINE_PATTERN );
58 }
59
60 public void consumeLine( String line )
61 {
62 if (line != null && line.indexOf( ':' ) > 0 )
63 {
64 String annotation = line.substring( 0, line.indexOf( ':' ) );
65 if ( lineRegexp.match( annotation ) )
66 {
67 String revision = lineRegexp.getParen( 1 ).trim();
68 String author = lineRegexp.getParen( 2 ).trim();
69 String dateTimeStr = lineRegexp.getParen( 3 ).trim();
70
71 Date dateTime = parseDate( dateTimeStr, null, CVS_TIMESTAMP_PATTERN, Locale.US );
72 lines.add( new BlameLine( dateTime, revision, author ) );
73
74 if ( getLogger().isDebugEnabled() )
75 {
76 getLogger().debug( author + " " + dateTimeStr );
77 }
78 }
79 }
80 }
81
82 public List<BlameLine> getLines()
83 {
84 return lines;
85 }
86
87 }